Почему выходной адрес представляет собой список в RPC/консоли?

Vout содержит список адресов, который, как я заметил, всегда имеет размер = 1, если он существует. Ниже приведен пример из тестовой сети Биткойн:

{
      "value": 0.91840581,
      "n": 2,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 1416b8f3a1c1c7e3e73a05046f002e66004accc3 OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a9141416b8f3a1c1c7e3e73a05046f002e66004accc388ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "mhMB2g88n42ghQ5p1VA7Mt9VgTp9QvpDXU"
        ]
      }
    }

Почему поле "адреса" (адрес) представляет собой список? Есть ли случаи, когда это может занять более одного адреса? Кто тогда может это потратить?

Ответы (1)

Это происходит из-за исторической путаницы между адресами и ключами.

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

Это сбивает с толку, потому что очевидно, что каждый вывод соответствует только одному адресу. Эта функция также теперь бесполезна из-за введения P2SH, где вместо того, чтобы помещать все открытые ключи в вывод, сохраняется только хэш сценария, включающий все эти ключи.

РЕДАКТИРОВАТЬ: Начиная с Bitcoin Core 23.0, поле «адреса» больше не существует вместе с несколькими другими полями (например, «reqSigs»), которые имеют отношение (но сбивают с толку) только для голых мультиподписей.

Так он сейчас не используется? Безопасно ли просто взять элемент номер 0?
Необработанная мультиподпись не используется; обычное программное обеспечение кошелька не может отправить на него. Для всего, кроме необработанной мультиподписи, будет присутствовать только один адрес.