NieuwsCryptoEthereum houdt Hoodi testnet-fork aan als Glamsterdam gas-herprijzing contractaannames doorbreekt

Ethereum houdt Hoodi testnet-fork aan als Glamsterdam gas-herprijzing contractaannames doorbreekt

Auteur: Coindoo·

Belangrijkste punten

  • •Core developers hebben de Hoodi testnet-fork voor de Glamsterdam-upgrade uitgesteld tot de problemen die ChainSecurity signaleerde zijn opgelost; er is geen nieuwe datum bekendgemaakt.
  • •EIP-8037 en EIP-8038 verhogen de gasgerelateerde state-kosten aanzienlijk, waaronder een stijging van het schrijven naar een verse storage slot van 22.100 naar 110.020 gas en code-implementatie van 200 naar 1.530 gas per byte.
  • •Een mislukte EIP-7702-delegationtransactie kan een nog steeds geldige autorisatie publiceren, en als een delegate-contract iedereen toestaat de setup-functie aan te roepen, kan een aanvaller het eigendom van het account claimen.
  • •Vóór de fork vastgelegde gasbedragen kunnen te klein worden: transfers die vandaag in 65.000 gas passen, kunnen meer dan 150.000 nodig hebben, vooral bij eerste keer ontvangers.
  • •De Foundation presenteert de herprijzing als voorwaarde voor verdere verhoging van de gaslimiet onder een prestatiedoel dat grofweg een drievoudige stijging van de basisdoorvoer ondersteunt, en komende developer-calls kunnen beide EIP's nog aanpassen.
Ethereum houdt Hoodi testnet-fork aan als Glamsterdam gas-herprijzing contractaannames doorbreekt

Ethereum Foundation-ontwikkelaar Marius van der Wijden zei in een update van 6 november dat core developers de Hoodi testnet-fork niet zullen uitvoeren totdat de problemen zijn opgelost die zijn geïdentificeerd door beveiligingsbedrijf ChainSecurity. Hoodi is het openbare testnetwerk waar Ethereum protocolwijzigingen repeteert voordat ze het mainnet bereiken. Hij vroeg contractontwikkelaars en auditors om hun projecten te toetsen aan acht gas-invariants die de komende Glamsterdam-upgrade doorbreekt. Gas is de eenheid waarmee Ethereum elke operatie die een transactie uitvoert prijst, dus wanneer die prijzen verschuiven, kan code die onder de oude cijfers is geschreven zich anders gedragen, ook al is de code zelf ongewijzigd.

Een invariant is in deze context een regel die code als altijd waar behandelt — bijvoorbeeld "een vast gasbudget is voldoende voor deze call" of "een gemijnde delegation is van kracht gegaan." De invariants-repository van de Foundation somt acht aannames op die onder Glamsterdam veranderen en stelt dat de meeste bevindingen tot nu betrekking hebben op twee ervan.

Twee voorstellen her vormen gaskosten

Twee voorstellen sturen de wijziging aan. EIP-8037 verhoogt de prijs van het creëren van nieuwe state — nieuwe accounts, storage slots en geïmplementeerde code — en meet die apart van gewone executie. EIP-8038 verhoogt de prijs van het lezen en bijwerken van reeds bestaande state. Volgens de specificatie waar de repository op test, stijgt het schrijven naar een verse storage slot van 22.100 gas naar 110.020, het bijwerken van een warme bestaande slot van 2.900 naar 10.100 en het implementeren van code van 200 gas per byte naar 1.530. Die cijfers verschuiven mee als de specificatie dat doet.

De pauze in het Glamsterdam-testen volgde op ChainSecurity's review van 13 oktober, zoals eerder gemeld. De repository breidt die bevindingen uit met de eigen scan van de Foundation van contracten die geverifieerd zijn op Sourcify, een openbaar register van contractbroncode, en met offchain-gevallen zoals software die transactiereceipts leest.

Een gemijnde transactie bewijst niet langer dat een delegation is toegepast

EIP-7702 laat een gewoon Ethereum-account smart contract-code uitvoeren door een autorisatie te ondertekenen die naar een delegate-contract verwijst. Het mechanisme ging live met de Pectra-upgrade van 2025 en vormt de basis van de smart-accountfuncties die wallets sindsdien uitrollen. De autorisatie is bedoeld voor eenmalig gebruik. Vóór Glamsterdam werd de volledige kost vooraf in rekening gebracht, dus een transactie die niet kon betalen was ongeldig en bereikte nooit een blok. Als een transactie gemijnd was, was de delegation toegepast.

