開発者向けリファレンス
EIP-712
コントラクトとリレイヤーが検証する型付きデータの正確な内容です。型文字列とハッシュは、コントラクトがエクスポートする定数から取り、ビルド時にTypeScriptの定義と照合しています。
型
| 型 | ドメイン | 署名者 | オンチェーンで検証 |
|---|---|---|---|
OpenPosition | exchange | ウォレットまたはセッションキー | はい |
型の文字列 OpenPosition(address user,uint32 instrumentId,bool isLong,uint128 size,uint32 leverage,bool useDebt,uint256 nonce,uint64 deadline)タイプハッシュ 0xfce2fb41f9ff0457a0f012e62cfd6a7cff4e8439ae20008ab6979c740ba5a983 | |||
Close | exchange | ウォレットまたはセッションキー | はい |
型の文字列 Close(address user,uint256[] positionIds,uint256 nonce,uint64 deadline)タイプハッシュ 0x9cc23a52214afa42e1ae53cdb2e79dc2d0cd33c33faca383ed3b149300adcb13 | |||
WithdrawToCore | exchange | ウォレットのみ | はい |
型の文字列 WithdrawToCore(address user,uint256 amount,uint256 nonce,uint64 deadline)タイプハッシュ 0xac4ddb8d63e9d7a862c5d61ce47517623a448262414a7eef6797102104b31214 | |||
RegisterSessionKey | exchange | ウォレットのみ | はい |
型の文字列 RegisterSessionKey(address user,address key,uint64 expiry,address feeAddress,uint256 nonce,uint64 deadline)タイプハッシュ 0xd3d9a309f635415423ab81e7e3fb16d2117cc8e1edc90506adde9eaa3855edd2 | |||
RegisterSessionKeyV2 | exchange | ウォレットのみ | はい |
型の文字列 RegisterSessionKeyV2(address user,address key,uint64 expiry,address feeAddress,uint64 maxBuilderFee,address referrer,uint256 nonce,uint64 deadline)タイプハッシュ 0x768549c4ec62ba892ffe75fc24ce07bdbe7e6b6f0f359e49248461f08920a885 | |||
RevokeSessionKeys | exchange | ウォレットのみ | はい |
型の文字列 RevokeSessionKeys(address user,address[] keys,bool all,uint256 nonce,uint64 deadline)タイプハッシュ 0x01026316a272dd97577cb59b037b3a0753aaf9bb1e3e933c358f48655bc6f9a0 | |||
Stake | staking | ウォレットのみ | はい |
型の文字列 Stake(address user,uint256 amount,uint256 nonce,uint64 deadline)タイプハッシュ 0x0e9469f2731f138fe05733a3ab1961961d9def010d73419c3f5b55ae6d64e8b0 | |||
Unstake | staking | ウォレットのみ | はい |
型の文字列 Unstake(address user,uint256 amount,uint256 nonce,uint64 deadline)タイプハッシュ 0x1ecc9b0f79f4bb74abad4adb49babe57570219b3bc83a569a9b25299f833a9ce | |||
Claim | staking | ウォレットのみ | はい |
型の文字列 Claim(address user,uint256 nonce,uint64 deadline)タイプハッシュ 0x98df9450683706f5e3c8e5a81515893081ae7460248fbba60c7781957adc9f8f | |||
Distribute | staking | ウォレットのみ | はい |
型の文字列 Distribute(address user,uint256 nonce,uint64 deadline)タイプハッシュ 0x23f3bc470a64f8283203a55adc575bcd5f81b7c537b6831c6886e4a0e2101e5a | |||
CancelIntent | cancel | ウォレットまたはセッションキー | いいえ(リレイヤーのみ) |
型の文字列 CancelIntent(address user,bytes32 intentId,uint256 deadline)タイプハッシュ 0xa35cd971369839445ca1bec7da15d6528a097bd9c3d0ebaf7d5d4f368f537b71 | |||
EIP-712ドメイン: メインネット · チェーンID 999
近日公開:このネットワークにコントラクトがデプロイされしだい、ここに掲載します。
ドメイン
すべての署名は三つのドメインで行われます。
- Exchange:検証コントラクトはExchangeのプロキシです。取引、出金、セッションキーに使います。これらの署名は、SessionKeyManagerがExchangeのために検証します。
- Staking:検証コントラクトはStakingのプロキシです。ステーク、アンステーク、受け取り、分配に使います。
- Cancel:検証コントラクトはExchangeのプロキシで、独自の名前を持ちます。確認するのはリレイヤーだけで、コントラクトは確認しません。
三つとも、四つのフィールド(name、version、chainId、verifyingContract)を持つ完全なドメインを使います。どちらのコントラクトも、ERC-5267のeip712Domain()でドメインを公開しています。
ノンスと期限
ノンスに順序はありません。各アカウントはビットマップを持ち、ノンスnはワードn / 256のビットn mod 256を使います。未使用のノンスなら、どれでも、どの順番でも使えます。ウォレットからinvalidateUnorderedNonces(word, mask)を呼べば、何にも署名せずにオンチェーンでノンスを無効化できます。
クライアントは1時間後の期限で署名し、リレイヤーは最大61分後までの期限を受け付けます。
転送形式
転送時、整数のフィールドはすべて正規の十進文字列、アドレスとハッシュはすべて小文字の十六進数です。署名は、メッセージのフィールドと並べてv、r、sとして送ります。sが大きい署名は拒否されます。
インテントID
リレイヤーは、署名済みの各メッセージを次の値で識別します。
intentId = keccak256( keccak256(utf8(intentIdTag)) ‖ digest ‖ signer )
これはパディングなしで連結したもので、32バイトのタグハッシュ、32バイトのEIP-712ダイジェスト、20バイトの復元された署名者(セッションキーで署名したメッセージではセッションキー)からなります。各ネットワークのタグはコントラクトアドレスに記載しています。署名のバイト列はIDに含まれないため、展性を利用して改変した署名で新しいIDを作ることはできません。