在以太坊中如何把智能合约部署到预定的地址

EIP1820 协议中,为了把ERC1820Registry合约部署在任何以太坊网络(比如:主网和测试网络Ropsten)上时都能使用同一个合约地址,设计了一种巧妙的方法:就是利用ecrocover函数生成一个“一次性使用地址( single use address )”来发起生成ERC1820Registry合约的事务。也就是所谓的Nick’s Method(详见 Nick’s article 一文)。相关部分内容我摘录如下:
在这里插入图片描述

ecrecover函数

在Solidity中的函数 ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address) 的作用是从椭圆曲线签名和消息哈希中反算出相应的公钥进而算出地址作为函数的返回值,其中参数:
① hash: 消息的哈希
② r: ECDSA签名值的前32个字节
③ s: ECDSA签名值的紧接着的32个字节
④ v: ECDSA签名值的最后一个字节

在其他语言(比如NodeJS)中的用法也是类似的。

pragma solidity >0.5.0;

contract EcrecoverTest {
   
    
    function verify(bytes32 hash) public pure returns(address retAddr) {
   
        uint8 v = 27;
        bytes32 r = hex"1820182018201820182018201820182018201820182018201820182018201820";
        bytes32 s = hex"1820182018201820182018201820182018201820182018201820182018201820";
        
        retAddr= ecrecover(hash, v, r, s);
    }
}

以上是Solidity语言实现的一个例子,使用的数值也是EIP 1820 中的数值,便于大家对比验证,在Remix中使用

a50e507019122a7e00e77c401a9c7800debd1e6de5044b5d23cb7cf10f8f9099

作为参数调用verify函数 得到的返回值是

a990077c3205cbDf861e17Fa532eeB069cE9fF96

下图中红色圈圈中的,和上文中的“一次性使用地址( single use address )”完全相同。
在这里插入图片描述

EIP1820部署方法验证

按照EIP1820部署方法的5个步骤,我们使用NodeJS和Ganache通过代码逐一进行学习和验证。

var Web3 = require('web3');

//使用Ganache作为测试客户端
var web3 = new We
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值