¿Por qué la dirección de salida es una lista en RPC/consola?

Vout contiene una lista de direcciones, que noté que siempre tienen un tamaño = 1, si existe. El siguiente es un ejemplo de Bitcoin Testnet:

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

¿Por qué el campo "direcciones" (dirección) es una lista? ¿Hay casos en los que esto puede tomar más de una dirección? ¿Quién puede gastar eso entonces?

Respuestas (1)

Esto se debe a la confusión histórica entre direcciones y claves.

El objetivo original de este campo era informar las claves públicas involucradas en las salidas multisig sin procesar. Sin embargo, esas claves públicas estaban referenciadas por la dirección P2PKH correspondiente a ellas.

Esto es confuso porque, obviamente, cada salida solo corresponde a una sola dirección. La función también es inútil ahora debido a la introducción de P2SH, donde en lugar de poner todas las claves públicas en la salida, solo se almacena un hash de script que involucra todas esas claves.

EDITAR: desde Bitcoin Core 23.0, el campo "direcciones" ya no existe, junto con varios otros campos (como "reqSigs") que solo son relevantes (pero confusos) para multisigs desnudos.

Entonces, ¿nunca se usa ahora? ¿Es seguro simplemente tomar el elemento número 0?
Raw multisig no se usa; no hay forma de que el software de billetera común lo envíe. Para cualquier cosa que no sea multigrado en bruto, solo estará presente una única dirección.