Web3js

如何使用 Web3 API 發送 ERC20 令牌?

  • January 13, 2022

我使用本指南在 Ropsten 測試網中創建了一些自定義令牌: https ://steemit.com/ethereum/@maxnachamkin/how-to-create-your-own-ethereum-token-in-an-hour-erc20-verified

我可以使用 MetaMask 將其發送到其他帳戶,但無法弄清楚如何使用 web3、ethereumjs-tx 和 Web3 JavaScript 應用程序 API 在 node.js 中執行此操作。

我目前的程式碼如下所示:

var count = web3.eth.getTransactionCount("0x26...");
var abiArray = JSON.parse(fs.readFileSync('mycoin.json', 'utf-8'));
var contractAddress = "0x8...";
var contract = web3.eth.contract(abiArray).at(contractAddress);
var rawTransaction = {
   "from": "0x26...",
   "nonce": web3.toHex(count),
   "gasPrice": "0x04e3b29200",
   "gasLimit": "0x7458",
   "to": contractAddress,
   "value": "0x0",
   "data": contract.transfer("0xCb...", 10, {from: "0x26..."}),
   "chainId": 0x03
};

var privKey = new Buffer('fc3...', 'hex');
var tx = new Tx(rawTransaction);

tx.sign(privKey);
var serializedTx = tx.serialize();

web3.eth.sendRawTransaction('0x' + serializedTx.toString('hex'), function(err, hash) {
   if (!err)
       console.log(hash);
   else
       console.log(err);
});

在這種情況下,程式碼只是在部分停止,contract.transfer("0xCb...", 10, {from: "0x26..."})請求只是掛起。找不到任何做類似事情的指南。在這裡找到了一些程式碼:

Web3 使用傳輸功能發送自定義令牌。需要設置發件人賬戶

和這裡:

如何使用 web3js 傳輸 ERC20 代幣

但仍然卡住了,不知道我錯過了什麼。

我在 node.js express 應用程序中使用 web3.js 版本:0.20.1。我在 Virtualbox Ubuntu 機器上執行 Parity。

正確的程式碼如下所示:

var count = web3.eth.getTransactionCount("0x26...");
var abiArray = JSON.parse(fs.readFileSync('mycoin.json', 'utf-8'));
var contractAddress = "0x8...";
var contract = web3.eth.contract(abiArray).at(contractAddress);
var rawTransaction = {
   "from": "0x26...",
   "nonce": web3.toHex(count),
   "gasPrice": "0x04e3b29200",
   "gasLimit": "0x7458",
   "to": contractAddress,
   "value": "0x0",
   "data": contract.transfer.getData("0xCb...", 10, {from: "0x26..."}),
   "chainId": 0x03
};

var privKey = new Buffer('fc3...', 'hex');
var tx = new Tx(rawTransaction);

tx.sign(privKey);
var serializedTx = tx.serialize();

web3.eth.sendRawTransaction('0x' + serializedTx.toString('hex'), function(err, hash) {
   if (!err)
       console.log(hash);
   else
       console.log(err);
});

引用自:https://ethereum.stackexchange.com/questions/24828