Сценарий: предположим, что мне нужно совершить три транзакции одновременно с Алисой, Бобом и Клаудией. Теперь условие состоит в том, что если какая-либо одна транзакция терпит неудачу, две другие также не должны проходить.
Запрос: Как я могу добиться этого в блокчейне BTC? Есть ли какая-либо функция, которую BTC предоставляет для пакетных транзакций как единое целое, чтобы поддерживать его атомарность?
Если у вас нет проблем с тем, что Алиса, Боб и Клаудия знают друг о друге, вы можете создать одну транзакцию с 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
.
Насколько я знаю, нет... доказательством того, что транзакция прошла, является ее появление в блоке. Значит есть подтверждение. Это не может быть подтверждено другими транзакциями. Вам нужно будет написать окружающий скрипт, который проверяет статус подтверждения в блокчейне, а затем запускает другие транзакции.
В вашем сценарии это становится еще сложнее - что вы подразумеваете под одновременно? Если первый пройдет, а второй нет, то первый будет отозван? Также невозможно со стандартным набором инструментов. В общем: почему tx не пройдет? На основании срока? Или вы больше думаете о двойном расходовании или подобном?
Обновление после раздела комментариев ниже:
чтобы иметь три вывода, команда со страниц разработчиков биткойнов стала бы тремя парами адрес/значение биткойна:
{
"'$NEW_ADDRESS1'": 79.9999,
"'$NEW_ADDRESS2'": 10,
"'$NEW_ADDRESS3'": 1
}
(строки заканчиваются запятой или последней фигурной скобкой)
Гейган