diff --git a/es/A0_Apendices.md b/es/A0_Apendices.md new file mode 100644 index 0000000..6497cc7 --- /dev/null +++ b/es/A0_Apendices.md @@ -0,0 +1,24 @@ +# Apéndices + +El cuerpo principal de este curso sugiere una configuración bastante estándar +para hacer pruebas con Bitcoin. Lo que sigue en estos apéndices es una mejor +explicación de la configuración y otras opciones de alternativas. + +## Objetivos para esta sección + +Después de trabajar en este capítulo, un desarrollador podrá: + + * Decidir entre múltiples métodos para crear una cadena de bloques Bitcoin. + +Los objetivos de apoyo incluyen la capacidad de: + + * Entender la configuración de inicio de Bitcoin + * Realizar una compilación de Bitcoin a mano + * Entender el poder de Regtest + * Utilizar el entorno Regtest + +## Tabla de Contenido + + * [Apéndice Uno: Entendiendo la Configuración Inicial de Bitcoin](A1_0_Entendiendo_la_Configuracion_Inicial_de_Bitcoin.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) diff --git a/es/A1_0_Entendiendo_la_Configuracion_Inicial_de_Bitcoin.md b/es/A1_0_Entendiendo_la_Configuracion_Inicial_de_Bitcoin.md new file mode 100644 index 0000000..eb7e1f6 --- /dev/null +++ b/es/A1_0_Entendiendo_la_Configuracion_Inicial_de_Bitcoin.md @@ -0,0 +1,87 @@ +# Apéndice I: Entendiendo la Configuración Inicial de Bitcoin + +[§2.1: Configurando un VPS Bitcoin-Core con Bitcoin-Standup](02_1_Configurando_un_Bitcoin-Core_VPS_con_StackScript.md) +explica el proceso de crear un nodo Bitcoin usando +[Bitcoin-Standup-Scripts](https://github.com/BlockchainCommons/Bitcoin-Standup-Scripts). +El siguiente apéndice explica que hacen las principales secciones del programa. +Usted puede querer seguir junto con +[Linode Standup](https://github.com/BlockchainCommons/Bitcoin-Standup-Scripts/blob/master/Scripts/LinodeStandUp.sh) +en otra ventana. + +## Paso 1: Nombre del host + +Su nombre de host es almacenado en `/etc/hostname` y configurado con el comando +`hostname`. También aparece en `/etc/hosts`. + +## Paso 2: Zona horaria + +La zona horaria de su host es almacenada en `/etc/timezone`, luego un archivo +apropiado es copiado desde `/usr/share/zoneinfo/` a `/etc/localtime`. + +## Paso 3: Actualizando Debian + +El gestor de paquetes `apt-get` es usado para actualizar su maquina e instalar +`gnupg`, el generador de números aleatorios `haveged`, y el cortafuegos simple +`ufw`. + +Su maquina es configurada automáticamente para estar al día con `echo +"unattended-upgrades unattended-upgrades/enable_auto_updates boolean true" | +debconf-set-selections`. + +## Paso 4: Configurando un usuario + +Un usuario `standup` es creado, el cual sera usado por sus aplicaciones +Bitcoin. Este también tiene permisos `sudo`, permitiéndole tomar acciones +privilegiadas con esta cuenta. + +Si usted suministro una llave SSH, esta le permitirá acceder a su cuenta (de +otra manera, deberá usar una contraseña creada en la configuración). + +Si usted suministro una dirección IP, el acceso `ssh` estará limitado a esa +dirección, según `/etc/hosts.allow`. + +## Paso 5: Configurando Tor + +Tor es instalado para proveer servicios protegidos (ocultos) para acceder a los +comandos RPC de Bitcoin a través de su servidor. Vea +[§14.1: Verificando Su Configuración Tor](14_1_Verificando_Su_Configuracion_Tor.md) +para mas información acerca de su configuración Tor. + +Si usted suministro un cliente autorizado para los servicios ocultos, el acceso +estará limitado para esa llave, según +`/var/lib/tor/standup/authorized_clients`. Si usted no lo hizo, +[§14.2](14_2_Cambiando_Sus_Servicios_Bitcoin_Ocultos.md) explica como hacerlo +luego. + +## Paso 6: Instalando Bitcoin + +Bitcoin es instalado en `~standup/.bitcoin`. Su configuración es almacenada en +`~standup/.bitcoin/bitcoin.conf`. + +Asegúrese que las sumas de comprobación verifiquen según +[§2.1](02_1_Configurando_un_Bitcoin-Core_VPS_con_StackScript.md), de otra +manera, podría estar expuesto a ataques de la cadena de suministro. + +## Paso 7: Instalando codificador QR + +Para mantener todo compatible con +[GordianSystem](https://github.com/BlockchainCommons/GordianSystem), un código +QR es creado en `/qrcode.png`. Esto puede leerse desde un cliente QuickConnect, +tal como +[GordianWallet](https://github.com/BlockchainCommons/GordianWallet-iOS) + +## Conclusión — Entendiendo la Configuración Inicial de Bitcoin + +Bitcoin Standup usa programas para probar e imitar mucha de las funcionalidades +de un [GordianNode](https://github.com/BlockchainCommons/GordianNode-macOS). +Este debe proveerlo con un entorno Bitcoin seguro, construido en las bases de +Bitcoin Core y Tor para comunicaciones RPC. + +## ¿Que sigue? + +Si usted se encontraba en el proceso de crear un nodo Bitcoin para utilizar en +este curso, usted debería volver a +[§2.1](02_1_Configurando_un_Bitcoin-Core_VPS_con_StackScript.md). + +Si usted esta leyendo a través de los apéndices, continúe con +[Apéndice II: Compilando Bitcoin desde la Fuente](A2_0_Compilando_Bitcoin_desde_la_Fuente.md). diff --git a/es/A2_0_Compilando_Bitcoin_desde_la_Fuente.md b/es/A2_0_Compilando_Bitcoin_desde_la_Fuente.md new file mode 100644 index 0000000..02be4c4 --- /dev/null +++ b/es/A2_0_Compilando_Bitcoin_desde_la_Fuente.md @@ -0,0 +1,182 @@ +# Apéndice II: Compilando Bitcoin desde la Fuente + +Este curso presume que usted usara un programa para crear un entorno Bitcoin, +tanto usando Bitcoin Standup para Linode según +[§2.1](02_1_Configurando_un_Bitcoin-Core_VPS_con_StackScript.md), o vía alguna +otra forma, de acuerdo con [§2.2](02_2_Configurando_Bitcoin_Core_Otros.md). Sin +embargo, usted puede preferir compilar Bitcoin a mano. + +Esto tiene los siguientes beneficios: + +1. Usted siempre estará actualizado con el ultimo lanzamiento. Consideración: + Estar siempre actualizado no es necesario para Bitcoin Core, ya que el + software siempre es retro compatible, esto quiere decir que una versión de + Bitcoin Core sera capaz de participar en la red Bitcoin, a pesar de no + contar con las ultimas características. +2. Usted no necesitara depender de binarios pre compilados de Bitcoin Core. + Esto requiere menos confianza. Aun que los mantenedores de Bitcoin Core + hacen un gran trabajo manteniendo la integridad del código, un binario pre + compilado esta unos pasos por detrás del código fuente. Cuando usted compila + desde el código fuente, el código puede ser inspeccionado antes de la + compilación. +3. Usted puede personalizar la compilación, haciendo cosas tales como + deshabilitar los monederos o la interfaz gráfica de usuario. + +## Prepare su Entorno + +Este tutorial utiliza Debian 10.4.kv0 OS en una arquitectura amd64 +(computadoras de 64-bits), pero usted puede usar este tutorial en cualquier +sistema basado en Debian (por ej. Ubuntu, Mint, etc.). Para otros sistemas +Linux, puede adaptar los siguientes pasos con el gestor de paquetes para ese +sistema. + +Usted puede tener conocimientos básicos o ninguna familiaridad con la línea de +comandos, siempre y cuando tenga entusiasmo. La terminal es su mas poderoso +aliado, no algo para ser temido. Usted puede simplemente copiar y pegar los +siguientes comandos para compilar bitcoin (un comando con un "$" es un comando +de un usuario común y uno con un "#" es un comando de un superusuario o +administrador). + +Si usted no esta en la lista de superusuario entonces haga lo siguiente: + +``` +$ su root + +# apt-get install sudo +# usermod -aG sudo +# reboot +``` + +## Instale Bitcoin + +### Paso 1: Actualice su sistema + +Primero, actualice el sistema usando: +``` +$ sudo apt-get update +``` + +### Paso 2: Instale Git y sus dependencias + +Instale `git`, el cual le permitirá descargar el código fuente, y +`build-essential`, el cual compila el código: +``` +$ sudo apt-get install git build-essential -y +``` + +Después, instale las dependencias restantes: +``` +$ sudo apt-get install libtool autotools-dev automake pkg-config bsdmainutils +python3 libssl-dev libevent-dev libboost-system-dev libboost-filesystem-dev +libboost-chrono-dev libboost-test-dev libboost-thread-dev libminiupnpc-dev +libzmq3-dev libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools +libprotobuf-dev protobuf-compiler ccache -y +``` + +### Paso 3: Descargue el código fuente + +Una vez que las dependencias están instaladas, descargue el repositorio (repo) +conteniendo el código fuente de Bitcoin desde github: +``` +$ git clone https://github.com/bitcoin/bitcoin.git +``` +Verifique el contenido del repo: +``` +$ ls bitcoin +```` +Debería ser aproximadamente similar al siguiente contenido: + +![clonando el repo](../public/LBftCLI-compiling_bitcoin-git.png) + +### Paso 4: Instale la base de datos Berkley v4.8 + +1. Ingrese al directorio `contrib`: `$ cd bitcoin/contrib/` +2. Ejecute el siguiente comando: ```$ ./install_db4.sh `pwd` ``` + +Una vez que ha sido descargado usted vera la siguiente salida. Tome nota de la +salida, usted lo usara para configurar bitcoin mientras compila: + +![db4](../public/LBftCLI-compiling_bitcoin-db4.png) + +### Paso 5: Compile Bitcoin Core + +Es recomendado que usted compile desde una rama etiquetada, la cual es mas +estable, a menos que usted quiera probar la vanguardia del desarrollo bitcoin. +Ejecute el siguiente comando para obtener una lista de etiquetas, ordenadas de +acuerdo a la mas reciente: +``` +$ git tag -n | sort -V +``` +Luego elija una etiqueta tal como `v0.20.0`: +``` +$ git checkout +``` + +Una vez que ha seleccionado una rama etiquetada, ejecute lo siguiente desde +dentro del directorio `bitcoin`. El `` debe ser la salida del +programa `install_db4.sh`. + +``` +$ ./autogen.sh +$ export BDB_PREFIX='/db4' +$ ./configure BDB_LIBS="-L${BDB_PREFIX}/lib -ldb_cxx-4.8" BDB_CFLAGS="-I${BDB_PREFIX}/include" +$ make # build bitcoin core +``` + +### Paso 6: Pruebe la compilación + +Si usted quiere comprobar su compilación (lo cual es una buena idea), ejecute +las siguientes pruebas: + +1. `$ make check` correra las pruebas unitarias, los cuales deberan retornar `PASS`. +2. `$ test/functional/test_runner.py --extended` ejecutara las pruebas + funcionales extendidas. Omita el indicador `--extended` si usted quiere + evitar algunas pruebas. Esto puede tomarle bastante tiempo. + +### Paso 7: Ejecute e instale Bitcoin Core + +Ahora que usted ha compilado Bitcoin Core desde la fuente, usted puede empezar +a usarlo e instalarlo para una disponibilidad global. + +#### Ejecute Bitcoin Core sin instalarlo + +Para solo ejecutar Bitcoin Core: + +`$ src/qt/bitcoin-qt` para ejecutar la interfaz grafica de usuario. +`$ src/bitcoind` para ejecutar bitcoin en la línea de comandos. + +### Instale Bitcoin Core + +Para instalar: + +`$ sudo make install` instalara bitcoin core globalmente. Una vez instalado +usted puede entonces ejecutar bitcoin desde cualquier lugar en la línea de +comandos, al igual que con cualquier otro software: `$ bitcoin-qt` para la +interfaz grafica de usuario o `bitcoind` y luego `bitcoin-cli` para la línea de +comandos. + +## Finalice su sistema + +Compilando Bitcoin desde la fuente, usted disminuye la necesidad de confianza +en su configuracion. Sin embargo, usted esta lejos de la seguridad adicional +provista por la configuracion de Bitcoin Standup. Para resolver esto, usted +puede querer recorrer el programa +[Linode Stackscript](https://github.com/BlockchainCommons/Bitcoin-Standup-Scripts/blob/master/Scripts/LinodeStandUp.sh) +completo y ejecutar paso a paso todos los comandos. El unico lugar donde +necesita ser cuidadoso es en el Paso 6, el cual instala Bitcoin. Omita solo +hasta donde verifica sus binarios, y continue desde ahi. + +## Resumen: Compilando Bitcoin desde la Fuente + +Si usted quiere la seguridad incrementada de instalar Bitcoin desde la fuente, +usted deberia tenerla ahora. Con un poco de suerte, usted tambien habra +recorrido el Linode Stackscript para configurar un servidor mas seguro. + +## ¿Que sigue? + +Si usted estaba en el proceso de crear un nodo Bitcoin para usar en este curso, usted deberia continuar con +[Capitulo 3: Entendiendo Su Configuración Bitcoin](03_0_Entendiendo_Su_Configuracion_Bitcoin.md). + +Si usted esta leyendo a través de los apéndices, continúe con +[Apéndice III: Usando Bitcoin Regtest](A3_0_Usando_Bitcoin_Regtest.md). + diff --git a/es/A3_0_Usando_Bitcoin_Regtest.md b/es/A3_0_Usando_Bitcoin_Regtest.md new file mode 100644 index 0000000..11346a3 --- /dev/null +++ b/es/A3_0_Usando_Bitcoin_Regtest.md @@ -0,0 +1,281 @@ +# Apéndice III: Usando Bitcoin Regtest + +> :information_source: **NOTA:** Esta sección ha sido recientemente agregada al +> curso y es un borrador inicial que puede estar esperando aun su revisión. +> Lectura con advertencias. + +La mayoría de este curso presume que usted usara o bien Mainnet o bien Testnet. +Sin embargo, esas no son las únicas opciones. Mientras desarrolla aplicaciones +Bitcoin, usted puede querer mantener sus aplicaciones aisladas de la cadenas de +bloques publicas. Para hacerlo, puede crear una cadena de bloques desde cero +usando Regtest, la cual tiene una gran ventaja sobre Testnet: usted elige +cuando crear nuevos bloques, por lo que tiene un control completo sobre el +entorno. + +## Inicie Bitcoind en Regtest + +Luego de +[configurar su VPS Bitcoin-Core](02_0_Configurando_un_Bitcoin-Core_VPS.md) o +[compilarlo de la fuente](A2_0_Compilando_Bitcoin_desde_la_Fuente.md), +usted esta ahora en condiciones de usar regtest. Para iniciar su `bitcoind` en +regtest y crear una cadena de bloques privada, use el siguiente comando: +``` +$ bitcoind -regtest -daemon -fallbackfee=1.0 -maxtxfee=1.1 +``` + +Los argumentos `-fallbackfee=1.0 -maxtxfee=1.1` prevendrán el error +`Fee estimation failed. Fallbackfee is disabled`. + +En regtest, usualmente no hay suficientes transacciones por lo que bitcoind no +puede darle un estimado confiable y, sin eso, el monedero no creara +transacciones a menos que se configure explícitamente la tarifa. + +### Reconfigure la cadena de bloques Regtest + +Si usted lo desea, puede mas tarde reiniciar su Regtest con una nueva cadena de +bloques. + +Los monederos Regtest y el estado de la cadena de bloques son guardados en el +subdirectorio regtest del directorio de configuración de Bitcoin: +``` +user@mybtc:~/.bitcoin# ls +bitcoin.conf regtest testnet3 +``` + +Para comenzar una nueva cadena de bloques usando regtest, todo lo que tiene que +hacer es eliminar el directorio `regtest` y reiniciar el Bitcoind. +``` +$ rm -rf regtest +``` +## Genere un monedero Regtest + +Antes de generar bloques, es necesario que cargue un monedero usando +`loadwallet` o cree uno nuevo con `createwallet`. Desde la versión 0.21, +Bitcoin Core no crea nuevos monederos en el inicio. + +El argumento `descriptors=true` crea un monedero con descriptores de forma +nativa, que almacena la información de scriptPubKey usando descriptores de +salida. Si este es `falso`, creara un monedero de acuerdo al estándar previo, +donde las llaves son usadas para generar implícitamente scriptPubKeys y +direcciones. +``` +$ bitcoin-cli -regtest -named createwallet wallet_name="regtest_desc_wallet" descriptors=true +``` + +## Genere Bloques + +Usted puede generar (minar) nuevos bloques en la cadena regtest usando el +método RPC `generate` con un argumento para indicar la cantidad de bloques a +generar. Solo tiene sentido usar este método en regtest; debido a la alta +dificultad es poco probable que genere nuevos bloques en mainnet o testnet: +``` +$ bitcoin-cli -regtest -generate 101 +[ + "57f17afccf28b9296048b6370312678b6d8e48dc3a7b4ef7681d18ed3d91c122", + "631ff7b8135ce633c774828be3b8505726459eb65c339aab981b10363befe5a7", + ... + "1162dbfe025c7da94ee1128dc26d518a94508f532c19edc0de6bc673a909d02c", + "20cb2e815c3d42d6a117a204a0b5e726ab641c826e441b5b3417aca33f2aba48" +] +``` + +> :warning: ADVERTENCIA. Notar que usted debe agregar el indicador `-regtest` +> luego de cada comando `bitcoin-cli` para acceder correctamente a su entorno +> Regtest. Si lo prefiere, puede incluir un comando `regtest=1` en su archivo +> `~/.bitcoin/bitcoin.conf`. + +Debido a que un bloque debe tener 100 confirmaciones antes de que su recompensa +pueda ser gastada, usted generara 101 bloques, permitiendo el acceso a la +transacción 'coinbase' del bloque #1. Dado que esta es una nueva cadena de +bloques usando las reglas por defecto de Bitcoin, el primer bloque recibirá una +recompensa de 50 bitcoins. Al contrario que mainnet, en modo regtest, solo los +primeros 150 bloques pagan una recompensa de 50 bitcoins. La recompensa se +divide luego de 150 bloques, por lo que paga 25, 12.5, etc. + +La salida es el hash de bloque de cada bloque generado. + +> :book: ***¿Que es una transacción 'coinbase'?*** Una transacción 'coinbase' +> es la transacción sin entradas creada cuando un nuevo bloque es minado y +> otorgado al minero. Es la manera en que nuevos bitcoins entran al ecosistema. +> El valor de una transacción 'coinbase' decae con el tiempo. En la mainnet, +> esta se divide cada 210,000 transacciones y termina completamente con el +> bloque 6.929.999, el cual esta estipulado que ocurra en el siglo 22. A Mayo +> del 2020, la recompensa 'coinbase' es de 6.25 BTC. + +### Verifique su balance + +Luego de minar bloques y obtener recompensas, usted puede verificar el balance +de su monedero: +``` +$ bitcoin-cli -regtest getbalance +50.00000000 +``` + +### Use la Regtest + +Ahora usted debería ser capaz de usar este balance para cualquier tipo de +interacción en su cadena de bloques privada, tales como enviar Bitcoins en +transacciones de acuerdo a el +[Capitulo 4](04_0_Enviando_Transacciones_Bitcoin.md). + +Es importante notar que para que se complete cualquier transacción, usted +deberá generar (minar) nuevos bloques, así las transacciones pueden ser +incluidas. + +Por ejemplo, para crear una transacción e incluirla en un bloque, usted debe +primero usar el comando `sendtoaddress`: +``` +$ bitcoin-cli -regtest sendtoaddress [address] 15.1 +e834a4ac6ef754164c8e3f0be4f34531b74b768199ffb244ab9f6cb1bbc7465a +``` + +La salida es el hash de la transacción incluida en la cadena de bloques. Usted +puede verificar los detalles usando el comando `gettransaction`: +``` +$ bitcoin-cli -regtest gettransaction e834a4ac6ef754164c8e3f0be4f34531b74b768199ffb244ab9f6cb1bbc7465a +{ + "amount": 0.00000000, + "fee": -0.00178800, + "confirmations": 0, + "trusted": false, + "txid": "e834a4ac6ef754164c8e3f0be4f34531b74b768199ffb244ab9f6cb1bbc7465a", + "walletconflicts": [ + ], + "time": 1513204730, + "timereceived": 1513204730, + "bip125-replaceable": "unknown", + "details": [ + { + "account": "", + "address": "mjtN3C97kuWMgeBbxdB7hG1bjz24Grx2vA", + "category": "send", + "amount": -15.10000000, + "label": "", + "vout": 1, + "fee": -0.00178800, + "abandoned": false + }, + { + "account": "", + "address": "mjtN3C97kuWMgeBbxdB7hG1bjz24Grx2vA", + "category": "receive", + "amount": 15.10000000, + "label": "", + "vout": 1 + } + ], + "hex": "020000000f00fe2c7b70b925d0d40011ce96f8991fee5aba9537bd1b6913b37c37b041a57c00000000494830450221009ad02bfeee2a49196a99811ace20e2e7fefd16d33d525884edbc64bf6e2b1db502200b94f4000556391b0998932edde3033ba2517733c7ddffb87d91f6b756629fe201feffffff06a9301a2b39875b68f8058b8e2ad0b658f505e44a67e1e1d039140ae186ed1f0000000049483045022100c65cd13a85af6fcfba74d2852276a37076c89a7642429aa111b7986eea7fd6c7022012bbcb633d392ed469d5befda8df0a6b96e1acfa342f559877edebc2af7cb93401feffffff434b6f67e5e068401553e89f739a3edc667504597f29feb8edafc2b081cc32d90000000049483045022100b86ecc43e602180c787c36465da7fc8d1e8bfba23d6f49c37190c20889f2dfa0022032c3aec3ceefbb7a33c040ef19090cacbfd6bc9c5cd8e94252eb864891c6f34501feffffff4c65b43f8568ce58fc4c55d24ba0742e9878a031fdfae0fadac7247f42cc1f8e0000000049483045022100d055acfce852259dde051dc61792f94277d094c5da96752f925582b8e739868f02205e69add76e6b001073ad6b7df5f32a681fc8513ee0f6e126ee1c2d45149bd91d01feffffff5a72d60b58300974c5d4731e29b437ea61b87b6733bb3ca6ce5548ef8887d05b0000000049483045022100a7f5b2ee656a5a904fb27f982210de6858dfb165777ec969a77ea1c2c82975a4022001a1a563dbc3714047ec855f7aee901e756b851e255f35435e85c2ba7b0abd8401feffffff60d68e9d5650d55bc9e0b2a65ed27a3b9bceac4955760aa1560408854c3b148d000000004948304502210081a6f0c8232c52f3eaca825965077e88b816e503834989be4afb3f44f87eb98202207ae8becb99efe379fb269f477e7bb70d117dcb83e106c53b7addaa9715029da101feffffff63e2239425aad544f6e1157d5ee245d2500d4e9e9daf8049e0a38add6246da890000000049483045022100e0ab1752e8fbb244b63f7dd5649f2222e0dc42fae293b758e0c28082f77560b60220013f72fbe50acf4af197890b4d18fa89094055ed66f9226a6b461cc4ff560f8e01feffffff6aad4151087f4209ace714193dd64f770305dfb89470b79cca538b88253fbbef0000000049483045022100fee4a5f7ec6e8b55bd6aa0e93b5399af724039171d998b926e8095b70953d5f202203db0d4ef9d1bd57aeff0fe3d47d4358ec0559135dac8107507741eef0638279201feffffff7ddbca5854e25e6a2dfeacfe5828267cd1ef5d86e1da573fe2c2b21b45ecd6ce0000000049483045022100bf45241525592df4625642972dbc940ef74771139dd844bc6a9517197d01488c02203c99ca98892cc2693e8fbb9a600962eec84494fb8596acf0d670822624e497c901feffffff8672949de559e76601684c4ac3731599fd965d0c412e7df9f8ec16038d4420a60000000049483045022100b5a9bd3c6718c6bd2a8300bbd1d9de0ff1c5d02aeb6a659c52bb88958e7e3b0302207f710db1ef975c22edf54e063169aae31bbe470166cc0e5c34fd27b730b8e7d001feffffff8e006b0bb8cef2c5c2a11c8c2aa7d3ba01cb4386c7f780c45bc1014142b425f00000000048473044022046dc9db8daeb09b7c0b9f48013c8af2d0a71f688adaa8d91b40891768c852d4a02204fa15da6d58851191344a56c63bf51a540ec03f73117a3446230bb58a8a4bcce01feffffffbad05b8f86182b9b7c9c5aaa9ce3dc8d08a76848e49a2d9b8dcfb0f764bb26ca000000004847304402200682379dc36cb486309eac4913f41ac19638525677edad45ca8d9a2b0728b12f02203fb44f8a46cbc4c02f5699d7d4d9cd810bdf7e7c981b421218ccbcb7b73845f501feffffffd35228fe9ef0a742eacffc4a13f15ed7ba23854e6cb49d5010810ac11b5bdf690000000048473044022030045b882500808bd707f4654becc63de070818c82716310d39576decdd724e3022034d3b41cb5e939f0011bb5251be7941b6077fde5f4eff59afd8e49a2844288f701fefffffff5ae4cbd4ae8d68b5a34be3231cdc88b660447175f39cf7a86397f37641d4aa70000000049483045022100afe16f0de96a8629d6148f93520d690f30126c37e7f7f05300745a1273d7eb7202200933f6b371c4ea522570f3ec2aee9be2b59730b634e828f543bcdb019cf4749901fefffffff633f61ac61683221cc3d2665cf4bcf193af1c8ffe9d3d756ba83cc5eb7643250000000049483045022100ef0b8853c94d60634eff2fc1d4d75872aacb0a2d3242308b7ee256b24739c614022069fe9be8288bdd635871c263c46be710c001729d43f6fbc1350ed1a693c4646301feffffff0250780000000000001976a91464ed7fb2fe0b06f4cad0d731b122222e3e91088a88ac80c5005a000000001976a9142fed0f02d008f89f6a874168e506e2d4f9bcbfb888acd32b0000" +} +``` + +Sin embargo, usted debe ahora finalizarla creando bloques en la cadena de bloques. + +La mayoría de las aplicaciones requieren seis confirmaciones de bloques para +considerar irreversible una transacción. Si ese es su caso, usted puede minar +seis bloques adicionales dentro de su cadena regtest: +``` +$ bitcoin-cli -regtest -generate 6 +[ + "33549b2aa249f0a814db4a2ba102194881c14a2ac041c23dcc463b9e4e128e9f", + "2cc5c2012e2cacf118f9db4cdd79582735257f0ec564418867d6821edb55715e", + "128aaa99e7149a520080d90fa989c62caeda11b7d06ed1965e3fa7c76fa1d407", + "6037cc562d97eb3984cca50d8c37c7c19bae8d79b8232b92bec6dcc9708104d3", + "2cb276f5ed251bf629dd52fd108163703473f57c24eac94e169514ce04899581", + "57193ba8fd2761abf4a5ebcb4ed1a9ec2e873d67485a7cb41e75e13c65928bf3" +] +``` + +## Pruebe con NodeJS + +Cuando usted esta en regtest, es capaz de simular casos extremos y ataques que +podrían ocurrir en el mundo real, tales como gastos dobles. + +Como se debatió en algún otro lado de este curso, usar librerías de software +podría darle acceso a algunos comandos RPC mas sofisticados. En este caso, +[bitcointest by dgarage](https://github.com/dgarage/bitcointest) para NodeJS, +puede ser usada para simular una transacción de un monedero a otro; usted puede +comprobar su [guia](https://www.npmjs.com/package/bitcointest) para +simulaciones de ataques mas específicos, tales como gastos dobles. + +Vea [§18.3](18_3_Accediendo_a_Bitcoind_con_NodeJS.md) para la información mas +actualizado sobre instalar NodeJS, luego agregue `bitcointest`: +``` +$ npm install -g bitcointest +``` + +Después de instalar `bitcointest`, usted puede crear un archivo `test.js` con +el siguiente contenido: +```javascript +file: test.js + +const { BitcoinNet, BitcoinGraph } = require('bitcointest'); +const net = new BitcoinNet('/usr/local/bin', '/tmp/bitcointest/', 22001, 22002); +const graph = new BitcoinGraph(net); + +try { + + console.log('Launching nodes...'); + + const nodes = net.launchBatchS(4); + const [ n1, n2 ] = nodes; + net.waitForNodesS(nodes, 20000); + + console.log('Connected!'); + const blocks = n1.generateBlocksS(110); + console.info('Generated 110 blocks'); + + console.log(`n2.balance (before) = ${n2.getBalanceS()}`); + + const sometxid = n1.sendToNodeS(n2, 100); + console.log(`Generated transaction = ${sometxid}`); + n1.generateBlocksS(110); + n2.waitForBalanceChangeS(0); + + const sometx = n2.getTransactionS(sometxid); + console.log(`n2.balance (after) = ${n2.getBalanceS()}`); + + +} catch (e) { + console.error(e); + net.shutdownS(); + throw e; +} +``` + +Como se puede observar, esto generara bloques y una transacción: +``` +$ node test.js +Launching nodes... +Connected! +Generated 110 blocks +n2.balance (before) = 0 +Generated transaction = 91e0040c26fc18312efb80bad6ec3b00202a83465872ecf495c392a0b6afce35 +n2.after (before) = 100 + +``` + +## Resumen: Usando Bitcoin Regtest + +Un entorno regtest para Bitcoin funciona tal como cualquier entorno testnet, +excepto por el hecho de que usted tiene la capacidad de generar bloques fácil y +rápidamente. + +> :fire: ***¿Cual es el poder de regtest?*** El mayor poder de regtest es que +> usted puede rápidamente minar bloques, permitiéndole acelerar la cadena de +> bloques, para testear transacciones, timelocks y otras características para +> las que de otra manera debería sentarse y esperar. Sin embargo, el otro poder +> es que usted puede correrlo de forma privada, sin conectarse a una cadena de +> bloques publica, permitiéndole probar sus propias ideas antes de liberarlas +> dentro del mundo. + +## ¿Que sigue? + +Si usted visito este Apéndice mientras trabajaba en otra parte del curso, usted +debería regresar allí. + +Pero, de otra manera, usted ha alcanzado el final! Otras personas que han +trabajado su camino a través de este curso se han vuelto desarrolladores e +ingenieros Bitcoin profesionales, incluyendo algunos de quienes han contribuido +a [Blockchain Commons](https://www.blockchaincommons.com/). Nosotros los +incentivamos a hacer lo mismo! Solo salga allí afuera y comience a trabajar en +algo de su propio código Bitcoin con lo que ha aprendido.