如何正确使用ECDSA.sol模块? [英] how to use the ECDSA.sol module correctly?

查看:0
本文介绍了如何正确使用ECDSA.sol模块?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有使用ECDSA库的合同。

import "./ECDSA.sol";
struct Signature {
        uint8 v;
        bytes32 r;
        bytes32 s;
    }
function make(Signature memory sign) public returns(bool)

我尝试理解在这种情况下必须使用的参数。我能看到的是一个元组类型值,但我不知道v、r、s是什么样子的。我从哪里可以从我的地址获取这些值?

推荐答案

vrs参数是使用私钥对消息进行签名的结果。签名有65个字节,分为3个部分:

65字节数组(实心类型bytes)排列方式如下:[[v(1)],[r(32)],[s(32)]]。

来源:OpenZeppelin


注销链(因为您使用的是私钥)。

注意评论中的地址,我们稍后会在线验证它。

const signature = await web3.eth.accounts.sign(
    'Hello world',
    // below is private key to the address `0x0647EcF0D64F65AdA7991A44cF5E7361fd131643`
    '02ed07b6d5f2e29907962d2bfde8f46f03c46e79d5f2ded0b1e0c27fa82f1384'
);

console.log(signature);

输出

{
    message: 'Hello world',
    messageHash: '0x8144a6fa26be252b86456491fbcd43c1de7e022241845ffea1c3df066f7cfede',
    v: '0x1c',
    r: '0x285e6fbb504b57dca3ceacc851a7bfa37743c79b5c53fb184f4cc0b10ebff6ad',
    s: '0x245f558fa13540029f0ee2dc0bd73264cf04f28ba9c2520ad63ddb1f2e7e9b24',
    signature: '0x285e6fbb504b57dca3ceacc851a7bfa37743c79b5c53fb184f4cc0b10ebff6ad245f558fa13540029f0ee2dc0bd73264cf04f28ba9c2520ad63ddb1f2e7e9b241c'
}

注意,vsignature的最后一个字节,r是前半个字节,s是后半个字节(不包括最后一个字节)。


验证在线

pragma solidity ^0.8;

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/ECDSA.sol";

contract MyContract {
    function foo() external pure returns (bool) {
        address recovered = ECDSA.recover(
            0x8144a6fa26be252b86456491fbcd43c1de7e022241845ffea1c3df066f7cfede, // messageHash
            0x1c, // v
            0x285e6fbb504b57dca3ceacc851a7bfa37743c79b5c53fb184f4cc0b10ebff6ad, // r
            0x245f558fa13540029f0ee2dc0bd73264cf04f28ba9c2520ad63ddb1f2e7e9b24 // s
        );
        
        return recovered == address(0x0647EcF0D64F65AdA7991A44cF5E7361fd131643);
    }
}

这篇关于如何正确使用ECDSA.sol模块?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