котировка
Для каждой подписи и пары открытых ключей, OP_CHECKSIG выполняется. Если больше, чем открытые ключи подписей перечислены некоторые пары ключей / сиг может потерпеть неудачу. Все подписи должны соответствовать открытому ключу. Если все подписи действительны, 1 возвращается, 0 в противном случае. Из-за ошибки, один дополнительное неиспользуемое значение удаляются из стека.
Это означает, что существует необходимость проверять каждую подпись против каждого открытого ключа. Это O (N ^ 2) производительность. В 10 из 10 случая с, потребуется около 50 проверок.
В коде, как представляется, требуют, чтобы ключи и подпись в том же порядке.
Предполагая, что 2 из 3 случая, с 3-мя подписями а, б, в и 3 ключа А, В и С,
а, в, А, В, С
будет работать, так как и с находятся в правильном порядке.
с, а, А, В, С
потерпит неудачу, так как с и в неправильном порядке.
Эта это цикл.
2 счетчика ISIG и Айки только когда-либо увеличивается. Каждый ключ только каждый проверяется на 1 подпись. Это означает, что операция O (N) производительность, а не O (N ^ 2).
Это верно?
Дополнительная оптимизация может быть добавлена с помощью дополнительного multisig элемента стека. В 2 из 10 ситуации, все 10 ключей, возможно, необходимо проверить. Дополнительный элемент, который извлекается из стека может кодировать, которые используются открытые ключи. 0x03 означает, что используются последние 2 открытых ключей. Это позволит снизить нагрузку проверки.
В большинстве случаев, это, вероятно, не так уж много.