Senden Sie ein genaues benutzerdefiniertes ERC 20-Token

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

Antworten (1)

0x44ist 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.

1000000000000000000Versuchen Sie, Einheiten zu senden (nein 0xdavor, 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.

Danke, also wenn ich 44 Token senden möchte, muss ich dann so etwas multiplizieren (44 * 100000000000000000) = 4400000000000000000;?
Ja, du müsstest mit multiplizierenn * 10^decimals
Wenn ich 4 Münzen gesendet habe, funktioniert es, aber wenn ich versucht habe, 10 Münzen zu senden, wird mir dieses Fehlerecho angezeigt 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+19
Verwenden Sie eine Bignum-Bibliothek für JS
Weißt du, wie man 1.0E+19in Integer umwandelt? Ich verwende PHPecho (10 * pow(10, 18)); // 1.0E+19
Sie müssen alle Bignum-Bibliotheken verwenden, die PHP hat, Ethereum-Zahlen können oft die Datentypgrenzen der meisten Sprachen überschreiten
Hallo, ich möchte noch einen Punkt darüber klären, wie Token in Dezimalform angezeigt werden, wie 516.000000000000000344dies bei ropsten angezeigt wird, aber wenn ich diese Token auf meiner Webseite zeige 516000000000000000344, wird hier keine Dezimalzahl angezeigt.
Du machst es umgekehrt, dividiere durch10^decimals
Das habe ich bereits gemacht und es funktioniert jetzt. Ich weiß Ihre Antwort sehr zu schätzen, wie gut Sie sind (Y). Danke.