1. 以下は一般的に使用される数学関数の一部であり、これらを使用する方が安全で信頼性が高くなります。

addmod(uint x, uint y, uint k) returns (uint): x + y modulo k を計算します。

mulmod(uint x, uint y, uint k) returns (uint): x * y modulo k を計算します。

2. ハッシュ関数関連のAPI

ハッシュ関数はハッシュ関数とも呼ばれます。任意の長さの入力は、ハッシュ アルゴリズム (MD4、MD5、ripemd-160、SHA「セキュア ハッシュ アルゴリズム」暗号化ハッシュ関数ファミリー) を通じて固定長の出力に変換されます。

SHA家族:

SHA1: 160 ビットのビット値、現時点では特に安全ではないことが証明されており、異なる入力値が同じハッシュ値を取得する可能性があります。

SHA2: SHA-224、SHA-256、SHA-384、および SHA-512。後ろの異なる数字は、計算されたハッシュ値の長さを表します。

SHA3​​: ケチャックアルゴリズム

Solidity はどのようなハッシュ関数を提供しますか?

keccak256(...) returns (bytes32): Keccak-256 ハッシュ アルゴリズムに基づいて、可変長入力のハッシュ値を計算します。

sha256(...) returns (bytes32): SHA-256 ハッシュ アルゴリズムに基づいて、可変長入力のハッシュ値を計算します。

ripemd160(...) returns (bytes20): RIPEMD-160 ハッシュ アルゴリズムに基づいて、可変長入力のハッシュ値を計算します。

sha3(...) returns (bytes32): これは、実際には keccak256 関数のエイリアスです。この関数の使用は、Solidity0.4.16 以降のバージョンでは推奨されません。

Solidity の関数セレクターのハッシュ値は、keccak256 ハッシュ アルゴリズムを使用して計算され、最初の 4 バイトのハッシュ値が関数セレクターの ID として取得されます。

3. ecrecover機能

公開鍵に関連付けられたアドレスは、楕円曲線署名 ecrecover(bytes32 hash,uint8 v,bytes32 r,bytes32 s)returns(address) によって復元できます。

4 つのパラメータは次のとおりです。

ハッシュ: 署名されたデータのハッシュ値、r、s、v はそれぞれ署名結果文字列から取得されます。

r = 署名[0:64]

s = 署名[64:128]

v = 署名[128:130]+27