Я знаю, как создавать их на Bitcoin-кварт, но я ищу для процесса их генерации. Я хочу, чтобы написать свою собственную программу, которая может генерировать их, так что я ищу больше шаг за шагом хэширования функции и какие данные нужно поместить в те хэш, чтобы создать адрес многоплатформенный значи. Я знаю, что вам нужны открытые ключи несжатых и требуемое значение п, и я знаю, что версия байт 0x05.
В Bitcoin сценарии довольно проста, но убедившись, что вы делаете правильно может быть сложным - например, вы можете создать несколько значи скрипт для получения денег, но большинство инструментов не отображаются и проверить сценарий правильно. Вы должны убедиться, что вы делаете, что часть правильно, тоже. К счастью, если вы сделаете это неправильно, то сеть, скорее всего, не передавайте его (просто не мое это самостоятельно!).
Если вы хотите использовать P2SH, вы хэширования выходной сценарий и построить адресную строку, используя 0x05 вместо 0x00, как для нормального адреса. Но это не имеет значения, если вы вручную создавать транзакции, поскольку сеть никогда не видит, что префикс байт - это только идентификатор для адресных строк, которые передаются вокруг между людьми, но не включены в реальных сценариях, вставленных в blockchain.
Но если вы делаете много одноразовых мульти-сиг сделок, и не обязательно взаимодействовать с другими людьми (на данный момент, может быть, вы просто хотите защитить свои деньги с помощью этого инструмента вы создаете), то я бы рекомендовал использовать ваниль мульти-сиг без P2SH. Это позволит сделать его легче найти деньги, если позже вы должны искать blockchain для мульти-сига адресов, которые имеют отношение к вашим кошелькам (P2SH скроет эти детали). Полнофункциональный решение многих сиг (как Оружейной мы надеемся сделать в ближайшее время) будет использовать несколько кошельков с мета-данными и структурированном подбора ключа, что делает P2SH безопасными в этом отношении. До тех пор, вы можете использовать простые сценарии multisig, которые являются стандартными до 3-х из-3.
Наконец, я рекомендую вам сделать все ваши испытания на testnet. Все идентично, за исключением того, если вы используете P2SH, используйте следующие префиксы байт для генерации адреса строки:
Постоянные адреса = '\ x6f'
P2SH Адреса = '\ XC4'
Onto забавной части - все это может быть сделано с armoryengine. И последняя версия armoryengine также распознает и отображает P2SH адрес (на "тестирование" филиал), хотя это не совсем знает, что делать с multisig сценариев. Тем не менее, вы можете вручную собрать части с помощью
https://bitcoinarmory.com/developers/python-scripting/ в качестве руководства.
Если бы я собирался сделать это, я хотел бы использовать регулярные multisig: я бы, вероятно, использовать Оружейной GUI для создания транзакции отправки X монеты в обычный адрес, но не отправить его еще, создать неподписанную транзакцию. Затем идет шестигранные нырять в эту сделку и заменить скрипт TxOut (и var_int его предшествующим) с multisig сценарием. На самом деле, вы можете создать сценарий с моей непроверенной функцией
pubkeylist_to_multisig_script (pubKeyList, MREQ). Хотя, это очень простой скрипт:
OP_2 PubKeyA PubKeyB PubKeyC OP_3 OP_CHECKMULTISIG
Если вы делаете 2-из-3, получить три открытых ключей, и поставить
двоичный формы их в список, что-то вроде:
pubkeys = [ ''] * 3
pubkeys [0] = hex_to_binary ( '0438c80fa100871bc8115311d ...')
pubkeys [1] = hex_to_binary ( '047613d073ff18301aab45df1 ...')
pubkeys [2] = hex_to_binary ( '040f83e3d9983aba4246fe3aa ...')
msScript = pubkeylist_to_multisig_script (pubkeys, 2)
msScript = script_to_p2sh_script (msScript) # НЕОБЯЗАТЕЛЬНО, если вы хотите P2SH
scriptSizeVarint = packVarInt (Len (сценарий)) [0]
Теперь удалите var_int и сценарий от получателя txout (не связывайтесь с выходом изменения!), И поставить этот varInt и сценарий там. Если я не пропустил что-то, это должно быть действительной сделкой. Вы должны быть в состоянии подписать и транслировать его (вы можете даже быть в состоянии сделать это с Оружейной, как если бы это была автономная транзакция, хотя она также может подавиться форме receipient "адрес" -- дай мне знать!).
Тратить его, является более сложным с имеющимися инструментами, но это может быть сделано. Суть ее в том, что вы будете создавать транзакцию проводить, используя в качестве входных данных неизрасходованного мульти-сиг (или P2SH) TxOut. Вы создадите сценарий TxIn используя стандартную форму
OP_0 SigAOrEmptyString SigBOrEmptyString SigCOrEmptyString
Вам нужен код
Вот для получения хэша, который должен быть подписан OP_CHECKSIG / OP_CHECKMULTSIG. Вы подпишете этот хэш с каждым из 2-х из 3-х закрытых ключей и положить пустую строку (OP_0?) В другом месте (они должны быть в том же порядке, что и ключи в сценарии TxOut). Это должно быть действительным сценарием израсходует.
Конечно, я, вероятно, пропустил всякие мелкие детали, но уже поздно, так что мне придется отложить обсуждение этих деталей до позже. Будем надеяться, что, по крайней мере достаточно, чтобы вы начали.