You are viewing a single comment's thread from:

RE: Solidity开发指南

in #starnote3 days ago

哈希函数(散列函数):任意⻓度的输⼊,通过散列算法,变换成固定⻓度的输出

addmod(uint x, uint y, uint k) returns (uint):
计算 (x + y) % k,加法会在任意精度下执行,并且加法的结果即使超过 2**256 也不会被截取。从 0.5.0 版本的编译器开始会加入对 k != 0 的校验(assert)。

mulmod(uint x, uint y, uint k) returns (uint):
计算 (x * y) % k,乘法会在任意精度下执行,并且乘法的结果即使超过 2**256 也不会被截取。从 0.5.0 版本的编译器开始会加入对 k != 0 的校验(assert)。

MD4 、 MD5、ripemd-160
SHA(Secure Hask Algorithm)密码散列函数家族

SHA家族:
SHA-1
SHA-2 : SHA-224、SHA-256、SHA-384,和SHA-512
SHA-3 : Keccak 算法

keccak256(…) returns (bytes32)  keccak256 computes the Keccak-256 hash of the input.
sha3(...) returns (bytes32)

Solidity provides two methods for encoding data:
    abi.encode:
        Encodes data into bytes with padding
        Preserves all data information
        Safer when dealing with dynamic types
        Produces a longer output due to padding
    abi.encodePacked:
        Performs packed encoding (compressed)
        Produces a shorter output than abi.encode
        More gas efficient
        Risk of hash collisions with dynamic types (collision function)
eg: 
bytes32 s = keccak256(abi.encodePacked(_text, _num, _addr));
//encodePacked一种压缩打包模式,encode则会补零。


sha256(...) returns (bytes32)
ripemd160(...) returns (bytes20) 

ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address)
通过椭圆曲线签名来恢复与公钥关联的地址
四个参数
hash: 被签名数据的哈希结果值,r,s,v分别来⾃签名结果串
r = signature[0:64]
s = signature[64:128]
v = signature[128:130] + 27 


% 取模, 整除后的余数
return 561 % 10;  //1
return 56189 % 100; //89
return 56 % 2; //0