Tengo un problema, no puedo enviar un token ERC 20 personalizado preciso a una dirección ether.
Aquí está mi detalle de token personalizado.
Saldo : 0.0000000000000000324 BucksTec
Decimales: 18
Envié 44 tokens a una dirección ether pero muestra 0.000000000000000068 tokens transferidos .
Mi pregunta es cómo puedo enviar tokens con precisión, necesito su mejor consejo y experiencia.
Algo de código:
var web3 = new Web3(new Web3.providers.HttpProvider('https://ropsten.infura.io/xyz'));
module.exports.sendTokensTest = function(req, res){
var toAddress = req.body.toAddress;
var coins = req.body.quantity;
coins = "0x"+coins;
var fromAddress = req.body.fromAddress;
var privateKey = req.body.fromAddressPvtKey;
try{
var contractAddress = contractConfigTest.contractAddress;
var contractAbi = contractConfigTest.abiArray;
//res.send({contractAddress:contractAddress, contractAbi:contractAbi});
var myContract = new web3.eth.Contract(contractAbi, contractAddress);
myContract.options.from = fromAddress;
var transactionObject = {
from: fromAddress,
to: contractAddress,
value: '0x00',
data: myContract.methods.transfer(toAddress, coins).encodeABI(),
chainId: 3
};
web3.eth.estimateGas(transactionObject, function(err1, estimateGas){
transactionObject.gasLimit = estimateGas;
if(err1){
res.send({error:true, errorMsg:err1.message, errorFunction:'estimateGas' });
}
web3.eth.accounts.signTransaction(transactionObject, privateKey , function(err2, signed){
if(err2){
res.send({error:true, errorMsg:err2.message, errorFunction:'signTransaction'});
}
web3.eth.sendSignedTransaction(signed.rawTransaction, function(err3, txHash){
if(err3){
res.send({error:true, errorMsg:err3.message, errorFunction:'sendSignedTransaction'});
}
res.send({txHash:txHash});
});
});
});
}catch(err){
res.send({error:true, errorMsg:err.message, errorFunction:'sendTokens' });
}
}
Gracias
0x44
es 68 en decimales. Además, su token tiene 18 decimales. Esto significa que para enviar una unidad de un token, debe enviar 1 * 10^18
. Recuerde, no hay decimales en ethereum, y todo se maneja en las unidades más bajas posibles.
Intente enviar 1000000000000000000
unidades (no 0x
antes, eso lo convertirá a base 16, desea convertir el número a base 16 directamente, no solo antepuesto 0x
) para enviar 1 token
.
Muhammad Shahzad
(44 * 100000000000000000) = 4400000000000000000;
?Raghav Sood
n * 10^decimals
Muhammad Shahzad
Error: [number-to-bn] while converting number "1.0E 19" to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported. Given value: "1.0E 19"
echo (10 * pow (10, 18)); // 1.0E+19Raghav Sood
Muhammad Shahzad
1.0E+19
en entero, estoy usando php?echo (10 * pow(10, 18)); // 1.0E+19
Raghav Sood
Muhammad Shahzad
516.000000000000000344
este se muestra en ropsten, pero cuando muestro estos tokens en mi página web516000000000000000344
, no muestran decimales aquí.Raghav Sood
10^decimals
Muhammad Shahzad