首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >USDC EIP-3009虚线码和多边形码不匹配

USDC EIP-3009虚线码和多边形码不匹配
EN

Ethereum用户
提问于 2022-12-28 09:51:08
回答 2查看 107关注 0票数 2

我们正在实施无气交易,我们需要使用授权呼叫的eip3009传输。我们对USDC感兴趣。

我看到了一些不匹配的USDC代码在以太和多边形。要准确地使用域分隔符。所以,对以太而言,我看到的是:

代码语言:javascript
运行
复制
 function makeDomainSeparator(string memory name, string memory version)
        internal
        view
        returns (bytes32)
    {
        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        return
            keccak256(
                abi.encode(
                    // keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)")
                    0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f,
                    keccak256(bytes(name)),
                    keccak256(bytes(version)),
                    chainId,
                    address(this)
                )
            );
    }

对于多边形:

代码语言:javascript
运行
复制
    function makeDomainSeparator(string memory name, string memory version)
        internal
        view
        returns (bytes32)
    {
        uint256 chainId;
        assembly {
            chainId := chainid()
        }

        return
            keccak256(
                abi.encode(
                    // keccak256("EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)")
                    0x36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab7,
                    keccak256(bytes(name)),
                    keccak256(bytes(version)),
                    address(this),
                    bytes32(chainId)
                )
            );
    }

我使用这段代码来签署这个事务:

代码语言:javascript
运行
复制
const data = {
  types: {
      TransferWithAuthorization: [
          { name: "from", type: "address" },
          { name: "to", type: "address" },
          { name: "value", type: "uint256" },
          { name: "validAfter", type: "uint256" },
          { name: "validBefore", type: "uint256" },
          { name: "nonce", type: "bytes32" },
      ],
  }
  domain: {
    name: 'MockEIP3009Token',
    version: '0.0.1',
    chainId: 31337,
    verifyingContract: '0x1429859428C0aBc9C2C47C8Ee9FBaf82cFA0F20f'
  },
  primaryType: 'TransferWithAuthorization',
  message: {
    from: '0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc',
    to: '0xfd471836031dc5108809d173a067e8486b9047a3',
    value: 434266,
    validAfter: 0,
    validBefore: 1672224083,
    nonce: '0x16140b6e6c12c7538910d7d08e52620f146518af84281a68576bb679b2c1100a'
  }
}
signer._signTypedData(data.domain, data.types, data.message);

对于ethereum代码,一切工作正常,但是对于多边形代码,我会收到无效的签名错误。

有人能解释一下为什么需要这样的差别吗?

合同:

谢谢!

EN

回答 2

Ethereum用户

发布于 2023-02-22 19:06:50

在事物的以太方面,包括TRANSFER_AUTHORIZATION_TYPEHASH在哪里,比如创建签名。

这里有一个结构,它包含有关用户交互的相关数据,但是在域-散列结构之前,它还包括带有授权类型哈希的传输,对吗?我从来没有把它看作是插入到ethers.js端的结构中的值。

这里有一个示例,the 3009.sol实现:https://github.com/ethereum/EIPs/issues/3010#:~:text=Implementation-,EIP3009,-.sol

但是在“与web3提供者一起使用”示例中,我没有看到包含了TRANSFER_AUTHORIZATION_TYPEHASH bytes32?https://github.com/ethereum/EIPs/issues/3010#:~:text=eth_signTypedData%7B_V4%7D%20方法-,例如,-%3A

票数 1
EN

Ethereum用户

发布于 2023-06-01 05:12:42

多边形美元硬币(PoS)、USDC或任何桥接多边形令牌不兼容EIP-3009。

它们具有transferWithAuthorization函数,但是您需要使用不同的EIP-712消息进行签名。更多细节请看这里

EIP-3009:

代码语言:javascript
运行
复制
EIP712Domain: [
  { name: 'name', type: 'string' },
  { name: 'version', type: 'string' },
  { name: 'chainId', type: 'uint256' },
  { name: 'verifyingContract', type: 'address' }
]

多边形:

代码语言:javascript
运行
复制
EIP712Domain: [
  { name: 'name', type: 'string' },
  { name: 'version', type: 'string' },
  { name: 'verifyingContract', type: 'address' },
  { name: 'salt', type: 'bytes32' }
]
票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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