Мультиподписные адреса с ключами от разных кошельков

Я учусь, как обращаться с мультиподписью. Сначала я создал 2-3 мультиподписных адреса со всеми ключами из моего тестового кошелька (биткойн на сервере) и отправил деньги на новый мультиподписной адрес из другого кошелька. Транзакция отображается в тестовом кошельке, и я могу использовать неизрасходованный вывод.

Затем я создал 2-2 адреса с одним ключом от тестового кошелька и одним ключом от другого кошелька, и отправил деньги на новый адрес с другого кошелька. Транзакция отображается на blockchain.info:

https://blockchain.info/tx/910298ae8133cc142009539298b6e2127b2c49960facd3b21470e130d07a1701

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

Читая этот предыдущий вопрос/ответ:

Multisig не работает, если все ключи не были сгенерированы из текущего кошелька?

Я вижу, что в июле 2014 года Bitcoin Core показывал транзакции только на мультиподписные адреса со всеми ключами в своем кошельке.

Вопросы:

1) Это все еще так?

2) Если да, то можно ли еще использовать неизрасходованный вывод и как?

Ответы (1)

  1. Addmultisigaddress 2[{"address/pubkey of Bitcoincore address", "pubkey of other wallet key"}] должен вернуть адрес P2SH ( 3MWpeBDwJdk8F7fecZBZ6FHjDJVnGxpnRA ), а также добавить 3MWpeBDwJdk8F7fecZBZ6FHjDJVnGxpnRA в UTXO.
  2. importaddress3MWpeBDwJdk8F7fecZBZ6FHjDJVnGxpnRA добавит адрес 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. Я сделал это следующим образом:

  1. addmultisigaddress 2 '["pubkey1", "pubkey2"]'
  2. Возьмем возвращенный P2SH-адрес...
  3. importaddress 3MWpeBDwJdk8F7fecZBZ6FHjDJVnGxpnRA "TESTING" true
  4. Дождитесь завершения сканирования
  5. Профинансировано 3MWpeBDwJdk8F7fecZBZ6FHjDJVnGxpnRA с createrawtransaction// (но я уверен signrawtransaction, sendrawtransactionчто вы можете сделать это с помощью графического интерфейса
  6. listunspent 0вернет массив JSON (включая 0подтверждения) с отображением объекта, redeemScriptно с spendable: ложным
  7. Вам нужно будет выкупить Tx, используя createrawtransactionприватные ключи, переданные в качестве параметров, чтобы потратить это, очевидно.
Спасибо за ответ. Я успешно протестировал мультиподписные адреса с ключами от разных кошельков на других платформах (coinb.in), но мне пока не удалось сделать это с моей установкой bitcoincore, несмотря на то, что я следовал всем вашим предложениям. Проблема в том, что даже после импорта адреса как watchonly (importaddress) я не вижу транзакций по адресу.
Я посмотрю как можно скорее. Я иду по памяти. Я испытываю такое же разочарование с BIP32/Electrum 2.0.4, хотя это проблема по разным техническим причинам, она все же свидетельствует о том, насколько сложными могут быть разные клиенты кошелька с мультиподписью и BIP32/39.
Я думаю, вам нужно повторно отсканировать данные вашей цепочки блоков, что займет около 5-10 минут, при условии, что вы не используете полный узел с расширением txindex=1. Когда вы используете importaddress, он будет повторно сканироваться по умолчанию, однако вам необходимо сначала убедиться, что вы создали сценарий погашения с помощью addmultisigaddress . Опять же, мне нужно это подтвердить, поскольку может случиться так, что без обоих закрытых ключей в кошельке он не «увидит» UTXO, финансирующие P2SH для используемого внешнего открытого ключа.
@GiulioPrisco См. редактирование.