From e1cf5d398ba1d916af08fc40487108c2d98737ef Mon Sep 17 00:00:00 2001 From: Ian Culp <57159226+icculp@users.noreply.github.com> Date: Tue, 6 Jul 2021 23:11:47 -0500 Subject: [PATCH 1/2] chapter 10.3 translated, pending review --- es/10_3_Running_a_Bitcoin_Script_with_P2SH.md | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 es/10_3_Running_a_Bitcoin_Script_with_P2SH.md diff --git a/es/10_3_Running_a_Bitcoin_Script_with_P2SH.md b/es/10_3_Running_a_Bitcoin_Script_with_P2SH.md new file mode 100644 index 0000000..a8f2859 --- /dev/null +++ b/es/10_3_Running_a_Bitcoin_Script_with_P2SH.md @@ -0,0 +1,100 @@ +# 10.3: Ejecución de un Bitcoin Script con P2SH + +Ahora que concoce la teoría y la práctica detrás de las direcciones P2SH, está listo para convertir un script de Bitcoin no estándar en una transacción real. Reutilizaremos la secuencia de comandos de bloqueo simple de [§9.2: Ejecución de un Bitcoin Script](09_2_Running_a_Bitcoin_Script.md), `OP_ADD 99 OP_EQUAL`. + +## Crear una Transacción P2SH + +Para bloquear una transacción con este script, haga lo siguiente: + +1. Serializar `OP_ADD 99 OP_EQUAL`: + 1. OP_ADD = 0x93 — una traducción simple de opcode + 2. 99 = 0x01, 0x63 — este opcode empuja un byte a la pila, 99 (hex: 0x63) + * No se preocupe por la conversión endian porque es solo un byte + 3. OP_EQUAL = 0x87 — una tradducion simple de opcode translation + 4. `` = "93016387" + +``` +$ btcc OP_ADD 99 OP_EQUAL +93016387 +``` + +2. Guarde `` para referencia futura como `redeemScript`. + 1. `` = "93016387" +3. SHA-256 y RIPEMD-160 hash el script serializado. + 1. `` = "3f58b4f7b14847a9083694b9b3b52a4cea2569ed" +4. Produzca un script de bloqueo P2SH que incluya el ``. + 1. `scriptPubKey` = "a9143f58b4f7b14847a9083694b9b3b52a4cea2569ed87" + +Luego puede crear una transacción usando esta `scriptPubKey`, probablemente a través de una API. + +## Desbloquear la Transacción P2SH + +Para desbloquear esta transacción se requiere que el destinatario produzca un `scriptSig` que anteponga dos constantes que sumen noventa y nueve al script serializado: `1 98 `. + +### Ejecute la Primera Ronda de Validación + +El proceso de desbloqueo de la transacción P2SH comienza con una primera ronda de validación, que verifica que el script de canje coincida con el valor hash en el script de bloqueo. + +Concatenar `scriptSig` y `scriptPubKey` y ejecutarlos, como de costumbre: +``` +Script: 1 98 OP_HASH160 OP_EQUAL +Stack: [] + +Script: 98 OP_HASH160 OP_EQUAL +Stack: [ 1 ] + +Script: OP_HASH160 OP_EQUAL +Stack: [ 1 98 ] + +Script: OP_HASH160 OP_EQUAL +Stack: [ 1 98 ] + +Script: OP_EQUAL +Running: OP_HASH160 +Stack: [ 1 98 ] + +Script: OP_EQUAL +Stack: [ 1 98 ] + +Script: +Running: OP_EQUAL +Stack: [ 1 98 True ] +``` +La secuencia de comandos termina con un `True` en la parte superior de la pila, por lo que tiene éxito ... a pesar de que hay otros cruft debajo de él. + +Sin embargo, debido a que se trataba de un script P2SH, la ejecución no se realiza. + +### Ejecute la Segunda Ronda de Validación + +Para la segunda ronda de validación, verifique que los valores en el script de desbloqueo satisfagan el `redeemScript`: deserialice el `redeemScript` ("93016387" = "OP_ADD 99 OP_EQUAL"), luego ejecútelo usando los elementos del `scriptSig` antes del script serializado: + +``` +Script: 1 98 OP_ADD 99 OP_EQUAL +Stack: [ ] + +Script: 98 OP_ADD 99 OP_EQUAL +Stack: [ 1 ] + +Script: OP_ADD 99 OP_EQUAL +Stack: [ 1 98 ] + +Script: 99 OP_EQUAL +Running: 1 98 OP_ADD +Stack: [ 99 ] + +Script: OP_EQUAL +Stack: [ 99 99 ] + +Script: +Running: 99 99 OP_EQUAL +Stack: [ True ] +``` +Con esa segunda validación _también_ verdadera, el UTXO ahora se puede gastar! + +## Resumen: Creación de un Bitcoin Script con P2SH + +Una vez que conozca la técnica de construcción de P2SH, cualquier script se puede incrustar en una transacción de Bitcoin; y una vez que comprenda la técnica de validación de P2SH, es fácil ejecutar los scripts en dos rondas. + +## Que Sigue? + +Continúe "Incrustando Bitcoin Scripts" con [§10.4: Scripting a Multisig](10_4_Scripting_a_Multisig.md). From b59fccacc4a805b7465e26eb19f3ca4eb7d8a6fc Mon Sep 17 00:00:00 2001 From: Ian Culp <57159226+icculp@users.noreply.github.com> Date: Thu, 15 Jul 2021 09:55:25 -0500 Subject: [PATCH 2/2] corrections on lines 10 and 13 --- es/10_3_Running_a_Bitcoin_Script_with_P2SH.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/es/10_3_Running_a_Bitcoin_Script_with_P2SH.md b/es/10_3_Running_a_Bitcoin_Script_with_P2SH.md index a8f2859..e86fb09 100644 --- a/es/10_3_Running_a_Bitcoin_Script_with_P2SH.md +++ b/es/10_3_Running_a_Bitcoin_Script_with_P2SH.md @@ -7,10 +7,10 @@ Ahora que concoce la teoría y la práctica detrás de las direcciones P2SH, est Para bloquear una transacción con este script, haga lo siguiente: 1. Serializar `OP_ADD 99 OP_EQUAL`: - 1. OP_ADD = 0x93 — una traducción simple de opcode + 1. OP_ADD = 0x93 — una traducción simple de un opcode 2. 99 = 0x01, 0x63 — este opcode empuja un byte a la pila, 99 (hex: 0x63) * No se preocupe por la conversión endian porque es solo un byte - 3. OP_EQUAL = 0x87 — una tradducion simple de opcode translation + 3. OP_EQUAL = 0x87 — una tradducion simple de un opcode 4. `` = "93016387" ```