一、下面是一些常用的数学函数,使用他们更加安全可靠
addmod(uint x, uint y, uint k) returns (uint): 计算 x + y 然后对 k 取模。
mulmod(uint x, uint y, uint k) returns (uint): 计算 x * y 然后对 k 取模。
二、hash函数相关API
hash函数又称散列函数:任意长度输入,通过散列算法(MD4、MD5、ripemd-160、SHA「Secure Hash Algorithm」密码散列函数家族),变换成固定长度的输出。
SHA家族:
SHA1:160位bit值,目前被证明不是特别安全,有可能不同输入的值会得到同一个hash值
SHA2:SHA-224、SHA-256、SHA-384和SHA-512,后面不同的数字代表计算出的hash值长度
SHA3:Keccak算法
solidity提供了哪些hash函数呢?
keccak256(...) returns (bytes32): 基于Keccak-256哈希算法,计算不定长输入的哈希值。
sha256(...) returns (bytes32): 基于SHA-256哈希算法,计算不定长输入的哈希值。
ripemd160(...) returns (bytes20): 基于RIPEMD-160哈希算法,计算不定长输入的哈希值。
sha3(...) returns (bytes32): 这实际上是对keccak256函数的别名,Solidity0.4.16及以后的版本不再建议使用该函数。
在solidity中的函数选择器hash值就是用keccak256哈希算法计算出来的,取前4个字节的hash值作为函数选择器的标识
三、ecrecover函数
我们可以通过椭圆曲线签名来恢复与公钥关联的地址,ecrecover(bytes32 hash,uint8 v,bytes32 r,bytes32 s)returns(address)
四个参数分别是:
hash:被签名数据的hash值,r、s、v分别来自签名结果串。
r = signature[0:64]
s = signature[64:128]
v = signature[128:130]+27