Aceptamos pagos en bitcoin: sexta parte. Matices, otra vez matices.

Aceptamos pagos en bitcoin: sexta parte. Matices, otra vez matices.

En la última parte, señalamos que no sería mala idea informarse sobre el hecho del pago desde bitcoind, en lugar de revisar todas las direcciones emitidas.

Lea la serie completa de artículos para desarrolladores de una pasarela de pago para bitcoin aquí:

ACEPTAR PAGO EN BITCOIN: PRIMERA PARTE, TEÓRICA

ACEPTAMOS PAGOS EN BITCOIN: SEGUNDA PARTE. HERRAMIENTAS Y PREPARACIÓN

ACEPTAMOS PAGOS EN BITCOIN: PARTE TRES, TU TESTNET. CON BLACKJACK

ACEPTAR PAGO EN BITCOIN: CUARTA PARTE, ¡MÁS CERCA DEL NEGOCIO!

ACEPTAMOS PAGOS EN BITCOIN: PARTE QUINTA, HAY MATIZ


En primer lugar, al hacer esto ralentizamos todo el sistema y, con una gran cantidad de pagos, esto se convierte en un problema grave. Y en segundo lugar, “primero” es suficiente.

Mencioné en el último artículo que bitcoind aún puede enviar notificaciones, aunque lo hace de una manera un tanto única. Técnicamente, cuando ocurren ciertos eventos, se lanza un comando (programa) del sistema, pasando datos como argumento de línea de comando. De repente, existen tres eventos de este tipo: alertnotify, blocknotify y walletnotify. Nos interesan los dos últimos.

Para recibir notificaciones, debemos especificar lo siguiente en el archivo de configuración bitcoin.conf:

walletnotify=comando1 %s 
blocknotify=comando2 %s 

¿Qué nos aportará esto y cómo funciona? Para cualquier transacción asociada a nuestro wallet, es decir, con cualquier dirección emitida por nuestro bitcoind, se ejecutará el comando command1 especificado para walletnotify, y el hash de la transacción se sustituirá como el parámetro %s. Por supuesto, me gustaría saber tanto la dirección como el importe, pero tenemos lo que tenemos. Teniendo TxId ya podemos obtener información completa sobre la transacción, incluyendo todas las direcciones e importes.

Ahora sobre los matices. 

El comando se ejecutará un máximo de dos veces. A veces, solo. La primera vez es cuando se recibe una transacción no confirmada y se agrega al mempool. El segundo momento es cuando la transacción se incluye en el bloque, es decir, cuando se recibe la primera confirmación. En algunos casos, es posible que la primera notificación no llegue en absoluto... Pero, ¿qué debemos hacer si queremos considerar el pago completado después de las seis confirmaciones canónicas?

Aquí es donde blocknotify viene en nuestra ayuda. El comando command2 se ejecutará cuando se agregue cada nuevo bloque firmado y se devolverá el hash del bloque en lugar del parámetro %s. A continuación, podemos verificar todas nuestras transacciones registradas para ver la cantidad de confirmaciones (sí, dicha información en una transacción proviene de bitcoind), o ver cada bloque para ver si contiene transacciones con nuestras direcciones (largo, ineficaz, pero a veces necesario)

La forma en que se implementará la parte del software que implementa las notificaciones depende totalmente del desarrollador. Podría ser un script bash, un programa C/C++ o PHP. Lo principal es que su aplicación se puede iniciar desde la línea de comando.

Leer también

2042026-02-07

EthBackNode: ¿por qué su aplicación necesita un “espaciador” entre ella y el nodo Ethereum?

Si alguna vez ha intentado escribir una billetera criptográfica, una pasarela de pago o simplemente un "backend que pueda enviar y recibir ETH", rápidamente queda claro algo desagradable: el nodo Ethereum no es su backend.

Al desarrollador, Blockchain, Etereum
282024-02-25

Escáner de bloques de bricolaje (Blockchain explorer): una pequeña teoría

En el último artículo analizamos las razones por las que podríamos necesitar nuestro propio explorador de bloques. Observo que esta lista está lejos de ser completa, pero asumiremos que lo hemos decidido: necesitamos nuestra propia fuente de datos sobre transacciones y sus conexiones con direcciones.

Educación, Bitcóin, Etereum, Al desarrollador,

Últimos artículos de la sección Al desarrollador