De INV-8-entry van de repository legt uit wat EIP-8037 verandert. Een deel van de kost hangt nu af van de state van het account en wordt alleen in rekening gebracht terwijl de autorisatie wordt verwerkt. Delegeren vanuit een leeg account kost 235.606 gas, tegenover 25.000 eerder. Een transactie gebudgetteerd op het oude bedrag kan worden geaccepteerd, zonder gas komen te staan tijdens het toepassen van de autorisatie en in een blok terechtkomen met een mislukte status. De delegation wordt teruggedraaid, en ook de toename van de nonce van het account, de teller die een autorisatie als gebruikt markeert. De ondertekende autorisatie is echter nu publiek en nog steeds geldig.

Op zichzelf laat dat een wallet ongeconfigureerd achter in plaats van gecompromitteerd. Het gevaar ontstaat wanneer het delegate-contract iedereen toestaat de setup-functie aan te roepen. Een aanvaller kan dan de blootgestelde autorisatie opnieuw indienen in een eigen transactie, eerst setup aanroepen en zichzelf als eigenaar van het account aanmerken. Front-running van autorisaties in de openbare mempool was al mogelijk. Het punt van de repository is dat een mislukte transactie nu zelfstandig een geldige autorisatie publiceert, zodat privély-up geen bescherming biedt. Het patroon is gedocumenteerd met voorbeeldcode, en er wordt geen getroffen wallet genoemd.

De praktische wijziging komt neer op wallets, relayers en indexers. De repository adviseert om na een delegationtransactie de code en nonce van het account te controleren in plaats van te vertrouwen op het receipt. Elke mislukte autorisatie moet als blootgesteld worden behandeld en worden geannuleerd, hetzij door de nonce van het account te verhogen, hetzij door opnieuw te delegeren naar een veilig contract. Een specificatiewijziging die de worst-case kost vooraf zou belasten is voorgesteld maar niet aangenomen, en ontwikkelaars wordt geadviseerd te bouwen alsof het huidige gedrag blijft bestaan.

Gasbudgetten zitten vaak buiten het contract

De breedste entry, INV-4, heeft betrekking op elk gasbedrag dat vóór de fork vastgelegd is. Het kan nu te klein zijn waar het ook staat: in contractcode, een instellingswaarde, een ondertekend bericht of offchain-software. Die laatste groep omvat relayers — diensten die transacties namens gebruikers indienen — evenals keepers en opnamesystemen van beurzen.

Eerste keer ontvangers zijn de meest voorkomende trigger. Het sturen van een token naar een adres met een nulbalans creëert een nieuwe balance slot, en het sturen van ETH naar een leeg adres creëert een nieuw account; beide worden door EIP-8037 aanzienlijk hoger geprijsd. Volgens de repository kan een transfer die vandaag in 65.000 gas past, meer dan 150.000 nodig hebben.

Waar het vaste getal staat, bepaalt hoe erg een tekort uitpakt. In offchain-software revert de hele transactie en kan hij opnieuw worden verstuurd met meer gas. In een contract, de instellingen ervan of een ondertekend bericht mislukt alleen de innerlijke call. Als het buitenste contract die mislukking opvangt, is de uitkomst vaak definitief: een bericht opgeslagen als mislukt, een callback overgeslagen of beloningen foutief geboekt. Sommige van deze getallen kunnen helemaal niet worden gewijzigd, waaronder multisig-transacties ondertekend vóór de fork, ondertekende meta-transacties en cross-chain-berichten die al onderweg zijn.

INV-7 past hetzelfde probleem toe op gas dat in reserve wordt gehouden. Solidity's transfer- en send-functies geven een vaste 2.300 gas mee, maar een ontvangend contract dat een nieuwe storage slot schrijft heeft nu meer dan 110.000 nodig. Smart wallets, payment splitters en vaults met logica in hun receive-functies zijn de voor de hand liggende kandidaten.

Faalpaden die eerder revertten kunnen nu afronden

ChainSecurity's analyse van 13 oktober verklaart waarom sommige beschermingen die eerdere audits doorstonden mogelijk stoppen te werken. Contracts vangen vaak een mislukte externe call op zodat ze de mislukking kunnen vastleggen, een item kunnen overslaan of een fallback kunnen proberen. Dat wordt gevaarlijk wanneer iemand opzettelijk te weinig gas levert — een aanval die insufficient gas griefing heet — omdat een operatie die opnieuw zou moeten kunnen worden geprobeerd als definitief mislukt wordt gemarkeerd.

