我try 了两种不同的方法来计算Base Chain上的合同,并且我已经在Base Chain上部署了一个合同来验证.

def predict_contract_address(deployer_address, nonce):
    encoded = Web3.solidity_keccak(['address', 'uint256'], [deployer_address, nonce])
    contract_address = Web3.to_checksum_address(encoded[-20:])
    return contract_address

此方法返回0xc989DF16dc2026D73f018158cEad7AAf3508Dd3e,该0xc989DF16dc2026D73f018158cEad7AAf3508Dd3e与实际地址不匹配.以下是第二种方法:

def pca(deployer_address, nonce):
    return to_checksum_address(keccak(rlp.encode([deployer_address, nonce]))[-20:])

这种方法根据指南返回地址0xdEca8F8D505Ba2BF3B9d4120f66B3Ec9e49393fb,这也是错误的.两者都使用随机数0进行计算.发送实际合同部署哈希-0x 1 c2 e239387 c9 e6609 f1 e82900080 ab 9606 e42 d5 c33074 d1 e95431817698152 e0

推荐答案

合同地址由发件人地址和随机数确定.创建合同时,其地址的计算方法是:获取创建者地址及其随机数的LCC编码列表的Delivercak-25,然后获取该哈希值的最右边20个字节.

要计算它:

from ewb3 import Web3
import rlp
from eth_hash.auto import keccak
def compute_contract_address(deployer_address, nonce):
    encoded = rlp.encode([bytes.fromhex(deployer_address[2:]), nonce])
    hashed = keccak(encoded)
    contract_address = hashed[-20:]
    contract_address = Web3.toChecksumAddress(contract_address.hex())
    return contract_address

请确保deployer_address通过为hexadecimal stringnonce通过为integer.

Python相关问答推荐

Python:模块未找到:venv为什么要解决它?

七段显示不完整

学习率未更新

如何推迟对没有公钥的视图/表的反射?

如何分割我的收件箱,以便连续的数字各自位于自己的收件箱中?

如何在Pandas 中存储二进制数?

了解shuffle在NP.random.Generator.choice()中的作用

阅读Polars Python中管道的函数定义

如何使用没有Selenium的Python在百思买着陆页面上处理国家/地区 Select ?

剧作家Python没有得到回应

使用polars .滤镜进行切片速度比pandas .loc慢

如何在Python中使用io.BytesIO写入现有缓冲区?

acme错误-Veritas错误:模块收件箱没有属性linear_util'

Python上的Instagram API:缺少client_id参数"

如何使用LangChain和AzureOpenAI在Python中解决AttribeHelp和BadPressMessage错误?

Vectorize多个头寸的止盈/止盈回溯测试pythonpandas

DataFrames与NaN的条件乘法

优化器的运行顺序影响PyTorch中的预测

如何在Python中找到线性依赖mod 2

当我try 在django中更新模型时,模型表单数据不可见