Saltar al contenido
buybitcoinsmart

Glosario / Direcciones y claves

Dirección P2SH

También se conoce como Pay-to-Script-Hash o Salida P2SH.

¿Qué es una dirección P2SH?
Una dirección P2SH empieza por 3 y fija el hash de un script de canje, de modo que las condiciones de gasto permanecen secretas hasta que alguien revela el script.

Se especifica en el BIP-16.

Pay to script hash llegó con BIP-16, en vigor desde el bloque 173.805 el 1 de abril de 2012, y cambió quién carga con el costo de la complejidad. Antes de su llegada, un remitente tenía que escribir el contrato completo en la salida. Después, el remitente escribe 23 bytes y el destinatario paga por revelar el script más adelante, y por eso una dirección que empieza por 3 puede ocultar una bóveda de cinco claves o una simple billetera de una sola clave.

Cómo funciona

El script de bloqueo es corto e idéntico para toda dirección P2SH: OP_HASH160 seguido de un hash de 20 bytes y OP_EQUAL, 23 bytes en total. El hash fija un script de canje que solo conoce el destinatario.

El gasto se hace en dos pasadas. El campo scriptSig aporta los argumentos que necesita el script de canje y, como último elemento, el propio script de canje serializado. Un nodo calcula el hash de ese último elemento, lo compara con el valor fijado y, si coinciden, deserializa el script y lo ejecuta sobre todo lo que queda en la pila. Las dos etapas tienen que completarse con éxito.

Dos límites determinan lo que cabe. Un script de canje es un solo elemento de la pila, así que no puede superar el límite de 520 bytes por inserción de datos que Bitcoin Core define como la constante MAX_SCRIPT_ELEMENT_SIZE. La política de retransmisión añade un segundo techo de 15 operaciones de firma por entrada P2SH. Juntos limitan la configuración muy por debajo de lo que el lenguaje de script permite en general, donde el límite es un script de 10.000 bytes.

La dirección en sí es Base58Check con un byte de versión 0x05, que produce el 3 inicial y una cadena de 34 caracteres. BIP-13 definió ese formato, por separado de la regla de consenso de BIP-16.

Dónde aparece

Los formularios de retiro de los exchanges que describen una opción como "SegWit" sin decir "native" (nativo) suelen referirse a una dirección que empieza por 3. Las bóvedas multisig construidas antes de 2018 las usan. También las usan los intercambios atómicos y los contratos de bloqueo temporal (timelock) con hash que necesitan un script pero quieren una dirección a la que pueda pagar una billetera corriente.

La consecuencia del diseño es la ambigüedad, y es total. Un UTXO de una dirección con prefijo 3 solo revela un hash, así que un explorador de bloques no puede decirle si contiene una sola clave anidada o un quórum corporativo, y el remitente tampoco. La información solo aparece en la transacción de gasto.

Esa ambigüedad conlleva un modo real de pérdida. Recuperar monedas de una salida P2SH exige el script de canje, no solo las claves privadas. Una frase semilla por sí sola no reconstruye un script arbitrario, así que cualquier configuración P2SH más elaborada que una derivación estándar de billetera tiene que respaldarse como descriptor o como los propios bytes del script. Hay quien ha perdido monedas teniendo todas las claves y ningún script.

Dirección P2SH frente a multisig P2SH

El multisig P2SH es una de las cosas que se pueden poner dentro de una dirección P2SH, no un sinónimo del formato. La dirección es un contenedor, y el script de canje que se esconde en ella puede ser un multisig m de n, un hash de clave de SegWit anidado, una cláusula de recuperación con bloqueo temporal o un script que nadie más ha escrito jamás. Leer una dirección que empieza por 3 como "una dirección multisig" es una conjetura que falla a menudo, porque el SegWit anidado convirtió el 3 en el formato predeterminado de una sola clave durante varios años después de 2017 y dejó a millones de billeteras corrientes detrás de ese prefijo.

No confundir con

Preguntas frecuentes

¿Qué hay realmente dentro de una dirección que empieza por 3?

No hay forma de saberlo a partir de la dirección. La salida contiene un hash de 20 bytes de un script de canje, y ese script podría ser un quórum multisig, una clave SegWit anidada o un contrato con bloqueo temporal. Solo se vuelve visible cuando se gastan las monedas.

¿Necesito el script de canje para recuperar monedas P2SH?

Sí, salvo que el script provenga de una derivación estándar de billetera que su software pueda reconstruir. Las claves privadas por sí solas no gastan una salida P2SH arbitraria, así que respalde el descriptor o los bytes del script junto con su frase semilla.

Términos relacionados

Más en la sección Direcciones y claves

Leer esta página en inglés