
Um contrato que continua executando após uma chamada falha não tem hoje uma maneira confiável de determinar se o chamado foi revertido intencionalmente ou simplesmente ficou sem gás, escolha do remetente. Essa lacuna é a raiz do griefing por gás insuficiente, e uma nova proposta em rascunho tenta fechá-la no nível EVM. EIP-8456, aberta para discussão no Ethereum Magicians na segunda-feira, adiciona uma instrução chamada CALLSTATUS, temporariamente no opcode 0xA5 por 2 de gás. Ela empurra o status de conclusão da chamada ou operação de criação mais recente no frame atual como três bits. O bit 0 significa um revert, o bit 1 significa uma parada excepcional, como falta de gás, e o bit 2 significa que algo em um frame abaixo foi interrompido. O autor aponta que a única evidência atual é a aritmética de gasleft() após a chamada, e que cada fork de repricing quebrou esses limiares. O proposto gás bidimensional da EIP-8037 tornaria essa aritmética ainda mais fraca, pois seu reservatório não é visível através do opcode GAS. Então, por que o terceiro bit? A maioria das chamadas reais passa por intermediários como proxies, o wrapper functionCall da OpenZeppelin, Multicall3 ou verificadores de assinatura ERC-1271. Se apenas o resultado do chamado direto fosse relatado, um wrapper que captura uma parada por falta de gás e faz um revert com uma razão pareceria um revert intencional. O rascunho mantém uma flag persistente que viaja por todos os frames, de modo que um remetente que controla apenas o gás nunca pode fazer um chamador ler um revert simples. Ele relata resultados em vez de causas, e um chamado ainda pode produzir uma parada intencional com INVALID. Ele protege apenas código escrito após seu lançamento, pois contratos implantados não o lerão. Ainda não há revisões externas, o número do opcode ainda está aberto, e um protótipo mais testes para 58 casos listados ainda está pendente. Link - https://t.co/KnByUBgWrY
