Ana içeriğe geç

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_depth değ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…0000 bildiren, yeni başlatılmış bir indeksleyici bozuk değil, doğrudur.

Bir ispat neler içerir

AlanAnlamı
merkle_proofkardeş hash'ler, [0] en derindeki (yaprağa en yakın)
proof_depthkardeş sayısı — merkle_proof.length ile eşit olmalı
proof_terminalyolun sonunda ne olduğu: Occupied, Vacant veya Blocked
smt_rootbu 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.