rust ethers-rs 签名与solidity验证签名例子

这篇博客展示了如何在Rust中使用ethers库生成EIP712签名,并在Solidity智能合约中验证签名。文章通过一个Solidity合约和Rust测试函数详细阐述了签名生成、验证过程以及EIP712相关函数的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一段代码是一个 Solidity 智能合约,用于验证基于 EIP712 格式的签名。它包括了定义常量、结构体、函数和验证逻辑的实现。第二段代码是一个 Rust 测试函数,用于测试基于 EIP712 格式的签名的生成和验证过程。它使用了 `ethers` 和 `ethers-signers` 库来创建钱包、定义签名数据结构、生成签名并进行验证,最后打印相关信息以验证签名的正确性。




// SPDX-License-Identifier: GPL-3.0-only
pragma solidity >=0.6.0;
pragma experimental ABIEncoderV2;
import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";

contract DeriveEip712Test {
    uint256 constant chainId = 1;
    bytes32 constant salt = keccak256("eip712-vault-23x8Dek33kgD");
    bytes32 constant EIP712_DOMAIN_TYPEHASH =
        keccak256(
            "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)"
        );

    bytes32 constant FOOBAR_DOMAIN_TYPEHASH =
        keccak256(
            "SignedStruct(uint256 id,string extra,uint256 amount,uint256 timestamp,address contract,address token)"
        );

    address signer ;

    mapping(bytes => bool) private usedSignature;

    constructor(address _signer)  {
        signer = _signer;
    }

    struct SignedStruct {
        uint256 id;
        string extra;
        uint256 amount;
        uint256 timestamp;
        address token;
    }

    

    function domainSeparator() public view returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    EIP712_DOMAIN_TY
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

devopen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值