Envío de token ETH en lugar de ERC20 Web3

Actualmente estoy escribiendo una función usando Web3 para enviar nuestros tokens, actualmente está enviando ETH en su lugar. Dado que estamos haciendo esto directamente en la red principal (nos gusta correr riesgos), las tarifas de transacción se acumulan.

Si alguien puede ayudarnos a ver cómo enviar nuestro token en lugar de ETH, sería muy apreciado.

    const web3 = new Web3();
web3.setProvider(new 
web3.providers.HttpProvider("https://mainnet.infura.io/XXXXXX"));
var count = web3.eth.getTransactionCount(from_addr);
var contract =  web3.eth.contract(abi).at(contract_addr);

var data = contract.transfer.getData(to_addr, 10, {from: from_addr});
var gasPrice = web3.eth.gasPrice;
var gasLimit = 90000;

var rawTransaction = {
  "from": from_addr,
  "nonce": web3.toHex(count),
  "gasPrice": web3.toHex(gasPrice),
  "gasLimit": web3.toHex(gasLimit),
  "to": to_addr,
  "value": 0,
  "data": data,
  "chainId": 0x01
};

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

Prácticamente copié y pegué esta pregunta: ¿Cómo enviar el token ERC20 usando la API Web3? . Parecían haber encontrado la forma de enviar tokens mientras que yo sigo enviando ETH.

Cualquier consejo sería muy apreciado.

Gracias

Respuestas (1)

Esta línea está mal:

"to": to_addr,

Debería ser:

"to": contract_addr,

Está llamando a una función en un contrato inteligente, por lo que el contrato inteligente es el destinatario de esa transacción. (Luego actualizará su libro mayor interno para dar cuenta de la transferencia del token).

¡Ah, por supuesto! ¡Gracias! ¡No pude ver el problema! Además, en getData(to, value, from). Si el token tiene 18 decimales, ¿10 sería 10 (y luego 18 0) o solo 10?
Sí, con 18 decimales, 10 "fichas" es un 10 seguido de 18 ceros.
@smarx Recibo un error cuando ejecuto este código para transferir tokens en la red principal, no estoy ejecutando testrpc porque se usa para probar la red. ¿Qué estoy haciendo mal? POR FAVOR, AYUDA a continuación es el error que recibo ====== > (nodo: 1044) UnhandledPromiseRejectionWarning: Error: Respuesta JSON RPC no válida: "" en Object.InvalidResponse .....
Los comentarios no son para hacer nuevas preguntas.