Ich habe ein Problem, ich kann kein genaues benutzerdefiniertes ERC 20-Token an eine Ether-Adresse senden.
Hier ist mein benutzerdefiniertes Token-Detail.
Guthaben : 0,0000000000000000324 BucksTec
Dezimalstellen: 18
Ich habe 44 Token an eine Ether-Adresse gesendet, aber es zeigt 0.000000000000000068 Tokens Transfered an .
Meine Frage ist, wie kann ich genaue Token senden, bitte brauchen Sie Ihren besten Rat und Ihre Erfahrung.
Etwas Code:
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' });
}
}
Danke
0x44
ist 68 in Dezimalstellen. Außerdem hat Ihr Token 18 Dezimalstellen. Das bedeutet, dass Sie zum Senden einer Einheit eines Tokens senden müssen 1 * 10^18
. Denken Sie daran, dass es bei Ethereum keine Dezimalstellen gibt und alles in den niedrigstmöglichen Einheiten behandelt wird.
1000000000000000000
Versuchen Sie, Einheiten zu senden (nein 0x
davor, das wird sie in Basis 16 konvertieren, Sie möchten die Zahl direkt in Basis 16 konvertieren, nicht nur voranstellen 0x
), um zu senden 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"
(10 * pow (10, 18)); // 1.0E+19Raghav Sood
Muhammad Shahzad
1.0E+19
in Integer umwandelt? Ich verwende PHPecho (10 * pow(10, 18)); // 1.0E+19
Raghav Sood
Muhammad Shahzad
516.000000000000000344
dies bei ropsten angezeigt wird, aber wenn ich diese Token auf meiner Webseite zeige516000000000000000344
, wird hier keine Dezimalzahl angezeigt.Raghav Sood
10^decimals
Muhammad Shahzad