ETH开发实践——合约地址是怎么得来的

在把智能合约成功部署到ETH网络时,会得到合约地址,那么,这个合约地址是由什么决定的呢?合约地址由合约创建者的地址(sender address)和这笔部署交易中的nonce(发送者的累积交易次数)决定,将sendernonce经过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');

你可能感兴趣的:(ETH开发实践——合约地址是怎么得来的)