ecrecover()
ecrecover
は、EthereumのSolidityプログラミング言語で使用される組み込み関数で、Elliptic Curve Digital Signature Algorithm (ECDSA) から公開鍵を復元します。主にメッセージが特定のアカウントから署名されたことを確認するために使用されます。
詳細については、関数は以下のパラメータを取ります:
-
hash
: 署名するメッセージのKeccak256ハッシュ -
v
,r
,s
: ECDSA署名のコンポーネント
ecrecover
関数は、署名したアカウントのアドレスを返します。このアドレスを比較することにより、署名が正当であること、つまりメッセージが特定のアカウントから発信されたことを確認できます。
次の例は、署名者がメッセージを署名したことを検証する方法を示しています:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract ECRecoverDemo {
function recover(bytes32 hash, bytes memory sig) public pure returns (address) {
bytes32 r;
bytes32 s;
uint8 v;
// Check the signature length
if (sig.length != 65) {
return (address(0));
}
// Divide the signature in r, s and v variables
assembly {
r := mload(add(sig, 32))
s := mload(add(sig, 64))
v := byte(0, mload(add(sig, 96)))
}
// Version of signature should be 27 or 28, but 0 and 1 are also possible versions
if (v < 27) {
v += 27;
}
// If the version is correct return the signer address
if (v != 27 && v != 28) {
return (address(0));
} else {
// solhint-disable-next-line arg-overflow
return ecrecover(hash, v, r, s);
}
}
}
このコードは、recover関数を定義し、それは署名されたメッセージのハッシュと署名そのものをパラメータとして受け取ります。関数は署名を分解し、それをecrecoverに渡して署名者のアドレスを取得します。これは特定のアカウントがメッセージを署名したことを確認するために使用されます。
See also: