Я учусь, как обращаться с мультиподписью. Сначала я создал 2-3 мультиподписных адреса со всеми ключами из моего тестового кошелька (биткойн на сервере) и отправил деньги на новый мультиподписной адрес из другого кошелька. Транзакция отображается в тестовом кошельке, и я могу использовать неизрасходованный вывод.
Затем я создал 2-2 адреса с одним ключом от тестового кошелька и одним ключом от другого кошелька, и отправил деньги на новый адрес с другого кошелька. Транзакция отображается на blockchain.info:
https://blockchain.info/tx/910298ae8133cc142009539298b6e2127b2c49960facd3b21470e130d07a1701
но он не отображается в тестовом кошельке, а новый мультиподписной адрес имеет нулевой баланс.
Читая этот предыдущий вопрос/ответ:
Multisig не работает, если все ключи не были сгенерированы из текущего кошелька?
Я вижу, что в июле 2014 года Bitcoin Core показывал транзакции только на мультиподписные адреса со всеми ключами в своем кошельке.
Вопросы:
1) Это все еще так?
2) Если да, то можно ли еще использовать неизрасходованный вывод и как?
[{"address/pubkey of Bitcoincore address", "pubkey of other wallet key"}]
должен вернуть адрес P2SH ( 3MWpeBDwJdk8F7fecZBZ6FHjDJVnGxpnRA ), а также добавить 3MWpeBDwJdk8F7fecZBZ6FHjDJVnGxpnRA в UTXO.3MWpeBDwJdk8F7fecZBZ6FHjDJVnGxpnRA
добавит адрес P2SH в кошелек как WatchOnlyЯ предполагаю, что вы не используете полный узел, используя флаг txindex=1
, поэтому addmultisigaddress
команда — это то, что вам нужно, чтобы выкупить 3MWpeBDwJdk8F7fecZBZ6FHjDJVnGxpnRA в Bitcoincore. К вашему сведению, createmultisig имеет те же параметры, что и addmultisigaddress ( ссылка на RPC ), но возвращает только сценарий выкупа; т.е. он не добавляет адрес P2SH к UTXO.
Как уже упоминалось, для всех мультиподписных команд вам понадобится полный публичный ключ (шестнадцатеричная версия, начинающаяся с 0x04 или 0x02/03 для сжатия). Единственная причина, по которой вы можете заменить адрес Base58Check в Bitcoincore в качестве открытого ключа, заключается в том, что программное обеспечение извлекает открытый ключ из кошелька и подставляет его соответствующим образом.
Альтернативный способ сделать это — использовать dumpprivkey / validateaddress для получения необходимых ключей Bitcoincore, а затем импортировать закрытый ключ в другое программное обеспечение кошелька и подписать / выкупить его.
РЕДАКТИРОВАТЬ: я протестировал импорт публичных ключей, отличных от Wallet.dat, для адреса P2SH с мультиподписью и успешно добавил Tx к UTXO, возвращаемымlistunspent
, с той лишь разницей, что возвращаемые данные JSON будут иметьspendable: false
. Я сделал это следующим образом:
addmultisigaddress 2 '["pubkey1", "pubkey2"]'
importaddress 3MWpeBDwJdk8F7fecZBZ6FHjDJVnGxpnRA "TESTING" true
createrawtransaction
// (но я уверен signrawtransaction
, sendrawtransaction
что вы можете сделать это с помощью графического интерфейсаlistunspent 0
вернет массив JSON (включая 0
подтверждения) с отображением объекта, redeemScript
но с spendable:
ложнымcreaterawtransaction
приватные ключи, переданные в качестве параметров, чтобы потратить это, очевидно.
Джулио Приско
Волшебник Оззи
Волшебник Оззи
txindex=1
. Когда вы используете importaddress, он будет повторно сканироваться по умолчанию, однако вам необходимо сначала убедиться, что вы создали сценарий погашения с помощью addmultisigaddress . Опять же, мне нужно это подтвердить, поскольку может случиться так, что без обоих закрытых ключей в кошельке он не «увидит» UTXO, финансирующие P2SH для используемого внешнего открытого ключа.Волшебник Оззи