Как сделать массовые выплаты в моем приложении сразу на несколько адресов или очень быстро?

Допустим, это день зарплаты — я накопил много биткойнов и отправил их все на один адрес. Теперь я хочу оплатить много адресов из этого «пула» монет, скажем, от 100 до 10 000 адресов. Каков наилучший способ сделать это так, как я могу использовать с PHP, и какой клиент лучше всего подходит? В настоящее время я знаком с биткойнами и электрумом.

Проблемы, которые я вижу, это:

  1. Если я сделаю их одну за другой, мне придется ждать подтверждения между каждой каждой транзакцией.
  2. Если я каким-то образом отправлю их все в одной транзакции, мне нужно будет а) возиться с необработанными транзакциями и б) возможно, установить ограничение на размер транзакции.

Можно ли это сделать без использования необработанных транзакций? И как мне проверить, сколько адресов я могу отправить одновременно, не достигая максимального размера транзакции? Если мне придется иметь дело с необработанными транзакциями, есть ли какая-нибудь библиотека в PHP, которая поможет мне легко их создавать?

Спасибо.

Ответы (2)

По крайней мере, когда вы используете биткойн, лучшим решением является использование sendmanyвызова RPC, который позволяет вам создать одну транзакцию, которая выполняет множество выплат. Транзакция будет намного меньше (в байтах), чем многие транзакции с одним платежом, которые вы имели в виду (более 6 раз, для 100 выходов), что приведет к более низким комиссиям в целом для того же эффекта.

Кроме того, даже если вы будете использовать отдельные транзакции для каждой (хотя я не советую этого делать), нет необходимости ждать подтверждения между разными транзакциями, так как реализация позволяет отправлять транзакции с нулевым подтверждением, если они исходят от вас.

В Electrum вы можете использовать функцию импорта CSV для массовых платежей. Он может принимать либо CSV-файл, либо CSV-файл, введенный в текстовое поле. Грубый формат:

ADDRESS, 0.12345
ADDRESS, 0.12314

Эта функция была объединена с версией 1.9, которая еще не выпущена, но вы уже можете ее использовать.

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

Пример:

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

Сумма указана в единицах, настроенных для вашего Electrum. В моем случае, например, в mBTC. Будьте осторожны с этим!

О, это круто. Как он обрабатывает транзакции, которые становятся слишком большими для одной транзакции — разделяет ли он их? Есть идеи, когда эта версия будет выпущена как стабильная? На панели истории это выглядит так, как если бы щелчок правой кнопкой мыши -> Подробности больше не отображал всплывающее окно.
Я искал кого-то, кто знал бы об обработке больших транзакций, буду спрашивать. Релиз не за горами.
@user371699 user371699 Импорт CSV в Electrum работает так же, как функция отправки, поэтому для крупной отдельной транзакции потребуется более высокая комиссия.
Я полагаю, что все еще существует ограничение на размер каждой транзакции в протоколе, что-то вроде 10 КБ? Интересно, знает ли Electrum этот лимит и разбивает ли его на несколько транзакций?
Цитата: «Он не разделяет txs. Ограничение составляет 100 КБ, поэтому это не должно быть проблемой. Хотя комиссия, вероятно, составит 1 BTC»