Contracts verdedigen zich doorgaans op twee manieren. Sommige controleren hoeveel gas er na de call over is. Anderen vertrouwen erop dat de failure handler te duur is om af te ronden. Glamsterdam verzwakt beide. EIP-8037 geeft transacties met een gaslimiet boven 16.777.216 een aparte reservoir voor storage-kosten die de gebruikelijke gasleft()-controle niet ziet. Het revertten van een call of het wissen van een vers geschreven slot kan ook verbruikt gas teruggeven. In de woorden van ChainSecurity: "Zelfs met ongewijzigde contractcode kan een faalpad dat eerder revertte nu afronden."

Het bedrijf raadt nu af om af te leiden waarom een call mislukte uit het resterende gas. De voorkeursbenadering is om de hele operatie te laten reverten waar mogelijk, of een herstelpad te bewaren in plaats van een onomkeerbare beslissing te nemen op basis van resterend gas.

Een eerdere audit kan dat gat niet zelfstandig dichten, omdat het de code beoordeelde op de gaskrachten die destijds golden. De Foundation heeft ChainSecurity en Dedaub ingeschakeld naast haar interne audits, maar erkent in haar bericht van 6 november dat ze niet elk project kan beoordelen, vooral offchain-code niet. Ontwerpkeuzes bepalen ook de oplossing: een gaslimiet die als instelbare instelling is opgeslagen kan simpelweg worden verhoogd, terwijl een limiet die als vaste constante is ingebakken herimplementatie en migratie als enige route kan laten.

Waarom Ethereum de herprijzing doorzet

Het betoog van de Foundation voor de wijziging berust op prijzingsnauwkeurigheid. Haar guidance van augustus voor contractontwikkelaars stelde dat de gasprijzen voor state-operaties voor het laatst waren aangepast in de Berlin-fork van 2021, de fork die de huidige koud-versus-warm-prijziging voor het lezen van state vaststelde. Ethereum's state — het lopende register van accounts, balansen en contractopslag dat nodes bijhouden — is sindsdien aanzienlijk gegroeid, en recente verhogingen van de gaslimiet hebben die groei versneld. Het bericht noemde de herprijzing een voorwaarde voor verdere verhoging van de gaslimiet en zei dat het nieuwe schema is afgeleid van een prestatiedoel dat grofweg een drievoudige toename van de basisdoorvoer ondersteunt.

Hetzelfde bericht meldde dat het opnieuw afspelen van historische mainnet-transacties onder de nieuwe prijzen de grote meerderheid ongewijzigd liet, en dat de meeste gemarkeerde problemen konden worden opgelost door een gaslimiet te verhogen. Het vertelde gewone gebruikers dat geen actie nodig was, omdat bijgewerkte wallets en infrastructuur de wijziging zouden afhandelen. De bevindingen van november leggen meer gewicht op die laatste clausule. Het omgaan met de wijziging omvat nu het controleren van de accountstate na een mislukte delegation en het afstemmen van relayer-budgetten op eerste keer ontvangers — werk dat de oude gasregels nooit eisten.

Wat de volgende core developer-calls bepalen

Volgens de repository verzamelt de Foundation feedback voorafgaand aan de volgende All Core Developers-call, het vaste forum waar Ethereum-protocolwijzigingen worden overeengekomen. Afhankelijk van de reactie kan ze EIP-8037 en EIP-8038 licht aanpassen of laten zoals ze zijn. Hoodi blijft ongeforkt totdat de problemen zijn opgelost, en het bericht van 6 november geeft geen nieuwe datum. Volgens hetzelfde bericht gaat het werk aan Hegota, de upgrade gepland na Glamsterdam, parallel door.

Vóór Hoodi forkt: wie controleert wat

  • Contractteams: plak adressen in de affected-contracts lookup van de Foundation en review daarna alle code die gaswaarden hardcodeert of brancht op resterend gas, of ze nu vermeld zijn of niet.
  • Wallets en RPC-providers: werk de gasbepaling bij voor het nieuwe schema. De Foundation waarschuwt dat gecachte gasconstanten kosten zullen onderschatten en mislukte transacties veroorzaken.
  • Relayers, keepers en bundlers: maak limieten instelbaar en herbepaal ze onder de nieuwe regels met marge, en test transacties aan beide kanten van de reservoirdrempel.
  • Auditors: de repository bevat instructies voor het uitvoeren van de controles met een AI-codeeragent, met code en resultaten lokaal bewaard.

De signalen die het volgen waard zijn: een Hoodi fork-datum op de blog van de Foundation, elke herziening van de specificatie van een van beide EIP's en bevestigingen van getroffen projecten dat fixes klaar zijn. De Foundation heeft teams gevraagd problemen privé te melden bij glamsterdam@ethereum.org in plaats van in openbare issues, zodat problemen kunnen worden opgelost voordat details zich verspreiden.

Dit artikel verscheen oorspronkelijk op Coindoo.