EIP712 web3.py签名问题注意事项

1、types 里定义了 各种 name 的 type,domain、message中参数type需要与之对应
2、name中出现字符串和其他符号或者空格之类的,使用web3.py会报错
https://codesandbox.io/s/eip712-forked-cduw2p?file=/src/index.js

问题出在 web3.py 库中validation.py文件对于name的检查上。前端是支持这种方式签名的。

解决办法:
1、直接屏蔽检查
在这里插入图片描述
2、修改正则
在这里插入图片描述

IDENTIFIER_REGEX = r"^[a-zA-Z0-9\s\S]*$"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 Rust 中,可以使用 `ethers-rs` crate 来实现 EIP712 签名。以下是一个示例代码: 首先,你需要在 `Cargo.toml` 文件中添加 `ethers-rs` crate 的依赖: ``` [dependencies] ethers = "0.3.0-alpha.5" ``` 接下来,你可以使用以下代码实现 EIP712 签名: ```rust use ethers::types::{Address, Name, TypedData}; use ethers::utils::{keccak256, hash_message, bytes_to_hex_str}; use ethers::signers::{LocalWallet, Signer}; fn main() { // 创建钱包 let wallet = LocalWallet::new(&mut rand::thread_rng()); // EIP712 消息 let message = TypedData { types: Default::default(), domain: Default::default(), message: vec![ ( "name".to_string(), "Hello".to_string(), ), ( "value".to_string(), 42u64.into(), ), ], }; // 计算消息哈希 let message_hash = keccak256(&message.to_bytes()).to_fixed_bytes(); // 签名 let signature = wallet.sign_message(&message_hash).unwrap(); // 打印签名结果 println!("Signature: {}", bytes_to_hex_str(&signature)); // 验证签名 let signer_address = Address::from(wallet.address()); let recovered_address = hash_message(&message.to_bytes(), &signature).unwrap(); assert_eq!(signer_address, recovered_address); } ``` 在这个示例中,我们首先创建了一个本地钱包。然后,我们定义了一个 EIP712 消息,包含一个名为 `name` 的字符串和一个名为 `value` 的整数。我们计算了消息哈希,并使用钱包的 `sign_message` 方法对其进行签名。最后,我们打印签名结果,并验证签名。 请注意,这个示例中的 EIP712 消息是一个自定义的示例消息。如果你要使用真实的 EIP712 消息,请参考对应协议的文档,以获取正确的类型定义和域名设置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

十倍的快乐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值