以太坊合约的地址是根据创建者(sender)的地址以及创建者发送过的交易数量(nonce)来计算确定的。sender和nonce进行RLP编码,然后用keccak-256进行hash计算。
【1】使用Web3j的Java代码
/**
* 以太坊合约地址的生成方式
*/
private String calculateContractAddress(String address, long nonce){
byte[] addressAsBytes = Numeric.hexStringToByteArray(address);
byte[] calculatedAddressAsBytes =
Hash.sha3(RlpEncoder.encode(
new RlpList(
RlpString.create(addressAsBytes),
RlpString.create((nonce)))));
calculatedAddressAsBytes = Arrays.copyOfRange(calculatedAddressAsBytes,
12, calculatedAddressAsBytes.length);
String calculatedAddressAsHex = Numeric.toHexString(calculatedAddressAsBytes);
return calculatedAddressAsHex;
}

本文详细解析了以太坊合约地址的计算方法,通过sender地址和nonce的RLP编码与keccak-256哈希,展示了Web3j和go-ethereum库中如何生成合约地址。实例测试了不同nonce值下的地址生成。

1567

被折叠的 条评论
为什么被折叠?



