首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >验证Permit2签名数据的问题

验证Permit2签名数据的问题
EN

Ethereum用户
提问于 2023-05-10 19:17:25
回答 1查看 44关注 0票数 2

我正在尝试使用Uniswap的Permit2 (AllowanceTransfer)开发一个端到端的系统。

为了达到这个目的,在Permit2津贴之后,我必须签署一条消息并验证它的诚信合同方。有符号消息将由3个元素组成:域、类型和值。

代码语言:javascript
运行
复制
const domain = {name: "Permit2", chainId: 5, verifyingContract: 0xPERMIT2ONGOERLI};

const types = {
      PermitSingle: [{ name: "details", type: "PermitDetails" }, { name: "spender", type: "address" }, { name: "sigDeadline", type: "uint256" }],
      PermitDetails: [{ name: "token", type: "address" },{ name: "amount", type: "uint160" },{ name: "expiration", type: "uint48" },{ name: "nonce", type: "uint48" }],
    };

const values = {
   details: {
        token: 0xDAI,
        amount: 1000 * 10^18,
        expiration: 168384570,
        nonce: 0,
      },
      spender: 0xMYCONTRACT,
      sigDeadline: 168384570,
};

我继续将这些数据发送到签名者的signTypedData实用程序(不管是来自以太、wagmi等的工具)。并将它很好地打包为我想要的事务的一个参数,在0xMYCONTRACT中实现。

问题

合同的签名验证流程中,ecrecover将返回一个完全无关的地址,显然不是消息的实际签名者(这里,应该是msg.sender)。

有没有人处理过类似的情况?如果是的话,对于这种签名不匹配,有什么可能的解决办法呢?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2023-05-15 10:43:30

这个问题已经得到解决,并被证明只是一个由不明确的契约API引起的集成错误。

用于重新构建哈希的值(例如,amount、nonce、令牌地址)必须与签名中包含的值匹配1:1。作为一项建议,应当将上下文特定值(例如转让金额)与许可特定值(签名中允许的最大金额)分开。

最简单的方法是:避免在您自己的契约中抽象PermitSingle参数逻辑。要求从客户端获得一个完整的许可结构,该结构与其他上下文事务细节是分开的。

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

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

复制
相关文章

相似问题

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