簡體   English   中英

使用web3 Ropsten Infura TestNet傳輸ERC20令牌

[英]Transferring ERC20 Tokens using web3 Ropsten Infura TestNet

我使用示例可靠性代碼教程創建了一個合同令牌。 它有一個名為transfer的函數,用於在帳戶之間發送令牌:

function transfer(address _to, uint256 _value)

我現在需要使用web3連接到此合同,然后將生成的一定數量的令牌發送到另一個帳戶。 我一直在努力解決如何做這個問題很長一段時間,並希望這個社區可以提供幫助。 這是我到目前為止,使用web3版本0.20.0:

const Web3 = require("web3");
const web3 = new Web3();
web3.setProvider(new 
web3.providers.HttpProvider("https://ropsten.infura.io/XXXXXX"));
var abi = [ {} ] // redacted on purpose
var count = web3.eth.getTransactionCount("0x9...");
var abiArray = abi;
var contractAddress = "0x2...";
var contract =  web3.eth.contract(abiArray).at(contractAddress);

var data = contract.transfer.getData("0x2...", 10000, {from: "0x9..."});
var gasPrice = web3.eth.gasPrice;
var gasLimit = 90000;

var rawTransaction = {
  "from": "0x9...",
  "nonce": web3.toHex(count),
  "gasPrice": web3.toHex(gasPrice),
  "gasLimit": web3.toHex(gasLimit),
  "to": "0x2...",
  "value": "0x1",
  "data": data,
  "chainId": 0x03
};

var privKey = new Buffer('XXXXXXXXXXXXXX', '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);
});

此事務有效,但它發送的是ether而不是實際的ERC20令牌。 我真的不知道為什么會這樣,並且會感激任何幫助。

這可能會遲到,但對於未來的用戶。 你發送ethers代替令牌的原因是你在輸入“0x1”的原始事務字段中的值。 要發送ERC20令牌,您應將其保留為“0x0”。

如果您在發送的以太網中遇到問題,請確保將value屬性放在原始事務對象中作為"0x0"並在to屬性中放置智能合約地址 ,如下所示:

var rawTransaction = {
  "from": "0x9...",
  "nonce": web3.toHex(count),
  "gasPrice": web3.toHex(gasPrice),
  "gasLimit": web3.toHex(gasLimit),
  "to": "<contract Address>",
  "value": "0x0",
  "data": data,
  "chainId": 0x03
};

如果您仍然遇到問題,請閱讀以下內容,了解我發送erc20令牌的運行版本:

在創建合同實例時,在選項中添加from屬性,如下所示:

var contract = new web3.eth.Contract(erc20ABI, contractAddress, {
  from: '<Address from where you are spending>'
});

其次,在創建原始事務的data部分時,請執行以下操作:

var data = contract.methods.transfer('<Toaddress>', amount)).encodeABI();

現在,您可以按照與將業務廣播到網絡相同的步驟進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM