El problema de falla de API de terceros

Quería resaltar un problema que todos sufrimos cuando usamos API de terceros. Digamos que desea realizar una transacción de ethereum. Normalmente, la API devolverá un txid cuando la solicitud sea exitosa. Pero en mi ejemplo, la solicitud tiene un error desconocido. No se devuelve ningún txid de la API.

Cuando una llamada a la API falla por cualquier motivo, la suposición estándar es que la transacción no se realizó correctamente. En mi experiencia con casi todas las API, esta suposición es completamente incorrecta. La transacción aún podría tener éxito aunque la API devuelva un error. He visto esto varias veces con bitcoind y API de intercambio.

Entonces, cuando recibimos un error al crear una transacción, queremos averiguar si la transacción fue exitosa o no. De lo contrario, podría terminar enviando la transacción varias veces. El problema aquí es que no tenemos un txid para realizar una búsqueda de transacción simple.

Idealmente, quiero dar mi propia identificación de referencia con cada transacción. De esta manera, no tengo que confiar en el txid que me proporciona la API. Lamentablemente, este no es un parámetro en la API json-rpc actual.

Resolví este problema en bitcoind usando el campo "comentario" para mi propia ID de referencia. Luego itero a través de la última cantidad X de la transacción e intento encontrar una coincidencia con el comentario de la transacción y el ID de referencia.

¿Alguna sugerencia sobre cómo resolver este problema con Ethereum?

Si lo entiendo correctamente, ¿podría poner su ID de referencia en el campo de datos de una transacción ethereum.stackexchange.com/q/2466/42 y buscar su ID cuando recorre las últimas X transacciones?
Como puede ver, soy un completo novato de ethereum. No sabía que el campo de datos podía contener un mensaje. La documentación me dice que está destinada al código de contrato. Gracias por el rápido aviso.
También tiene razón: cuando toel campo está vacío, coloca el código del contrato en el datacampo. Además, publiqué una respuesta en lugar de marcar su pregunta como duplicada, porque puede haber otras soluciones al problema general.

Respuestas (1)

Idealmente, quiero dar mi propia identificación de referencia con cada transacción.

Los datos se pueden adjuntar a cualquier transacción utilizando el datacampo.

Aquí hay un ejemplo en web3.js:

eth.sendTransaction({data:web3.toHex('123456'), from:eth.accounts[0], to:eth.accounts[1], value:web3.toWei(1‌​00,'finney')})

Los datos deben estar en hexadecimal. Se pasa una cadena toHexpara que la ID se trate como un BigNumber (ya que Javascript no tiene grandes números nativos).

Cuando esté leyendo los datos hexadecimales, vuelva a convertirlos en un ID de cadena usando new BigNumber(hexData).toString().

Cuantos más datos se adjunten a una transacción, más gasolina costará, así que tenlo en cuenta con las identificaciones que uses.