Можно ли создавать пакеты транзакций в блокчейне биткойнов?

Сценарий: предположим, что мне нужно совершить три транзакции одновременно с Алисой, Бобом и Клаудией. Теперь условие состоит в том, что если какая-либо одна транзакция терпит неудачу, две другие также не должны проходить.

Запрос: Как я могу добиться этого в блокчейне BTC? Есть ли какая-либо функция, которую BTC предоставляет для пакетных транзакций как единое целое, чтобы поддерживать его атомарность?

Ответы (2)

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

посылать много

Я могу показать вам, как это сделать с помощью bitcoin-cli. Для этого вам понадобится полный узел, работающий на вашем компьютере ( bitcoind). Этот узел должен владеть вашими средствами (приватные ключи для аккаунтов с вашими средствами должны быть в его wallet.dat). Если это так, то вам нужен метод sendmany .

Бегать:

# Unlock the wallet (If your wallet is unencrypted, skip this step)
bitcoin-cli walletpassphrase "passphrase" 10
# Send all funds to everybody you need
bitcoin-cli sendmany "" '{"2N8hwP1WmJrFF5QWABn38y63uYLhnJYJYTF": 0.05, "2N5zxMH53RX3JLWbV5csmZrAhWY1R7Fr1SA": 0.05}'
# Lock the wallet
bitcoin-cli walletlock

Вы получите идентификатор транзакции в результате вызова sendmany:

3a2addb48252889711a74f7e131816c8becfb112910342faefd17a8913ac2de7

(это реальная транзакция в биткойн тестовой сети)

Чтобы получить больше информации о методе sendmany, вы можете запустить bitcoin-cli help sendmany, вы увидите список доступных параметров и примеры его использования с curl. Или вы можете перейти к официальной документации

создать необработанную транзакцию

Если у вас есть доступ к биткойн-узлу, но на этом узле нет ваших средств, вы можете создать новую неподписанную транзакцию, используя createrawtransaction метод на узле, затем подписать эту транзакцию в своем кошельке и отправить ее, используя sendrawtransaction.

Большое спасибо! Не могли бы вы подсказать, как создать 3 выхода из одной транзакции?

Насколько я знаю, нет... доказательством того, что транзакция прошла, является ее появление в блоке. Значит есть подтверждение. Это не может быть подтверждено другими транзакциями. Вам нужно будет написать окружающий скрипт, который проверяет статус подтверждения в блокчейне, а затем запускает другие транзакции.

В вашем сценарии это становится еще сложнее - что вы подразумеваете под одновременно? Если первый пройдет, а второй нет, то первый будет отозван? Также невозможно со стандартным набором инструментов. В общем: почему tx не пройдет? На основании срока? Или вы больше думаете о двойном расходовании или подобном?

Обновление после раздела комментариев ниже:

чтобы иметь три вывода, команда со страниц разработчиков биткойнов стала бы тремя парами адрес/значение биткойна:

{
  "'$NEW_ADDRESS1'": 79.9999, 
  "'$NEW_ADDRESS2'": 10, 
  "'$NEW_ADDRESS3'": 1 
}

(строки заканчиваются запятой или последней фигурной скобкой)

Привет @pebwindkraft, "что ты имеешь в виду под одновременно?" Я имею в виду, что я хочу отправить все три транзакции логически как одну транзакцию.
«Если первое пройдет, а второе нет, то первое будет аннулировано?» Да, именно это я и имею в виду.
«Почему транзакция не прошла? Из-за ограничения по времени? Или вы больше думаете о двойной трате или подобном?» Как я упоминал выше, я хочу, чтобы эти три транзакции логически представлялись как одна транзакция. Чего я ожидал здесь, так это узнать, есть ли уже какая-либо встроенная функция. Но похоже, что это невозможно без скриптов. Это правильно?
Я понимаю вашу точку зрения, в логике биткойнов у вас будет одна транзакция с тремя выходами. Это не пакетная обработка… во всяком случае, создание необработанного tx описано в разделе для разработчиков на сайте bitcoin.org ( bitcoin.org/en/developer-examples#complex-raw-transaction ). Вы бы просто добавили третью пару адрес/сумма... это стандартный способ создания tx в биткойнах, у вас может быть даже больше, чем 3 выхода...