mirror of
https://github.com/ChristopherA/Learning-Bitcoin-from-the-Command-Line.git
synced 2025-06-06 23:46:22 +00:00
Merge pull request #468 from icculp/update_file_name_spanish
Update file names to Spanish
This commit is contained in:
commit
7908a360dc
@ -38,8 +38,8 @@ Así que ¿Por dónde se empieza? Este libro está destinado principalmente para
|
||||
|
||||
Si tiene diferentes niveles de habilidad o desea aprender cosas diferentes, puede pasar directamente a diferentes partes del libro:
|
||||
|
||||
* Si ya tiene un entorno de Bitcoin listo para ser utilizado, vaya al [Capítulo Tres: Comprensión de la configuración de Bitcoin.](03_2_Conociendo_su_Configuracion_Bitcoin.md)
|
||||
* Si solo le interesan las secuencias de comandos de Bitcoin, vaya al [Capítulo nueve: Introducción a las secuencias de comandos de Bitcoin.](09_0_Introducing_Bitcoin_Scripts.md)
|
||||
* Si ya tiene un entorno de Bitcoin listo para ser utilizado, vaya al [Capítulo Tres: Comprensión de la configuración de Bitcoin.](03_2_Conociendo_Su_Configuracion_Bitcoin.md)
|
||||
* Si solo le interesan las secuencias de comandos de Bitcoin, vaya al [Capítulo nueve: Introducción a las secuencias de comandos de Bitcoin.](09_0_Introduciendo_Bitcoin_Scripts.md)
|
||||
* Si solo desea leer sobre el uso de lenguajes de programación, vaya al [Capítulo dieciséis: Comunicarse con el servidor Bitcoin.](16_0_Hablando_a_Bitcoind_con_C.md)
|
||||
* Si, por el contrario, no quiere hacer nada relativo a programación, definitivamente omita los capítulos 15-17 mientras lee, y tal vez omita los capítulos 9-13. El resto del curso aún debería tener sentido sin ellos.
|
||||
* Si solo está interesado en Lightning, pase al [Capítulo diecinueve: Comprensión de la configuración de Lightning.](19_0_Entendiendo_Su_Configuracion_Lightning.md)
|
||||
@ -60,4 +60,4 @@ Obviamente está trabajando en este curso porque está interesado en Bitcoin. Ad
|
||||
|
||||
Si desea una introducción básica a Bitcoin, criptografía de clave pública, ECC, blockchains y Lightning, lea el interludio [Introduciendo Bitcoin.](01_1_Introduciendo_Bitcoin.md)
|
||||
|
||||
De lo contrario, si está listo para sumergirse en el curso, vaya a [Configuración de un Servidor privado Virtual de Bitcoin-Core.](02_0_Configurando_un_VPS_Bitcoin-Core.md)
|
||||
De lo contrario, si está listo para sumergirse en el curso, vaya a [Configuración de un Servidor privado Virtual de Bitcoin-Core.](02_0_Configurando_un_Bitcoin-Core_VPS.md)
|
||||
|
@ -145,4 +145,4 @@ Bitcoin es un sistema peer-to-peer que permite la transferencia de fondos a trav
|
||||
|
||||
## Que Sigue?
|
||||
|
||||
Continúe a través de la "Preparación para Bitcoin" con el [Capítulo dos: Configuración de un VPS Bitcoin-Core](02_0_Configurando_un_VPS_Bitcoin-Core.md)
|
||||
Continúe a través de la "Preparación para Bitcoin" con el [Capítulo dos: Configuración de un VPS Bitcoin-Core](02_0_Configurando_un_Bitcoin-Core_VPS.md)
|
||||
|
@ -24,5 +24,5 @@ Los objetivos de apoyo incluyen la capacidad de:
|
||||
|
||||
En realidad, no es necesario leer este capítulo completo. Decida si desea ejecutar un StackScript para configurar un nodo en un VPS Linode (§2.2); o desea configurarlo en un entorno diferente, como en una máquina AWS o Mac (§2.3). Luego puede ir a la sección correspondiente. Información adicional sobre nuestras configuraciones sugeridas también se puede encontrar en el Apéndice I.
|
||||
|
||||
* [Sección uno: Configurando un VPS Bitcoin-Core con Bitcoin Standup](02_1_Configurando_un_VPS_Bitcoin-Core_StackScript.md)
|
||||
* [Sección uno: Configurando un VPS Bitcoin-Core con Bitcoin Standup](02_1_Configurando_un_Bitcoin-Core_VPS_con_StackScript.md)
|
||||
* [Sección dos: Configurando una máquina Bitcoin-Core por otros medios](02_2_Configurando_Bitcoin_Core_Otros.md)
|
@ -4,9 +4,9 @@ Este documento explica cómo configurar un VPS (Virtual Private Sever) para ejec
|
||||
|
||||
> :warning: **ADVERTENCIA:** : No use un VPS para una billetera bitcoin con fondos reales significativos; ver [http://blog.thestateofme.com/2012/03/03/lessons-to-be-learned-from-the-linode-bitcoin-incident](http://blog.thestateofme.com/2012/03/03/lessons-to-be-learned-from-the-linode-bitcoin-incident). Es genial poder experimentar con transacciones reales de bitcoins en un nodo en vivo sin tener que conectar un servidor autohospedado en una red local. También es útil poder usar un iPhone o iPad para comunicarse a través de SSH con su VPS para realizar algunas tareas simples de bitcoin. Pero se requiere un mayor nivel de seguridad para fondos importantes.
|
||||
|
||||
* Si desea comprender lo que hace esta configuración, lea el [Apéndice I: Entendiendo Bitcoin Standup](A1_0_Entendiendo_la_Configuracion_Inicial_de_Bitcoin.md) mientras realiza la instalación.
|
||||
* Si desea comprender lo que hace esta configuración, lea el [Apéndice I: Entendiendo Bitcoin Standup](A1_0_Entendiendo_Bitcoin_Standup.md) mientras realiza la instalación.
|
||||
* Si, en cambio, desea configurar en una máquina que no sea un VPS Linode, como una máquina AWS o una Mac, puede ir a [2.2: Configuración de una máquina Bitcoin-Core a través de otros medios](02_2_Configurando_Bitcoin_Core_Otros.md)
|
||||
* Si ya tiene un nodo de Bitcoin en ejecución, vaya al [Capítulo tres: Entendiendo la configuración de Bitcoin](03_0_Entendiendo_su_configuracion_Bitcoin.md).
|
||||
* Si ya tiene un nodo de Bitcoin en ejecución, vaya al [Capítulo tres: Entendiendo la configuración de Bitcoin](03_0_Entendiendo_Su_Configuracion_Bitcoin.md).
|
||||
|
||||
## Introducción a Linode
|
||||
|
||||
@ -50,7 +50,7 @@ Ahora está listo para crear un nodo basado en Stackscript.
|
||||
* **Nombre de host completamente calificado.** Si va a incluir este VPS como parte de una red con registros DNS completos, escriba el nombre de host con su dominio. Por ejemplo, "mybtctest.mydomain.com". De lo contrario, repita el nombre de host corto y agregue ".local", por ejemplo "mybtctest.local".
|
||||
3. Ingrese la contraseña para el usuario "standup".
|
||||
4. Elija un tipo de instalación en las opciones avanzadas.
|
||||
* **Tipo de instalación.** Probablemente sea "Mainnet" o "Pruned Mainnet" si está configurando un nodo para su uso y "Testnet" o "Pruned Testnet" si solo está probando. La mayor parte de este tutorial asumirá que eligió "Testnet podado", pero aún debería poder seguir con otros tipos. Consulte la [Synopsis](#synopsis-bitcoin-installation-types) para obtener más información sobre estas opciones. (Tenga en cuenta que si planea probar los capítulos Lightning, probablemente querrá usar un nodo sin podar, ya que trabajar con nodos podados en Lightning es dudoso. Consulte [§18.1](18_1_Verifying_Your_Lightning_Setup.md#compiling-the-source-code) para conocer los detalles).
|
||||
* **Tipo de instalación.** Probablemente sea "Mainnet" o "Pruned Mainnet" si está configurando un nodo para su uso y "Testnet" o "Pruned Testnet" si solo está probando. La mayor parte de este tutorial asumirá que eligió "Testnet podado", pero aún debería poder seguir con otros tipos. Consulte la [Synopsis](#synopsis-bitcoin-installation-types) para obtener más información sobre estas opciones. (Tenga en cuenta que si planea probar los capítulos Lightning, probablemente querrá usar un nodo sin podar, ya que trabajar con nodos podados en Lightning es dudoso. Consulte [§19.1](19_1_Verificando_Su_Configuracion_Lightning.md#compiling-the-source-code) para conocer los detalles).
|
||||
5. Complete cualquier otra opción avanzada apropiada.
|
||||
* **X25519 Clave pública.** Esta es una clave pública para agregar a la lista de clientes autorizados de Tor. Si no lo usa, cualquiera que obtenga el código QR de su nodo puede acceder a él. Obtendrá esta clave pública de cualquier cliente que esté utilizando para conectarse a su nodo. Por ejemplo, si usa [FullyNoded 2](https://github.com/BlockchainCommons/FullyNoded-2), puede ir a su configuración y "Exportar clave pública de autenticación Tor V3" para usar aquí.
|
||||
* **Clave SSH.** Copie aquí la clave SSH de su computadora local; esto le permite iniciar sesión automáticamente a través de SSH en la cuenta standup. Si aún no ha configurado una clave SSH en su computadora local, hay buenas instrucciones para ello en [Github](https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/). Es posible que también desee agregar su clave SSH en su Linode LISH (Linode Interactive Shell) yendo a su "Página de inicio de Linode / Mis preferencias / Configuración de LISH / Teclas de LISH". El uso de una clave SSH le brindará una forma más sencilla y segura de iniciar sesión en su servidor.
|
||||
@ -65,7 +65,7 @@ Finalmente, deberá completar una contraseña de root, que será la contraseña
|
||||
|
||||
### Elija otras opciones de standup
|
||||
|
||||
Blockchain Commons se encuentra actualmente en el proceso de expandir sus scripts de Bitcoin Standup con opciones para instalar Lightning y otras aplicaciones de Bitcoin importantes. Eche un vistazo a las opciones adicionales y vea si son cosas con las que le gustaría jugar. En particular, si Lightning es una opción, sugerimos instalarlo, porque hará que el [Capítulo 18](18_0_Understanding_Your_Lightning_Setup.md) y el [Capítulo 19](19_0_Using_Lightning.md) sean mucho más fáciles.
|
||||
Blockchain Commons se encuentra actualmente en el proceso de expandir sus scripts de Bitcoin Standup con opciones para instalar Lightning y otras aplicaciones de Bitcoin importantes. Eche un vistazo a las opciones adicionales y vea si son cosas con las que le gustaría jugar. En particular, si Lightning es una opción, sugerimos instalarlo, porque hará que el [Capítulo 19](19_0_Entendiendo_Su_Configuracion_Lightning.md) y el [Capítulo 20](20_0_Usando_Lightning.md) sean mucho más fáciles.
|
||||
|
||||
### Elija un plan Linode
|
||||
|
||||
@ -191,9 +191,9 @@ Aunque la imagen predeterminada de Debian 10 que estamos usando para su VPS ha s
|
||||
|
||||
Su instalación de Bitcoin VPS es mínima y casi no permite ninguna comunicación. Esto se hace a través del sencillo firewall (`ufw`), que bloquea todo excepto las conexiones SSH. También es posible una seguridad adicional para sus puertos RPC, gracias a los servicios ocultos instalados por Tor.
|
||||
|
||||
** Ajustando UFW. ** ¡Probablemente debería dejar UFW en su etapa superprotegida! No debería utilizar una máquina Bitcoin para otros servicios, ¡porque todos aumentan su vulnerabilidad! Si decide lo contrario, hay varias [guías de UFW] (https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands) que le permitirán agregar servicios. Como se anuncia, no es complicado. Por ejemplo, agregar servicios de correo solo requeriría abrir el puerto de correo: `sudo ufw allow 25`. Pero en general no debería eso.
|
||||
**Ajustando UFW.** ¡Probablemente debería dejar UFW en su etapa superprotegida! No debería utilizar una máquina Bitcoin para otros servicios, ¡porque todos aumentan su vulnerabilidad! Si decide lo contrario, hay varias [guías de UFW](https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands) que le permitirán agregar servicios. Como se anuncia, no es complicado. Por ejemplo, agregar servicios de correo solo requeriría abrir el puerto de correo: `sudo ufw allow 25`. Pero en general no debería eso.
|
||||
|
||||
** Ajuste de Tor. ** Es posible que desee proteger mejor servicios tales como SSH. Consulte el [Capítulo 12: Uso de Tor] (https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/blob/master/12_0_Using_Tor.md) para obtener más información sobre Tor.
|
||||
**Ajuste de Tor.** Es posible que desee proteger mejor servicios tales como SSH. Consulte el [Capítulo 14: Usando Tor](14_0_Usando_Tor.md) para obtener más información sobre Tor.
|
||||
|
||||
### Consolas de comando protegidas
|
||||
|
||||
@ -244,23 +244,23 @@ La creación de un VPS de Bitcoin-Core con los scripts Standup hizo que todo el
|
||||
|
||||
Tiene algunas opciones para lo que sigue:
|
||||
|
||||
*Lea [StackScript] (https://github.com/BlockchainCommons/Bitcoin-Standup-Scripts/blob/master/Scripts/LinodeStandUp.sh) para comprender su configuración.
|
||||
* Lea [StackScript](https://github.com/BlockchainCommons/Bitcoin-Standup-Scripts/blob/master/Scripts/LinodeStandUp.sh) para comprender su configuración.
|
||||
|
||||
* Lea lo que hace StackScript en el [Apéndice I] (A1_0_Entendiendo_la_Configuracion_Inicial_de_Bitcoin.md).
|
||||
* Lea lo que hace StackScript en el [Apéndice I](A1_0_Entendiendo_Bitcoin_Standup.md).
|
||||
|
||||
* Elija una metodología completamente alternativa en [§2.2: Configuración de una máquina Bitcoin-Core a través de otros medios](02_2_Configurando_Bitcoin_Core_Otros.md).
|
||||
|
||||
* Pase a "bitcoin-cli" con el [Capítulo tres: Entendiendo la configuración de Bitcoin](03_0_Entendiendo_su_configuracion_Bitcoin.md).
|
||||
* Pase a "bitcoin-cli" con el [Capítulo tres: Entendiendo la configuración de Bitcoin](03_0_Entendiendo_Su_Configuracion_Bitcoin.md).
|
||||
|
||||
|
||||
## Sinopsis: Tipos de instalación de Bitcoin
|
||||
|
||||
** Mainnet. ** Esto descargará la totalidad de la cadena de bloques de Bitcoin. Esto es alrededor de 380G de datos (y cada día se aumenta más).
|
||||
**Mainnet.** Esto descargará la totalidad de la cadena de bloques de Bitcoin. Esto es alrededor de 380G de datos (y cada día se aumenta más).
|
||||
|
||||
** Mainnet podado. ** Esto reducirá la cadena de bloques que está almacenando a solo los últimos 550 bloques. Si no está minando o ejecutando algún otro servicio de Bitcoin, esto debería ser suficiente para la validación.
|
||||
**Mainnet podado.** Esto reducirá la cadena de bloques que está almacenando a solo los últimos 550 bloques. Si no está minando o ejecutando algún otro servicio de Bitcoin, esto debería ser suficiente para la validación.
|
||||
|
||||
** Testnet. ** Esto le da acceso a una cadena de bloques de Bitcoin alternativa donde los Bitcoins en realidad no tienen valor. Está destinado a la experimentación y las pruebas.
|
||||
**Testnet.** Esto le da acceso a una cadena de bloques de Bitcoin alternativa donde los Bitcoins en realidad no tienen valor. Está destinado a la experimentación y las pruebas.
|
||||
|
||||
** Testnet podado. ** Estos son solo los últimos 550 bloques de Testnet ... porque la cadena de bloques de Testnet también es bastante grande ahora.
|
||||
**Testnet podado.** Estos son solo los últimos 550 bloques de Testnet ... porque la cadena de bloques de Testnet también es bastante grande ahora.
|
||||
|
||||
** Private Regtest. ** Este es el modo de prueba de regresión, que le permite ejecutar un servidor Bitcoin totalmente local. Permite pruebas aún más profundas. No es necesario podar aquí, porque comenzará desde cero. Esta es una configuración muy diferente, por lo que se trata en el [Apéndice 3] (A3_0_Usando_Bitcoin_Regtest.md).
|
||||
**Private Regtest.** Este es el modo de prueba de regresión, que le permite ejecutar un servidor Bitcoin totalmente local. Permite pruebas aún más profundas. No es necesario podar aquí, porque comenzará desde cero. Esta es una configuración muy diferente, por lo que se trata en el [Apéndice 3](A3_0_Usando_Bitcoin_Regtest.md).
|
@ -1,12 +1,12 @@
|
||||
# 2.2: Configuración de una máquina Bitcoin-Core a través de otros medios
|
||||
|
||||
La sección anterior, [§2.1: Configuración de un VPS Bitcoin-Core con Bitcoin Standup](02_1_Configurando_un_VPS_Bitcoin-Core_StackScript.md), presumía que
|
||||
La sección anterior, [§2.1: Configuración de un VPS Bitcoin-Core con Bitcoin Standup](02_1_Configurando_un_Bitcoin-Core_VPS_con_StackScript.md), presumía que
|
||||
estaría creando un nodo completo en un VPS usando un Linode Stackscript. Sin embargo, puede crear una instancia de Bitcoin-Core a través de cualquier metodología de
|
||||
su elección y seguir los pasos posteriores de este tutorial.
|
||||
|
||||
A continuación, se muestran otras metodologías de configuración que conocemos:
|
||||
|
||||
* *[Compilación desde la fuente](A2_0_Compiling_Bitcoin_from_Source.md).* Si prefiere compilar Bitcoin Core a mano, eso se trata en el Apéndice 2.
|
||||
* *[Compilación desde la fuente](A2_0_Compilando_Bitcoin_desde_la_Fuente.md).* Si prefiere compilar Bitcoin Core a mano, eso se trata en el Apéndice 2.
|
||||
* *[Usando GordianNode-macOS](https://github.com/BlockchainCommons/GordianNode-macOS).* Si tienes una Mac moderna, puedes usar la aplicación *GordianNode* de
|
||||
Blockchain Commons, con tecnología *BitcoinStandup*, para instalar un nodo completo en su Mac.
|
||||
* *[Uso de otros scripts de Bitcoin Standup](https://github.com/BlockchainCommons/Bitcoin-Standup-Scripts).* Blockchain Commons también ofrece una versión del
|
||||
@ -21,4 +21,4 @@ cómo configurar una Nodo completo de forma sencilla en una Raspberry Pi 3.
|
||||
|
||||
A menos que desee volver a una de las otras metodologías para crear un nodo Bitcoin-Core, debe:
|
||||
|
||||
* Continúe con "bitcoin-cli" con el [Capítulo tres: Entendiendo su configuración de Bitcoin](03_0_Entendiendo_su_configuracion_Bitcoin.md).
|
||||
* Continúe con "bitcoin-cli" con el [Capítulo tres: Entendiendo su configuración de Bitcoin](03_0_Entendiendo_Su_Configuracion_Bitcoin.md).
|
||||
|
@ -6,7 +6,7 @@ La base de Bitcoin es la capacidad de proteger las transacciones, algo que se ha
|
||||
|
||||
Como se describe en el [Capítulo 1](01_1_Introduciendo_Bitcoin.md), los fondos en cada transacción de Bitcoin están bloqueados con un rompecabezas criptográfico. Para ser precisos, dijimos que Bitcoin se compone de "una secuencia de transacciones atómicas". Observamos que: "Cada transacción es autenticada por un remitente con la solución a un rompecabezas criptográfico anterior que se almacenó como un script. La nueva transacción está bloqueada para el destinatario con un nuevo rompecabezas criptográfico que también se almacena como un script". Esos scripts, que bloquean y desbloquean transacciones, están escritos en Bitcoin Script.
|
||||
|
||||
>:book:*** ¿Qué es Bitcoin Script? *** Bitcoin Script es un lenguaje similar a Forth basado en pilas que evita los bucles a propósito y, por lo tanto, no es Turing completo. Se compone de códigos de operación individuales. Cada transacción en Bitcoin está bloqueada con un script de Bitcoin; cuando la transacción de bloqueo para un UTXO se ejecuta con las entradas correctas, ese UTXO se puede gastar.
|
||||
>:book: ***¿Qué es Bitcoin Script?*** Bitcoin Script es un lenguaje similar a Forth basado en pilas que evita los bucles a propósito y, por lo tanto, no es Turing completo. Se compone de códigos de operación individuales. Cada transacción en Bitcoin está bloqueada con un script de Bitcoin; cuando la transacción de bloqueo para un UTXO se ejecuta con las entradas correctas, ese UTXO se puede gastar.
|
||||
|
||||
El hecho de que las transacciones estén bloqueadas con scripts significa que pueden bloquearse de varias formas diferentes, lo que requiere una variedad de claves diferentes. De hecho, hemos conocido varios mecanismos de bloqueo diferentes hasta la fecha, cada uno de los cuales usaba diferentes códigos de operación:
|
||||
|
||||
|
@ -1,142 +0,0 @@
|
||||
# 9.1: Comprensión de la Base de las Transacciones
|
||||
|
||||
La base de Bitcoin es la capacidad de proteger las transacciones, algo que se hace con un lenguaje de programación simple.
|
||||
|
||||
## Conozca las Partes del Rompecabezas Criptográfico
|
||||
|
||||
Como se describe en el [Chapter 1](01_0_Introducing_Bitcoin.md), los fondos en cada transacción de Bitcoin están bloqueados con un rompecabezas criptográfico. Para ser precisos, dijimos que Bitcoin se compone de "una secuencia de transacciones atómicas". Observamos que: "Cada transacción es autenticada por un remitente con la solución a un rompecabezas criptográfico anterior que se almacenó como un script. La nueva transacción está bloqueada para el destinatario con un nuevo rompecabezas criptográfico que también se almacena como un script." Esos scripts, que bloquean y desbloquean transacciones, están escritos en Bitcoin Script.
|
||||
|
||||
> :book: ***Que es Bitcoin Script?*** Bitcoin Script es un lenguaje similar a Forth basado en pilas que evita los bucles a propósito y, por lo tanto, no es Turing completo. Está compuesto por códigos de operación individuales. Cada transacción en Bitcoin está bloqueada con un script de Bitcoin; cuando la transacción de bloqueo para un UTXO se ejecuta con las entradas correctas, ese UTXO se puede gastar.
|
||||
|
||||
El hecho de que las transacciones estén bloqueadas con scripts significa que pueden bloquearse de varias formas diferentes, lo que requiere una variedad de claves diferentes. De hecho, hemos conocido varios mecanismos de bloqueo diferentes hasta la fecha, cada uno de los cuales usaba diferentes códigos de operación:
|
||||
|
||||
* OP_CHECKSIG, que compara una clave pública con una firma, es la base de la dirección P2PKH clásica, como se detallará en [§9.3: Scripting a P2PKH](09_3_Scripting_a_P2PKH.md).
|
||||
* OP_CHECKMULTISIG verifica de manera similar multifirma, como se detallará completamente en [§10.4: Scripting a Multisig](10_4_Scripting_a_Multisig.md).
|
||||
* OP_CHECKLOCKTIMEVERIFY y OP_SEQUENCEVERIFY forman la base de bloqueos de tiempo más complejos, como se detallará completamente en [§11.2: Using CLTV in Scripts](11_2_Using_CLTV_in_Scripts) and [§11.3: Using CSV in Scripts](11_3_Using_CSV_in_Scripts.md).
|
||||
* OP_RETURN es la marca de una transacción inutilizable, por lo que se utiliza para transportar datos, como se mencionó en [§8.2: Sending a Transaction with Data](08_2_Sending_a_Transaction_with_Data.md).
|
||||
|
||||
## Acceda a los Scripts en su Transacciones
|
||||
|
||||
Es posible que no se dé cuenta, pero ya ha visto estos scripts de bloqueo y desbloqueo como parte de las transacciones sin procesar con las que ha estado trabajando. La mejor manera de examinar estos scripts con más profundidad es crear una transacción sin procesar y luego examinarla.
|
||||
|
||||
### Crear una Transacción de Prueba
|
||||
|
||||
Para examinar los scripts de desbloqueo y bloqueo reales, cree una transacción sin procesar rápida tomando un UTXO heredado no gastado y reenvíándolo a una dirección de cambio heredada, menos una tarifa de transacción:
|
||||
```
|
||||
$ utxo_txid=$(bitcoin-cli listunspent | jq -r '.[1] | .txid')
|
||||
$ utxo_vout=$(bitcoin-cli listunspent | jq -r '.[1] | .vout')
|
||||
$ recipient=$(bitcoin-cli -named getrawchangeaddress address_type=legacy)
|
||||
$ rawtxhex=$(bitcoin-cli -named createrawtransaction inputs='''[ { "txid": "'$utxo_txid'", "vout": '$utxo_vout' } ]''' outputs='''{ "'$recipient'": 0.0009 }''')
|
||||
$ signedtx=$(bitcoin-cli -named signrawtransactionwithwallet hexstring=$rawtxhex | jq -r '.hex')
|
||||
```
|
||||
En realidad, no es necesario que lo envíe: el objetivo es simplemente producir una transacción completa que pueda examinar.
|
||||
|
||||
> **NOTA:** Por que direcciones heredadas? Porque sus guiones son más significativos. Sin embargo, también ofreceremos un ejemplo de un SegWit P2WPKH nativo en [§9.5](09_5_Scripting_a_P2WPKH.md).
|
||||
|
||||
### Examine Su Transacción de Prueba
|
||||
|
||||
Ahora puede examinar su transacción en profundidad usando `decoderawtransaction` en el `$signedtx`:
|
||||
```
|
||||
$ bitcoin-cli -named decoderawtransaction hexstring=$signedtx
|
||||
{
|
||||
"txid": "34151dac704d94a269cd33f80be34c122152edc9bfbb9323852966bf0ce937ed",
|
||||
"hash": "34151dac704d94a269cd33f80be34c122152edc9bfbb9323852966bf0ce937ed",
|
||||
"version": 2,
|
||||
"size": 191,
|
||||
"vsize": 191,
|
||||
"weight": 764,
|
||||
"locktime": 0,
|
||||
"vin": [
|
||||
{
|
||||
"txid": "bb4362dec15e67d366088f5493c789f22fb4a604e767dae1f6a631687e2784aa",
|
||||
"vout": 0,
|
||||
"scriptSig": {
|
||||
"asm": "304402201cc39005b076cb06534cd084fcc522e7bf937c4c9654c1c9dfba68b92cbab7d1022066f273178febc7a37568e2e9f4dec980a2e9a95441abe838c7ef64c39d85849c[ALL] 0315a0aeb37634a71ede72d903acae4c6efa77f3423dcbcd6de3e13d9fd989438b",
|
||||
"hex": "47304402201cc39005b076cb06534cd084fcc522e7bf937c4c9654c1c9dfba68b92cbab7d1022066f273178febc7a37568e2e9f4dec980a2e9a95441abe838c7ef64c39d85849c01210315a0aeb37634a71ede72d903acae4c6efa77f3423dcbcd6de3e13d9fd989438b"
|
||||
},
|
||||
"sequence": 4294967295
|
||||
}
|
||||
],
|
||||
"vout": [
|
||||
{
|
||||
"value": 0.00090000,
|
||||
"n": 0,
|
||||
"scriptPubKey": {
|
||||
"asm": "OP_DUP OP_HASH160 06b5c6ba5330cdf738a2ce91152bfd0e71f9ec39 OP_EQUALVERIFY OP_CHECKSIG",
|
||||
"hex": "76a91406b5c6ba5330cdf738a2ce91152bfd0e71f9ec3988ac",
|
||||
"reqSigs": 1,
|
||||
"type": "pubkeyhash",
|
||||
"addresses": [
|
||||
"mg8S7F1gY3ivV9M9GrWwe6ziWvK2MFquCf"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
```
|
||||
Los dos scripts se encuentran en las dos partes diferentes de la transacción.
|
||||
|
||||
El `scriptSig` se encuentra en el `vin`. Este es el script de _desbloqueo_. Es lo que se ejecuta para acceder al UTXO que se utiliza para financiar esta transacción. Habrá un `scriptSig` por UTXO en una transacción.
|
||||
|
||||
El `scriptPubKey` se encuentra en el `vout`. Este es el script de _bloqueo_. Es lo que bloquea la nueva salida de la transacción. Habrá un `scriptPubKey` por salida en una transacción.
|
||||
|
||||
> :book: ***¿Cómo interactúan scriptSig y scriptPubKey?*** El `scriptSig` de una transacción desbloquea el UTXO anterior; la salida de esta nueva transacción se bloqueará con un `scriptPubKey`, que a su vez puede ser desbloqueado por el `scriptSig` de la transacción que reutiliza ese UTXO.
|
||||
|
||||
### Lea los Scripts en Su Transacción
|
||||
|
||||
Mire los dos guiones y verá que cada uno incluye dos representaciones diferentes: el `hex` es lo que realmente se almacena, pero el lenguaje ensamblador más legible (`asm`) puede mostrarle lo que está sucediendo.
|
||||
|
||||
Eche un vistazo al `asm` del script de desbloqueo y verá por primera vez cómo se ve Bitcoin Scripting:
|
||||
```
|
||||
04402201cc39005b076cb06534cd084fcc522e7bf937c4c9654c1c9dfba68b92cbab7d1022066f273178febc7a37568e2e9f4dec980a2e9a95441abe838c7ef64c39d85849c[ALL] 0315a0aeb37634a71ede72d903acae4c6efa77f3423dcbcd6de3e13d9fd989438b
|
||||
```
|
||||
Sucede que ese lío de números es una firma de clave privada seguida de la clave pública asociada. O al menos eso es lo que es, porque eso es lo que se requiere para desbloquear el P2PKH UTXO que está usando esta transacción.
|
||||
|
||||
Lea el script de bloqueo y verá que es mucho más obvio:
|
||||
```
|
||||
OP_DUP OP_HASH160 06b5c6ba5330cdf738a2ce91152bfd0e71f9ec39 OP_EQUALVERIFY OP_CHECKSIG
|
||||
```
|
||||
Ese es el método estándar en Bitcoin Script para bloquear una transacción P2PKH.
|
||||
|
||||
[§9.4](09_4_Scripting_a_P2PKH.md) explicará cómo se combinan estos dos scripts, pero primero deberá saber cómo se evalúan los scripts de Bitcoin.
|
||||
|
||||
## Examinar un Tipo Diferente de Transacción
|
||||
|
||||
Antes de dejar atrás esta base, veremos un tipo diferente de secuencia de comandos de bloqueo. Aquí está la `scriptPubKey` de la transacción de firma múltiple que creó en [§6.1: Sending a Transaction with a Multisig](06_1_Sending_a_Transaction_to_a_Multisig.md).
|
||||
```
|
||||
"scriptPubKey": {
|
||||
"asm": "OP_HASH160 a5d106eb8ee51b23cf60d8bd98bc285695f233f3 OP_EQUAL",
|
||||
"hex": "a914a5d106eb8ee51b23cf60d8bd98bc285695f233f387",
|
||||
"reqSigs": 1,
|
||||
"type": "scripthash",
|
||||
"addresses": [
|
||||
"2N8MytPW2ih27LctLjn6LfLFZZb1PFSsqBr"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Compare eso con el `scriptPubKey` de su nuava transacción P2PKH:
|
||||
```
|
||||
"scriptPubKey": {
|
||||
"asm": "OP_DUP OP_HASH160 06b5c6ba5330cdf738a2ce91152bfd0e71f9ec39 OP_EQUALVERIFY OP_CHECKSIG",
|
||||
"hex": "76a91406b5c6ba5330cdf738a2ce91152bfd0e71f9ec3988ac",
|
||||
"reqSigs": 1,
|
||||
"type": "pubkeyhash",
|
||||
"addresses": [
|
||||
"mg8S7F1gY3ivV9M9GrWwe6ziWvK2MFquCf"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Estas dos transacciones están _definitivamente_ bloqueadas de diferentes formas. Bitcoin reconoce el primero como `scripthash` (P2SH) y el segundo como `pubkeyhash` (P2PKH), pero también debería poder ver la diferencia en los diferentes códigos `asm`: `OP_HASH160 a5d106eb8ee51b23cf60d8bd98bc285695f233f3 OP_EQUAL` frente a `OP_DUP OP_HASH160 06b5c6ba5330cdf738a2ce91152bfd0e71f9ec39 OP_EQUALVERIFY OP_CHECKSIG`. Este es el poder de las secuencias de comandos: puede producir de manera muy simple algunos de los tipos de transaciones dramáticamente diferentes de los que aprendió en los capítulos anteriores.
|
||||
|
||||
## Resumen: Comprensión de la Base de las Transacciones
|
||||
|
||||
Cada transacción de Bitcoin incluye al menos un script de desbloqueo (`scriptSig`), que resuelve un rompecabezas criptográfico anterior, y el menos un script de bloqueo (`scriptPubKey`), que crea un nuevo rompecabezas criptográfico. Hay uno `scriptSig` por entrada y uno `scriptPubKey` por salida. Cada uno de estos scripts está escrito en Bitcoin Script, un lenguaje similar a Forth que potencia aún más a Bitcoin.
|
||||
|
||||
> :fire: ***Cuál es el poder de los scripts?*** Los scripts desbloquean todo el poder de los contratos inteligentes. Con los códigos de operación adecuados, puede tomar decisiones muy precisas sobre quíen puede canjear fondos, cuándo pueden canjear fondos y cómo pueden canjear fondos. También se pueden codificar dentro de un script reglas más complejas para el gasto corporativo, el gasto en asociaciones, el gasto por poder y otras metodologías. Incluso potencia servicios de Bitcoin más complejos como Lightning y sidechains.
|
||||
|
||||
## Que Sigue?
|
||||
|
||||
Continúe "Introducción a los Scripts de Bitcoin" con [§9.2: Running a Bitcoin Script](09_2_Running_a_Bitcoin_Script.md).
|
@ -1,125 +0,0 @@
|
||||
# 9.2: Ejecución de un Script de Bitcoin
|
||||
|
||||
Los scripts de Bitcoin pueden no parecer inicialmente tan intuitivos, pero su ejecución es bastante simple, utilizando notación polaca inversa y una pila.
|
||||
|
||||
## Comprender el Lenguaje de Secuencias de Comandos
|
||||
|
||||
Un script de Bitcoin tiene tres partes: tiene una línea de entrada; tiene una pila para almacenamiento; y tiene comandos específicos para su ejecución.
|
||||
|
||||
### Entender el Order
|
||||
|
||||
Los scripts de Bitcoin se ejecutan de izquierda a derecha. Eso suena bastante fácil, porque es la misma forma en que lee. Sin embargo, en realidad podría ser el elemento menos intuitivo de Bitcoin Script, porque significa que las funciones no se ven como esperaba. En cambio, _los operandos van antes que la operadora._
|
||||
|
||||
Por ejemplo, si estuviera sumando "1" y "2", su Bitcoin Script para eso sería `1 2 OP_ADD`, _no_ "1 + 2". Como sabemos que el operador OP_ADD toma dos entradas, sabemos que las dos entradas anteriores son sus operandos.
|
||||
|
||||
> :warning: **ADVERTENCIA:** Técnicamente, todo en Bitcoin Script es un código de operación, por lo que sería más apropiado registrar el ejemplo anterior como `OP_1 OP_2 OP_ADD`. En nuestros ejemplos, no nos preocupamos por cómo se evaluarán las constantes, ya que ese es un tema de traducción, como se explica en [§8.2: Building the Structure of P2SH](08_2_Building_the_Structure_of_P2SH.md). Algunos escritores prefieren dejar el prefijo "OP" también fuera de todos los operadores, nosotros hemos optado por no hacerlo.
|
||||
|
||||
### Entender la Pila
|
||||
|
||||
En realidad, no es del todo correcto decir que un operador aplica a las entradas enfrente que lo. En realidad, no es del todo correcto decir que un operador se aplica a las entradas anteriores.
|
||||
|
||||
> :book: ***Que es un pila?*** Una pila es una estructura de datos LIFO (last-in-first-out o último en entrar, primero en salir). Tiene dos funciones de accesso: push y pop. Push coloca un nuevo objeto en la parte superior de la pila, empujando hacia abajo todo lo que está debajo. Pop elimina el objeto superior de la pila.
|
||||
|
||||
Siempre que Bitcoin Script encuentra una constante, la empuja a la pila. Por lo tanto, el ejemplo anterior de `1 2 OP_ADD` se vería así cuando se procesó:
|
||||
```
|
||||
Script: 1 2 OP_ADD
|
||||
Stack: [ ]
|
||||
|
||||
Script: 2 OP_ADD
|
||||
Stack: [ 1 ]
|
||||
|
||||
Script: OP_ADD
|
||||
Stack: [ 1 2 ]
|
||||
```
|
||||
_Tenga en cuenta que en este y en los siguientes ejemplos, la parte superior de la pila está a la derecha y la parte inferior a la izquierda._
|
||||
|
||||
### Comprender los Opcodes
|
||||
|
||||
Cuando un script de Bitcoin encuentra un operador, lo evalúa. Cada operador pops (saca) cero o más elementos de la pila como entradas, generalmente uno o dos. Luego los procesa de una manera específica antes de devolver cero o más elementos a la pila, generalmente uno o dos.
|
||||
|
||||
> :book: ***Que es un Opcode?*** Opcode significa "operation code" o "código de operación". Por lo general, se asocia con el código en lenguaje de máquina y es una función simple (u "operador").
|
||||
|
||||
OP_ADD pops dos elementos de la pila (aquí: 2 y luego 1), luego suma y vuelve a colocar el resultado en la pila (aquí: 3).
|
||||
```
|
||||
Script:
|
||||
Running: 1 2 OP_ADD
|
||||
Stack: [ 3 ]
|
||||
```
|
||||
|
||||
## Para Construir Complejidad
|
||||
|
||||
Se crean scripts más complejos ejecutando más comandos en orden. Deben evaluarse cuidadosamente de izquierda a derecha, para que pueda comprender el estado de la pila a medida que se ejecuta cada nuevo comando. Cambiará constantemente, como resultado de operadores anteriores:
|
||||
```
|
||||
Script: 3 2 OP_ADD 4 OP_SUB
|
||||
Stack: [ ]
|
||||
|
||||
Script: 2 OP_ADD 4 OP_SUB
|
||||
Stack: [ 3 ]
|
||||
|
||||
Script: OP_ADD 4 OP_SUB
|
||||
Stack: [ 3 2 ]
|
||||
|
||||
Script: 4 OP_SUB
|
||||
Running: 3 2 OP_ADD
|
||||
Stack: [ 5 ]
|
||||
|
||||
Script: OP_SUB
|
||||
Stack: [ 5 4 ]
|
||||
|
||||
Script:
|
||||
Running: 5 4 OP_SUB
|
||||
Stack: [ 1 ]
|
||||
```
|
||||
|
||||
## Comprender el Uso de Bitcoin Script
|
||||
|
||||
Eso es prácticamente Bitcoin Scripting ... además de algunas complejidades sobre cómo este lenguaje de secuencias de comandos interactúa con el propio Bitcoin.
|
||||
|
||||
### Comprender scriptSig y scriptPubKey
|
||||
|
||||
Como hemos visto, cada entrada para una transacción de Bitcoin contiene un `scriptSig` que se usa para desbloquear el `scriptPubKey` para el UTXO asociado. Están _efectivamente_ concatenados juntos `scriptSig` y `scriptPubKey` se ejecutan juntos, en ese orden.
|
||||
|
||||
Entonces, suponga que un UTXO fue bloqueado con una `scriptPubKey` que lee `OP_ADD 99 OP_EQUAL`, requiriendo como entrada dos números que suman noventa y nueve, y suponga que el `scriptSig` de `1 98` se ejecutó para desbloquear. Los dos scripts se ejecutarían efectivamente en orden como `1 98 OP_ADD 99 OP_EQUAL`.
|
||||
|
||||
Evaluar el resultado:
|
||||
```
|
||||
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 ]
|
||||
```
|
||||
Esta abstracción no es del todo precisa: por razones de seguridad, se ejecuta el `scriptSig`, luego el contenido de la pila se transfiere para que se ejecute el `scriptPubKey` pero es lo suficientemente preciso para comprender cómo la clave de `scriptSig` encaja en la cerradura de `scriptPubKey`.
|
||||
|
||||
> :warning: **ADVERTENCIA** El anterior es un tipo de transacción no estándar. En realidad, los nodos que ejecutan Bitcoin Core con la configuración estándar no lo aceptarían. [§10.1: Building a Bitcoin Script with P2SH](10_1_Understanding_the_Foundation_of_P2SH.md) analiza cómo en realidad _podría_ ejecutar un Bitcoin Script como este, utilizando el poder de P2SH.
|
||||
|
||||
### Obtenga los Resultados
|
||||
|
||||
Bitcoin verificará una transacción y permitirá que el UTXO sea respetado si se cumplen dos criterios al ejecutar `scriptSig` y `scriptPubKey`:
|
||||
|
||||
1. La ejecución no se marcó como inválida en ningún momento, por ejemplo, con un OP_VERIFY fallido o el uso de un opcode deshabilitado.
|
||||
2. El elemento superior de la pila al final de la ejecución es verdadero (distinto de cero).
|
||||
|
||||
En el ejemplo anterior, la transacción se realizaría correctamente porque la pila tiene un `True` en la parte superior. Pero, sería igualmente permisible terminar con una pila completa y el número `42` en la parte superior.
|
||||
|
||||
## Resumen: Ejecución de un Bitcoin Script
|
||||
|
||||
Para procesar un script de Bitcoin, se ejecuta un `scriptSig` seguido de la `scriptPubKey` que está desbloqueando. Estos comandos se ejecutan en orden, de izquierda a derecha, con constantes que se insertan en una pila y los operadores extraen elementos de esa pila y luego devuelven los resultados a ella. Si el script no se detiene en el medio y si el elemento en la parte superior de la pila al final no es cero, entonces el UTXO está desbloqueado.
|
||||
|
||||
## Que Sigue?
|
||||
|
||||
Continúe "Introducción a los Bitcoin Scripts" con [§9.3: Testing a Bitcoin Script](09_3_Testing_a_Bitcoin_Script.md).
|
@ -18,9 +18,9 @@ Los objetivos de apoyo incluyen la capacidad de:
|
||||
|
||||
## Tabla de Contenido
|
||||
|
||||
* [Sección Uno: Comprender la Base de P2SH](10_1_Understanding_the_Foundation_of_P2SH.md)
|
||||
* [Sección Dos: Construyendo la Estructura de P2SH](10_2_Building_the_Structure_of_P2SH.md)
|
||||
* [Sección Tres: Ejecución de un Bitcoin Script con P2SH](10_3_Running_a_Bitcoin_Script_with_P2SH.md)
|
||||
* [Sección Cuatro: Creación de un Script de Multifirma](10_4_Scripting_a_Multisig.md)
|
||||
* [Sección Cinco: Creación de un Script de Segwit](10_5_Scripting_a_Segwit_Script.md)
|
||||
* [Sección Seis: Gasto en Transacciones P2SH](10_6_Spending_a_P2SH_Transaction.md)
|
||||
* [Sección Uno: Comprender la Base de P2SH](10_1_Entendiendo_la_Base_de_P2SH.md)
|
||||
* [Sección Dos: Construyendo la Estructura de P2SH](10_2_Construyendo_la_Estructura_de_P2SH.md)
|
||||
* [Sección Tres: Ejecución de un Bitcoin Script con P2SH](10_3_Ejecutando_un_Script_Bitcoin_con_P2SH.md)
|
||||
* [Sección Cuatro: Creación de un Script de Multifirma](10_4_Codificando_una_Multifirma.md)
|
||||
* [Sección Cinco: Creación de un Script de Segwit](10_5_Codificando_un_Script_Segwit.md)
|
||||
* [Sección Seis: Gasto en Transacciones P2SH](10_6_Gastando_una_Transaccion_P2SH.md)
|
@ -19,7 +19,7 @@ Entonces, ¿cómo se escribe un script de Bitcoin más complejo? La respuesta es
|
||||
|
||||
## Entender el P2SH Script
|
||||
|
||||
Ya vio una transacción P2SH cuando creó una firma múltiple en [§6.1: Envío de una Transacción a una Multifirma](06_1_Sending_a_Transaction_to_a_Multisig.md). Aunque multifirma es uno de los tipos de transacciones estándar, `bitcoin-cli` simplifica el uso de sus multifirmas al incrustarlas en transacciones P2SH, como se describe con más detalle en [§8.4: Scripting a Multisig](08_4_Scripting_a_Multisig.md).
|
||||
Ya vio una transacción P2SH cuando creó una firma múltiple en [§6.1: Envío de una Transacción a una Multifirma](06_1_Enviando_una_Transaccion_a_una_Direccion_Multifirma.md). Aunque multifirma es uno de los tipos de transacciones estándar, `bitcoin-cli` simplifica el uso de sus multifirmas al incrustarlas en transacciones P2SH, como se describe con más detalle en [§10.4: Scripting a Multisig](10_4_Codificando_una_Multifirma.md).
|
||||
|
||||
Entonces, veamos una vez más el `scriptPubKey` de ese P2SH multifirma:
|
||||
```
|
||||
@ -56,7 +56,7 @@ En general, se requieren cuatro pasos:
|
||||
|
||||
Cada uno de esos pasos, por supuesto, requiere algo de trabajo por sí solo, y algunos de ellos pueden ser bastante intrincados. La buena noticia es que realmente no tiene que preocuparse por por ellos, porque son lo sucifientemente complejos como para que normalmente tenga una API que se encargue de todo por usted.
|
||||
|
||||
Entonces, por ahora, solo le proporcionaremos una descripción general, para que comprenda la metodología general. En [§10.2: Construyendo la Estructura de P2SH](10_2_Building_the_Structure_of_P2SH.md) proporcionaremos una mirada más profunda a la creación de scripts, en caso de que alguna vez quiera comprender las entrañas de este proceso.
|
||||
Entonces, por ahora, solo le proporcionaremos una descripción general, para que comprenda la metodología general. En [§10.2: Construyendo la Estructura de P2SH](10_2_Construyendo_la_Estructura_de_P2SH.md) proporcionaremos una mirada más profunda a la creación de scripts, en caso de que alguna vez quiera comprender las entrañas de este proceso.
|
||||
|
||||
## Comprender Cómo Enviar una Transacción de Script P2SH
|
||||
|
||||
@ -75,7 +75,7 @@ El truco para canjear una transacción P2SH es que el destinatario debe haber gu
|
||||
|
||||
Un `scriptSig` de desbloqueo para una transacción P2SH se forma como: `... data ... <redeemScript>`. Los `datos` deben ser _solo_ datos que se insertan en la pila, no operadores. ([BIP 16](https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki) los llama firmas, pero eso no es un requisito real.)
|
||||
|
||||
> :warning: **ADVERTENCIA:** Aunque las firmas no son un requisito, un script P2SH en realidad no es muy seguro si no requiere al menos una firma en sus entradas. Las razones de esto se describen en [§13.1: Escritura de Scripts de Rompecabezas](13_1_Writing_Puzzle_Scripts.md).
|
||||
> :warning: **ADVERTENCIA:** Aunque las firmas no son un requisito, un script P2SH en realidad no es muy seguro si no requiere al menos una firma en sus entradas. Las razones de esto se describen en [§13.1: Escritura de Scripts de Rompecabezas](13_1_Escribiendo_Puzzle_Scripts.md).
|
||||
|
||||
Cuando se canjea un UTXO, se ejecuta en dos rondas de verificación:
|
||||
|
||||
@ -84,9 +84,9 @@ Cuando se canjea un UTXO, se ejecuta en dos rondas de verificación:
|
||||
3. En segundo lugar, el `redeemScript` se ejecuta utilizando los datos anteriores que se insertaron en la pila.
|
||||
4. Si esa segunda ronda de verificación _también_ tiene éxito, el UTXO se desbloquea.
|
||||
|
||||
Si bien no puede crear fácilmente una transacción P2SH sin una API, debería poder canjear fácilmente una transacción P2SH con `bitcoin-cli`. De hecho, ya lo hizo en [§6.2: Envío de una Transacción a un Multifirma](06_2_Spending_a_Transaction_to_a_Multisig.md). El proceso exacto se describe en [§10.6: Gasto de una Transacción P2SH](10_6_Spending_a_P2SH_Transaction.md), una vez que hayamos terminado con todas las complejidades de la creación de transacciones P2SH.
|
||||
Si bien no puede crear fácilmente una transacción P2SH sin una API, debería poder canjear fácilmente una transacción P2SH con `bitcoin-cli`. De hecho, ya lo hizo en [§6.2: Envío de una Transacción a un Multifirma](06_2_Gastando_una_Transaccion_con_una_Direccion_Multifirma.md). El proceso exacto se describe en [§10.6: Gasto de una Transacción P2SH](10_6_Gastando_una_Transaccion_P2SH.md), una vez que hayamos terminado con todas las complejidades de la creación de transacciones P2SH.
|
||||
|
||||
> :warning: **ADVERTENCIA:** Puede crear una transacción perfectamente válida con un código redeemScript correctamente codificado, pero si el código redeemScript no se ejecuta o no se ejecuta correctamente, sus fondos se perderán para siempre. Por eso es tan importante probar sus secuencias de comandos, como se explíca en [§9.3: Prueba de una Bitcoin Script](09_3_Testing_a_Bitcoin_Script.md).
|
||||
> :warning: **ADVERTENCIA:** Puede crear una transacción perfectamente válida con un código redeemScript correctamente codificado, pero si el código redeemScript no se ejecuta o no se ejecuta correctamente, sus fondos se perderán para siempre. Por eso es tan importante probar sus secuencias de comandos, como se explíca en [§9.3: Prueba de una Bitcoin Script](09_3_Probando_un_Script_Bitcoin.md).
|
||||
|
||||
## Resumen: Comprensión de la Base de P2SH
|
||||
|
||||
@ -96,4 +96,4 @@ Los scripts arbitrarios de Bitcoin no son estándar en Bitcoin. Sin embargo, pue
|
||||
|
||||
## Que Sigue?
|
||||
|
||||
Continúe "Incrustando Bitcoin Scripts" con [§10.2: Construyendo la Estructura de P2SH](10_2_Building_the_Structure_of_P2SH.md).
|
||||
Continúe "Incrustando Bitcoin Scripts" con [§10.2: Construyendo la Estructura de P2SH](10_2_Construyendo_la_Estructura_de_P2SH.md).
|
@ -92,7 +92,7 @@ Hexcode: 049f7b2adc
|
||||
|
||||
## Analizar un P2SH Multifirma
|
||||
|
||||
Para comprender mejor este proceso, aplicaremos ingeniería inversa al P2SH multifirma que creamos en [§6.1: Envío de una Transacción a un Multifirma](06_1_Sending_a_Transaction_to_a_Multisig.md). Eche un vistazo al `redeemScript` que usó, que ahora sabe que es la versión serializada en hex del script de bloqueo:
|
||||
Para comprender mejor este proceso, aplicaremos ingeniería inversa al P2SH multifirma que creamos en [§6.1: Envío de una Transacción a un Multifirma](06_1_Enviando_una_Transaccion_a_una_Direccion_Multifirma.md). Eche un vistazo al `redeemScript` que usó, que ahora sabe que es la versión serializada en hex del script de bloqueo:
|
||||
```
|
||||
522102da2f10746e9778dd57bd0276a4f84101c4e0a711f9cfd9f09cde55acbdd2d1912102bfde48be4aa8f4bf76c570e98a8d287f9be5638412ab38dede8e78df82f33fa352ae
|
||||
```
|
||||
@ -142,7 +142,7 @@ Es especialmente útil para verificar su trabajo cuando está serializando.
|
||||
|
||||
## Serializar un Script de Bloqueo de Forma Sencilla
|
||||
|
||||
Cuando instaló `btcdeb` en [§9.3](09_3_Testing_a_Bitcoin_Script.md) también instaló `btcc` que se puede usar para seralizar scripts de Bitcoin:
|
||||
Cuando instaló `btcdeb` en [§9.3](09_3_Probando_un_Script_Bitcoin.md) también instaló `btcc` que se puede usar para seralizar scripts de Bitcoin:
|
||||
```
|
||||
$ btcc 2 02da2f10746e9778dd57bd0276a4f84101c4e0a711f9cfd9f09cde55acbdd2d191 02bfde48be4aa8f4bf76c570e98a8d287f9be5638412ab38dede8e78df82f33fa3 2 OP_CHECKMULTISIG
|
||||
warning: ambiguous input 2 is interpreted as a numeric value; use OP_2 to force into opcode
|
||||
@ -177,4 +177,4 @@ En realidad, la creación del script de bloqueo P2SH se sumerge en las entrañas
|
||||
|
||||
## ¿Que Sigue?
|
||||
|
||||
Continúe "Incrustando Bitcoin Scripts" con [§10.3: Ejecución de un Bitcoin Script con P2SH](10_3_Running_a_Bitcoin_Script_with_P2SH.md).
|
||||
Continúe "Incrustando Bitcoin Scripts" con [§10.3: Ejecución de un Bitcoin Script con P2SH](10_3_Ejecutando_un_Script_Bitcoin_con_P2SH.md).
|
@ -1,6 +1,6 @@
|
||||
# 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`.
|
||||
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_Ejecutando_un_Script_Bitcoin.md), `OP_ADD 99 OP_EQUAL`.
|
||||
|
||||
## Crear una Transacción P2SH
|
||||
|
||||
@ -97,4 +97,4 @@ Una vez que conozca la técnica de construcción de P2SH, cualquier script se pu
|
||||
|
||||
## Que Sigue?
|
||||
|
||||
Continúe "Incrustando Bitcoin Scripts" con [§10.4: Scripting a Multisig](10_4_Scripting_a_Multisig.md).
|
||||
Continúe "Incrustando Bitcoin Scripts" con [§10.4: Scripting a Multisig](10_4_Codificando_una_Multifirma.md).
|
@ -1,6 +1,6 @@
|
||||
# 10.4: Guioniendo una Multifirma
|
||||
|
||||
Antes de cerrar esta introducción a las secuencias de comandos P2SH, vale la pena examinar un ejemplo más realista. Desde [§6.1](06_1_Sending_a_Transaction_to_a_Multisig.md), hemos estado diciendo casualmente que la `bitcoin-cli` envuelve su transacción multifirma en una transacción P2SH. De hecho, esta es la metodologiá estándar para crear multifirmas en Blockchain. Así es como funciona eso en profundidad.
|
||||
Antes de cerrar esta introducción a las secuencias de comandos P2SH, vale la pena examinar un ejemplo más realista. Desde [§6.1](06_1_Enviando_una_Transaccion_a_una_Direccion_Multifirma.md), hemos estado diciendo casualmente que la `bitcoin-cli` envuelve su transacción multifirma en una transacción P2SH. De hecho, esta es la metodologiá estándar para crear multifirmas en Blockchain. Así es como funciona eso en profundidad.
|
||||
|
||||
## Entender el Código Multifirma
|
||||
|
||||
@ -22,15 +22,15 @@ El requisito de que `0` como primer operando de `OP_CHECKMULTISIG` es una regla
|
||||
|
||||
## Crear una Multifima Sin Procesar
|
||||
|
||||
Como se explica en [§10.1: Creación de un Bitcoin Script con P2SH](10_1_Building_a_Bitcoin_Script_with_P2SH.md), las multifirmas son uno de los tipos de transacciones estándar de Bitcoin. Se puede crear una transacción con un script de bloqueo que utiliza el comando `OP_CHECKMULTISIG` sin procesar, y se aceptará en un bloque. Esta es la metodología clásica para usar multifirmas en Bitcoin.
|
||||
Como se explica en [§10.1: Creación de un Bitcoin Script con P2SH](10_0_Embebiendo_Bitcoin_Scripts_en_Transacciones_P2SH.md), las multifirmas son uno de los tipos de transacciones estándar de Bitcoin. Se puede crear una transacción con un script de bloqueo que utiliza el comando `OP_CHECKMULTISIG` sin procesar, y se aceptará en un bloque. Esta es la metodología clásica para usar multifirmas en Bitcoin.
|
||||
|
||||
Como ejemplo, volveremos a visitar la multifirma creado en [§8.1](08_1_Sending_a_Transaction_to_a_Multisig.md) una útltima vez y crearemos un nuevo script de bloqueo para esta utilizando dicha metodología. Como recordará, se trataba de una multifirma 2 de 2 construida a partir de `$address1` y `$address2`.
|
||||
Como ejemplo, volveremos a visitar la multifirma creado en [§6.1](06_1_Enviando_una_Transaccion_a_una_Direccion_Multifirma.md) una útltima vez y crearemos un nuevo script de bloqueo para esta utilizando dicha metodología. Como recordará, se trataba de una multifirma 2 de 2 construida a partir de `$address1` y `$address2`.
|
||||
|
||||
Como el script de bloquo `OP_CHECKMULTISIG` requiere la "m" (`2`), las direcciones y la "n" (`2`), puede escribir la siguiente `scriptPubKey`:
|
||||
```
|
||||
2 $address1 $address2 2 OP_CHECKMULTISIG
|
||||
```
|
||||
Si esto le parece familiar, es porque es la multifirma que deserializó en [§8.2: Construcción de la Estructura de P2SH](08_2_Building_the_Structure_of_P2SH.md).
|
||||
Si esto le parece familiar, es porque es la multifirma que deserializó en [§10.2: Construyendo la Estructura de P2SH](10_2_Construyendo_la_Estructura_de_P2SH.md).
|
||||
```
|
||||
2 02da2f10746e9778dd57bd0276a4f84101c4e0a711f9cfd9f09cde55acbdd2d191 02bfde48be4aa8f4bf76c570e98a8d287f9be5638412ab38dede8e78df82f33fa3 2 OP_CHECKMULTISIG
|
||||
```
|
||||
@ -138,12 +138,12 @@ Luego, ejecute el script multifirma:
|
||||
3. Validar `0 $signature1 $signature2 2 $address1 $address2 2 OP_CHECKMULTISIG`.
|
||||
4. Es correcto si los operandos cumplen con la deserialización `redeemScript`.
|
||||
|
||||
Ahora sabe cómo se creó realmente la transacción multifirma en [§6.1](06_1_Sending_a_Transaction_to_a_Multisig.md), cómo se validó para el gasto y por qué ese `redeemScript` era tan importante.
|
||||
Ahora sabe cómo se creó realmente la transacción multifirma en [§6.1](06_1_Enviando_una_Transaccion_a_una_Direccion_Multifirma.md), cómo se validó para el gasto y por qué ese `redeemScript` era tan importante.
|
||||
|
||||
## Resumen: Creación de Guiones de Multifirmas
|
||||
|
||||
Las multifirmas son un tipo de transacción estándar, pero su uso es un poco complicado, por lo que se incorporan regularmente en las transacciones P2SH, como fue el caso en [§6.1](06_1_Sending_a_Transaction_to_a_Multisig.md) cuando creamos nuestras primeras multifirmas. El resultado es más limpio, más pequeño y más estandarizado — pero lo que es más importante, es un gran ejemplo del mundo real cómo funcionan realmente los scripts P2SH.
|
||||
Las multifirmas son un tipo de transacción estándar, pero su uso es un poco complicado, por lo que se incorporan regularmente en las transacciones P2SH, como fue el caso en [§6.1](06_1_Enviando_una_Transaccion_a_una_Direccion_Multifirma.md) cuando creamos nuestras primeras multifirmas. El resultado es más limpio, más pequeño y más estandarizado — pero lo que es más importante, es un gran ejemplo del mundo real cómo funcionan realmente los scripts P2SH.
|
||||
|
||||
## Que Sigue?
|
||||
|
||||
Continúe "Incrustando Bitcoin Scripts" con [§10.5: Scripting a Segwit Script](10_5_Scripting_a_Segwit_Script.md)
|
||||
Continúe "Incrustando Bitcoin Scripts" con [§10.5: Codificando un Script Segwit](10_5_Codificando_un_Script_Segwit.md)
|
@ -2,7 +2,7 @@
|
||||
|
||||
> :information_source: **NOTA:** Esta sección se ha agregado recientemente al curso y es un borrador inicial que aún puede estar pendiente de revisión. Lector de advertencias.
|
||||
|
||||
Segwit introdujo una serie de nuevas opciones para los tipos de direcciones (y, por lo tanto, secuencias de comandos). [§9.5: Codificando una P2WPKH](09_5_Scripting_a_P2WPKH.md) explicó cómo el nuevo tipo de dirección Bech32 variaba los scripts estándar encontrados en la mayoría de las transacciones tradicionales. Este capitulo analiza los otros tres tipos de scripts introducidos por la actualización de Segwit: el P2SH-Segwit (que era la dirección de transición "Segwit anidada", cuando Segwit entró en uso), el P2WSH (que es el equivalente Segwit de la dirección P2SH, al igual que P2WPKH es el equivalente Segwit de la dirección P2PKH), y la dirección P2WSH anidada.
|
||||
Segwit introdujo una serie de nuevas opciones para los tipos de direcciones (y, por lo tanto, secuencias de comandos). [§9.5: Codificando una P2WPKH](09_5_Codificando_una_P2WPKH.md) explicó cómo el nuevo tipo de dirección Bech32 variaba los scripts estándar encontrados en la mayoría de las transacciones tradicionales. Este capitulo analiza los otros tres tipos de scripts introducidos por la actualización de Segwit: el P2SH-Segwit (que era la dirección de transición "Segwit anidada", cuando Segwit entró en uso), el P2WSH (que es el equivalente Segwit de la dirección P2SH, al igual que P2WPKH es el equivalente Segwit de la dirección P2PKH), y la dirección P2WSH anidada.
|
||||
|
||||
Esta es otra situación en la que realmente no tendrá que preocuparse por estos matices mientras trabaja con `bitcoin-cli`, pero es útil saber cómo funciona todo.
|
||||
|
||||
@ -17,7 +17,7 @@ $ bitcoin-cli getnewaddress -addresstype p2sh-segwit
|
||||
```
|
||||
La dirección comienza con un `2` (o un `3`) que la revela como un guión.
|
||||
|
||||
> :book: ***¿Por qué los nodos antiguos no pueden enviar a direcciones nativas de Segwit?*** [§10.1](10_1_Understanding_the_Foundation_of_P2SH.md) señaló que había un número determinado de transacciones de Bitcoin "estándar". En realidad, no puede bloquear una transacción con un script que no sea uno de esos tipos estándar. Segwit ahora se reconoce como uno de esos estándares, pero un nodo antiguo no lo sabrá, por lo que se negará a enviar una transacción de este tipo para la protección del remitente. Envolver una dirección Segwit dentro de un hash de script estándar resuelve el problema.
|
||||
> :book: ***¿Por qué los nodos antiguos no pueden enviar a direcciones nativas de Segwit?*** [§10.1](10_1_Entendiendo_la_Base_de_P2SH.md) señaló que había un número determinado de transacciones de Bitcoin "estándar". En realidad, no puede bloquear una transacción con un script que no sea uno de esos tipos estándar. Segwit ahora se reconoce como uno de esos estándares, pero un nodo antiguo no lo sabrá, por lo que se negará a enviar una transacción de este tipo para la protección del remitente. Envolver una dirección Segwit dentro de un hash de script estándar resuelve el problema.
|
||||
|
||||
Cuando mira un UTXO enviado a esa dirección, puede ver que el `desc` es diferente, revelando una dirección WPKH envuelta en un script:
|
||||
```
|
||||
@ -36,7 +36,7 @@ $ bitcoin-cli listunspent
|
||||
"safe": true
|
||||
}
|
||||
```
|
||||
Más importante aún, hay un `redeemScript`, que decodifica a `OP_0 OP_PUSHDATA (20 bytes) 3ab2a09a1a5f2feb6c799b5ab345069a96e1a0a`. Deberia parecer familiar, porque es un `OP_0` seguido de un código hexadecimal de 20 bytes de un hash de clave pública. En otras palabras, un P2SH-SegWit es solo un SegWit `scriptPubKey` atascado en un script. Eso es todo al respecto. Coincide precisamente con la forma en que las multifirmas modernas son un multifirma atascado en un P2SH, como se explica en [§10.4: Codificando una Multifirma](10_4_Scripting_a_Multisig.md).
|
||||
Más importante aún, hay un `redeemScript`, que decodifica a `OP_0 OP_PUSHDATA (20 bytes) 3ab2a09a1a5f2feb6c799b5ab345069a96e1a0a`. Deberia parecer familiar, porque es un `OP_0` seguido de un código hexadecimal de 20 bytes de un hash de clave pública. En otras palabras, un P2SH-SegWit es solo un SegWit `scriptPubKey` atascado en un script. Eso es todo al respecto. Coincide precisamente con la forma en que las multifirmas modernas son un multifirma atascado en un P2SH, como se explica en [§10.4: Codificando una Multifirma](10_4_Codificando_una_Multifirma.md).
|
||||
|
||||
La transacción sin procesar revela un poco más cuando mira el `vout` `1`:
|
||||
```
|
||||
@ -95,7 +95,7 @@ $ bitcoin-cli decoderawtransaction $hex
|
||||
]
|
||||
}
|
||||
```
|
||||
Esto confirma que esto es solo un P2SH normal, bloqueado por `"OP_DUP OP_HASH160 41d83eaffbf80f82dee4c152de59a38ffd0b6021 OP_EQUALVERIFY OP_CHECKSIG"`. Es cuando se ejecuta el script de canje que ocurre la magia. Al igual que con un P2WPKH, un nodo antiguo verá `OP_0 OP_PUSHDATA (20 bytes) 3ab2a09a1a5f2feb6c799b5ab345069a96e1a0a` y lo verificará automáticamente, mientras que un nuevo nodo lo verá, sabrá que es un P2WPKH, y así saldrá con los `testigos`. See [§9.5: Codificando una P2WPKH](09_5_Scripting_a_P2WPKH.md).
|
||||
Esto confirma que esto es solo un P2SH normal, bloqueado por `"OP_DUP OP_HASH160 41d83eaffbf80f82dee4c152de59a38ffd0b6021 OP_EQUALVERIFY OP_CHECKSIG"`. Es cuando se ejecuta el script de canje que ocurre la magia. Al igual que con un P2WPKH, un nodo antiguo verá `OP_0 OP_PUSHDATA (20 bytes) 3ab2a09a1a5f2feb6c799b5ab345069a96e1a0a` y lo verificará automáticamente, mientras que un nuevo nodo lo verá, sabrá que es un P2WPKH, y así saldrá con los `testigos`. See [§9.5: Codificando una P2WPKH](09_5_Codificando_una_P2WPKH.md).
|
||||
|
||||
> :book: ***¿Cuáles son las desventajas de las transacciones segwit anidadas?*** Son más grandes que las transacciones nativas de Segwit, por lo que obtiene algunas de las ventajas de Segwit, pero no todas.
|
||||
|
||||
@ -123,4 +123,4 @@ La dirección P2WSH es una variante Segwit de P2SH, al igual que P2WPKH es una v
|
||||
|
||||
## Que Sigue?
|
||||
|
||||
Continúe "Incrustando Bitcoin Scripts" con [§10.6: Gastando una Transacción P2SH](10_6_Spending_a_P2SH_Transaction.md).
|
||||
Continúe "Incrustando Bitcoin Scripts" con [§10.6: Gastando una Transacción P2SH](10_6_Gastando_una_Transaccion_P2SH.md).
|
@ -4,11 +4,11 @@ Antes de cerrar esta descripcion general de las transacciones P2SH, veremos cóm
|
||||
|
||||
## Utilice el Guión de Canjear
|
||||
|
||||
Como vimos en [§6.2: Gastando una Transacción a una Multifirma](06_2_Spending_a_Transaction_to_a_Multisig.md), gastar una transacción P2SH se trata de tener esa versión serializada del script de bloqueo, el llamado _redeemScript_. Entonces, el primer paso para poder gastar una transacción P2SH es asegurarse de guardar el _redeemScript_ antes de dar la dirección P2SH a todos.
|
||||
Como vimos en [§6.2: Gastando una Transacción a una Multifirma](06_2_Gastando_una_Transaccion_con_una_Direccion_Multifirma.md), gastar una transacción P2SH se trata de tener esa versión serializada del script de bloqueo, el llamado _redeemScript_. Entonces, el primer paso para poder gastar una transacción P2SH es asegurarse de guardar el _redeemScript_ antes de dar la dirección P2SH a todos.
|
||||
|
||||
### Recoge Sus Variables
|
||||
|
||||
Debido a que las direcciones P2SH distintas de las direcciones segwit anidadas y mulifirmas especiales no están integradas en `bitcoin-cli` no habrá atajos para el gasto P2SH como viste en [§6.3: Enviando una Multifirma Automatizada](6_3_Sending_an_Automated_Multisig.md). ¡Necesitará recopilar todas las variables más complejas por tu cuenta!
|
||||
Debido a que las direcciones P2SH distintas de las direcciones segwit anidadas y mulifirmas especiales no están integradas en `bitcoin-cli` no habrá atajos para el gasto P2SH como viste en [§6.3: Enviando una Multifirma Automatizada](06_3_Enviando_una_Multifirma_Automatizada.md). ¡Necesitará recopilar todas las variables más complejas por su cuenta!
|
||||
|
||||
Esto significa que debe recopilar:
|
||||
|
||||
@ -39,4 +39,4 @@ Ya gastó un P2SH en el Capítulo 6, cuando reenvió una transacción multifirma
|
||||
|
||||
## Que Sigue?
|
||||
|
||||
Avanzar a través de "Bitcoin Scripting" con el [Capítulo Once: Potenciando Bloqueos de Tiempo con Bitcoin Scripts](11_0_Empowering_Timelock_with_Bitcoin_Scripts.md).
|
||||
Avanzar a través de "Bitcoin Scripting" con el [Capítulo Once: Potenciando Bloqueos de Tiempo con Bitcoin Scripts](11_0_Potenciando_Bloqueos_de_Tiempo_con_Bitcoin_Scripts.md).
|
@ -16,5 +16,5 @@ Los objetivos de apoyo incluyen la capacidad de:
|
||||
|
||||
## Tabla de contenido
|
||||
|
||||
* [Sección uno: Usando scripts condicionales](12_1_Usando_Scripts_Condicionales.md)
|
||||
* [Sección uno: Usando scripts condicionales](12_1_Usando_Script_Condicionales.md)
|
||||
* [Sección dos: Usando otros comandos de scripting](12_2_Usando_Otros_Comandos_de_Scripting.md)
|
||||
|
@ -19,6 +19,6 @@ Los objetivos de apoyo incluyen la capacidad de:
|
||||
|
||||
## Tabla de Contenido
|
||||
|
||||
* [Apéndice Uno: Entendiendo la Configuración Inicial de Bitcoin](A1_0_Entendiendo_la_Configuracion_Inicial_de_Bitcoin.md)
|
||||
* [Apéndice Uno: Entendiendo la Configuración Inicial de Bitcoin](A1_0_Entendiendo_Bitcoin_Standup.md)
|
||||
* [Apéndice Dos: Compilando Bitcoin desde la Fuente](A2_0_Compilando_Bitcoin_desde_la_Fuente.md)
|
||||
* [Apéndice Tres: Usando Bitcoin Regtest](A3_0_Usando_Bitcoin_Regtest.md)
|
||||
|
@ -86,7 +86,7 @@ Si le gustaría hacer su propia traducción, por favor, vea [Contribuyendo](#con
|
||||
* [11.2: Usando CLTV en Scripts](11_2_Usando_CLTV_en_Scripts.md)
|
||||
* [11.3: Usando CSV en Scripts](11_3_Usando_CSV_en_Scripts.md)
|
||||
* [12.0: Expandiendo Scripts Bitcoin](12_0_Expandiendo_Scripts_Bitcoin.md)
|
||||
* [12.1: Usando Scripts Condicionales](12_1_Usando_Scripts_Condicionales.md)
|
||||
* [12.1: Usando Scripts Condicionales](12_1_Usando_Script_Condicionales.md)
|
||||
* [12.2: Usando Otros Comandos de Scripting](12_2_Usando_Otros_Comandos_de_Scripting.md)
|
||||
* [13.0: Diseñando Bitcoin Scripts Reales](13_0_Disenando_Bitcoin_Scripts_Reales.md)
|
||||
* [13.1: Escribiendo Puzzles Scripts](13_1_Escribiendo_Puzzle_Scripts.md)
|
||||
|
Loading…
x
Reference in New Issue
Block a user