Evm

用非零字節碼發布合約的最短字節碼是多少?

  • February 26, 2018

是的,這是高爾夫。所以起訴我。

規則

的響應getCode()應該有一些不是 0 或 x 的字元。

要對其進行測試,您可以將以下內容與本地 testrpc 一起使用:

web3.eth.sendTransaction({data:'BYTECODE', from:web3.eth.accounts[0]});
web3.eth.getCode('THE_ADDRESS');

或者你可以使用evmGeth 自帶的命令:

evm --debug --code BYTECODE run.

例子:

這是一個有效但冗長的範例:0x600180600b6000396000f3

不要破壞它

>!如果您在回答前使用前導

它將被隱藏

自從 Noel 接近了,是時候釋放我的 6 字節了:

0x3859818153F3

字節碼:

CODESIZE MSIZE DUP2 DUP2 MSTORE8 返回

工作如下:

使用 CODESIZE 僅使用一個字節即可在堆棧上獲取非零值 (0x06)。MSIZE 將 0 放入堆棧。這將部署合約 0x060000000000。

6字節(程式碼:6字節,有效載荷:0字節);3 個不同的操作碼。同樣的想法只是比以前的 6 字節便宜 2 氣體。

字節碼:

0x3838533838f3

集會:

CODESIZE CODESIZE MSTORE8 CODESIZE CODESIZE 返回

工作如下:

使用最便宜的單字節操作將值放入堆棧 CODESIZE。將 CODESIZE 字節儲存在記憶體中的 CODESIZE 地址處,然後從記憶體中的 CODESIZE 位置返回 CODESIZE 字節。

範例交易:在etherscan上

用於部署的氣體:54622。

引用自:https://ethereum.stackexchange.com/questions/40757