无法使用web3.js发送ERC20令牌

时间:2018-04-20 19:53:37

标签: blockchain ethereum web3js erc20

在阅读了几篇帖子和指南之后,我一直在努力使用web3发送令牌交易。我正在使用human-standard-token-abi来获取ERC20 abi。我只是想将10个ZRX从我的一个地址转移到另一个地址。

这是失败的功能。

db.getCollection('Test').find(
{"Sections.Groups._id":"5ad6729179b9c00808ea9ce3"}, 
{"Sections": {"$elemMatch" : {"Groups._id":"5ad6729179b9c00808ea9ce3" } }} )

我目前无法构建原始事务。这是错误输出。

var Tx = require('ethereumjs-tx');
const abi = require('human-standard-token-abi')
import * as Web3 from 'web3';
const fromAddress = '0xB03...'.toLowerCase();
const secondaryAddress = '0xF75...'.toLowerCase();
const zrxAddress = '0xe41d...';

deposit(zrxAddress, secondaryAddress, '10');

function deposit(tokenAddress:string, depositAddress:string, amount:string) {
        var count = web3.eth.getTransactionCount(fromAddress);
        var contract = web3.eth.contract(abi).at(tokenAddress);
        console.log('Contract Address :' + contract.address);

        try {
            var rawTransaction = {
            "from": fromAddress,
            "nonce": web3.toHex(count),
            "gasPrice": "0x04e3b29200",
            "gasLimit": "0x7458",
            "to": contract.address,
            "value": "0x0",
            "data": contract.transfer(depositAddress, size),
            "chainId": "0x01"
        }

        console.log(rawTransaction);

        var privKey = new Buffer(key, 'hex');
        var tx = new Tx(rawTransaction);
        console.log(tx);
        //tx.sign(privKey);
        var serializedTx = tx.serialize();
    } catch (err) {
        console.log('\n\nfailed to build');
        console.log(err);
    }

    try {
    console.log('\n\nAttempting to send tx');
    web3.eth.sendTransaction(tx, function(err, hash) {
        if(!err)
            console.log(hash);
        else
            console.log(err);
    });
    } catch (err) {
        console.log('\nfailed to send');
        console.log(err);
    }
}

它似乎拒绝了我正在喂它的地址之一,但我不确定是哪一个。当我注销tokenAddress,contract.address和我的两个地址时,它们都被定义了。但是在web3源代码中,我添加了一个print语句来查看它所说的地址是无效的,并且它得到的地址是“未定义的”。

1 个答案:

答案 0 :(得分:1)

tx对象中的data部分不正确(可能还有其他问题,但该部分突出)。您需要传入方法调用的编码字符串。在设置transfer时,您实际上是在尝试调用data方法。

var rawTransaction = {
            "from": fromAddress,
            "nonce": web3.toHex(count),
            "gasPrice": "0x04e3b29200",
            "gasLimit": "0x7458",
            "to": contract.address,
            "value": "0x0",
            "data": contract.transfer.getData(depositAddress, amount),
            "chainId": "0x01"
}

(我还将size更改为amount。不确定size来自哪里。)