Не удается отправить токен ERC20 с помощью web3.js

Я изо всех сил пытался отправить транзакцию токена с помощью web3 еще после того, как прочитал несколько сообщений и руководств. Я использую Human-standard-token-abi, чтобы получить abi ERC20. Я просто пытаюсь перенести 10 ZRX с одного моего адреса на другой.

Вот функция, которая дает сбой.

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);
    }
}

В настоящее время я не могу просто создать необработанную транзакцию. Вот вывод ошибки.

Error: invalid address
    at inputAddressFormatter (/home/jall/ZeroExTrading/node_modules/web3/lib/web3/formatters.js:279:11)
    at inputTransactionFormatter (/home/jall/ZeroExTrading/node_modules/web3/lib/web3/formatters.js:101:20)
    at /home/jall/ZeroExTrading/node_modules/web3/lib/web3/method.js:90:28
    at Array.map (<anonymous>)
    at Method.formatInput (/home/jall/ZeroExTrading/node_modules/web3/lib/web3/method.js:88:32)
    at Method.toPayload (/home/jall/ZeroExTrading/node_modules/web3/lib/web3/method.js:116:23)
    at Eth.send [as sendTransaction] (/home/jall/ZeroExTrading/node_modules/web3/lib/web3/method.js:141:30)
    at SolidityFunction.sendTransaction (/home/jall/ZeroExTrading/node_modules/web3/lib/web3/function.js:170:26)
    at SolidityFunction.execute (/home/jall/ZeroExTrading/node_modules/web3/lib/web3/function.js:256:37)
    at deposit (/home/jall/ZeroExTrading/lib/Transfer.js:56:30)

Кажется, он отклоняет один из адресов, которые я ему скармливаю, но я не уверен, на каком именно. Когда я выхожу из системы tokenAddress, contract.address и два моих адреса, все они определены. Но в исходном коде web3 я добавил оператор печати, чтобы увидеть, какой адрес он говорил недействительным, а полученный адрес - «undefined».


person jawknee530    schedule 20.04.2018    source источник
comment
См. Этот ответ на Отправить Токен ERC20 с web3   -  person LF00    schedule 25.04.2018


Ответы (1)


Ваша data часть в объекте tx неверна (могут быть и другие проблемы, но эта часть выделяется). Вам необходимо передать закодированную строку для вызова вашего метода. Фактически вы пытаетесь вызвать метод 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.)

person Adam Kipnis    schedule 20.04.2018