1. Las siguientes son algunas funciones matemáticas de uso común. Usarlas es más seguro y confiable.

addmod(uint x, uint y, uint k) devuelve (uint): Calcula x + y módulo k.

mulmod(uint x, uint y, uint k) devuelve (uint): Calcula x * y módulo k.

2. API relacionada con la función hash

La función hash también se denomina función hash: la entrada de cualquier longitud se transforma en una salida de longitud fija mediante un algoritmo hash (MD4, MD5, ripemd-160, familia de funciones hash criptográficas SHA "Secure Hash Algorithm").

Familia SHA:

SHA1: valor de bits de 160 bits, actualmente se ha demostrado que no es particularmente seguro. Es posible que diferentes valores de entrada obtengan el mismo valor hash.

SHA2: SHA-224, SHA-256, SHA-384 y SHA-512. Los diferentes números detrás representan la longitud del valor hash calculado.

SHA3: algoritmo de Keccak

¿Qué funciones hash proporciona la solidez?

keccak256(...) devuelve (bytes32): basado en el algoritmo hash Keccak-256, calcula el valor hash de la entrada de longitud variable.

sha256(...) devuelve (bytes32): según el algoritmo hash SHA-256, calcula el valor hash de la entrada de longitud variable.

ripemd160(...) devuelve (bytes20): según el algoritmo hash RIPEMD-160, calcula el valor hash de la entrada de longitud variable.

sha3(...) devuelve (bytes32): en realidad, este es un alias para la función keccak256. El uso de esta función ya no se recomienda en Solidity0.4.16 y versiones posteriores.

El valor hash del selector de funciones en solidez se calcula utilizando el algoritmo hash keccak256. El valor hash de los primeros 4 bytes se toma como la identificación del selector de funciones.

3. función ecrecover

Podemos recuperar la dirección asociada a la clave pública mediante la firma de curva elíptica, ecrecover(bytes32 hash,uint8 v,bytes32 r,bytes32 s)returns(address)

Los cuatro parámetros son:

Hash: el valor hash de los datos firmados, r, s y v respectivamente, provienen de la cadena de resultado de la firma.

r = firma[0:64]

s = firma[64:128]

v = firma[128:130]+27