Merkle ispatları
API'nin döndürdüğü her çözümleme bir Merkle ispatıyla gelir. Bu ispat, yanıtı gönderen sunucuya güvenmek yerine yanıtı bir durum köküyle karşılaştırmanızı sağlar.
Ağaç
PiNS, tüm isimleri 128 bitlik bir anahtar uzayı üzerinde kompakt seyrek Merkle ağacında tutar.
Bir ismin anahtarı SHA-256(domain_name) değerinin ilk 16 baytıdır; böylece isimler eşit dağılır
ve kimse isminin nereye düşeceğini seçemez.
"Kompakt", bir yaprağın sabit 128 derinlik yerine anahtar önekinin benzersiz olduğu en sığ derinlikte durması demektir. Birkaç bin isim tutan bir ağaçta çoğu ispat yalnızca bir düzine kadar hash'ten oluşur — bir telefonda, bir tarayıcı eklentisinde ya da bir cüzdan içinde doğrulanacak kadar küçük.
Doğrulayıcı yazmadan önce bilinmesi gereken iki sonuç:
- İspat uzunluğu değişkendir. Yanıttaki
proof_depthdeğerini okuyun; asla sabit bir boyut varsaymayın. - Boş bir alt ağaç her yükseklikte 32 sıfır bayttır. Bu yüzden boş bir ağacın kökü tamamen
sıfırdır —
0000…0000bildiren, yeni başlatılmış bir indeksleyici bozuk değil, doğrudur.
Bir ispat neler içerir
| Alan | Anlamı |
|---|---|
merkle_proof | kardeş hash'ler, [0] en derindeki (yaprağa en yakın) |
proof_depth | kardeş sayısı — merkle_proof.length ile eşit olmalı |
proof_terminal | yolun sonunda ne olduğu: Occupied, Vacant veya Blocked |
smt_root | bu kardeşlerin yeniden kurduğu kök |
Varlık ve yokluk
Bir ispatın "bu isim kayıtlı değil" diyebilmesini, "kayıtlı" demesi kadar ikna edici kılan şey terminaldir:
Occupied— yolun sonunda anahtarın kendi yaprağı vardır. İsim mevcuttur ve size verilen kayıt, ağaçtaki kayıttır.Vacant— orada boş bir alt ağaç vardır. İsim kayıtlı değildir.Blocked— o konumu başka bir ismin yaprağı işgal eder. İsim kayıtlı değildir; yanıt, engelleyen kaydı da taşır; böylece onun orada bulunan yaprağa hash'lendiğini ve anahtarının gerçekten aynı öneki paylaştığını doğrulayabilirsiniz.
Blocked olmasaydı bir indeksleyici, bir yerin boş olduğunu iddia ederek bir kaydı gizleyebilirdi.
Engelleyen kayıt eksiksiz verildiği için bu iddiayı kabul etmek yerine denetleyebilirsiniz.
Doğrulama
Kaydı hash'leyerek bir yaprağa dönüştürün, sonra her adımda sola mı sağa mı gideceğinize
anahtarın bitlerine bakarak karar vererek kardeşleri köke doğru katlayın. smt_root değerine
ulaşıyorsanız kayıt, tam olarak ağacın taahhüt ettiği şeydir.
Geriye bir soru kalır: smt_root gerçek kök müdür? Bunu BNB Smart Chain üzerindeki çıpa
sözleşmesine sorarak yanıtlayın. Python, PHP ve JavaScript'te test edilmiş kodla birlikte her iki
adım da İspatları doğrulama sayfasındadır.