
Kontrak yang terus berjalan selepas panggilan gagal tidak mempunyai cara yang boleh dipercayai hari ini untuk menentukan sama ada penerima membatalkan dengan sengaja atau hanya kehabisan gas yang dipilih oleh penghantar. Kesenjangan ini adalah punca utama serangan griefing gas yang tidak mencukupi, dan cadangan draf baharu cuba menutupnya pada peringkat EVM. EIP-8456, yang dibuka untuk perbincangan di Ethereum Magicians pada hari Isnin, menambah arahan bernama CALLSTATUS, sementara di opcode 0xA5 dengan 2 gas. Ia mendorong status penyelesaian operasi panggilan atau cipta paling terkini dalam bingkai semasa sebagai tiga bit. Bit 0 bermaksud pembatalan, bit 1 bermaksud penghentian luar biasa seperti kehabisan gas, dan bit 2 bermaksud sesuatu dalam bingkai di bawahnya berhenti. Pengarang menunjukkan bahawa bukti tunggal hari ini ialah aritmetik gasleft() selepas panggilan, dan setiap cabang penyesuaian semula telah memecahkan ambang-ambang tersebut. Gas dua dimensi yang dicadangkan oleh EIP-8037 akan membuat aritmetik ini lebih lemah lagi, kerana rezervornya tidak kelihatan melalui opcode GAS. Jadi, mengapa bit ketiga? Kebanyakan panggilan sebenar melalui perantara seperti proxy, pembungkus functionCall OpenZeppelin, Multicall3 atau pemeriksa tanda tangan ERC-1271. Jika hanya kesudahan penerima langsung dilaporkan, pembungkus yang menangkap penghentian kehabisan gas dan membatalkan dengan sebab akan kelihatan seperti pembatalan yang disengajakan. Draf ini mengekalkan bendera melekat yang bergerak ke atas setiap bingkai, jadi penghantar yang hanya mengawal gas tidak pernah boleh membuat pemanggil membaca pembatalan biasa. Ia melaporkan kesudahan bukan punca, dan penerima masih boleh menghasilkan penghentian dengan sengaja menggunakan INVALID. Ia hanya melindungi kod yang ditulis selepas ia dilancarkan, kerana kontrak yang telah dideploy tidak akan membacanya. Belum ada ulasan luar, nombor opcode masih terbuka, dan prototaip serta ujian untuk 58 kes yang disenaraikan masih tertunda. Pautan - https://t.co/KnByUBgWrY
