首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ecrecover()和它是什么?

如何使用ecrecover()和它是什么?
EN

Ethereum用户
提问于 2018-05-23 11:58:45
回答 1查看 4K关注 0票数 5

这是一个简单的问题,但我找不到答案。在ERC20 20合同中有以下代码

代码语言:javascript
复制
//The nonce for avoid transfer replay attacks
mapping(address => uint256) nonces;

代码语言:javascript
复制
    uint256 nonce = nonces[_address_from];
    bytes32 h = keccak256(_address_from ,_address_to ,_token_amount, _amount_fee ,nonce);
    if(_address_from != ecrecover(h,_v,_r,_s)) revert();

_r _s _v是在合同执行时必须手动设置的函数参数。

如何从我的地址和金额计算_r _s _v,以避免事务被 拒绝?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2018-05-23 12:26:59

r,S和V是从交易的签字中获得的。如果您有签名(假设它在一个名为sig的变量中),您可以这样做:

代码语言:javascript
复制
r = sig.signature.slice(0, 32)
s = sig.signature.slice(32, 64)
v = sig.recovery + 27

因此,如果您想要检查一个消息是由一个帐户签署的,您需要将r、S和v值传递给您的合同。注意,当您向网络发送事务时,网络会自动进行验证。

可以使用web3获得签名,请参阅这里

另外,有关完整的讨论,请参阅此回答

希望能帮上忙。

票数 7
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/49261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档