Ağ bağlantısı
Canister bağlantısını doğru ağ adresiyle kurun.
Ana ağ çağrıları için VITE_IC_HOST=https://icp-api.io kullanın. Yerel replica adresi http://127.0.0.1:4943 olur; canister kimliklerini scripts/write_frontend_local_env.sh ile üretin. Uzak bağlantılarda SDK içindeki IC kök anahtarı korunur. Replica kök anahtarını yalnız yerel geliştirme ortamında alın.
Bağlantı kontrolüAğ adresini, canister kimliğini ve sertifika hatalarını kontrol edin. Sertifika doğrulamasını kapatmayın.
Koordinat sırasıCandid coğrafi sınır sorguları minLat, minLon, maxLat, maxLon sırasını kullanır. GeoJSON koordinat dizileri ise boylam, enlem sırasındadır.
Ana ağ API ayarı
VITE_IC_HOST=https://icp-api.io
Yerel canister ayarlarını üret
./scripts/write_frontend_local_env.sh
Kredi ve kanıt işlemleri
Yarım kalan işlemi aynı istekle sonuçlandırın
Zaman aşımı işlemin başarısız olduğunu kanıtlamaz. Aynı kullanıcı kimliğini, hedef canister’ı, istek kimliğini ve içeriği koruyun. 3 Eylül tarihli 2060dce sürüm adayında işlem günlüğü, aynı isteğin tekrarı ve yükseltme sonrası kurtarma yerel kabul testini geçmiştir. Zorunlu CI sonuçları, onaylı dağıtım ve canlı ortamdan geri okuma ayrı kabul koşullarıdır.
Defter izni veya aktarımıDefter ekranındaki kayıtlı isteği aynı açıklama, zaman damgası, tutar ve harcama izni alanlarıyla sürdürün. Başka bir yazma isteği hazırlamadan önce ilk işlemin makbuzunu doğrulayın; bakiye değişikliği tek başına hangi isteğin tamamlandığını göstermez.
Mekânsal yazma kredisiOps ekranında top_up_write_credits_idempotent çağrısını aynı istek kimliği ve tutarla tekrarlayarak ilk işlemi okuyun veya ilerletin. Son durumunu kontrol edin. Aynı kimlikle farklı tutar göndermek çakışmadır.
Oracle kredisi veya ücretli kanıtget_my_oracle_operation ile durumu okuyun; kurtarma gerekiyorsa resume_oracle_operation çağrısında aynı istek kimliğini kullanın. NotFound yanıtı, geciken ilk çağrının ulaşmayacağını kanıtlamaz. RequiresReview durumu operatör incelemesi gerektirir.
Sekme oturumunun sınırıDApp, gerekli en az kurtarma bilgisini kullanıcı ve canister kapsamında sessionStorage içinde tutar. Aynı sekmede gezinme ve yenileme desteklenir; başka sekme, cihaz veya kapanmış oturum için kurtarma kopyası garanti edilmez. Kopya kaybolursa yeni ücretli istek oluşturmadan önce ilk işlemi destek ekibiyle sonuçlandırın.
Defter bağlantı sınırıÜrün kredisi defteri TermiNode’a özgü sözleşme kullanır. ICRC biçimindeki yöntem adları ICRC-1/ICRC-2 uygunluğunu kanıtlamaz. Harici cüzdan bağlantısı için sürümlü geçiş, kabul edilmiş uygunluk testleri, bağımsız denetim ve operatör onayı gerekir.
Mekânsal kanıt kontrolü
Kanıt dosyasını paylaşmadan önce kontrol edin.
Haritadan indirdiğiniz veri seti anlık görüntüsünü veya kayıt kanıtını DApp içindeki Check Evidence ekranında açın. UTF-8 JSON dosyaları 10 MiB sınırına kadar tarayıcı sekmesinde incelenir; dosya içeriği yüklenmez ve hesap bağlantısı gerekmez.
Desteklenen dosyalarÖrnek veri seti anlık görüntüsü v1, canlı veri seti anlık görüntüsü v2 ve tek kayıt kanıtı v1. Canlı tarayıcı paketi en fazla 20 sayfa ve sayfa başına 100 kayıt içerir.
Veri setlerini sayfalar halinde inceleyinCanlı katalog her istekte en fazla 50 veri seti getirir. Önceki veya sonraki veri setlerine geçerken haritada seçtiğiniz katman korunur. Kataloğu yenileme ilk sayfaya döner; hata durumunda aynı sayfayı yeniden deneyebilirsiniz. Bağlantı hatası boş sonuçtan ayrı gösterilir ve örnek katmanlar erişilebilir kalır.
Eşleşmeyen dosyaİçerik veya checksum değiştiyse kaynaktan yeni bir dışa aktarım isteyin. Gateway arşivleri, kabul raporları ve daha büyük dosyalar için operatör doğrulama araçlarını kullanın.
- Tek veri setini dışa aktarınHaritada veri setini seçin ve Export snapshot JSON düğmesiyle dosyayı indirin. Canlı veri setlerinde v2 paketi, her sınırlı sayfanın ham JSON içeriğini ve checksum değerini birlikte korur.
- Dosyayı seçinCheck Evidence ekranında indirdiğiniz dosyayı açın. Paket özeti ve canlı anlık görüntünün her sayfası kontrol edilir; sayfa sırası, veri seti bilgileri ve kayıt sayıları eşleşmelidir.
- Sonucu kaynakla karşılaştırınEşleşme, içeriğin dosyada sunulan özetlerle tutarlı olduğunu gösterir. Gönderenin kimliğini, kanıt makbuzunu veya canister üzerindeki güncel durumu doğrulamaz. Dosyanın tam SHA-256 değerini güvenilir teslim kaydıyla karşılaştırın.
Ana ağ referansları
Canister kimliklerini karşılaştırın.
Ana ağ bağlantısını bu canister kimlikleriyle kontrol edin. Dağıtım sonrasında kimlikler değişirse güncel adresleri terminode.io üzerindeki geliştirici dokümanından alın.
DApp asset canistermihrj-waaaa-aaaam-qi6ma-cai
Spatial canisterov27b-fiaaa-aaaam-qi6dq-cai
TRMG ledger canisteros3zv-iqaaa-aaaam-qi6da-cai
Governance canisterncitt-uqaaa-aaaam-qi6la-cai
Oracle gateway canisternfjvh-ziaaa-aaaam-qi6lq-cai
Desteksupport@terminode.io / +90 531 235 42 29
Canister bilgilerini okuyun
dfx canister call trmg_ledger icrc1_name '()' --network ic
dfx canister call trmg_ledger icrc1_symbol '()' --network ic
dfx canister call spatial get_system_metrics '()' --network ic
dfx canister call oracle_gateway get_system_metrics '()' --network ic
Mekânsal veri hazırlığı
İlk katmanı incelemeye hazır hale getirin.
Geçmişi veya kabul edilmiş sınırı sonradan kanıtlanması gereken tek bir katman seçin. EPSG:4326 koordinatlarını, sabit kaynak kimliklerini ve güvenli üstveri alanlarını aktarım öncesinde belirleyin.
- Tek katman seçinHizmet bölgesi, çalışma sınırı, kesinti alanı, varlık koridoru veya hasar alanıyla başlayın.
- Geometriyi doğrulayınGeoJSON veya WKB kullanın. Poligonları kontrol edin, koordinatları EPSG:4326 biçiminde tutun ve herkese açık üstveriden hassas kişisel bilgileri çıkarın.
- Üstveriyi tanımlayınKaynak, inceleme durumu, değişiklik nedeni, sorumlu rol, kanıt referansı ve aktarım grubu gibi gerekli işletim bilgilerini koruyun.
- Sınırlı gruplarla aktarınBir veri seti oluşturup az sayıda kayıt ekleyin. Ardından bir kaydı güncelleyerek sürüm geçmişini ve denetim izini inceleyin.
- Kanıtı dışa aktarınPilot kaydın anlık görüntüsünü, checksum değerini, sürümlerini, kanıt makbuzunu ve denetim olaylarını birlikte arşivleyin.
Başlamadan önce
TermiNode kullanmak için ne gerekli?
Başarılı entegrasyon geniş bir platform taşımasıyla değil, dar ve net bir spatial proof hedefiyle başlar. Günlük GIS düzenleme, routing, search, dashboard ve private case data mevcut araçlarda kalabilir; TermiNode kabul edilmiş spatial record için version history, audit evidence ve portable proof katmanı sağlar.
Proof-worthy spatial layerSonradan incelenmesi gerekebilecek boundary, service area, compliance zone, route corridor, claim polygon, field event footprint, asset region veya benzeri geometri seç.
Güvenli örnek datasetİlk test için 3-10 GeoJSON feature hazırla. EPSG:4326 kullan, Polygon/MultiPolygon geometrileri doğrula, stable external reference ekle ve kişisel/private veri koyma.
Review sahibiDataset sahibi, import yetkilisi, rejected geometry inceleyen kişi ve evidence package arşivleyen kişi baştan netleşmeli.
Proof package hedefiHangi kanıtın önemli olduğunu belirle: feature history, audit event page, proof receipt, snapshot checksum, GeoJSON export veya partner evidence lookup.
Bağlantı tercihiManual review için canlı DApp, canister-level test için Candid/dfx, uygulama entegrasyonu için TypeScript actor, read-only agent workflow için MCP kullan.
Hassas veri sınırıRaw media, secret, belge, kimlik verisi ve private evidence payload kendi sisteminde kalmalı. TermiNode içinde güvenli reference, hash, receipt ID ve review metadata tutulmalı.
Tekrar kullanılabilir değerlendirme kontratı
Domain paketi seçin, ardından sample veriyi onaylı müşteri kaydıyla değiştirin
TermiNode saha kabulü, hizmet bölgeleri, altyapı veya sigorta kanıtı ve lojistik veya uyum bölgeleri için aynı proof-layer akışını kullanır. Her paket iki EPSG:4326 Polygon örneği, güvenli meta veri alanları, alıcı rolleri, kanıt sorusu, demo sırası, kanıt çıktıları ve ölçülebilir pilot kriterleri içerir. Add Data sayfasındaki seçici paket adını ve GeoJSON örneğini forma yükler; bu adım canister’a veri yazmaz.
Saha kabul kayıtlarıDenetim footprint’i, çalışma bölgesi, devir teslim alanı ve bakım sınırı için exact-version kabulünü kanıtlar.
Hizmet bölgeleriServis alanı, restorasyon koridoru, basınç bölgesi veya emergency boundary revizyonunu inceler.
Altyapı ve sigorta kanıtıDenetim alanı, asset exposure boundary, claim footprint ve tartışmalı location record için evidence üretir.
Lojistik ve uyum bölgeleriRestriction, permit area, regulated zone ve partner exception kaydını bounded read ve export ile doğrular.
- Operasyon kaydını seçinReview, dispute, handoff veya compliance sonucu olan tek boundary tipini belirleyin.
- Örnek kontratı doğrulayınAdd Data içinde domain paketini seçin, örnek veriyi forma yükleyin ve dry-run doğrulamasını çalıştırın. Bu aşamada canister’a yazma işlemi yapılmaz.
- Müşteri kaynağını eşleyinSample source_system, source_layer, source_feature_id, source_revision ve evidence referanslarını onaylı değerlerle değiştirin.
- Kabul kuralını belirleyinReviewer ve approver rollerini isimlendirin; kararı tek bir exact feature version’a bağlayın.
- Evidence ile kapatınBounded snapshot, acceptance report, manifest ve ölçülmüş müşteri kararını birlikte arşivleyin.
Ortak güvenli metadata kontratı
source_system=<onayli-kaynak>
source_layer=<kalici-layer>
source_feature_id=<kalici-id>
source_revision=<iyimser-revizyon>
external_reference=<guvenli-referans>
asset_boundary_id=<kalici-boundary>
evidence_hash=sha256:<ozet>
reviewed_at=<ISO-8601>
reviewed_by_role=<rol>
review_status=<durum>
change_reason=<neden>
# personal_data, private_notes, raw_attachment, access_token
# ve customer_secret TermiNode metadata alanına yazılmaz.
Doğrulanmış kayıt paterni
İçerik kimlik bilgisini mekânsal kanıta bağlayın
Bir iş ortağı uygulaması kayıt bütünlüğünü içerik kimlik bilgileriyle kanıtlıyorsa TermiNode eksik mekânsal bağlamı ekler: kayıt hangi özellik, çokgen, bölge veya varlık sınırıyla ilişkilidir?
TermiNode’a yazılabilecek güvenli alanlarsource_app, external_reference, evidence_hash, recorded_at, verification_url, proof_receipt_id, feature_id ve asset_boundary_id.
TermiNode dışında kalacak alanlarHam video, ham döküm, özel medya bağlantısı, erişim anahtarı, kişisel veri ve müşteriye ait inceleme notları kaynak sistemde kalır.
Arama yoluMeta veri indekslendikten sonra geliştiriciler external_reference veya proof_receipt_id üzerinden kayıt referansını kanıt aramasıyla çözebilir.
İnceleme çıktısıİnceleyen kişi kayıt referansını, mekânsal özelliği, sınırlayıcı kutuyu, merkezi, kanıt makbuzunu ve dışa aktarılabilir kanıt paketini birlikte görür.
Yerel canister kabulüDenetimli gateway iki kimlikle yerel kabul testini geçmiştir. İmzalı iki HTTP teslimi tek sponsorlu kanıt yazısına dönüşmüş, hedef geometrinin sürümü değişmemiş ve makbuz indeks üzerinden geri okunmuştur. Barındırılan hizmet ve onaylı production kaydı ayrı kapılardır.
Quickstart
Sample layer’dan evidence package’a gidiş
Bir uygulama için TermiNode uygun mu diye test ederken bu sırayı kullan. Risk düşük kalır, değer hızlı görünür ve teknik alıcının inceleyebileceği kanıt paketi oluşur.
- Canlı DApp’i açterminode.io adresinden başla; Landing, Map, Add Data, Docs, Pilot ve Readiness sayfalarını incele.
- Dry-run import çalıştırAdd Data içinde küçük bir GeoJSON sample yükle; accepted/rejected count, CRS uyarısı, metadata riskleri ve tahmini write-credit ihtiyacını kontrol et.
- Map evidence inceleMap sayfasında sample layer seç, feature aç, audit trail, version bilgisi, proof receipt ve export butonlarını incele.
- Bounded read test etCandid veya TypeScript actor ile dataset listesi ve bbox-scoped GeoJSON page oku; tüm dünyayı değil yalnız gereken viewport’u iste.
- Export ve arşivleSnapshot JSON, feature evidence JSON, proof receipt ve checksum evidence dosyalarını pilot kaydına veya procurement dosyasına ekle.
- Gerekirse agent review ekleClaude/agent workflow dataset, audit, version, metrics veya partner evidence context okusun istiyorsan MCP server’ı local çalıştır.
Write path
Bir uygulama spatial record’u nasıl yazmalı?
Draft editing çoğu zaman mevcut uygulamada kalmalıdır. TermiNode, ekip kabul edilmiş geometry ve evidence history bilgisinin bağımsız incelenebilir olmasını istediğinde kullanılmalıdır.
Önerilen write workflow
1. Geometry bilgisini kendi uygulamanda veya Add Data dry-run ile doğrula.
2. TermiNode dataset oluştur veya mevcut dataset seç.
3. Sadece onaylanmış feature ve güvenli metadata yaz.
4. Kabul edilen geometri değişirse feature update yap.
5. Feature versions ve audit events oku.
6. Snapshot ve proof receipt export ederek review dosyasına ekle.
Güvenli partner metadata yapısı
{
"source_app": "your-system-name",
"external_reference": "CASE-OR-ASSET-123",
"feature_id": "ZONE-0426-A",
"asset_boundary_id": "BOUNDARY-77",
"proof_receipt_id": "YOUR-PROOF-REF",
"evidence_hash": "sha256:...",
"recorded_at": "2026-07-07T09:00:00Z",
"review_status": "approved"
}
Import onboarding
GIS layer yazılmadan önce workspace hazırlığı
TermiNode en iyi sonucu, pilot ekip veriyi yazmadan önce çalışma alanını net hazırladığında üretir: dataset sahibi kim, import yetkilisi kim, hangi kayıt kanıt değeri taşıyor, hangi metadata public olabilir ve export paketini kim saklar? Bu yaklaşım ürünü GIS-first tutar ve import adımını kontrollü bir spatial accountability workflow haline taşır.
Desteklenen formatlarBrowser dry-run validation için GeoJSON veya direct canister write için WKB kullan. İlk pilot EPSG:4326 Polygon/MultiPolygon kayıtlarıyla sınırlı kalmalı.
Metadata güvenliğiPublic metadata stable reference, hash, review label ve schema name taşımalıdır. Kişisel veri, private evidence link, secret veya raw attachment public metadata içine konmamalıdır.
Credit planlamaWrite-credit top-up öncesi dry-run validation çalıştır. TRMG yalnız spatial write ve proof workflow utility accounting olarak anlatılır.
Kurum sponsorlu kullanımSponsor, kendi ön ödemeli write credit bakiyesini toplam limit, üye limiti, bitiş zamanı ve iptal kontrolü bulunan çalışma alanına ayırabilir. Importer token almaz; kullanım principal bazında kaydedilir.
Proof-ready kayıtVersion history, proof receipt, audit trail ve export evidence ile incelenecek bir boundary, service zone, incident area veya asset corridor seç.
Sınırlandırılmış sponsor bütçesi
// Sponsor önce top_up_write_credits_idempotent çağrısında aynı istek kimliğini ve tutarı koruyarak yazma kredisi yükler.
await spatial.configure_workspace_sponsorship(
workspaceId, sponsorPrincipal, 500_000_000n, 100_000_000n, [expiresAtNs]
);
await spatial.fund_workspace_credits(workspaceId, 300_000_000n);
// Importer kimliği TRMG veya kişisel write credit tutmadan yazar.
await spatial.add_feature(datasetId, h3Cells, polygonWkb, safeMetadata);
const usage = await spatial.get_workspace_sponsored_usage(
workspaceId, importerPrincipal
);
const usagePage = await spatial.list_workspace_sponsored_usage_page(
workspaceId, 0n, 50n
);
await spatial.set_workspace_sponsorship_active(workspaceId, false);
await spatial.return_unused_workspace_credits(workspaceId, unusedAmount);
Artımlı senkronizasyon
Tekrarlanan GIS teslimlerini güvenli ve idempotent hâle getirin
Zamanlanmış bir QGIS çıktısı, PostGIS işi veya varlık kayıt sistemi her çalıştığında yeni bir özellik oluşturmamalıdır. TermiNode; source_system, source_layer ve source_feature_id alanlarını tek bir özellik ile bağlar, kabul edilmiş kaynak revizyonunu ve payload hash bilgisini saklar. İlk upsert bağlantıyı oluşturur. Sonraki değişiklikler expected_current_revision ile iyimser eşzamanlılık kontrolünden geçer.
Birebir tekrarAynı revizyon ve aynı normalize edilmiş içerik NoOp döndürür; yeni özellik versiyonu ve ikinci bir yazma bedeli oluşmaz.
Revizyon ilerledi, geometri aynıKaynak revizyonu ilerler; gereksiz geometri versiyonu oluşturmadan bağlantı mutabakatı güncellenir.
Eski iş veya çakışan içerikBeklenen revizyon güncel durumla eşleşmiyorsa ya da aynı revizyon farklı içerikle gelirse Conflict döner ve yeni mekânsal durum korunur.
Açık arşiv politikasıKaynak kaydının ortadan kalkması otomatik silme sayılmaz. Archive işlemi yeni revizyon ve güncel beklenti ile açıkça gönderilir; arşivlenmiş bağlantı sessizce yeniden etkinleştirilemez.
Sınırlandırılmış batch raporuEn fazla 25 kayıt bağımsız sonuçlarla işlenir. Created, Updated, NoOp, Archived, Conflict ve failed sayıları ile deterministik rapor checksum değeri ETL kanıtına eklenir.
Mutabakat envanterilist_dataset_feature_sync_states_page ile kaynak anahtarı, kabul edilmiş revizyon, TermiNode feature ID, arşiv durumu ve payload hash bilgisi sayfalı okunur.
TypeScript batch akışı
import {
buildFeatureSyncInput,
syncFeatureBatch,
listFeatureSyncStatesPage,
} from '@/lib/terminode-integration';
const entries = sourceRows.map((row) => buildFeatureSyncInput({
sourceSystem: 'qgis',
sourceLayer: 'asset-boundaries',
sourceFeatureId: row.id,
sourceRevision: row.revision,
expectedCurrentRevision: row.acceptedRevision,
mode: 'upsert',
coveredCells: row.h3Hints.join(','),
wkbHex: row.wkbHex,
metadata: JSON.stringify(row.safeMetadata),
}));
const report = await syncFeatureBatch(spatial, datasetId, entries);
const bindings = await listFeatureSyncStatesPage(spatial, datasetId, 0n, 100n);
archiveSyncEvidence(report.report_checksum, report.entries, bindings);
Kesin sürüm kararı
Bir mekânsal sürümü kabul edin, geçmişi yeniden yazmayın
Güncel geometri ile kabul edilmiş geometri aynı kavram değildir. Mekânsal kabul akışı Draft, Submitted, Reviewed, Accepted, Rejected ve Superseded kararlarını tek bir özellik ve sürüm çifti üzerinde tutar. Üç ayrı principal ile rol kontrolleri, checksum çıktısı, otomatik supersession ve upgrade sonrası kalıcılık yerel canister kabul testini geçmiştir. Kontrollü production sürümü ve readback kanıtı henüz açıktır.
Kesin sürümü seçinTaslak oluşturmadan önce geometriyi, metadata’yı, kaynak revizyonunu ve özellik geçmişini inceleyin.
Güvenli referans gönderinHam dosya ve özel kayıtları kaynak sistemde tutun; kabul referansı, kanıt hash’i veya proof receipt kimliği gönderin.
İnceleme ile kabulü ayırınReviewer teknik kontrolü kaydeder. Approver nihai operasyon kararını ayrı bir geçişle verir.
Güncel kabulü ve geçmişi okuyunOperasyonel okuma için güncel kabul işaretçisini, denetim ve uyuşmazlık incelemesi için sınırlandırılmış geçmişi kullanın.
Raporu doğrulayınKarar raporunu dışa aktarın ve paylaşmadan önce SHA-256 checksum değerini yeniden hesaplayın.
Taslak, gönderim, inceleme ve kabul
const draft = await spatial.create_spatial_acceptance_draft(
featureId, versionId,
{
note: 'Kesin sürüm incelemesine hazırlandı',
acceptance_reference: [],
evidence_hash: [],
proof_receipt_id: [],
}
);
await spatial.transition_spatial_acceptance(
featureId, versionId, { Submitted: null }, submittedInput
);
// Reviewer principal { Reviewed: null } kaydeder.
// Ayrı Approver principal { Accepted: null } kaydeder.
Oku ve doğrulanabilir rapor üret
const selected = await spatial.get_spatial_acceptance(featureId, versionId);
const current = await spatial.get_current_spatial_acceptance(featureId);
const history = await spatial.list_feature_acceptances_page(featureId, 0n, 20n);
const [reportJson, checksum] = await spatial
.export_spatial_acceptance_report_with_checksum(featureId, versionId);
// Paketi paylaşmadan önce SHA-256(reportJson) değerini yeniden hesaplayın.
Yerel kabul smoke testi
NETWORK=local RUN_UPGRADE=1 DFX_CALL_TIMEOUT_SECONDS=120 \
./scripts/check_spatial_acceptance_workflow_smoke.sh
# Üç principal, iptal edilen rol reddi, v1 supersession,
# v2 güncel kabul, checksum ve ikinci upgrade kontrol edilir.
Doğrulama ve tekrar deneme
Demo smoke, connected smoke, QGIS/ETL smoke ve retry kontrolleri
TermiNode deterministik demo doğrulaması ile canlı canister doğrulamasını birbirinden ayırır. DApp dokümanı mock GIS verisiyle sample gateway smoke, ayarlı ICP aktörleriyle connected canister smoke, fetch-style request handling kanıtlayan HTTP adapter smoke ve public REST gateway yayına alınmadan önce CRS84 metadata, safe handoff fields, private-field exclusion, bbox validation ve geo+json packaging kontrol eden QGIS/ETL adapter smoke çalıştırabilir. Map export, ledger approval, oracle proof, governance action, operatör methodları ve external-router convenience sayfası da aynı operasyonel güvenilirlik standardıyla görünür durum ve retry yönlendirmesi sunar.
Demo runtime smokeMunicipal/Utility sample response kullanarak routing, OpenAPI shape, bounded GeoJSON, feature history, audit events, snapshot checksum ve health response akışını kanıtlar.
Connected canister smokeAyarlı spatial ve oracle aktörleriyle canlı canister erişimini kontrol eder; boş dataset durumunu adapter sözleşmesi kırılmış gibi işaretlemeden ele alır.
HTTP adapter smokeGelecekte operator-hosted gateway için Request/Response packaging, method guards, headers ve base-path stripping davranışını kontrol eder.
QGIS/ETL adapter smokeCRS84 collection metadata, source_app, external_reference, feature_id, proof_receipt_id, asset_boundary_id, evidence_hash, recorded_at, reviewed_at, review_status, TermiNode ID alanları, private-field exclusion, invalid bbox rejection ve geo+json headers kontrolünü yapar.
Örnek GeoJSON dosyasıDApp, GIS geliştiricilerinin Veri Ekle alanına yükleyebileceği, yazmadan önce doğrulayabileceği ve bağdaştırıcı test çıktısıyla karşılaştırabileceği indirilebilir bir GeoJSON örneği sunar.
Pilot entegrasyon paketiÖrnek katmanı, ağ geçidi bildirimini, OpenAPI sözleşmesini, ön doğrulama özetini, çalışma kontrolünü ve kanıt listesini tek pakette toplar. Teknik ekip, gerçek katmanı paylaşmadan önce devir akışını inceleyebilir.
Yeniden deneme standardıÇalışma kontrolü, kanıt dışa aktarımı, ledger onayı, oracle kanıtı, yönetişim işlemi, operatör metodu veya harici yönlendirici URL kontrolü başarısız olursa DApp hatayı tarayıcı konsoluna gizlemez; hata bağlamını, aktör hazırlığını veya metot durumunu ve yeniden deneme adımını kullanıcıya gösterir.
İmzalı kayıt kabulü
İş ortağı isteğini kısa ömürlü HMAC ve tek kullanımlık değerle doğrulayın
Gateway v1.8, iş ortağı sunucusundan gelen güvenli referansları kuyruğa almadan önce API anahtarını, veri seti kapsamını, gövde özetini, zaman damgasını, tek kullanımlık istek değerinin daha önce kullanılıp kullanılmadığını ve yinelenen teslim anahtarını birlikte denetler. Korumalı durum dosyası; iş durumunu, süreli iş sahipliğini, sınırlandırılmış yeniden denemeyi, başarısız iş kaydını ve geçiş geçmişini yeniden başlatma sonrasında korur. Her durum dosyasını yalnız bir ağ geçidi süreci açabilir; bu kilit dağıtık kuyruk değildir ve eski kilidin kaldırılması operatör doğrulaması gerektirir. Ayrı imzalı bildirim çalışanı, tamamlanan veya başarısız iş sonucunu onaylı sunucuya ham kanıt verisi taşımadan iletir. Mekânsal eşitleme, bildirim ve kimlik bilgisi doğrulama varsayılan olarak kapalıdır. Yerel kabul; tek kurum destekli yazıyı, indekslenmiş makbuz geri okumasını ve canister yazısını yinelemeyen imzalı bildirimi doğrular.
Sürümlü sözleşme`/v1/schemas/partner-recording-ingress-v1.json` imzalı isteği, `/v1/schemas/partner-evidence-job-v1.json` ise iş durumu ve makbuz cevabını tanımlar. İstekte referans alanlarından yalnız biri, özet alanlarından yalnız biri, UTC Z zaman damgası ve sorgu ya da parça içermeyen kalıcı HTTPS doğrulama adresi kullanılır. İstek ve kabul örnekleri beklenen veri biçimini; `/v1/errors/partner-ingress-v1.json` ise hangi hatanın yeniden denenebileceğini ve hangi düzeltmenin gerektiğini belirtir.
Tam gövde imzasıHMAC-SHA256; zaman damgası, nonce, idempotency anahtarı ve gönderilecek JSON dosyasının SHA-256 özeti üzerinden hesaplanır. İmzadan sonra dosya değiştirilmez.
Tekrar korumasıSüresi geçmiş imza veya daha önce kullanılan nonce reddedilir. Güvenli yeniden deneme yeni nonce üretir ve aynı idempotency anahtarıyla önceki işi döndürür.
Çalışma durumu`verifying` ve `anchoring` aynı süreli iş sahipliğini, `retryable_failed` sonraki deneme zamanını, `dead_letter` ise operatör incelemesi gereken kalıcı veya tükenmiş hatayı gösterir. Tamamlama kaydı ilgili deneme numarasına bağlıdır; süresi dolmuş eski bir sonuç daha yeni denemeyi geçersiz kılamaz. Ham hata metni ve sunucu yolu dışarı verilmez.
Kanıt sınırı`202 awaiting_anchor`, alanların ve hedef bağlantısının doğrulandığını gösterir. Kalıcı canister yazımı, C2PA doğrulaması veya kanıt makbuzu anlamına gelmez.
Doğrulama sınırıYerleşik test bağdaştırıcısı yalnız yerel sonuç sınıflarını dener. Geçersiz veya güven kaynağı bilinmeyen kayıt canister yazımı üretmez; gerçek C2PA doğrulaması için onaylı kriptografik doğrulayıcı gerekir.
İmzalı sonuç bildirimiOperatörün belirlediği HTTPS adresine yalnız iş, makbuz, özellik, sürüm ve doğrulama durumu gönderilir. Tam gövde HMAC ile imzalanır; teslim kimliği yinelenen bildirimi ayırır. Bildirim adresi veya gizli anahtar iş ortağı isteğinden alınmaz ve durum dosyasına yazılmaz.
İstek başlıklarını üretin
cd gateway-server
npm run build
# TERMINODE_PARTNER_API_KEY değerini onaylı gizli anahtar yöneticisinden yükleyin.
eval "$(node scripts/sign-partner-request.mjs \
--body ./partner-recording.json \
--idempotency-key partner:CAST-DEMO-001 \
--format env)"
İmzalı isteği gönderin
curl --request POST "$GATEWAY_URL/v1/partner-evidence/recordings" \
--header "Authorization: Bearer $TERMINODE_PARTNER_API_KEY" \
--header "Content-Type: application/json" \
--header "Idempotency-Key: $TERMINODE_REQUEST_IDEMPOTENCY_KEY" \
--header "X-Terminode-Timestamp: $TERMINODE_REQUEST_TIMESTAMP" \
--header "X-Terminode-Nonce: $TERMINODE_REQUEST_NONCE" \
--header "X-Terminode-Signature: $TERMINODE_REQUEST_SIGNATURE" \
--data-binary @partner-recording.json
# Beklenen: HTTP 202, awaiting_anchor, canisterWritePerformed=false
İncelenen başarısız işi yeniden kuyruğa alın
curl --request POST \
--header "Authorization: Bearer $TERMINODE_OPERATOR_API_KEY" \
"$GATEWAY_URL/v1/partner-evidence/jobs/<job-id>/replay"
# Yalnız dead_letter -> awaiting_anchor geçişine izin verir.
# Önce dış hatanın nedeni giderilmelidir.
İmzalı bildirimi doğrulayın ve yalnız bildirimi yineleyin
# İmza girdisi LF satır ayırıcılarıyla hazırlanır.
terminode-partner-callback-v1
<zaman-damgası>
<teslim-kimliği>
<tam-gövde-sha256>
# Eski zaman damgasını reddedin, HMAC değerini sabit süreli karşılaştırın ve
# her teslim kimliğini yalnız bir kez işleyin. Kalıcı kabulden sonra 2xx dönün.
cd gateway-server
npm run smoke:partner-callback
# Alıcı düzeltildikten sonra yalnız bildirim teslimini yeniden açın.
curl --request POST \
--header "Authorization: Bearer $TERMINODE_OPERATOR_API_KEY" \
"$GATEWAY_URL/v1/partner-evidence/jobs/<job-id>/callback/replay"
# Aynı teslim kimliği korunur; canister yazımı tekrarlanmaz.
Yönetilen teslim
Erişimi kesintisiz devredin, müşteriye bağımsız doğrulanabilir arşiv verin
Yönetilen Gateway v1.8, özellik sürümlerinin yanında güncel ve geçmiş kesin sürüm kabul kararlarını salt okunur olarak sunar. Kanıt rolü, veri seti anlık görüntüsünü ve canister tarafından üretilen kabul raporunu kendi SHA-256 değeriyle indirebilir.
Anahtar rotasyonuYeni anahtarın yalnız SHA-256 özeti aynı rol ve veri seti kapsamıyla eklenir. Kısa geçişte iki anahtar doğrulanır; ardından eski anahtar kaldırılır ve reddedildiği kontrol edilir.
Müşteri ayrılış paketiKoleksiyon tanımı, gateway sözleşmesi, tüm sınırlandırılmış snapshot sayfaları, güncel kabul raporları ve yerel dosya manifesti tek klasörde toplanır.
Çevrimdışı doğrulamaTeslim alan ekip API anahtarı veya çalışan gateway olmadan dosya özetlerini ve canister checksum’larını yeniden hesaplayabilir.
Yerel recovery provasıSınırlandırılmış checksum sayfaları güncel görünür geometriyi ve güvenli metadata’yı private, arşivlenmiş bir dataset içinde yeniden üretir; exact content digest kaynak değişmeden eşleşmeyi kanıtlar.
Gizlilik kontrolüPaket raw API key veya identity PEM içermez. Müşteriye özgü metadata, saklama süresi ve paylaşım kapsamı teslimden önce operatör tarafından ayrıca incelenir.
Yerel operasyon kanıtları
cd gateway-server
npm run smoke:key-rotation
npm run smoke:offboarding
cd ..
python3 scripts/check_snapshot_restore_rehearsal.py --self-test
DFX_IDENTITY=default NETWORK=local DRY_RUN=0 \
RESTORE_REHEARSAL_CONFIRM=local-snapshot-restore \
SOURCE_DATASET_ID=1 ./scripts/check_snapshot_restore_rehearsal.py
Paketi üret ve çevrimdışı doğrula
TERMINODE_GATEWAY_API_KEY='<evidence-key>' \
node scripts/export-customer-offboarding.mjs \
--base-url https://gateway.example/v1 \
--dataset-id 42 \
--output-dir ../operator-private/offboarding/customer-42-<timestamp>
npm run verify:offboarding -- \
../operator-private/offboarding/customer-42-<timestamp>
Ölçülebilir pilot kapanışı
Pilot sonucunu iki dilli ve checksum destekli bir kayda dönüştürün
Pilot evidence aracı Türkçe ve İngilizce iş tanımı, gizlilik eki, owner matrix, teknik kanıt index’i, önce/sonra süreç metrikleri, müşteri kabul notu ve WP1-WP6 fon eşlemesi üretir. Çalışma dosyaları git tarafından yok sayılan operator-private alanında kalır; paylaşılabilir pakette müşteri takma adı kullanılır.
Ölçülen sonuçİlk import süresi, kanıta ulaşma süresi, yeniden çalışma sayısı, kabul/red sayıları ve geliştirici desteği olmadan tekrar üretim ölçülür.
Müşteri kararıKabul, aksiyonlu kabul veya ret kararı; tekrar kullanım ilgisi ya da açık ret gerekçesiyle birlikte saklanır.
Fon izlenebilirliğiWP1-WP6 için teknik belirsizlik, çıktı, kanıt ID’leri, kişi-ay, dış maliyet, bütçe, para birimi ve sorumlu eşlenir.
Değişiklik tespitiFinalize her doküman ve evidence dosyasının SHA-256 özetini ve byte uzunluğunu kaydeder; offline verify değiştirilmiş artifact’i reddeder.
Paketi oluştur, kanıt ekle ve doğrula
python3 scripts/pilot_evidence_pack.py init \
--pilot-id PILOT-2026-001 \
--customer-alias design-partner-a \
--title "Spatial Acceptance Pilot"
python3 scripts/pilot_evidence_pack.py add-evidence \
--pack-dir operator-private/pilot-evidence/PILOT-2026-001 \
--evidence-id EVIDENCE-SNAPSHOT-001 \
--kind dataset_snapshot \
--file /guvenli/yol/dataset-snapshot.json \
--description "Sınırlandırılmış dataset snapshot"
python3 scripts/pilot_evidence_pack.py finalize \
--pack-dir operator-private/pilot-evidence/PILOT-2026-001
python3 scripts/pilot_evidence_pack.py verify \
--pack-dir operator-private/pilot-evidence/PILOT-2026-001 --strict
# Tam sentetik paket geçer; değiştirilmiş doküman reddedilir.
python3 scripts/pilot_evidence_pack.py demo-smoke
Read APIs
Bounded query örnekleri
TermiNode map, agent ve adapterlar için bounded read yaklaşımını tercih eder. Yalnız aktif viewport, dataset, page veya proof record okunur.
Candid: dataset listesi ve viewport GeoJSON
dfx canister call spatial list_datasets_page '(0 : nat64, 20 : nat64)' --network ic
dfx canister call spatial query_feature_geojson_bbox_page \
'(40.90 : float64, 28.80 : float64, 41.12 : float64, 29.20 : float64, opt 1 : opt nat64, 0 : nat64, 100 : nat64)' \
--network ic
TermiNode arayüzünde salt okunur sorgu
import { Actor, HttpAgent } from '@icp-sdk/core/agent';
import { idlFactory as spatialIdlFactory } from '@/lib/idl/spatial';
const agent = new HttpAgent({ host: 'https://icp-api.io' });
const spatial = Actor.createActor(spatialIdlFactory, {
agent,
canisterId: 'ov27b-fiaaa-aaaam-qi6dq-cai',
});
const datasets = await spatial.list_datasets_page(0n, 20n);
const geojson = await spatial.query_feature_geojson_bbox_page(
40.90, 28.80, 41.12, 29.20, [1n], 0n, 100n
);
Evidence
Audit, proof ve export reçeteleri
Proof-layer workflow kullanışlı olacaksa portable evidence bırakmalıdır. Her pilot için dataset snapshot, checksum, feature history, audit page ve verification receipt birlikte tutulur.
Evidence calls
dfx canister call spatial list_feature_versions_page '(7 : nat64, 0 : nat64, 20 : nat64)' --network ic
dfx canister call spatial list_audit_events '(0 : nat64, 50 : nat64)' --network ic
dfx canister call spatial export_dataset_snapshot_with_checksum '(1 : nat64)' --network ic
dfx canister call oracle_gateway verify_coordinates_full '(7 : nat64, 41.0214 : float64, 28.9105 : float64)' --network ic
MCP
Agent-ready read-only entegrasyon
MCP, bir AI agent GIS proof context okumak isterken write, market, custody veya administrative tool almaması gereken durumlarda kullanışlıdır.
Ne için iyiSupport triage, pilot review, dataset discovery, audit checks, proof package review ve internal operator summaries.
Ne için kullanılmazDataset create, geometry edit, token transferi, market config veya governance state değişikliği.
Bağlantı modeliStdio server operator/developer makinesinde çalışır ve mainnet canister ID bilgilerine bağlanır.
MCP client config taslağı
{
"mcpServers": {
"terminode": {
"command": "node",
"args": ["/absolute/path/to/terminode/mcp-server/dist/index.js"],
"env": {
"TERMINODE_MCP_REPO_ROOT": "/absolute/path/to/terminode",
"TERMINODE_MCP_NETWORK": "ic",
"TERMINODE_MCP_SPATIAL_CANISTER": "ov27b-fiaaa-aaaam-qi6dq-cai",
"TERMINODE_MCP_ORACLE_GATEWAY_CANISTER": "nfjvh-ziaaa-aaaam-qi6lq-cai",
"TERMINODE_MCP_GOVERNANCE_CANISTER": "ncitt-uqaaa-aaaam-qi6la-cai",
"TERMINODE_MCP_TRMG_LEDGER_CANISTER": "os3zv-iqaaa-aaaam-qi6da-cai"
}
}
}
}
Utility boundary
TRMG iletişiminde ürün-first çizgi korunur
TRMG write credit, proof credit ve governance operasyonlarını destekler. Satış, yönetilen alım-satım ortamı, finansal beklenti veya otomatik hak ediş sağlamaz.
Güvenli anlatımTermiNode içinde spatial write, oracle proof workflow ve governance support için utility credit.
Katkı reviewFeedback, bug report, docs improvement ve pilot data review gibi katkılar operator review ve uyum kontrolü sonrası değerlendirilebilir.
Default kapalı yüzeylerInternal market, custody, fiat on-ramp ve TermiNode-operated exchange-like yüzeyler default launch dışında kalır.