
前言
- 智能合约生成合约地址的第二种方式
Create2 - 以一道例题解释
计算地址有两种方式
Create:keccak256(rlp.encode(deployingAddress, nonce))[12:]Create2:keccak256(0xff ++ deployingAddr ++ salt ++ keccak256(bytecode))[12:]
关于
Create2,这里就不介绍了,可以参考 EIP 1014: CREATE2 指令
1 | pragma solidity ^0.4.21; |
- 很简单,要求
name是smarx,并且msg.sender包含badc0de,可通过下面合约解决,只需要合约地址包括badc0de即可
1 | pragma solidity ^0.5.12; |
- 用
Create2方法解决,如下,我们只需要计算出相对应的salt即可,Deployer被部署在0xca4dfd86a86c48c5d9c228bedbeb7f218a29c94b
1 | contract Deployer { |
- 写了一个脚本爆破
salt, 只要包含badc0de即可
1 | from web3 import Web3 |
- 结果如下

最后调用
Deployer.deploy(0x00...005b2bfe)即可把BadCodeSmarx合约部署到地址0xa905a3922a4ebfbc7d257cecdb1df04a3badc0de上也有大佬通过
Create方式解决的,有兴趣的可以参考 https://www.anquanke.com/post/id/154104#h3-11 , 带佬自行验证
,我没有验证
