У меня есть одна проблема: я не могу отправить точный пользовательский токен ERC 20 на эфирный адрес.
Вот мой пользовательский токен.
Баланс : 0.0000000000000000324
Десятичные: 18
Я отправил 44 токена на эфирный адрес, но он показывает 0.000000000000000068 Tokens Transfered .
Мой вопрос в том, как я могу отправить токены точно, пожалуйста, нужен ваш лучший совет и опыт.
Некоторый код:
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' });
}
}
Спасибо
0x44
составляет 68 в десятичных дробях. Более того, ваш токен имеет 18 знаков после запятой. Это означает, что для отправки одной единицы токена необходимо отправить 1 * 10^18
. Помните, что в Эфириуме нет десятичных знаков, и все обрабатывается в наименьших возможных единицах.
Попробуйте отправить 1000000000000000000
единицы (нет 0x
перед этим, это преобразует его в базу 16, вы хотите преобразовать число в базу 16 напрямую, а не просто добавить 0x
) для отправки 1 token
.
Мухаммад Шахзад
(44 * 100000000000000000) = 4400000000000000000;
?Рагхав Суд
n * 10^decimals
Мухаммад Шахзад
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+19Рагхав Суд
Мухаммад Шахзад
1.0E+19
в целое число, я использую phpecho (10 * pow(10, 18)); // 1.0E+19
Рагхав Суд
Мухаммад Шахзад
516.000000000000000344
это отображается на ropsten, но когда я показываю эти токены на своей веб-странице, они отображаются516000000000000000344
, здесь нет десятичного числа.Рагхав Суд
10^decimals
Мухаммад Шахзад