Definí una función en Solidity:
function store(uint256 _favoriteNumber) public {} Luego llame a la función con el argumento 7 en JavaScript:
contract.store(7); Pero, según el video de Patrick Collins JS , es mejor envolver el número 7 con citas como esta:
contract.sotre("7");Así que aquí hay dos cosas que me confundieron:
Javascript admite un conjunto de números más pequeño que Solidity. Específicamente, el valor seguro máximo en JS es 2^53 - 1 , mientras que el valor numérico máximo en Solidity es 2^256 .
Entonces, si, por ejemplo, transfiriera 1 token con 18 decimales, el valor decimal resultante que necesitaría pasar al contrato de Solidity es 1000000000000000000 , que está en algún lugar entre 2^59 y 2^60 , ya más alto que la caja fuerte máxima JS entero de 2^53 - 1 .
Por este motivo, ethers.js y otras bibliotecas de contratos inteligentes de JS aceptan valores numéricos como cadenas JS nativas o como una instancia de una biblioteca auxiliar llamada BigNumber , pero no como números enteros.
Nota: Algunas bibliotecas en algunas versiones pueden convertir el entero nativo en una cadena o BigNumber al principio. Pero, en general, siempre es más seguro pasar los valores no enteros.