在把智能合约成功部署到ETH网络时,会得到合约地址,那么,这个合约地址是由什么决定的呢?合约地址由合约创建者的地址(sender address)和这笔部署交易中的nonce(发送者的累积交易次数)决定,将sender
和nonce
经过RLP编码后,再进行Keccak-256(SHA3)散列, 最后裁掉前面12个字节即得到合约地址。
example in js:
const util = require('ethereumjs-util');
const rlp = require('rlp');
const address = '0xa16de3199ca3ee1bc1e0926d53c12ffacdf3f2c4';
const nonce = 0;
// 进行rlp编码
const encodedRlp = rlp.encode([address, nonce]);
// 进行sha3散列
const buf = util.sha3(encodedRlp);
// 取buffer第12个字节后面的部分, 结果应该是 0xc2eba72df1584602c6088b1a4e018fc7e7f0f783
const contractAddress = '0x' + buf.slice(12).toString('hex');
网友评论