Solidity

create2 字節碼欄位是否有大小限制?

  • November 19, 2021

我的 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));
}

如果您嘗試使用相同的鹽部署相同的字節碼,此程式碼將恢復。

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