mirror of
https://github.com/ChristopherA/Learning-Bitcoin-from-the-Command-Line.git
synced 2025-06-07 16:06:26 +00:00
Merge pull request #384 from csralvall/spanish-appendices
Create spanish translation of appendices
This commit is contained in:
commit
44c84f129d
24
es/A0_Apendices.md
Normal file
24
es/A0_Apendices.md
Normal file
@ -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)
|
87
es/A1_0_Entendiendo_la_Configuracion_Inicial_de_Bitcoin.md
Normal file
87
es/A1_0_Entendiendo_la_Configuracion_Inicial_de_Bitcoin.md
Normal file
@ -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).
|
182
es/A2_0_Compilando_Bitcoin_desde_la_Fuente.md
Normal file
182
es/A2_0_Compilando_Bitcoin_desde_la_Fuente.md
Normal file
@ -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
|
||||
<enter root passwd>
|
||||
# apt-get install sudo
|
||||
# usermod -aG sudo <username>
|
||||
# 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:
|
||||
|
||||

|
||||
|
||||
### 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:
|
||||
|
||||

|
||||
|
||||
### 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 <TAG>
|
||||
```
|
||||
|
||||
Una vez que ha seleccionado una rama etiquetada, ejecute lo siguiente desde
|
||||
dentro del directorio `bitcoin`. El `<CAMINO-A>` debe ser la salida del
|
||||
programa `install_db4.sh`.
|
||||
|
||||
```
|
||||
$ ./autogen.sh
|
||||
$ export BDB_PREFIX='<PATH-TO>/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).
|
||||
|
281
es/A3_0_Usando_Bitcoin_Regtest.md
Normal file
281
es/A3_0_Usando_Bitcoin_Regtest.md
Normal file
@ -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.
|
Loading…
x
Reference in New Issue
Block a user