¿Cómo transfiero tokens ERC20 (GNT,OMG, etc.) de una billetera fría a otra cuenta (o intercambio) usando geth?

Quiero transferir tokens ERC20 (estándar) desde una cuenta básica de ethereum a un intercambio o a otra cuenta. ¿Cómo hago eso sin usar una GUI como Mist?

Respuestas (2)

Paso 0: Instale geth, inicie geth (con "--unlock 0xYOURACCOUNT"), sincronice la cadena de bloques, abra una terminal geth en otra ventana con "geth adjuntar".

Paso 1: Guarde el ERC20 ABI en una variable. Esta es la interfaz para interactuar con el contrato de token.

var omisegoAbi = [{"constant":true,"inputs":[],"name":"mintingFinished","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"finishMinting","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_releaseTime","type":"uint256"}],"name":"mintTimelocked","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[],"name":"MintFinished","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}];

Paso 2: Cree la variable de contrato utilizando el método de contrato web3:

var omisegoContract = web3.eth.contract(omisegoAbi).at('0xd26114cd6EE289AccF82350c8d8487fedB8A0C07'); // 0xd26114cd6EE289AccF82350c8d8487fedB8A0C07 is the omisego contract addr. Other tokens will have different addresses

Paso opcional , verifique el saldo de una cuenta (# de tokens OMG para esta cuenta):

web3.fromWei(omisegoContract.balanceOf("0xYOURACCOUNT"),"ether");

o verifique todas sus cuentas en el directorio .ethereum/keystore

eth.accounts.forEach(function(e,i){console.log("eth.accounts["+i+"]: " + "\tbalance:" + web3.fromWei(omisegoContract.balanceOf(eth.accounts[i]),"ether") + " OMG")})

Paso 3: envía una pequeña cantidad del token (aquí, 1) a la dirección de destino.

omisegoContract.transfer("0xDESTINATIONADDRESS",web3.toWei(1,"ether"),{from:"0xGASPAYINGADDRESS"});// here, 0xGASPAYINGADDRESS is the account from which to pay gas to make this tx. Probably the same as the source address.

Paso 4: Transferir el resto. Mismo comando que el anterior con un valor mayor

He estado buscando por toda la web para esto. Muchas gracias.
Eres mi heroe y te amo

Esto es increíble, pero por alguna razón está tratando de enviar todos los tokens. ¿Dónde se controla la cantidad? ,web3.toWei(1,"ether")¿Esta parte no es para el pago de éter?

Lo único que web3.toWei(1,"ether")hace es multiplicar 1 por 10^18. Esto se debe a que la cantidad en la transferfunción debe especificarse en unidades base (por ejemplo, el número de Wei si fuera éter). Entonces, si el ERC-20 que envías no tiene 18 decimales, debes cambiar este código o enviarás órdenes de magnitud más o menos tokens de lo que crees.