Solidity
create2 字節碼欄位是否有大小限制?
我的 Solidity 契約中有以下方法。
function deploy(bytes memory bytecode, uint _salt) public payable returns (address){ address addr; assembly { addr := create2( callvalue(), add(bytecode, 0x20), mload(bytecode), _salt ) if iszero(extcodesize(addr)) { revert(0, 0) } } emit Deployed(addr, _salt); }
如果我的字節碼長度為 2000 個字元並且已部署契約,則該方法有效。但是,當字節碼長度達到 10000 個字元時,合約並沒有被部署並且正在呼叫 revert。create2 的字節碼大小有限制嗎?
create2
如果您能夠編譯程式碼,則使用 部署合約應該沒有任何問題。最大合約大小限制為 24KB。如果這是問題,請查看此或此。你應該使用creationCode而不是runtimeCode。檢查文件以獲取更多資訊。
嘗試在remix上執行這個範例來測試 How to Precompute Contract Address with Create2。添加您的契約並
TestContract
使用您的契約名稱 (type(YOUR_CONTRACT_NAME). creationCode
) 和函式_foo
中的契約建構子參數進行更新getByteCode
。function getBytecode(address _owner, uint _foo) public pure returns (bytes memory) { bytes memory bytecode = type(TestContract).creationCode; return abi.encodePacked(bytecode, abi.encode(_owner, _foo)); }
如果您嘗試使用相同的鹽部署相同的字節碼,此程式碼將恢復。