Javascirpt 18 número decimal para el parámetro?

Creé un token criptográfico de 18 decimales en ethereum. Al ejecutar el método de contrato inteligente desde javascript para el parámetro de entrada uint256, ¿cómo puedo especificar el número con 18 ceros? Porque javascript no admite ese gran número.

aquí está mi función nodejs

    let initiateAddLoyaltyTransaction = function (fromWallet, toWallet, companyName, amount, callback) {
    let functionName = 'transferWithAddLoyalty';
    amount = amount*1000000000000000000 ;
    let params = [fromWallet, toWallet, amount, companyName];
    W3JSR.prepareSignSend(config.ethereum.rinkeby.ABI_DEFINITION, config.ethereum.rinkeby.CONTRACT_ADDRESS, functionName,
        config.ethereum.rinkeby.WALLET_ADDRESS, privateKey, params, 10000000000).then((result, error) => {
        callback(result, error);
    });
};

Respuestas (2)

Supongo que está utilizando Web3.js, que proporciona una biblioteca solo para este caso de uso:

Web3.js v0.2 - Número grande

Web3.js v1.0 - Número grande

Convertir un número al número equivalente con 18 ceros adicionales es tan fácil como llamar a una función :

web3.utils.toWei('1', 'ether');
> "1000000000000000000"

web3.js usando esta biblioteca de números grandes por defecto https://github.com/MikeMcl/bignumber.js/

entonces también puede usar esta lib en el proyecto node.js para admitir el gran número