Artikkeli · r6-network-002
Ethereumin access list: mitä tapahtuman käyttöluettelo ennakoi?
Ethereum-tapahtuman access list on ennakkoon annettu luettelo osoitteista ja sopimusten tallennuspaikkojen avaimista, joita tapahtuma voi käyttää. Se vaikuttaa tiettyjen tilapääsyjen kaasulaskentaan, esimerkiksi SLOADin, eräiden CALL-, EXT- ja BALANCE-operaatioiden sekä SSTOREn osalta. SSTORElla ja SELFDESTRUCTilla on omat erityissääntönsä.[3] Se ei ole käyttöoikeuslista, eikä se estä tapahtumaa käyttämästä luettelon ulkopuolisia kohteita.[2]
Luetteloon merkitsemisestä veloitetaan kaasua jo tapahtuman alussa. Myöhempi luetellun kohteen käyttö voi puolestaan olla halvempi kuin ensimmäinen vastaava käyttö ilman ennakkomerkintää. Kokonaissäästöä ei voi päätellä pelkästä listan olemassaolosta: myös luettelon hinta ja se, mitä suoritus todella käyttää, vaikuttavat.[2], [3]
Osoite ja tallennusavain ovat eri asioita
EIP-2930:n luettelossa osoitteen yhteyteen voidaan liittää nolla tai useampia tallennusavaimia. Osoite viittaa tiliin; tallennusavain yksilöi paikan kyseisen sopimuksen tallennustilassa. Sama avainarvo eri sopimusten yhteydessä ei tarkoita samaa tallennuspaikkaa.[2], [3]
Kuvitellaan sopimuskutsu, jonka rakentaja odottaa lukevan sopimuksesta tietyn tallennuspaikan. Hän voi sisällyttää luetteloon sopimuksen osoitteen ja kyseisen avaimen. Jos suorituksen kulku muuttuu eikä paikkaa luetakaan, merkinnän alkuperäinen kaasumaksu on silti veloitettu. Esimerkki havainnollistaa hinnoittelua eikä kuvaa tiettyä toteutunutta tapahtumaa.[2]
Luettelo ei ole sama kuin tokenin allowance eikä allekirjoitettu lupa siirtää omaisuutta. Se kertoo ennakoidusta pääsystä tilatietoihin; tapahtuman varsinainen vaikutus riippuu edelleen sen muusta sisällöstä ja suoritetusta koodista.[2]
Mitä lämmin ja kylmä tarkoittavat?
EIP-2929 ylläpitää tapahtuman suorituksessa joukkoja, jotka seuraavat käytettyjä osoitteita ja osoite–tallennusavain-pareja. Tietyissä operaatioissa pääsy kohteeseen, joka ei vielä kuulu lämpimään joukkoon eli on kylmä hinnoitellaan eri tavalla kuin pääsy jo lämpimään kohteeseen.[3]
Nämä sanat eivät kerro varojen säilytystavasta tai lämpötilasta. Ne kuvaavat tässä tapahtumakohtaista laskentatilaa. EIP-2930:n access list lisää ilmoitetut kohteet näihin joukkoihin etukäteen, joten niitä käsitellään suorituksessa lämpiminä.[2], [3]
Ero on siis siinä, milloin tieto kohteesta lisätään laskentaan: etukäteen luettelon kautta vai vasta suorituksen kohdatessa sen. Molemmissa tapauksissa kyse on saman tapahtuman suorittamisen yhteydessä käytettävästä kirjanpidosta. Luettelon olemassaolo ei yksin osoita, että sen ennakoima koodipolku todella toteutui.[2], [3]
EIP-2929 ei aloita täysin tyhjästä osoitejoukosta: sen määrittelyssä esimerkiksi lähettäjä ja vastaanottaja kuuluvat alussa joukkoon. Myös precompile-osoitteet ovat EIP-2929:n mukaan alussa lämpimiä. Jos suorituksen tietty kehys perutaan, joukkojen tila palautuu kehykseen saapumista edeltäneeksi; etukäteen listatut merkinnät eivät siksi yleisesti katoa sisäisen kehyksen peruuntuessa.[2] Siksi yksinkertainen oletus siitä, että jokainen osoite on ensin kylmä ja pysyy lämpimänä koko loppusuorituksen, ei kuvaa kaikkia tilanteita.[3]
Miksi lista voi maksaa enemmän kuin hyödyttää?
EIP-2930 veloittaa erikseen jokaisesta listan osoitteesta ja tallennusavaimesta. Sama kohde saa esiintyä listassa useammin kuin kerran, mutta jokaisesta esiintymästä veloitetaan; toisto ei vastaavasti tuo uusia eri kohteita käsiteltäväksi.[2]
Tarkka vaikutus riippuu siis siitä, mitkä kohteet olivat jo lämpimiä, mitkä luetellut paikat todella käytetään ja mitä muita operaatiokuluja tapahtumaan kuuluu. Access list ei itsessään kerro koko tapahtuman kaasunkulutusta tai sen lopputulosta. Listan hyötyä arvioidaan vertaamalla suoritusta ilman listaa ja sen kanssa. Pelkkä muiden oletusten samuus ei takaa samaa koodipolkua: kaasun saatavuus tai gasleft-riippuvuus voi muuttaa sitä. Vertailussa on varmistettava vastaava suorituspolku ja muut kustannukset tai simuloitava molemmat vaihtoehdot erikseen.[2], [3]
Kyse on protokollamekaniikan kuvauksesta, ei ohjeesta muuttaa lompakon asetuksia. EIP-2930 määritteli oman tapahtumatyyppinsä. Verkko- ja ohjelmistokohtainen tuki sekä mahdolliset myöhemmät sääntömuutokset on tarkistettava erikseen.[2]