¿Cómo hacer pagos masivos en mi aplicación a múltiples direcciones a la vez, o muy rápidamente?

Digamos que es el día de pago: he acumulado muchos bitcoins y los he enviado todos a una sola dirección. Ahora quiero pagar muchas direcciones de este "grupo" de monedas, digamos entre 100 y 10,000 direcciones. ¿Cuál es la mejor manera de hacer esto de una manera que pueda usar con PHP y con qué cliente encajaría mejor? Actualmente estoy familiarizado con bitcoind y electrum.

Los problemas que veo que suceden son:

  1. Si los hago uno tras otro, tendría que esperar una confirmación entre cada transacción.
  2. Si de alguna manera los envío a todos en una transacción, necesitaría a) meterme con las transacciones sin procesar, yb) posiblemente alcanzar un límite en el tamaño de la transacción.

¿Es posible hacer esto sin usar transacciones sin procesar? ¿Y cómo verifico a cuántas direcciones puedo enviar a la vez sin alcanzar el tamaño máximo de transacción? Si SÍ tengo que lidiar con transacciones sin procesar, ¿hay alguna biblioteca en PHP que me ayude a construirlas fácilmente?

Gracias.

Respuestas (2)

Al menos cuando usa bitcoind, la mejor solución es usar la sendmanyllamada RPC, que le permite crear una sola transacción que realiza muchos pagos. La transacción será mucho más pequeña (en bytes) que las muchas transacciones de pago único que tenía en mente (más de 6 veces, para 100 salidas), lo que resultará en tarifas más bajas en total por el mismo efecto.

Además, incluso si usaría transacciones separadas para cada una (aunque desaconsejo eso), no hay necesidad de esperar confirmaciones entre las diferentes transacciones, ya que la implementación permite enviar transacciones de confirmación 0 si son de usted mismo.

En Electrum puede utilizar la función de importación de CSV para realizar pagos masivos. Puede aceptar un archivo CSV o CSV ingresado en un cuadro de texto. El formato aproximado es:

ADDRESS, 0.12345
ADDRESS, 0.12314

Esta función se ha fusionado con la versión 1.9 que aún no se ha lanzado, pero ya puede usarla.

https://github.com/spesmilo/electrum/pull/282

Ejemplo:

1PkeTTctdh2CvhW3fQLs93PWP9qupWV68X, 5
3NujXLC3LxNsmk2wr69CLBuXGfhXeenUyu, 5
1CNAnSb7d1XCA4AXBH2gip3mi8dNTQxzeo, 1
1LSBFJ1An9orRMU6Bz3NS1y3jr1eH9AexE, 1
16qRyDVZVpptJb4HZzv5rWkjqtJWVRjDep, 1
1PkeTTctdh2CvhW3fQLs93PWP9qupWV68X, 5
1Nnad832Zyob64wGbju49CC5RFbACAfCNZ, 1
1J2gFYBnf8K2wHJDndgr3iN1nPoZumHXap, 5

La cantidad está en la unidad en la que está configurado su Electrum. En mi caso, por ejemplo, es en mBTC. ¡Cuidado con esto!

Oh, eso es genial. ¿Cómo maneja las transacciones que se vuelven demasiado grandes para una sola transacción? ¿Las divide? ¿Alguna idea de cuándo se lanzará esta versión como estable? En el panel de historial, parece que hacer clic con el botón derecho -> Detalles ya no muestra el cuadro emergente.
He estado buscando a alguien que supiera sobre el manejo de grandes transacciones, le preguntaré. El lanzamiento está a la vuelta de la esquina.
@user371699 La importación de CSV de Electrum funciona igual que la función Enviar, por lo que se necesitará una tarifa mayor para una sola transacción grande.
Creo que todavía hay un límite de tamaño para cada transacción en el protocolo, ¿algo así como 10 KB? Me pregunto si Electrum conoce este límite y lo divide en múltiples transacciones.
Cita: "No divide txs. El límite es de 100 KB, por lo que no debería ser un problema. Sin embargo, la tarifa probablemente sea de 1 BTC"