EIP-8032 (ja EIP-2926) sisältää muunnosprosessin. Huomasin, että tätä prosessia ymmärretään huonosti, jopa ydinkehittäjien toimesta. Ennen seuraavaa ACDE:tä kirjoitan nopean selityksen.
Pohjimmiltaan se on pelkkä yksinkertainen iteraattori, joka käy läpi tilejä ja laskee lehtiä. Kun kaikki lehdet on laskettu, tämä laskenta lisätään tilille kenttänä. Jokaisessa lohkossa iteraattori etenee N asemalla. Muunnos pysähtyy, kun viimeinen sijainti saavutetaan.
Tässä "position" tarkoittaa joko tiliä tai paikkaa, jossa iteraattori voisi "pysähtyä". Datamäärän vuoksi on tärkeää, että iteraatio pysähtyy "turvalliseen" pisteeseen ja jatkuu seuraavassa lohkossa.
Katsotaanpa seuraavaa yksinkertaistettua esimerkkiä. Osavaltiossa on paljon vähemmän dataa kuin oikeassa elämässä, ja puu on binääripuu, mutta esimerkki on muuten tarkka. ∅-symboli tarkoittaa tiliä, jolla ei ole tallennustilaa. Jos tilillä on tallennuspuu.
Aluksi iteraattori asetetaan arvoon 0, eli - tilin hajautusarvo = 0 - slotin hash-paikka = 0 Se on esitetty punaisella nuolella.
Tässä esimerkissä otamme iteraattorin askeleen N = 2 (käytännössä N > 10_000). Haarulohkossa iteraattori liikkuu kahdella paikalla. Ensimmäinen asento on tili, jossa ei ole tallennustilaa, joten mitään ei tehdä.
Edelleen haarukkalohkossa iteraattori siirtyy toiseen paikkaan, joka on paikka (eli iteraattori pysähtyy tilin tallennustilaan ennen kuin pysähtyy varsinaiseen tilille). Slot-laskuri on asetettu arvoon 1, ja koska iteraattori on juossut koko askeleensa haarukkalohkolle, se pysähtyy.
Seuraavassa lohkossa iteraattori kattaa jälleen kaksi sijaintia: - Ensimmäinen on toisen tilin toinen paikka, jonka laskuri korotettiin - Toinen on itse toinen tili. Laskurin arvo lisätään tilikentänä ja laskuri nollataan.
Seuraavassa lohkossa (haarukka + 2) iteraattori käy läpi kolmannen tilin kaksi paikkaa, mutta sen askel saavutetaan ennen kuin tilin (seuraava paikka) päivittyy laskurilla (joka on 2).
Muunnoksen viimeisessä lohkossa kolmannelle tilille annetaan laskuri, ja sitten viimeinen tili tarkistetaan tilaksi (mitä sillä ei ole, joten päivitys ei ole tarpeen).
Koska muita tilejä ei ole, iteraattori päättyy ja muunnos on valmis.
Entä jos tallennustila lisätään tilille A sen jälkeen, kun iteraattori on ohittanut tilin A? A:n sisällä oleva laskuri on yksinkertaisesti kasvatettu.
Entä jos tallennustila lisätään tilille, jota muutetaan? - Iteraattorin edellä: ei mitään tekemistä, koska iteraattori laskee sen saavuttuaan - kun iteraattori on läpäissyt: tallenna se tilille, lisää se iteraattorilaskuriin slot-luettelon päätyttyä
Milloin bensakustannukset ovat voimassa? Kun tili on muunnettu.
Kuinka kauan muunnos kestää? Askelista riippuen jopa kuukauden ajan. Arvo valitaan siten, että lisätty laskenta on merkityksetön verrattuna tavalliseen lohkooperaatioon. 10_000 periytyy Verkleltä, ja siihen menisi kuukausi. Benchmarkit löytäisivät varmasti nopeamman vastineen
Ja siinä kaikki, kiitos kun jaksoit lukea loppuun 🫶 asti
306