Evm
evm opcode create 上的參數
為什麼使用 evm 操作碼創建合約的常用方法使用
add
andmload
,例如:bytes memory bytecode = hex"600580600c6000396000b800602a600052b8"; ... assembly { _address := create(0, add(bytecode, 0x20), mload(bytecode)) }
我不明白為什麼要添加
0x20
到初始位置以及為什麼mload(bytecodes)
返回字節碼的大小。有人可以指點我相關的文件,我將不勝感激。謝謝。
這是因為記憶體變數被視為來自solidity 彙編的指針——並且該指針指向變數在記憶體中的開始。Solidity中數組儲存在記憶體中的方式是前0x20(32)字節是數組中數據的長度,然後是實際數據,這就是為什麼
add(bytecode, 0x20)
需要獲取實際數據的開頭bytecode
. 由於前 0x20 字節是數組mload(bytecode)
的長度,因此獲取要儲存的字節碼的長度。編輯:要完全理解這一點,您應該通讀 Solidity Docs 的Assembly以及Miscellaneous(主要是關於儲存/記憶體佈局的詳細資訊)部分