本文へスキップ
ecdsa.com

ERC-1271(コントラクトの署名検証)

スマートコントラクトのアカウントが署名を検証するための Ethereum の標準で、検証者は isValidSignature(bytes32 hash, bytes signature) を呼び出し、戻り値 0x1626ba7e を有効として扱います。
別表記ERC-1271EIP-1271isValidSignatureERC-6492

スマートアカウント(Safe、ERC-4337 のウォレット、EIP-7702 で委任したアカウント)は、自身のアドレスに対応する通常の ECDSA 署名を作れないため、判断はコントラクトに委ねられます。Safe は所有者の署名が必要数そろっているかを確認し、パスキーウォレットは P-256 の署名を検証し、セッション鍵のウォレットは自身のポリシーを確認します。マジックバリューは関数セレクター bytes4(keccak256("isValidSignature(bytes32,bytes)")) です。

検証者は、アドレスにコードがある場合は ERC-1271 を、まだない場合は ERC-6492 を試すべきです。ERC-6492 は、アカウントのデプロイに必要なファクトリの呼び出しで署名を包み、末尾に 32 バイトのマジックサフィックス 0x6492…6492 を付けます。viem の verifyMessage や OpenZeppelin の SignatureChecker などのライブラリは、3 つのケースすべてに対応しています。コントラクトの所有者やポリシーは変わりうるため、結果は時間とともに変わることがあります。

規格と参考文献

すべての用語