本文へスキップ
ecdsa.com

personal_sign

EIP-191 のバージョン 0x45 のプレフィックスを付けてメッセージに署名し、65 バイトの r‖s‖v 署名を返す Ethereum の JSON-RPC のウォレットメソッドで、ログインや単純なメッセージ署名のデフォルトです。
別表記personal_signeth_sign

呼び出し形式:パラメーター [message, address] を指定して personal_sign を呼び出します。メッセージは 16 進エンコードしたバイト列です(ほとんどのウォレットは UTF-8 のテキストも受け付けます)。ライブラリもこれに倣っており、ethers の signer.signMessage、viem の signMessage、web3.py の encode_defunct があります。以前の eth_sign はプレフィックスなしで任意の 32 バイトのハッシュ値に署名していたため、dapp がユーザーをだましてトランザクションに署名させることができました。ほとんどのウォレットはこれを無効にしているか、警告を表示します。

検証では、プレフィックス付きの Keccak-256 ハッシュ値を再計算してアドレスを復元するか、スマートウォレットの場合は ERC-1271 の isValidSignature を呼び出します(まだデプロイされていないアカウントでは ERC-6492 で包みます)。Sign-In with Ethereum のメッセージもこの方法で署名されます。

規格と参考文献

すべての用語