BIP: 11 Layer: Applications Title: M-of-N Standard Transactions Author: Gavin Andresen <[email protected]> Translate: Karpov Aleksey <[email protected]> Comments-Summary: No comments yet. Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0011 Status: Final Type: Standards Track Created: 2011-10-18 Post-History: 2011-10-02
Этот BIP предлагает, принять транзакции с подписями M-из-N как новый тип стандартных транзакций.
Создание защищенных кошельков, escrow транзакции и другие варианты использования, когда для получения средств требуется более одной подписи. Несколько вариантов использования:
- Кошелек, защищенный «wallet protection service» (WPS). Потребуются транзакции использующие подписи 2-из-2, в которых
- Трехстороннее депонирование (покупатель, продавец и доверенный агент). Используется транзакция с 2-of-3 подписями.
Новый типа стандартной транзакции (scriptPubKey), который ретранслируется клиентами и включается в создоваемые новые блоки:
m {pubkey}...{pubkey} n OP_CHECKMULTISIG
Но только для значения n, которое меньше или равно 3.
Операции OP_CHECKMULTISIG выполняется с использованием стандартного scriptSig:
OP_0 ...signatures...
(OP_0 требуется из-за ошибки в OP_CHECKMULTISIG; потребляется слишком много элементов из стека, поэтому в стек должно быть помещено фиктивное значение).
Текущий клиент Satoshi не ретранслирует или не обрабатывает транзакции с scriptSigs размером более 200 байт; для размещения транзакций с 3 подписями, он будет увеличен до 500 байт.
OP_CHECKMULTISIG - уже активированный opcode, и это самый простой способ поддержки нескольких важных вариантов использования. Один аргумент против использования OP_CHECKMULTISIG заключается в том, что старые клиенты и майнеры считают его «20 sigops» для вычисления количества операций подписи в блоке, и существует жесткий предел в 20 000 sigops на блок - это означает не более 1000 транзакций c мульти-подписями могут поместится в блоке. Создание транзакций с несколькими подписями с использованием нескольких операций OP_CHECKSIG позволяет увеличить их количество на каждый блок.
Контр-аргумент состоит в том, что новые транзакции с мульти-подписями будут использоваться в сочетании с OP_EVAL (см. OP_EVAL BIP) и будут подсчитываться точно. В любом случае, по мере увеличения объема транзакции, необходимо будет устранить жестко запрограммированный максимальный размер блока, и в это время могут быть решены правила подсчета количества операций подписи операций в блоке.
Более слабый аргумент - OP_CHECKMULTISIG не следует использовать, потому что во время проверки потребляет слишком много элементов из стека. Добавление дополнительного поля OP_0 к scriptSig добавляет только 1 байт к транзакции, и любая альтернатива, которая позволяет избежать OP_CHECKMULTISIG, добавляет по крайней мере несколько байтов кода операций. OP_CHECKMULTISIG is already an enabled opcode, and is the most straightforward way to support several important use cases.
OP_CHECKMULTISIG уже поддерживается старыми клиентами и майнерами как нестандартный тип транзакции.