跳到正文

    按 / 搜索,按 [ 和 ] 前往上一页和下一页。

    开发者参考

    EIP-712

    合约和中继验证的精确类型化数据。类型字符串和哈希取自合约导出的常量,并在构建时与 TypeScript 定义核对。

    类型

    类型域签名方链上验证
    OpenPositionexchange钱包或会话密钥是
    类型字符串 OpenPosition(address user,uint32 instrumentId,bool isLong,uint128 size,uint32 leverage,bool useDebt,uint256 nonce,uint64 deadline)
    类型哈希 0xfce2fb41f9ff0457a0f012e62cfd6a7cff4e8439ae20008ab6979c740ba5a983
    Closeexchange钱包或会话密钥是
    类型字符串 Close(address user,uint256[] positionIds,uint256 nonce,uint64 deadline)
    类型哈希 0x9cc23a52214afa42e1ae53cdb2e79dc2d0cd33c33faca383ed3b149300adcb13
    WithdrawToCoreexchange仅钱包是
    类型字符串 WithdrawToCore(address user,uint256 amount,uint256 nonce,uint64 deadline)
    类型哈希 0xac4ddb8d63e9d7a862c5d61ce47517623a448262414a7eef6797102104b31214
    RegisterSessionKeyexchange仅钱包是
    类型字符串 RegisterSessionKey(address user,address key,uint64 expiry,address feeAddress,uint256 nonce,uint64 deadline)
    类型哈希 0xd3d9a309f635415423ab81e7e3fb16d2117cc8e1edc90506adde9eaa3855edd2
    RegisterSessionKeyV2exchange仅钱包是
    类型字符串 RegisterSessionKeyV2(address user,address key,uint64 expiry,address feeAddress,uint64 maxBuilderFee,address referrer,uint256 nonce,uint64 deadline)
    类型哈希 0x768549c4ec62ba892ffe75fc24ce07bdbe7e6b6f0f359e49248461f08920a885
    RevokeSessionKeysexchange仅钱包是
    类型字符串 RevokeSessionKeys(address user,address[] keys,bool all,uint256 nonce,uint64 deadline)
    类型哈希 0x01026316a272dd97577cb59b037b3a0753aaf9bb1e3e933c358f48655bc6f9a0
    Stakestaking仅钱包是
    类型字符串 Stake(address user,uint256 amount,uint256 nonce,uint64 deadline)
    类型哈希 0x0e9469f2731f138fe05733a3ab1961961d9def010d73419c3f5b55ae6d64e8b0
    Unstakestaking仅钱包是
    类型字符串 Unstake(address user,uint256 amount,uint256 nonce,uint64 deadline)
    类型哈希 0x1ecc9b0f79f4bb74abad4adb49babe57570219b3bc83a569a9b25299f833a9ce
    Claimstaking仅钱包是
    类型字符串 Claim(address user,uint256 nonce,uint64 deadline)
    类型哈希 0x98df9450683706f5e3c8e5a81515893081ae7460248fbba60c7781957adc9f8f
    Distributestaking仅钱包是
    类型字符串 Distribute(address user,uint256 nonce,uint64 deadline)
    类型哈希 0x23f3bc470a64f8283203a55adc575bcd5f81b7c537b6831c6886e4a0e2101e5a
    CancelIntentcancel钱包或会话密钥否(仅中继)
    类型字符串 CancelIntent(address user,bytes32 intentId,uint256 deadline)
    类型哈希 0xa35cd971369839445ca1bec7da15d6528a097bd9c3d0ebaf7d5d4f368f537b71

    EIP-712 域: 主网 · 链 ID 999

    尚未部署。部署清单生成后,这里会显示合约地址。

    EIP-712 域: 测试网 · 链 ID 998

    尚未部署。部署清单生成后,这里会显示合约地址。

    EIP-712 域: 本地开发网 · 链 ID 31337

    域名称版本验证合约域分隔符
    exchangeBRAND Exchange10x7f15d9a4c024f5dfd02f05fdc29d878303557a7a0x32feb5fa802dc6038aa5b03343479b376a22e23d22111997dac15fa1c22d8234
    stakingBRAND Staking10x9884648892a3863f736c7b60717601402238f7e90x50b8602ac68d63e54de8bf922c15ad7033b27cabffb2f84e65928cb93215af9d
    cancelBRAND Intent Cancel10x7f15d9a4c024f5dfd02f05fdc29d878303557a7a0xa275f0050bf700eb0965aff68c4b08936432a7395dd933727c9eff930b8dbe1b

    签名域

    所有消息由三个域签名:

    • Exchange:验证合约为 Exchange 代理合约。用于交易、提现和会话密钥。SessionKeyManager 为 Exchange 验证这些签名。
    • Staking:验证合约为 Staking 代理合约。用于质押、解除质押、领取和分配。
    • Cancel:验证合约为 Exchange 代理合约,但名称不同。只有中继检查它,没有合约验证。

    三个域都使用完整的四字段格式(name、version、chainId、verifyingContract)。两个合约都通过 ERC-5267 的 eip712Domain() 公开自己的域。

    Nonce 与截止时间

    Nonce 无需按顺序使用:每个账户有一个位图,nonce n 使用第 n / 256 个字中的第 n mod 256 位。任何未使用的 nonce 都可以按任意顺序使用。也可以用钱包调用 invalidateUnorderedNonces(word, mask) 在链上作废 nonce,无需签名。

    客户端签署的截止时间为 1 小时 之后;中继接受最长 61 分钟 之后的截止时间。

    传输格式

    传输时,所有整数字段都是规范的十进制字符串,所有地址和哈希都是小写十六进制;签名以 v、r、s 与消息字段并列传输。高 s 值的签名会被拒绝。

    意图 ID

    中继以如下方式标识每条已签名消息:

    intentId = keccak256( keccak256(utf8(intentIdTag)) ‖ digest ‖ signer )
    

    三部分不加填充直接拼接:32 字节的标签哈希、32 字节的 EIP-712 摘要和 20 字节的恢复出的签名者(会话密钥签名的消息即为会话密钥)。各网络的标签见合约。签名字节不参与计算,因此篡改签名的可塑性无法产生新的 ID。

    最后更新: