Мультиподпись против подписи транзакции с несколькими входами

Допустим, у нас есть мультиподписной адрес 2 из 2, с которого мы хотим провести транзакцию, поэтому транзакция должна быть подписана обоими закрытыми ключами.

Теперь предположим, что у нас есть транзакция с двумя входами, поэтому транзакция снова должна быть подписана обоими закрытыми ключами входов.

Так как же эти два отличаются в реализации? Даже на концептуальном уровне? Эти процедуры одинаковы?

Оба входа тратят деньги с мультиподписного адреса?

Ответы (2)

Это довольно разные вещи и представляют очень разные варианты использования.

Представьте, что вы глава комитета по планированию вечеринки, и у вас есть два работника (А и Б), которые помогают вам покупать товары для вечеринки. Вам дается 1 биткойн для финансирования вечеринки.

У вас есть два варианта.

  • Вы можете разделить средства между A и B. Например, вы можете дать A и B по 0,5 биткойна на два отдельных выхода. Если им нужно купить что-то на сумму более 0,5 биткойнов, им нужно будет объединить свои выходы в качестве входов для одной и той же транзакции. Однако для предметов стоимостью менее 0,5 биткойнов A и B смогут действовать независимо, чтобы покупать предметы (или украсть средства!).
  • Вы можете совместно дать A и B 1 биткойн в мультиподписном адресе 2 из 2. Теперь на любую покупку им нужно будет договариваться, чтобы тратить из средств парткома.

Подвести итоги:

Тратить 2/2 мультиподписного вывода:

Тратит один ранее UTXO и требует два ключа для подписи.

Тратить несколько входов:

Тратит несколько предыдущих UTXO и требует, чтобы каждый вход был подписан отдельно.


Что касается подписания этих типов транзакций, то их нужно делать немного по-другому.

При подписании ввода, который тратит 2/2 мультиподписи на выходе, транзакция подписывается двумя ключами, и они кодируются в один и тот же scriptSigвход. Транзакция становится действительной только тогда, когда оба ключа подписаны действительными подписями.

Например, предположим, что scriptPubKey предыдущего мультиподписного вывода 2/2:

OP_2 {pubkey1} {pubkey2} OP_2 OP_CHECKMULTISIG

scriptSig, чтобы потратить этот вывод, будет:

{pubkey1's signature} {pubkey2's signature}

Обратите внимание, как они находятся в scriptSig одного и того же входа.

При подписании двух разных входных данных, предполагая, что их предыдущие scriptPubKeys выглядят примерно так:

{pubkey1} OP_CHECKSIG

и

{pubkey2} OP_CHECKSIG

Тогда два входа будут иметь scripSig в этом формате (соответственно):

{pubkey1 signature}

и

{pubkey2 signature}

ПРИМЕЧАНИЕ. Я использовал простой scriptPubKey, чтобы попытаться понять, как он работает в целом, но вам, вероятно, следует использовать мультиподписной адрес Pay-to-script-hash и адреса pay-to-pubkey-hash вместо необработанных multisig и pay -to-pubkey scriptPubKeys, которые я использовал в этом примере.

На самом деле это был не тот ответ, который я ищу. На уровне реализации, чем они отличаются: 1) требует двух ключей для подписи 2) требует, чтобы каждый вход был подписан отдельно. Я имею в виду, что в конце есть неподписанная необработанная транзакция, которую нужно подписать, как процедура подписания будет отличаться в этих двух сценариях?
@Shayanbahal, это проясняет?
Это было действительно хорошо, спасибо. Только в отношении последней части (ПРИМЕЧАНИЕ). Я не совсем понимаю, что вы имели в виду под «вы, вероятно, должны использовать мультиподписной адрес Pay-to-script-hash и адреса pay-to-pubkey-hash вместо необработанных multisig и pay- to-pubkey scriptPubKeys, которые я использовал в этом примере».
@Shayanbahal, ответ на все эти вещи, вероятно, выходит за рамки этого вопроса. Этот ответ должен помочь объяснить разницу между необработанной мультиподписью и мультиподписью P2SH. Документация для разработчиков биткойнов также полезна. И обязательно помечайте ответы на свои вопросы зеленой галочкой. :)

Транзакция от a Multisig Bitcoin address(начиная с 3) требует подписи от N из M

  • M представляет количество сторон, которым разрешено разблокировать UTXO (ввод транзакции). В случае 2-2 для создания действительной транзакции должны быть задействованы обе подписи обеих сторон.
  • N — количество владельцев (известных как threshold), чья цифровая подпись требуется для подписания действительной транзакции.

Тем не менее, Multi input transactionэто тип транзакции, при которой ввод включает UTXO с 1 или более стандартных или биткойн-адресов с мультиподписью.

Могут возникнуть следующие состояния

  1. Стандартный биткойн-адрес подписывает транзакцию с 1 входом

    • требуется одна цифровая подпись с действительным закрытым ключом
  2. Стандартный биткойн-адрес подписывает транзакцию с более чем 1 входом (транзакция с несколькими входами)

    • требуется цифровая подпись для каждого UTXO с действительным закрытым ключом
  3. Биткойн-адрес Multisig подписывает транзакцию с 1 входом

    • требуется одна цифровая подпись от порога
  4. Биткойн-адрес Multisig подписывает транзакцию с более чем 1 входом (транзакция с несколькими входами)

    • требует цифровой подписи для каждого UTXO по порогу

До этого момента ALL UTXOпринадлежат подписавшему транзакцию. Теперь транзакции будут содержать UTXO для более чем 1 биткойн-адреса.

  1. Два стандартных биткойн-адреса подписывают транзакцию с 1 UTXO для каждого из них (транзакция с несколькими входами)

    • требует цифровой подписи для каждого UTXO соответствующим действительным закрытым ключом

Бывший. Транзакция включает 2 UTXO для 2 отдельных стандартных биткойн-адресов, чтобы создать действительную транзакцию, адрес A должен подписать UTXO(A), а адрес B подписать UTXO(B). Транзакция теперь может иметь 1 выход, что делает стоимость комиссий намного ниже, чем в сценарии, где для каждого биткойн-адреса создается отдельная транзакция.

  1. Два биткойн-адреса Multisig подписывают транзакцию с 1 UTXO для каждого из них (транзакция с несколькими входами)

    • требует цифровой подписи для каждого UTXO с помощью соответствующего действительного закрытого ключа порога

Бывший. Транзакция включает 2 UTXO для 2 отдельных биткойн-адресов с мультиподписью. Для создания действительной транзакции порог адреса A должен быть подписан UTXO (A), а порог адреса B — UTXO (B).

  1. Комбинация 5 и 6 вариантов.

Бывший. Транзакция состоит из UTXO для 1 или более стандартных биткойн-адресов и 1 или более биткойн-адресов с мультиподписью.