Enviar tokens desde la dirección de ethereum mediante programación

Quiero crear un servicio para enviar tokens desde diferentes billeteras. Ya creé las transacciones de ethereum, pero aún no recibo tokens.

Parece que necesito el ABI, pero me gustaría evitar usarlo. He visto que myetherwallet te permite enviar tokens sin preguntar nada más que el destino y la gasolina prácticamente.

Algunas preguntas:

¿Debo usar la clave privada de mi dirección de ethereum para firmar esta transacción? o es otra clave privada como la del contrato

Si myetherwallet me permite enviar tokens de una dirección a otra, ¿cómo es que no puedo hacer lo mismo programáticamente? ¿Qué me estoy perdiendo?

Gracias

Respuestas (1)

myetherwallet te permite enviar tokens sin preguntar nada

La mayoría de los tokens se implementan utilizando el estándar ERC20 y define claramente el formato de la función para transferir tokens. Por lo tanto, solo se requieren las otras partes de la transacción.

¿Debo usar la clave privada de mi dirección de ethereum para firmar esta transacción? o es otra clave privada como la del contrato

El contrato no tiene ninguna clave privada. Si su cuenta tiene tokens, entonces esos tokens pueden ser transferidos por esa cuenta si esa cuenta envía un txn firmado para transferir tokens.

¿Cómo es que no puedo hacer lo mismo programáticamente? ¿Qué me estoy perdiendo?

Puedes hacerlo programáticamente. La función de transferencia de token reside dentro del contrato. Puede llamar a esa función desde la cuenta del remitente. Y los tokens del remitente serían transferidos. Puede encontrar un código para lograr esto en ¿Cómo enviar el token ERC20 usando la API Web3?

var count = web3.eth.getTransactionCount("0x26...");
var abiArray = JSON.parse(fs.readFileSync('mycoin.json', 'utf-8'));
var contractAddress = "0x8...";
var contract = web3.eth.contract(abiArray).at(contractAddress);
var rawTransaction = {
    "from": "0x26...",
    "nonce": web3.toHex(count),
    "gasPrice": "0x04e3b29200",
    "gasLimit": "0x7458",
    "to": contractAddress,
    "value": "0x0",
    "data": contract.transfer.getData("0xCb...", 10, {from: "0x26..."}),
    "chainId": 0x03
};

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

Parece que necesito el ABI, pero me gustaría evitar usarlo.

Puede usar ABI de cualquier token ERC20, ya que todos los tokens ERC20 tienen esa función a la que desea llamar.

¿Puedes compartir el tutorial completo de esto para que pueda implementarlo desde el principio?