Merkle sübutları
API-nin qaytardığı hər ad həlli Merkle sübutu ilə birlikdə gəlir. O, cavabı göndərən serverə etibar etmək əvəzinə cavabı vəziyyət kökü ilə tutuşdurmağa imkan verir.
Ağac
PiNS bütün adları 128 bitlik açar fəzası üzərində kompakt seyrək Merkle ağacında saxlayır.
Adın açarı SHA-256(domain_name) dəyərinin ilk 16 baytıdır, beləliklə adlar bərabər paylanır və
heç kim öz adının hara düşəcəyini seçə bilmir.
«Kompakt» o deməkdir ki, yarpaq sabit 128 dərinlikdə deyil, açar prefiksinin unikal olduğu ən az dərinlikdə yerləşir. Bir neçə min ad saxlayan ağacda sübutların əksəriyyəti cəmi bir onlarla heşdən ibarətdir — telefonda, brauzer genişlənməsində və ya pulqabının içində yoxlanacaq qədər kiçik.
Doğrulayıcı yazmazdan əvvəl bilinməli iki nəticə:
- Sübutun uzunluğu dəyişkəndir. Cavabdan
proof_depthdəyərini oxuyun; heç vaxt sabit ölçü fərz etməyin. - Boş alt ağac istənilən hündürlükdə 32 sıfır baytdır. Buna görə boş ağacın kökü tamamilə
sıfırdır —
0000…0000bildirən, təzəcə işə salınmış indeksləyici xarab deyil, düzgündür.
Sübut nə saxlayır
| Sahə | Mənası |
|---|---|
merkle_proof | qonşu heşlər, [0] ən dərindəki (yarpağa ən yaxın) |
proof_depth | qonşuların sayı — merkle_proof.length ilə üst-üstə düşməlidir |
proof_terminal | yolun sonunda nə olduğu: Occupied, Vacant və ya Blocked |
smt_root | bu qonşuların bərpa etdiyi kök |
Mövcudluq və yoxluq
Sübutun «bu ad qeydiyyatda deyil» ifadəsini «qeydiyyatdadır» qədər inandırıcı söyləməsinə imkan verən məhz terminaldır:
Occupied— yolun sonunda açarın öz yarpağı dayanır. Ad mövcuddur və sizə verilən qeyd ağacdakı qeyddir.Vacant— orada boş alt ağac var. Ad qeydiyyatda deyil.Blocked— həmin mövqeyi başqa adın yarpağı tutub. Ad qeydiyyatda deyil; cavab bloklayan qeydi də daşıyır ki, onun orada tapılan yarpağa heş olunduğunu və açarının həqiqətən eyni prefiksi bölüşdüyünü yoxlaya biləsiniz.
Blocked olmasaydı, indeksləyici yerin boş olduğunu iddia edərək qeydiyyatı gizlədə bilərdi.
Bloklayan qeyd tam şəkildə verildiyi üçün bu iddianı qəbul etmək əvəzinə yoxlaya bilərsiniz.
Yoxlama
Qeydi heş edərək yarpağa çevirin, sonra hər addımda sola və ya sağa getməyi açarın bitlərinə görə
müəyyən edərək qonşuları kökə doğru qatlayın. smt_root dəyərinə gəlirsinizsə, qeyd məhz ağacın
öhdəlik götürdüyü şeydir.
Bir sual qalır: smt_root həqiqi kökdürmü? Buna BNB Smart Chain üzərindəki lövbər müqaviləsindən soruşmaqla
cavab verin. Python, PHP və JavaScript-də yoxlanmış kodla birlikdə hər iki addım
Sübutların yoxlanması səhifəsindədir.