Käyttäjät ja kehittäjät eivät ole suoraan vuorovaikutuksessa SMT:n kanssa; poissulkemistodisteet
lasketaan ja lähetetään automaattisesti operator-private-channel
-palvelun toimesta. Tämä sivu on viitemateriaalia operaattoreille ja kaikille, jotka rakentavat
operaattorityökaluja.
Escrow-ohjelma siirtyy tästä harvan Merkle-puun rakenteesta ketjussa olevaan nonce-bittikartaksi (seurataan ylävirrassa). Tämä sivu on ajantasainen nykyisen escrow-ohjelman osalta ja päivitetään, kun muutos toteutuu.
Tarkoitus
Private Channels käyttää harvaa Merkle-puuta (SMT) varmistaakseen, että jokainen
nostononce voidaan selvittää vain kerran. Kun operaattori kutsuu
ReleaseFunds-funktiota, hänen on toimitettava kaksi todistetta: poissulkemistodiste siitä, että nonce
EI vielä ole nykyisessä juuressa, ja sisällyttämistodiste siitä, että nonce ON olemassa kutsujan toimittamassa uudessa juuressa. Vasta kun molemmat tarkistukset läpäistään,
ohjelma tallentaa uuden juuren, mikä tekee kaikista tulevista yrityksistä käyttää nonce uudelleen todistettavasti kelvottomia.
Puun parametrit
- Puun korkeus:
16 - Maksimilehtiä:
65 536(2^16) - Hajautusfunktio: SHA-256
- Tyhjän lehden arvo:
[0u8; 32](32 nollatavua) - Ei-tyhjän lehden arvo:
SHA256([1u8; 32]), tallennettu vakionaNON_EMPTY_LEAF_HASH
Root Hash (32 bytes)/ \Hash(L, R) Hash(L, R)/ \ / \Hash(L, R) Hash(L, R) Hash(L, R) Hash(L, R)/ \ / \ / \ / \... ... ... ... ... ... ... .../ \ / \ / \ / \ / \ / \ / \ / \Leaf0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...(nonces recorded as leaf positions using their value modulo 65536)
Lehtirakenne
Jokainen nosto varaa täsmälleen yhden lehden. Lehden sijainti määräytyy seuraavasti:
leaf_position = transaction_nonce % 65536
Lehteä pidetään ei-tyhjänä, kun sen arvo on yhtä suuri kuin NON_EMPTY_LEAF_HASH
(eli SHA256([1u8; 32])). Tyhjä lehti koostuu pelkistä nollista.
Nonce ja lehden sijainti
ReleaseFunds-funktion transaction_nonce on tyyppiä u64. Sen sijainti puussa
on nonce % 65536. Sen odotettu epoch on nonce / 65536. Ketjussa oleva ohjelma
varmistaa, että tämä laskettu epoch on yhtä suuri kuin Instance.current_tree_index; ristiriita aiheuttaa InvalidTransactionNonceForCurrentTreeIndex-virheen.
Puun kierrätys
Tree Index 0 (nonces 0-65,535) Tree Index 1 (nonces 65,536-131,071)┌────────────────────────────┐ ┌────────────────────────────┐│ Root: 0x8fe6... │ │ Root: 0x8fe6... (reset) ││ Nonces Used: 65,536/65,536 │ Rotate │ Nonces Used: 0/65,536 ││ Status: FULL │ ──────> │ Status: ACTIVE │└────────────────────────────┘ └────────────────────────────┘(Tree exhausted) (Fresh tree)
SMT:llä on kiinteä kapasiteetti 65 536 lehdelle. Operaattoripalvelu havaitsee, milloin
kierrätys tarvitaan tarkistamalla, onko nonce % 65536 == 0 (kun nonce > 0);
tuo raja merkitsee uuden epochin alkua. Tässä vaiheessa
operator-private-channel kutsuu ResetSmtRoot-funktiota ennen seuraavan
ReleaseFunds-kutsun lähettämistä:
Instance.current_tree_indexkasvatetaan- Nostojuuri nollataan tyhjään puuhun
- Edellisen puun epochin noncet mitätöidään
Operaattoripalvelu myös tarkistaa, että sen paikallinen SMT-juuri vastaa
Instance.withdrawal_transactions_root-arvoa ketjussa ennen jokaista ReleaseFunds-
kutsua; ristiriita käynnistää turvasammutuksen mahdollisesti virheellisen
todisteen lähettämisen sijaan.
Puun kierrätystä seurataan Instance.current_tree_index: u64 -arvolla, joka on tallennettu ketjuun.
Vahvistus ReleaseFunds-funktiossa
ReleaseFunds-funktion sibling_proofs-argumentti on täsmälleen [u8; 512]: 16
sisarushajautusarvoa × 32 tavua kukin, vastaten puun korkeutta 16.
Ketjussa oleva vahvistusprosessi suorittaa kaksi erillistä tarkistusta peräkkäin:
verify_smt_exclusion_prooftodistaa, että nonce-lehti on tällä hetkellä tyhjä nykyistäInstance.withdrawal_transactions_root-arvoa vastenverify_smt_inclusion_prooftodistaa, että nonce-lehti on läsnä kutsujan toimittamassanew_withdrawal_root-argumentissa- Vain jos molemmat tarkistukset läpäistään, ohjelma tallentaa
new_withdrawal_root-arvon uutenaInstance.withdrawal_transactions_root-arvona ja vapauttaa tokenit
Jommankumman tarkistuksen epäonnistuminen aiheuttaa InvalidSmtProof-virheen. Juuren päivitys vaiheessa 3 on
atomiaalinen jokaisen ReleaseFunds-kutsun kanssa.
Is this page helpful?