本以太坊教程主要是介绍:搭建一个开发环境、编写编译一个智能合约。 以太坊是什么 以太坊(Ethereum)是一个开源的有智能合约功能的公共区块链平台。通过其专用加密货币以太币(Ether)提供去中心化
顺晟科技
2021-06-16 10:46:04
342
合约地址生成
以太坊合约的地址是根据创建者(发送者)的地址以及创建者发送过的交易数量(现时)来计算确定的发送者。和目前进行链路协议编码,然后用Keccak-256进行混杂计算。
参考肾盂代码(Python):
def mk_contract_address(发送方,随机数):
返回sha3(RLP。编码([normalize _ address(sender),nonce])[12:]
使用固态代码:
//nonce为0 时生成的地址
nonce0=地址(keccak256(0xd6,0x94,地址0x80))
nonce1=地址(keccak256(0xd6,0x94,地址0x01))
这里有一些讨论:
如果发报机为0x6ac 7ea 33 f 8831 ea 9 DCC 53393 AAA 88 b 25 a 785 DBF 0,创造的合约地址如下,这个过程完全是确定的:
随机数0='0x CD 234 a 471 b 72 ba 2 f1 CCF 0a 70 fc ABA 648 a5 eecd 8d '
随机数1='0x 343 c 43 a 37d 37 dff 08 AE 8 C4 a 11544 c 718 abb 4 fc F8 '
随机数2='0xf 778 b 86 fa 74 e 846 C4 f 0 a1 FBD 1335 Fe 81 c 00 a 0 c 91 '
随机数3='0x fffd 933 a 0 BC 612844 EAF 0 c 6 Fe 3 e 5b 8 e9 b 6 C1 d 19 c '
使用Web3j的爪哇代码:
私有字符串计算合同地址(字符串地址,长随机数){
byte[]地址asbytes=数字。HexStringTobytearray(地址);
byte[]calculateddressabytes=
Hash.sha3(RlpEncoder.encode(
新的RlpList(
RLP弦乐。创建(地址为字节),
RLP弦乐。create((nonce)));
calculatedAddressAsBytes=数组。范围副本(calculatedAddressAsBytes,
12,calculateddressabytes。长度);
string calculateddressaxx=numeric。to ex string(CalculatedDressAsBytes);
返回calculatedAddressAsHex
}
注:根据EIP 161规范合约帐户使用随机数=1初始(在主网络上)。因此,由一个合同创建的个合同地址将使用非零目前进行计算。
CREATE2
在EIP-1014中添加了一个新的操作码CREATE2(在19 年一月的君士坦丁堡硬分叉中引入的操作码),它是可以创建合约的另一种方式。
对于由CREATE2创建的合约,其地址将是:
keccak 256(0x ff SenderAddress salt keccak 256(init _ code))[12:]
CREATE2在二层扩容尤其是状态通道中很有用,这里有一个例子来理解简单的状态通道,即便状态通道合约还不存在,只要确定创建合约的salt,init_code,就可以用状态通道进行支付。
16
2021-06
16
2021-06
16
2021-06
16
2021-06
16
2021-06
16
2021-06