Может ли кто-нибудь помочь мне с пошаговым списком того, как создать транзакцию с несколькими подписями 2 из 3?
На самом деле, как получение средств, так и расходование средств с адреса с мультиподписью уже поддерживается.
Вы можете найти код для этого, а также комментарии Гэвина:
Кажется, существует некоторая частичная реализация. Цитирую Гэвин :
Соберите (или сгенерируйте) 3 биткойн-адреса, в зависимости от того, какие машины будут участвовать, используя RPC-команды getnewaddress или getaccountaddress (или скопируйте и вставьте из графического интерфейса).
Получите их открытые ключи с помощью команды validateaddress
RPC 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 создается следующим образом:
n
открытые ключи. 3-of-3
03730a151f545f5dcdb1c6d99fb1251f5c70f216f39ba2681bcf10db16bd582e67
, 03a9bb9d28dfcd2e58ca7b3fa39f4051a6496fc7928f993f1758aeff7c0fee0f03
,03a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd
OP_m <bytes-in-Pubkey1> <pubKey1> ... OP_n OP_CHECKMULTISIG
532103730a151f545f5dcdb1c6d99fb1251f5c70f216f39ba2681bcf10db16bd582e672103a9bb9d28dfcd2e58ca7b3fa39f4051a6496fc7928f993f1758aeff7c0fee0f032103a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd53ae
HASH160(<script>)
8b58c2f47cd3000e42c82138f7678dc978bc109a
0x05
адрес P2SH
в основной сети: 05<scriptHash>
058b58c2f47cd3000e42c82138f7678dc978bc109a
BASE58CHECK(05<scriptHash>)
3EPpBU7fXq1PfG6JkLnJNUUmEGcSr9rdmh
Вы можете отправить биткойн на этот адрес, но чтобы потратить с него, вы должны предоставить скрипт Sig: 0 <sigM> ... <script>
где <sigM>
подписан каждый из m
закрытых ключей.
См. Биткойн Вики — Сценарий для кодов операций, Биткойн Вики — Префиксы адресов и Биткойн Вики — Транзакция для формата P2SH
сценария с несколькими подписями.
Самый простой способ создать мультиподписную транзакцию 2 из 3 — это Coinb.in.
При необходимости создайте 3 пары ключей с помощью раскрывающейся команды «Новый адрес».
Используйте «Новый мультиподписной адрес» вместе с 3 открытыми ключами, чтобы создать адрес 2 из 3.
Пополните адрес биткойнами.
Создайте новую транзакцию, вставив «сценарий выкупа» из шага 3, указав адреса получения и суммы. (Все неизрасходованные входы, не назначенные адресу получателя, будут использоваться в качестве комиссии за транзакцию. Если желательны изменения, включите их в новый выходной адрес, нажав «+».)
Подпишите транзакцию одним из закрытых ключей, затем подпишите эту транзакцию другим закрытым ключом.
Транслировать транзакцию в сеть.
Сильно нерегулярный
Дэниел Х
потрошитель234
потрошитель234
Матьё