本文へスキップ
ecdsa.com

EIP-712(型付き構造化データの署名)

型付きの構造化データをドメインセパレーターとともにハッシュして署名する Ethereum の標準で、ウォレットはフィールドをユーザーに表示でき、署名を別のコントラクトやチェーンでリプレイすることはできません。
別表記EIP-712eth_signTypedData_v4typed datadomain separator

ダイジェストは keccak256(0x19 ‖ 0x01 ‖ domainSeparator ‖ hashStruct(message)) です。hashStruct は、型ハッシュ(Mail(address from,address to,string contents) のような正規の型文字列の Keccak-256)とエンコードしたフィールドをまとめてハッシュします。文字列、バイト列、配列はハッシュしてから組み込み、入れ子の構造体は再帰的にハッシュします。ドメインセパレーターは、name、version、chainId、verifyingContract、および任意の salt を持つ hashStruct(EIP712Domain) です。一般的な 4 フィールドのドメインの型ハッシュは 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f です。

ウォレットは eth_signTypedData_v4 でこれを呼び出します。EIP-2612 の permit、Uniswap Permit2、Safe のトランザクションハッシュ、オーダーブック、ガスレスのリレイヤー、多くのガバナンスシステムがこの標準に基づいています。型付きデータの署名の安全性は、ユーザーが何を理解したかで決まります。無制限の承認額(allowance)を与えるオフチェーンの permit 署名は、代表的なフィッシングの手口です。

よくあるバグは、構造体と完全には一致しない型文字列、chainId や verifyingContract の欠落または誤り、そしてコントラクトが nonce を保存しないために同じ署名が 2 回受け付けられることです。EIP-712 インスペクターは、すべてのハッシュをローカルで再計算します。

規格と参考文献

すべての用語