Как я могу создать транзакцию с несколькими подписями 2 из 3?

Может ли кто-нибудь помочь мне с пошаговым списком того, как создать транзакцию с несколькими подписями 2 из 3?

Стоит отметить, что этот другой вопрос bitcoin.stackexchange.com/questions/3557/… не является дубликатом, поскольку он относится к клиентскому приложению Биткойн.
Вы имеете в виду создать необработанную транзакцию или просто хотите отправить такую ​​транзакцию? Если первое, то посмотрите на OP_CHECKMULTISIG и BIP-11; если последнее, то вы можете использовать онлайн-кошелек, такой как blockchain.info, который, я думаю, справится с этим.
Прошел год с тех пор, как об этом спросили. Что дает? См. также bitcointalk.org/index.php?topic=195168.0
Смотрите также - bitcoin.stackexchange.com/questions/23889/…
Самый простой известный мне API для создания мультиподписной транзакции: dev.blockcypher.com/#multisig

Ответы (4)

На самом деле, как получение средств, так и расходование средств с адреса с мультиподписью уже поддерживается.

Вы можете найти код для этого, а также комментарии Гэвина:

Два из трех.sh

Кажется, существует некоторая частичная реализация. Цитирую Гэвин :

Создайте мультиподписной адрес:

  1. Соберите (или сгенерируйте) 3 биткойн-адреса, в зависимости от того, какие машины будут участвовать, используя RPC-команды getnewaddress или getaccountaddress (или скопируйте и вставьте из графического интерфейса).

  2. Получите их открытые ключи с помощью команды validateaddressRPC 3 раза.

  3. Затем создайте мультиподписной адрес 2 из 3, используя addmultisigaddress; например

    bitcoind addmultisigaddress 2 '["044322868cb17d64dcc22185ae2d4493111d73244c3668f8ac79ecc79c0ba8d30a6756d0fa20157 709af3281cc721c7f53321a8cabda29b77900b7e4fe0174b114","..second pubkey..","..third pubkey.."]'

addmultisigaddressвозвращает мультиподписной адрес. Будьте немного осторожны, открытые ключи представляют собой необработанные шестнадцатеричные числа и не содержат контрольных сумм, как биткойн-адреса. Затем вы можете отправить средства в эту транзакцию 2 из 3, используя обычные команды RPC sendtoaddress/sendmany или графический интерфейс (или что-либо, что было обновлено для распознавания мультиподписных адресов).

Тратить с мультиподписного адреса:

Это еще не реализовано (механизм вызовов RPC). Вы можете собрать все адреса в один кошелек, и тогда вы сможете потратить средства.

Обновление за март 2014 г.

Мультиподпись по-прежнему сложна. Я считаю, что библиотека SX — это простой инструмент (разработанный такими людьми, как Виталик Бутерин и Амир Тааки) для работы с мультиподписью, но я не проверял это сам.

Мультиподпись больше не является сложной. Смотрите мой новый ответ ниже

Мультиподписной адрес m-of-n создается следующим образом:

  1. Соберите все nоткрытые ключи.
    например 3-of-3
    03730a151f545f5dcdb1c6d99fb1251f5c70f216f39ba2681bcf10db16bd582e67 , 03a9bb9d28dfcd2e58ca7b3fa39f4051a6496fc7928f993f1758aeff7c0fee0f03,03a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd
  2. Создайте сценарий мультиподписи,
    OP_m <bytes-in-Pubkey1> <pubKey1> ... OP_n OP_CHECKMULTISIG
    например. 532103730a151f545f5dcdb1c6d99fb1251f5c70f216f39ba2681bcf10db16bd582e672103a9bb9d28dfcd2e58ca7b3fa39f4051a6496fc7928f993f1758aeff7c0fee0f032103a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd53ae
  3. Хэш скрипт, HASH160(<script>)
    например
    8b58c2f47cd3000e42c82138f7678dc978bc109a
  4. Добавить 0x05адрес P2SHв основной сети: 05<scriptHash>
    например
    058b58c2f47cd3000e42c82138f7678dc978bc109a
  5. Применить Base58Check: BASE58CHECK(05<scriptHash>)
    например
    3EPpBU7fXq1PfG6JkLnJNUUmEGcSr9rdmh

Вы можете отправить биткойн на этот адрес, но чтобы потратить с него, вы должны предоставить скрипт Sig: 0 <sigM> ... <script>где <sigM>подписан каждый из mзакрытых ключей.

См. Биткойн Вики — Сценарий для кодов операций, Биткойн Вики — Префиксы адресов и Биткойн Вики — Транзакция для формата P2SHсценария с несколькими подписями.

Самый простой способ создать мультиподписную транзакцию 2 из 3 — это Coinb.in.

  1. При необходимости создайте 3 пары ключей с помощью раскрывающейся команды «Новый адрес».

  2. Используйте «Новый мультиподписной адрес» вместе с 3 открытыми ключами, чтобы создать адрес 2 из 3.

  3. Пополните адрес биткойнами.

  4. Создайте новую транзакцию, вставив «сценарий выкупа» из шага 3, указав адреса получения и суммы. (Все неизрасходованные входы, не назначенные адресу получателя, будут использоваться в качестве комиссии за транзакцию. Если желательны изменения, включите их в новый выходной адрес, нажав «+».)

  5. Подпишите транзакцию одним из закрытых ключей, затем подпишите эту транзакцию другим закрытым ключом.

  6. Транслировать транзакцию в сеть.

Я сделал видео, документирующее эти шаги здесь: youtube.com/watch?v=oUSVmLegj8k