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 #509 from icculp/update_links_2
Fixing chapter links and minor corrections from 15 through end
This commit is contained in:
commit
6045bc5d29
@ -13,7 +13,7 @@ Diferencias básicas entre Tor y i2p:
|
|||||||
|
|
||||||
Lea más: https://geti2p.net/en/comparison/tor
|
Lea más: https://geti2p.net/en/comparison/tor
|
||||||
|
|
||||||
Este no es instalado por [Bitcoin Standup](https://github.com/BlockchainCommons/Bitcoin-Standup-Scripts) actualmente ya que el soporte i2p fue agregado a Bitcoin Core recientemente. Sin embargo, puede probarlo manualmente siguiendo los pasos mencionados en la [Sección Uno](15_1_i2p_service.md).
|
Este no es instalado por [Bitcoin Standup](https://github.com/BlockchainCommons/Bitcoin-Standup-Scripts) actualmente ya que el soporte i2p fue agregado a Bitcoin Core recientemente. Sin embargo, puede probarlo manualmente siguiendo los pasos mencionados en la [Sección Uno](15_1_Servicio_i2p.md).
|
||||||
|
|
||||||
## Objetivos para Este Capítulo
|
## Objetivos para Este Capítulo
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ ldconfig -v -n .lib
|
|||||||
libbitcoinrpc.so.0 -> libbitcoinrpc.so.0.2 (changed)
|
libbitcoinrpc.so.0 -> libbitcoinrpc.so.0.2 (changed)
|
||||||
ln -fs libbitcoinrpc.so.0 .lib/libbitcoinrpc.so
|
ln -fs libbitcoinrpc.so.0 .lib/libbitcoinrpc.so
|
||||||
```
|
```
|
||||||
Si eso funciona, puede instalar el paquete::
|
Si eso funciona, puede instalar el paquete:
|
||||||
```
|
```
|
||||||
$ sudo make install
|
$ sudo make install
|
||||||
Installing to
|
Installing to
|
||||||
@ -148,7 +148,7 @@ bitcoinrpc_global_cleanup();
|
|||||||
|
|
||||||
### Pruebe el código de prueba
|
### Pruebe el código de prueba
|
||||||
|
|
||||||
El código de prueba se puede encontrar en el directorio src [15_1_testbitcoin.c](https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/blob/spanish-translation/src/15_1_testbitcoin.c). Descárguelo en su máquina de testnet, luego inserte la contraseña de RPC correcta (y cambie el usuario de RPC si no creó su servidor con StandUp).
|
El código de prueba se puede encontrar en el directorio src [16_1_testbitcoin.c](../src/16_1_testbitcoin.c). Descárguelo en su máquina de testnet, luego inserte la contraseña de RPC correcta (y cambie el usuario de RPC si no creó su servidor con StandUp).
|
||||||
|
|
||||||
Puede compilar y ejecutar esto de la siguiente manera:
|
Puede compilar y ejecutar esto de la siguiente manera:
|
||||||
```
|
```
|
||||||
@ -214,7 +214,7 @@ printf("Block Count: %d\n",blocks);
|
|||||||
|
|
||||||
### Prueba el código de información
|
### Prueba el código de información
|
||||||
|
|
||||||
Recupere el código de prueba del [directorio src](https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/blob/spanish-translation/src/15_1_getmininginfo.c).
|
Recupere el código de prueba del [directorio src](../src/16_1_getmininginfo.c).
|
||||||
```
|
```
|
||||||
$ cc getmininginfo.c -lbitcoinrpc -ljansson -o getmininginfo
|
$ cc getmininginfo.c -lbitcoinrpc -ljansson -o getmininginfo
|
||||||
$ ./getmininginfo
|
$ ./getmininginfo
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
> :information_source: **NOTA:** Esta sección se agregó recientemente al curso y es un borrador inicial que aún puede estar pendiente de revisión. Lector de advertencias.
|
> :information_source: **NOTA:** Esta sección se agregó recientemente al curso y es un borrador inicial que aún puede estar pendiente de revisión. Lector de advertencias.
|
||||||
|
|
||||||
[§16.1](16_1_Accediendo_a_Bitcoind_en_C_con_las_Bibliotecas_RPC) presentó la metodología para crear programas en C utilizando bibliotecas RPC y JSON. Ahora vamos a mostrar el potencial de esas bibliotecas C presentando un primer corte simplista de un programa Bitcoin real.
|
[§16.1](16_1_Accediendo_a_Bitcoind_en_C_con_las_Bibliotecas_RPC.md) presentó la metodología para crear programas en C utilizando bibliotecas RPC y JSON. Ahora vamos a mostrar el potencial de esas bibliotecas C presentando un primer corte simplista de un programa Bitcoin real.
|
||||||
|
|
||||||
## Planifique su código
|
## Planifique su código
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ float tx_total = tx_amount + tx_fee;
|
|||||||
|
|
||||||
### Paso 3: Prepare su RPC
|
### Paso 3: Prepare su RPC
|
||||||
|
|
||||||
Obviamente, necesitará tener todas sus variables listas nuevamente, como se discutió en [§16.1: Acceso a Bitcoind con C](16_1_Accediendo_a_Bitcoind_en_C_con_las_Bibliotecas_RPC). También necesita inicializar su biblioteca, conectar su cliente RPC y preparar su objeto de respuesta:
|
Obviamente, necesitará tener todas sus variables listas nuevamente, como se discutió en [§16.1: Acceso a Bitcoind con C](16_1_Accediendo_a_Bitcoind_en_C_con_las_Bibliotecas_RPC.md). También necesita inicializar su biblioteca, conectar su cliente RPC y preparar su objeto de respuesta:
|
||||||
|
|
||||||
```
|
```
|
||||||
bitcoinrpc_global_init();
|
bitcoinrpc_global_init();
|
||||||
@ -197,7 +197,7 @@ char *changeaddress = strdup(json_string_value(lu_result));
|
|||||||
|
|
||||||
La única diferencia es qué información particular se extrae del objeto JSON.
|
La única diferencia es qué información particular se extrae del objeto JSON.
|
||||||
|
|
||||||
> :warning:**ADVERTENCIA:** Aquí hay un lugar en el que una subrutina sería realmente agradable: abstraer toda la inicialización y llamada del método RPC.
|
> :warning: **ADVERTENCIA:** Aquí hay un lugar en el que una subrutina sería realmente agradable: abstraer toda la inicialización y llamada del método RPC.
|
||||||
|
|
||||||
|
|
||||||
### Paso 6: Crea una transacción sin procesar
|
### Paso 6: Crea una transacción sin procesar
|
||||||
@ -253,7 +253,7 @@ json_object_set(outputparams, tx_recipient, json_string(tx_amount_string));
|
|||||||
json_object_set(outputparams, changeaddress, json_string(tx_change_string));
|
json_object_set(outputparams, changeaddress, json_string(tx_change_string));
|
||||||
```
|
```
|
||||||
|
|
||||||
> :warning:**ADVERTENCIA: **Puede esperar ingresar sus valores de Bitcoin como números, usando `json_real`. Desafortunadamente, esto expone uno de los principales problemas con la integración de la biblioteca `jansson` y Bitcoin. Bitcoin solo es válido hasta ocho dígitos significativos después del punto decimal. Puede recordar que .00000001 BTC es un satoshi, y esa es la división más pequeña posible de un Bitcoin. Los dobles en C ofrecen dígitos más significativos que eso, aunque a menudo son imprecisos más allá de los ocho decimales. Si intenta convertir directamente de su valor doble en C (o un valor flotante, para el caso) a un valor de Bitcoin, la imprecisión a menudo creará un valor de Bitcoin con más de ocho dígitos significativos. Antes de Bitcoin Core 0.12, esto parece funcionar, y podría usar `json_real`. Pero a partir de Bitcoin Core 0.12, si intenta darle a `createrawtransaction` un valor de Bitcoin con demasiados dígitos significativos, obtendrá un error y la transacción no se creará. Como resultado, si el valor de Bitcoin _ever_ se ha convertido en un doble o flotante, debe reformatearlo a ocho dígitos significativos después del dígito antes de introducirlo como una cadena. Obviamente, esto es una tontería, por lo que debe asegurarse de que continúe funcionando en futuras versiones de Bitcoin Core.
|
> :warning:**ADVERTENCIA:** Puede esperar ingresar sus valores de Bitcoin como números, usando `json_real`. Desafortunadamente, esto expone uno de los principales problemas con la integración de la biblioteca `jansson` y Bitcoin. Bitcoin solo es válido hasta ocho dígitos significativos después del punto decimal. Puede recordar que .00000001 BTC es un satoshi, y esa es la división más pequeña posible de un Bitcoin. Los dobles en C ofrecen dígitos más significativos que eso, aunque a menudo son imprecisos más allá de los ocho decimales. Si intenta convertir directamente de su valor doble en C (o un valor flotante, para el caso) a un valor de Bitcoin, la imprecisión a menudo creará un valor de Bitcoin con más de ocho dígitos significativos. Antes de Bitcoin Core 0.12, esto parece funcionar, y podría usar `json_real`. Pero a partir de Bitcoin Core 0.12, si intenta darle a `createrawtransaction` un valor de Bitcoin con demasiados dígitos significativos, obtendrá un error y la transacción no se creará. Como resultado, si el valor de Bitcoin _ever_ se ha convertido en un doble o flotante, debe reformatearlo a ocho dígitos significativos después del dígito antes de introducirlo como una cadena. Obviamente, esto es una tontería, por lo que debe asegurarse de que continúe funcionando en futuras versiones de Bitcoin Core.
|
||||||
|
|
||||||
#### Paso 6.3: Crear la matriz de parámetros
|
#### Paso 6.3: Crear la matriz de parámetros
|
||||||
|
|
||||||
@ -329,7 +329,7 @@ char *tx_signrawhex = strdup(json_string_value(lu_signature));
|
|||||||
json_decref(lu_signature);
|
json_decref(lu_signature);
|
||||||
```
|
```
|
||||||
|
|
||||||
> :warning: *** ADVERTENCIA: *** Un programa del mundo real obviamente probaría cuidadosamente la respuesta de cada comando RPC para asegurarse de que no haya errores. Eso es especialmente cierto para `signrawtransaction`, porque podría terminar con una transacción parcialmente firmada. Peor aún, si no verifica los errores en el objeto JSON, solo verá el `hex` y no se dará cuenta de que está sin firmar o parcialmente firmado.
|
> :warning: ***ADVERTENCIA:*** Un programa del mundo real obviamente probaría cuidadosamente la respuesta de cada comando RPC para asegurarse de que no haya errores. Eso es especialmente cierto para `signrawtransaction`, porque podría terminar con una transacción parcialmente firmada. Peor aún, si no verifica los errores en el objeto JSON, solo verá el `hex` y no se dará cuenta de que está sin firmar o parcialmente firmado.
|
||||||
|
|
||||||
### Paso 8. Envíar la transacción
|
### Paso 8. Envíar la transacción
|
||||||
|
|
||||||
@ -364,7 +364,7 @@ El código completo, con un poco más de comprobación de errores, aparece en el
|
|||||||
## Pruebe su código
|
## Pruebe su código
|
||||||
|
|
||||||
|
|
||||||
El código completo se puede encontrar en el [directorio src](../src/15_2_sendtoaddress.c).
|
El código completo se puede encontrar en el [directorio src](../src/16_2_sendtoaddress.c).
|
||||||
|
|
||||||
Compile esto como de costumbre:
|
Compile esto como de costumbre:
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
[§16.1](16_1_Accediendo_a_Bitcoind_en_C_con_las_Bibliotecas_RPC.md) y [§16.2](16_2_Programando_Bitcoind_en_C_con_las_Bibliotecas_RPC.md) introdujeron las bibliotecas RPC y JSON para C, y al hacerlo mostró una de las ventajas de acceder a los comandos RPC de Bitcoin a través de un lenguaje de programación: la capacidad de crear programas mucho más complejos. Este capítulo presenta una tercera biblioteca, para [ZMQ](http://zeromq.org/), y al hacerlo revela otra ventaja: la capacidad de monitorear las notificaciones. Lo usará para codificar un oyente de blockchain.
|
[§16.1](16_1_Accediendo_a_Bitcoind_en_C_con_las_Bibliotecas_RPC.md) y [§16.2](16_2_Programando_Bitcoind_en_C_con_las_Bibliotecas_RPC.md) introdujeron las bibliotecas RPC y JSON para C, y al hacerlo mostró una de las ventajas de acceder a los comandos RPC de Bitcoin a través de un lenguaje de programación: la capacidad de crear programas mucho más complejos. Este capítulo presenta una tercera biblioteca, para [ZMQ](http://zeromq.org/), y al hacerlo revela otra ventaja: la capacidad de monitorear las notificaciones. Lo usará para codificar un oyente de blockchain.
|
||||||
|
|
||||||
> :libro: ***¿Qué es ZMQ?*** ZeroMQ (ZMQ) es una biblioteca de mensajería asincrónica de alto rendimiento que proporciona una cola de mensajes. ZeroMQ admite patrones de mensajería comunes (publicación / sub, solicitud / respuesta, cliente / servidor y otros) a través de una variedad de transportes (TCP, en proceso, entre procesos, multidifusión, WebSocket y más), lo que hace que la mensajería entre procesos tan simple como la mensajería entre subprocesos. Puede encontrar más detalles sobre las notificaciones de ZMQ y otros tipos de mensajes en [este repositorio](https://github.com/Actinium-project/ChainTools/blob/master/docs/chainlistener.md).
|
> :book: ***¿Qué es ZMQ?*** ZeroMQ (ZMQ) es una biblioteca de mensajería asincrónica de alto rendimiento que proporciona una cola de mensajes. ZeroMQ admite patrones de mensajería comunes (publicación / sub, solicitud / respuesta, cliente / servidor y otros) a través de una variedad de transportes (TCP, en proceso, entre procesos, multidifusión, WebSocket y más), lo que hace que la mensajería entre procesos tan simple como la mensajería entre subprocesos. Puede encontrar más detalles sobre las notificaciones de ZMQ y otros tipos de mensajes en [este repositorio](https://github.com/Actinium-project/ChainTools/blob/master/docs/chainlistener.md).
|
||||||
|
|
||||||
## Configurar ZMQ
|
## Configurar ZMQ
|
||||||
|
|
||||||
@ -133,7 +133,7 @@ Por supuesto, cuando termine, debe limpiar:
|
|||||||
|
|
||||||
### Pruebe el código de notificación
|
### Pruebe el código de notificación
|
||||||
|
|
||||||
El código fuente está en el [directorio src](../src/15_3_chainlistener.c) como de costumbre. Debería compilarlo:
|
El código fuente está en el [directorio src](../src/16_3_chainlistener.c) como de costumbre. Debería compilarlo:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ cc -o chainlistener chainlistener.c -I/usr/local/include -L/usr/local/lib -lzmq -lczmq
|
$ cc -o chainlistener chainlistener.c -I/usr/local/include -L/usr/local/lib -lzmq -lczmq
|
||||||
|
@ -128,7 +128,7 @@ En ambos casos, el argumento es para flags, pero actualmente tiene el valor `0`.
|
|||||||
|
|
||||||
## Prueba un programa de prueba de Libwally
|
## Prueba un programa de prueba de Libwally
|
||||||
|
|
||||||
El directorio src contiene [testwally.c](../src/16_1_testwally.c), que sólo muestra cómo funcionan las funciones de inicialización y limpieza.
|
El directorio src contiene [testwally.c](../src/17_1_testwally.c), que sólo muestra cómo funcionan las funciones de inicialización y limpieza.
|
||||||
|
|
||||||
Puede compilarlo de la siguiente manera:
|
Puede compilarlo de la siguiente manera:
|
||||||
```
|
```
|
||||||
@ -188,4 +188,4 @@ Entonces, ¿qué puede hacer ahora? De eso es lo que se trata en el siguiente
|
|||||||
|
|
||||||
## ¿Qué es lo siguiente?
|
## ¿Qué es lo siguiente?
|
||||||
|
|
||||||
Más información sobre "Programar Bitcoin con Libwally" en [17.2: Usar BIP39 en Libwally](17_2_Using_BIP39_in_Libwally.md).
|
Más información sobre "Programar Bitcoin con Libwally" en [17.2: Usar BIP39 en Libwally](17_2_Usando_BIP39_en_Libwally.md).
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
Uno de los mayores poderes de Libwally es que puede poner al descubierto el trabajo subyacente de generar semillas, claves privadas y, en última instancia, direcciones. Para empezar, es compatible con [BIP39](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki), que es el BIP que define los códigos mnemónicos para Bitcoin - algo que es totalmente no compatible, hasta la fecha, por Bitcoin Core.
|
Uno de los mayores poderes de Libwally es que puede poner al descubierto el trabajo subyacente de generar semillas, claves privadas y, en última instancia, direcciones. Para empezar, es compatible con [BIP39](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki), que es el BIP que define los códigos mnemónicos para Bitcoin - algo que es totalmente no compatible, hasta la fecha, por Bitcoin Core.
|
||||||
> :book: ***Qué es un código mnemónico?*** Las direcciones de Bitcoin (y sus correspondientes claves privadas y semillas subyacentes) son listas largas e ininteligibles de caracteres y números, que no solo son imposibles de recordar, sino también fáciles de escribir mal. Los códigos mnemotécnicos son una solución para esto que permite a los usuarios grabar 12 (o 24) palabras en su idioma, algo que es mucho menos propenso a errores. Estos códigos se pueden utilizar para restaurar completamente una semilla BIP32 que es la base de una cartera HD.
|
> :book: ***Qué es un código mnemónico?*** Las direcciones de Bitcoin (y sus correspondientes claves privadas y semillas subyacentes) son listas largas e ininteligibles de caracteres y números, que no solo son imposibles de recordar, sino también fáciles de escribir mal. Los códigos mnemotécnicos son una solución para esto que permite a los usuarios grabar 12 (o 24) palabras en su idioma, algo que es mucho menos propenso a errores. Estos códigos se pueden utilizar para restaurar completamente una semilla BIP32 que es la base de una cartera HD.
|
||||||
|
|
||||||
> :book: ***Que es una semilla? *** Mencionamos brevemente las semillas en [§3.5: Entendiendo el Descriptor](03_5_Entendiendo_El_Descriptor.md). Es el número aleatorio que se utiliza para generar una secuencia completa de claves privadas (y por lo tanto direcciones) en una cartera de jerárquica determinista (HD). Volveremos a las semillas en la siguiente sección, que es todo sobre carteras HD y Libwally. Por ahora, basta saber que un código mnemónico BIP39 corresponde a la semilla de una cartera determinística jerárquica BIP32.
|
> :book: ***Que es una semilla?*** Mencionamos brevemente las semillas en [§3.5: Entendiendo el Descriptor](03_5_Entendiendo_El_Descriptor.md). Es el número aleatorio que se utiliza para generar una secuencia completa de claves privadas (y por lo tanto direcciones) en una cartera de jerárquica determinista (HD). Volveremos a las semillas en la siguiente sección, que es todo sobre carteras HD y Libwally. Por ahora, basta saber que un código mnemónico BIP39 corresponde a la semilla de una cartera determinística jerárquica BIP32.
|
||||||
|
|
||||||
## Crear códigos mnemotécnicos
|
## Crear códigos mnemotécnicos
|
||||||
|
|
||||||
|
@ -103,7 +103,7 @@ También hay una función `wally_bip32_key_to_address` que se puede utilizar par
|
|||||||
|
|
||||||
## Prueba de código HD
|
## Prueba de código HD
|
||||||
|
|
||||||
El código para este ejemplo de HD se puede encontrar, como de costumbre, en el [src directory](../src/16_3_genhd.c).
|
El código para este ejemplo de HD se puede encontrar, como de costumbre, en el [src directory](../src/17_3_genhd.c).
|
||||||
|
|
||||||
Puede compilarlo y probarlo:
|
Puede compilarlo y probarlo:
|
||||||
```
|
```
|
||||||
|
@ -116,7 +116,7 @@ Obviamente, hay mucho más que podría ver en los PSBT. De hecho, observar es el
|
|||||||
|
|
||||||
### Pruebe su lector PSBT
|
### Pruebe su lector PSBT
|
||||||
|
|
||||||
De nuevo, el código para este lector PSBT (extremadamente rudimentario y específico) está en el [src directory](../src/16_4_examinepsbt.c).
|
De nuevo, el código para este lector PSBT (extremadamente rudimentario y específico) está en el [src directory](../src/17_4_examinepsbt.c).
|
||||||
|
|
||||||
Puede compilarlo como siempre:
|
Puede compilarlo como siempre:
|
||||||
```
|
```
|
||||||
@ -271,7 +271,7 @@ Puede ver la entrada en satoshis y el `scriptPubKey` claramente listados en las
|
|||||||
## Crear un PSBT
|
## Crear un PSBT
|
||||||
|
|
||||||
Como se señaló al principio de esta sección, todas las funciones necesarias para crear y procesar las PSBT están disponibles en Libwally. En realidad, correr a través del proceso de hacerlo es lo suficientemente complejo como para que esté más allá del alcance de esta sección, pero aquí hay una rápida ejecución de las funciones requeridas. Tenga en cuenta que los [documentos](https://wally.readthedocs.io/en/latest/psbt/) están desactualizados para PSBTs, por lo que deberá consultar `/usr/include/wally_psbt.h` para información completa.
|
Como se señaló al principio de esta sección, todas las funciones necesarias para crear y procesar las PSBT están disponibles en Libwally. En realidad, correr a través del proceso de hacerlo es lo suficientemente complejo como para que esté más allá del alcance de esta sección, pero aquí hay una rápida ejecución de las funciones requeridas. Tenga en cuenta que los [documentos](https://wally.readthedocs.io/en/latest/psbt/) están desactualizados para PSBTs, por lo que deberá consultar `/usr/include/wally_psbt.h` para información completa.
|
||||||
Como se discute en [§7.1](07_1_Creating_a_Partially_Signed_Bitcoin_Transaction.md) hay varios roles involucrados en la creación de PSBTs
|
Como se discute en [§7.1](07_1_Creando_una_Transaccion_Bitcoin_Parcialmente_Firmada.md) hay varios roles involucrados en la creación de PSBTs
|
||||||
|
|
||||||
### Tomar el rol de creador
|
### Tomar el rol de creador
|
||||||
|
|
||||||
@ -290,7 +290,7 @@ Pero lo que usted tiene todavía no es un PSBT legal, debido a la falta de insum
|
|||||||
```
|
```
|
||||||
## Pruebe su creación de PSBT
|
## Pruebe su creación de PSBT
|
||||||
|
|
||||||
En este punto, debería tener un PSBT vacío, pero funcional, que puede ver compilando y ejecutando [the program](../src/16_4_createemptypsbt.c).
|
En este punto, debería tener un PSBT vacío, pero funcional, que puede ver compilando y ejecutando [el programa](../src/17_4_createemptypsbt.c).
|
||||||
```
|
```
|
||||||
$ cc createemptypsbt.c -lwallycore -o createemptypsbt
|
$ cc createemptypsbt.c -lwallycore -o createemptypsbt
|
||||||
$ ./createemptypsbt
|
$ ./createemptypsbt
|
||||||
|
@ -80,7 +80,7 @@ Un comando más lo añade a su transacción:
|
|||||||
|
|
||||||
Crear la entrada es mucho más difícil porque usted tiene que acumular información en las rutinas de creación, no todas las cuales son intuitivamente accesibles cuando usa Libwally. Así que, en lugar de ir tan profundo en la maleza, aquí es donde tomamos nuestro atajo. Escribimos nuestro código para que pase el código hexadecimal de una transacción que ya ha sido creada, y luego simplemente reutilizamos la entrada.
|
Crear la entrada es mucho más difícil porque usted tiene que acumular información en las rutinas de creación, no todas las cuales son intuitivamente accesibles cuando usa Libwally. Así que, en lugar de ir tan profundo en la maleza, aquí es donde tomamos nuestro atajo. Escribimos nuestro código para que pase el código hexadecimal de una transacción que ya ha sido creada, y luego simplemente reutilizamos la entrada.
|
||||||
|
|
||||||
La conversión del código hexadecimal se realiza con `wally_tx_from_hex:
|
La conversión del código hexadecimal se realiza con `wally_tx_from_hex`:
|
||||||
```
|
```
|
||||||
struct wally_tx *utxo;
|
struct wally_tx *utxo;
|
||||||
lw_response = wally_tx_from_hex(utxo_hex,0,&utxo);
|
lw_response = wally_tx_from_hex(utxo_hex,0,&utxo);
|
||||||
@ -110,7 +110,7 @@ Vamos a mostrar cómo hacer uso de eso en §17.7.
|
|||||||
|
|
||||||
## Pruebe su script de reemplazo
|
## Pruebe su script de reemplazo
|
||||||
|
|
||||||
Puede tomar el código de prueba del [directorio src](../src/16_5_replacewithscript.c) y compilarlo:
|
Puede tomar el código de prueba del [directorio src](../src/17_5_replacewithscript.c) y compilarlo:
|
||||||
```
|
```
|
||||||
$ cc replacewithscript.c -lwallycore -o replacewithscript
|
$ cc replacewithscript.c -lwallycore -o replacewithscript
|
||||||
```
|
```
|
||||||
|
@ -27,7 +27,7 @@ Para demostrar completamente esta metodología, creará una transacción con `bi
|
|||||||
```
|
```
|
||||||
Por ahora, usted sabe cómo configurar una transacción con `bitcoin-cli`:
|
Por ahora, usted sabe cómo configurar una transacción con `bitcoin-cli`:
|
||||||
|
|
||||||
Aunque puso un destinatario y una cantidad en la salida, es irrelevante porque tendrá que reescribirlas. Un código un poco más elegante podría leer la información `vout` existente antes de reescribir, pero estamos manteniendo las cosas muy cerca de nuestro [código original](../src/16_5_replacewithscript.c).
|
Aunque puso un destinatario y una cantidad en la salida, es irrelevante porque tendrá que reescribirlas. Un código un poco más elegante podría leer la información `vout` existente antes de reescribir, pero estamos manteniendo las cosas muy cerca de nuestro [código original](../src/17_5_replacewithscript.c).
|
||||||
|
|
||||||
Aquí está el cambio necesario, para que pueda especificar el monto de satoshis para la salida `vout`, sin tener que ponerlo a fuego como en el original:
|
Aquí está el cambio necesario, para que pueda especificar el monto de satoshis para la salida `vout`, sin tener que ponerlo a fuego como en el original:
|
||||||
```
|
```
|
||||||
@ -164,7 +164,7 @@ $ bitcoin-cli decoderawtransaction $signedtx
|
|||||||
```
|
```
|
||||||
¡Voila! Ese es el poder de Libwally con `bitcoin-cli`.
|
¡Voila! Ese es el poder de Libwally con `bitcoin-cli`.
|
||||||
|
|
||||||
Obviamente, también puede pasar un PSBT usando las funciones descritas en [§17.4](117_4_Usando_PSBTs_en_Libwally.md) y esa es una metodología más actualizada para el uso actual de Bitcoin, pero en cualquier caso, el concepto de pasar transacciones desde `bitcoin-cli` a código Libwally y viceversa debe ser similar.
|
Obviamente, también puede pasar un PSBT usando las funciones descritas en [§17.4](17_4_Usando_PSBTs_en_Libwally.md) y esa es una metodología más actualizada para el uso actual de Bitcoin, pero en cualquier caso, el concepto de pasar transacciones desde `bitcoin-cli` a código Libwally y viceversa debe ser similar.
|
||||||
|
|
||||||
## Importar y exportar semillas BIP39
|
## Importar y exportar semillas BIP39
|
||||||
|
|
||||||
@ -176,7 +176,7 @@ Desafortunadamente, no todas las interacciones entre Libwally y `bitcoin-cli` va
|
|||||||
|
|
||||||
## Importar claves privadas
|
## Importar claves privadas
|
||||||
|
|
||||||
Afortunadamente puede hacer lo mismo importando una clave privada generada en Libwally. De un vistazo a [genhd-for-import.c](../src/16_7_genhd_for_import.c), que es una versión simplificada del programa `genhd` de [§17.3](17_3_Usando_BIP32_en_Libwally.md) que también utiliza la biblioteca `jansson` de [§16.1](16_1_Accediendo_a_Bitcoind_en_C_con_las_Bibliotecas_RPC.md) para la salida regularizada.
|
Afortunadamente puede hacer lo mismo importando una clave privada generada en Libwally. De un vistazo a [genhd-for-import.c](../src/17_7_genhd_for_import.c), que es una versión simplificada del programa `genhd` de [§17.3](17_3_Usando_BIP32_en_Libwally.md) que también utiliza la biblioteca `jansson` de [§16.1](16_1_Accediendo_a_Bitcoind_en_C_con_las_Bibliotecas_RPC.md) para la salida regularizada.
|
||||||
|
|
||||||
El código actualizado también contiene un cambio de nota: solicita una huella dactilar de Libwally para que pueda crear correctamente una ruta de derivación:
|
El código actualizado también contiene un cambio de nota: solicita una huella dactilar de Libwally para que pueda crear correctamente una ruta de derivación:
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ Luego, mire la página [de descargas Go](https://golang.org/dl/), obtenga el enl
|
|||||||
$ curl -O https://dl.google.com/go/go1.15.1.linux-amd64.tar.gz
|
$ curl -O https://dl.google.com/go/go1.15.1.linux-amd64.tar.gz
|
||||||
```
|
```
|
||||||
|
|
||||||
Una vez finalizada la descarga, compare el hash de la descarga con el hash en la página [Go downloads page](https://golang.org/dl/):
|
Una vez finalizada la descarga, compare el hash de la descarga con el hash en la página [de descargas Go](https://golang.org/dl/):
|
||||||
```
|
```
|
||||||
$ sha256sum go1.15.1.linux-amd64.tar.gz
|
$ sha256sum go1.15.1.linux-amd64.tar.gz
|
||||||
70ac0dbf60a8ee9236f337ed0daa7a4c3b98f6186d4497826f68e97c0c0413f6 go1.15.1.linux-amd64.tar.gz
|
70ac0dbf60a8ee9236f337ed0daa7a4c3b98f6186d4497826f68e97c0c0413f6 go1.15.1.linux-amd64.tar.gz
|
||||||
@ -51,7 +51,7 @@ Para probar que funciona, vaya al directorio con los ejemplos de Bitcoin Core:
|
|||||||
```
|
```
|
||||||
$ cd $GOPATH/src/github.com/btcsuite/btcd/rpcclient/examples/bitcoincorehttp
|
$ cd $GOPATH/src/github.com/btcsuite/btcd/rpcclient/examples/bitcoincorehttp
|
||||||
```
|
```
|
||||||
Modificar el archivo `main.go` e introduzca los detalles asociados con la configuración del núcleo de Bitcoin, que se pueden encontrar en ` ~/. bitcoin/bitcoin.conf`:
|
Modificar el archivo `main.go` e introduzca los detalles asociados con la configuración del núcleo de Bitcoin, que se pueden encontrar en `~/.bitcoin/bitcoin.conf`:
|
||||||
|
|
||||||
```
|
```
|
||||||
Host: "localhost:18332",
|
Host: "localhost:18332",
|
||||||
@ -87,7 +87,7 @@ import (
|
|||||||
```
|
```
|
||||||
|
|
||||||
Esta declaración `import` le permite importar bibliotecas relevantes. Para cada ejemplo aquí, necesitará importar `"log", "fmt"` y `"github.com/btcsuite/btcd/rpcclient"`. Es posible que necesite importar bibliotecas adicionales para algunos ejemplos.
|
Esta declaración `import` le permite importar bibliotecas relevantes. Para cada ejemplo aquí, necesitará importar `"log", "fmt"` y `"github.com/btcsuite/btcd/rpcclient"`. Es posible que necesite importar bibliotecas adicionales para algunos ejemplos.
|
||||||
* `log` se utiliza para imprimir mensajes de error. Después de cada llamada al nodo Bitcoin, una sentencia `if` comprobará si hay algún error. Si hay errores, `log` se utiliza para imprimirlos.
|
* `log` se utiliza para imprimir mensajes de error. Después de cada llamada al nodo Bitcoin, una declaración `if` comprobará si hay algún error. Si hay errores, `log` se utiliza para imprimirlos.
|
||||||
* `fmt` se utiliza para imprimir la salida.
|
* `fmt` se utiliza para imprimir la salida.
|
||||||
* `rpcclient`; es obviamente la biblioteca `rpcclient`
|
* `rpcclient`; es obviamente la biblioteca `rpcclient`
|
||||||
*
|
*
|
||||||
@ -111,7 +111,7 @@ Cada función `bitcoind` en Go comienza con la creación de la conexión RPC, us
|
|||||||
```
|
```
|
||||||
Los parámetros `connCfg` le permiten elegir el puerto RPC de Bitcoin, nombre de usuario, contraseña y si está en testnet o mainnet.
|
Los parámetros `connCfg` le permiten elegir el puerto RPC de Bitcoin, nombre de usuario, contraseña y si está en testnet o mainnet.
|
||||||
|
|
||||||
> **NOTA:** De nuevo, asegúrese de sustituir el `User` y `Pass` con el que se encuentra en su `~/. bitcoin/bitcon.conf`.
|
> **NOTA:** De nuevo, asegúrese de sustituir el `User` y `Pass` con el que se encuentra en su `~/.bitcoin/bitcon.conf`.
|
||||||
|
|
||||||
Por tanto la función `rpcclient. New(connCfg, nil)` configura su `client` para conectarse a su nodo Bitcoin.
|
Por tanto la función `rpcclient. New(connCfg, nil)` configura su `client` para conectarse a su nodo Bitcoin.
|
||||||
La línea `defer client.Shutdown()` es para desconectar de su nodo Bitcoin, una vez que la función `main()` termina de ejecutarse.
|
La línea `defer client.Shutdown()` es para desconectar de su nodo Bitcoin, una vez que la función `main()` termina de ejecutarse.
|
||||||
@ -150,7 +150,7 @@ Para imprimirlos como una cadena, es necesario utilizar `blockHash.String()`.
|
|||||||
|
|
||||||
### Ejecute su código
|
### Ejecute su código
|
||||||
|
|
||||||
Puede descargar el código completo desde el [src directory](https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/blob/master/src/17_1_blockinfo.go).
|
Puede descargar el código completo desde el [src directory](../src/18_1_blockinfo.go).
|
||||||
|
|
||||||
A continuación, puede ejecutar:
|
A continuación, puede ejecutar:
|
||||||
```
|
```
|
||||||
@ -173,10 +173,10 @@ Sin embargo, usted puede hacer uso de la llamada RPC `getbalance`:
|
|||||||
```
|
```
|
||||||
|
|
||||||
`client.GetBalance("*")` requiere la entrada `"*"`, debido a una peculiaridad con `btcd`. El asterisco significa que usted quiere conseguir el saldo de todas sus carteras.
|
`client.GetBalance("*")` requiere la entrada `"*"`, debido a una peculiaridad con `btcd`. El asterisco significa que usted quiere conseguir el saldo de todas sus carteras.
|
||||||
Si ejecuta [the src code](https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/blob/master/src/17_1_getbalance.go), debería obtener una salida similar a esta:
|
Si ejecuta [el código src](../src/18_1_getbalance.go), debería obtener una salida similar a esta:
|
||||||
```
|
```
|
||||||
$ go run getbalance.go
|
$ go run getbalance.go
|
||||||
0,000689 BTC
|
0.000689 BTC
|
||||||
```
|
```
|
||||||
|
|
||||||
## Crear una dirección
|
## Crear una dirección
|
||||||
@ -227,7 +227,7 @@ A continuación, puede crear su dirección:
|
|||||||
```
|
```
|
||||||
Una peculiaridad con `client.GetNewAddress(")` es que se debe incluir una cadena vacía para que funcione.
|
Una peculiaridad con `client.GetNewAddress(")` es que se debe incluir una cadena vacía para que funcione.
|
||||||
|
|
||||||
Ejecutando [the source](https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/blob/master/src/17_1_getaddress.go) se obtienen los siguientes resultados:
|
Ejecutando [la fuente](https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/blob/master/src/18_1_getaddress.go) se obtienen los siguientes resultados:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ go run getaddress.go
|
$ go run getaddress.go
|
||||||
@ -271,7 +271,7 @@ Solo después de esto, use la dirección `getreceivedbyaddress` RPC, en su direc
|
|||||||
|
|
||||||
fmt.Println(wallet)
|
fmt.Println(wallet)
|
||||||
```
|
```
|
||||||
Cuando ejecute [el código](https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/blob/master/src/17_1_getamountreceived.go), debería obtener una salida similar a:
|
Cuando ejecute [el código](../src/18_1_getamountreceived.go), debería obtener una salida similar a:
|
||||||
```
|
```
|
||||||
$ go run getamountreceived.go
|
$ go run getamountreceived.go
|
||||||
0.0085 BTC
|
0.0085 BTC
|
||||||
@ -323,7 +323,7 @@ func main() {
|
|||||||
fmt.Println(sent)
|
fmt.Println(sent)
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Cuando se ejecuta [el código](https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/blob/master/src/17_1_sendtransaction.go), el txid de la transacción se emite:
|
Cuando se ejecuta [el código](../src/18_1_sendtransaction.go), el txid de la transacción se emite:
|
||||||
```
|
```
|
||||||
$ go run sendtransaction.go
|
$ go run sendtransaction.go
|
||||||
9aa4cd6559e0d69059eae142c35bfe78b71a8084e1fcc2c74e2a9675e9e7489d
|
9aa4cd6559e0d69059eae142c35bfe78b71a8084e1fcc2c74e2a9675e9e7489d
|
||||||
@ -369,7 +369,7 @@ func main() {
|
|||||||
```
|
```
|
||||||
> **NOTA:** De nuevo, querrá cambiar el txid por uno realmente reconocido por su sistema.
|
> **NOTA:** De nuevo, querrá cambiar el txid por uno realmente reconocido por su sistema.
|
||||||
|
|
||||||
Cuando ejecute [el código](https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/blob/master/src/17_1_lookuptransaction.go) imprimirá los detalles asociados con una transacción, como su cantidad y cuántas veces se ha confirmado:
|
Cuando ejecute [el código](../src/18_1_lookuptransaction.go) imprimirá los detalles asociados con una transacción, como su cantidad y cuántas veces se ha confirmado:
|
||||||
```
|
```
|
||||||
$ go run lookuptransaction.go
|
$ go run lookuptransaction.go
|
||||||
{
|
{
|
||||||
|
@ -79,14 +79,14 @@ Si usa [Gradle](https://gradle.org/releases/), puede ejecutar:
|
|||||||
compile 'wf.bitcoin:JavaBitcoindRpcClient:1.2.1'
|
compile 'wf.bitcoin:JavaBitcoindRpcClient:1.2.1'
|
||||||
```
|
```
|
||||||
|
|
||||||
Si desea un proyecto de ejemplo y algunas instrucciones sobre cómo ejecutarlo en el servidor que acaba de crear, puede consultar el [Proyecto de Ejemplo](https://github.com/brunocvcunha/bitcoind-java-client-sample/). También puede buscar todo el código fuente para bitcoin-rpc-client (https://github.com/Polve/bitcoin-rpc-client).
|
Si desea un proyecto de ejemplo y algunas instrucciones sobre cómo ejecutarlo en el servidor que acaba de crear, puede consultar el [Proyecto de Ejemplo](https://github.com/brunocvcunha/bitcoind-java-client-sample/). También puede buscar todo el código fuente para [bitcoin-rpc-client](https://github.com/Polve/bitcoin-rpc-client).
|
||||||
|
|
||||||
## Construya su conexión
|
## Construya su conexión
|
||||||
|
|
||||||
Para usar `JavaBitcoindRpcClient`, necesita crear una instancia `BitcoindRpcClient`. Esto se hace creando una URL con argumentos de nombre de usuario, contraseña, dirección IP y puerto. Como recordará, la dirección IP `127.0.0.1` y el puerto `18332` deberían ser correctos para la configuración de testnet estándar descrita en este curso, mientras que puede extraer el usuario y la contraseña de `~/. bitcoin/bitcoin.conf`.
|
Para usar `JavaBitcoindRpcClient`, necesita crear una instancia `BitcoindRpcClient`. Esto se hace creando una URL con argumentos de nombre de usuario, contraseña, dirección IP y puerto. Como recordará, la dirección IP `127.0.0.1` y el puerto `18332` deberían ser correctos para la configuración de testnet estándar descrita en este curso, mientras que puede extraer el usuario y la contraseña de `~/. bitcoin/bitcoin.conf`.
|
||||||
|
|
||||||
```java
|
```java
|
||||||
BitcoindRpcClient rpcClient = new BitcoinJSONRPCClient("http://StandUp:6305f1b2dbb3bc5a16cd0f4aac7e1eba@localhost:18332");
|
BitcoindRpcClient rpcClient = new BitcoinJSONRPCClient("http://StandUp:6305f1b2dbb3bc5a16cd0f4aac7e1eba@localhost:18332");
|
||||||
```
|
```
|
||||||
|
|
||||||
Tenga en cuenta que también necesitará importar la información adecuada:
|
Tenga en cuenta que también necesitará importar la información adecuada:
|
||||||
@ -151,7 +151,7 @@ PubKey: 0368d0fffa651783524f8b934d24d03b32bf8ff2c0808943a556b3d74b2e5c7d65
|
|||||||
```
|
```
|
||||||
### Ejecute su código
|
### Ejecute su código
|
||||||
|
|
||||||
El código para estos ejemplos se puede encontrar en el [directorio src](https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/blob/master/src/18_2_App-getinfo.java) y debe ser instalado en la estructura de directorios estándar creada aquí como `~/java-project/src/main/java/com/blockchaincommons/lbtc/App.java`. Luego se puede compilar y ejecutar.
|
El código para estos ejemplos se puede encontrar en el [directorio src](../src/18_2_App-getinfo.java) y debe ser instalado en la estructura de directorios estándar creada aquí como `~/java-project/src/main/java/com/blockchaincommons/lbtc/App.java`. Luego se puede compilar y ejecutar.
|
||||||
```
|
```
|
||||||
$ mvn compile
|
$ mvn compile
|
||||||
$ mvn exec:java -Dexec.mainClass=com.blockchaincommons.lbtc.App
|
$ mvn exec:java -Dexec.mainClass=com.blockchaincommons.lbtc.App
|
||||||
@ -265,7 +265,7 @@ Finalmente enviar requiere el comando `sendRawTransaction` :
|
|||||||
```
|
```
|
||||||
### Ejecute su código
|
### Ejecute su código
|
||||||
|
|
||||||
Ahora puede ejecutar [el código de transacción](https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/blob/master/src/17_2_App-sendtx.java) como `~/java-project/src/main/java/com/blockchaincommons/lbtc/App.java`.
|
Ahora puede ejecutar [el código de transacción](../src/18_2_App-sendtx.java) como `~/java-project/src/main/java/com/blockchaincommons/lbtc/App.java`.
|
||||||
```
|
```
|
||||||
$ mvn compile
|
$ mvn compile
|
||||||
$ mvn exec:java -Dexec.mainClass=com.blockchaincommons.lbtc.App
|
$ mvn exec:java -Dexec.mainClass=com.blockchaincommons.lbtc.App
|
||||||
@ -300,7 +300,7 @@ Para ello, usa la clase `JavaBitcoindRpcClient` `BitcoinAcceptor`, que le permit
|
|||||||
});
|
});
|
||||||
acceptor.run();
|
acceptor.run();
|
||||||
```
|
```
|
||||||
Vea en el [directorio src](https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/blob/master/src/17_2_App-listen.java) para el código completo. Cada vez que se envíe una transacción o se genere un nuevo bloque, debería ver la salida en su consola:
|
Vea en el [directorio src](../src/18_2_App-listen.java) para el código completo. Cada vez que se envíe una transacción o se genere un nuevo bloque, debería ver la salida en su consola:
|
||||||
```
|
```
|
||||||
Transaction: {account=Tests, address=mhopuJzgmTwhGfpNLCJ9CRknugY691oXp1, category=receive, amount=5.0E-4, label=Tests, vout=1, confirmations=0, trusted=false, txid=361e8fcff243b74ebf396e595a007636654f67c3c7b55fd2860a3d37772155eb, walletconflicts=[], time=1513132887, timereceived=1513132887, bip125-replaceable=unknown}
|
Transaction: {account=Tests, address=mhopuJzgmTwhGfpNLCJ9CRknugY691oXp1, category=receive, amount=5.0E-4, label=Tests, vout=1, confirmations=0, trusted=false, txid=361e8fcff243b74ebf396e595a007636654f67c3c7b55fd2860a3d37772155eb, walletconflicts=[], time=1513132887, timereceived=1513132887, bip125-replaceable=unknown}
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ print("---------------------------------------------------------------")
|
|||||||
print("Block Count:", block_count)
|
print("Block Count:", block_count)
|
||||||
print("---------------------------------------------------------------\n")
|
print("---------------------------------------------------------------\n")
|
||||||
```
|
```
|
||||||
Debería ver la siguiente salida con `logging` activado :
|
Debería ver la siguiente salida con `logging` activado:
|
||||||
```sh
|
```sh
|
||||||
DEBUG:BitcoinRPC:-3-> getblockcount []
|
DEBUG:BitcoinRPC:-3-> getblockcount []
|
||||||
DEBUG:BitcoinRPC:<-3- 1773020
|
DEBUG:BitcoinRPC:<-3- 1773020
|
||||||
|
@ -43,7 +43,7 @@ $ cargo run
|
|||||||
Hello, world!
|
Hello, world!
|
||||||
```
|
```
|
||||||
> :information_source: **NOTA:** si se encuentra con un error `linker Žcc' no encontrado`, tendrá que instalar un
|
> :information_source: **NOTA:** si se encuentra con un error `linker Žcc' no encontrado`, tendrá que instalar un
|
||||||
Compilador C. Si está en Linux, adelante e instale las [herramientas de desarrollo] (https://www.ostechnix.com/install-development-tools-linux/).
|
Compilador C. Si está en Linux, adelante e instale las [herramientas de desarrollo](https://www.ostechnix.com/install-development-tools-linux/).
|
||||||
|
|
||||||
Para acceder a la caja (biblioteca) de `bitcoincore-rpc`, debe añadirla a su `Cargo.toml` en la sección `dependencies`:
|
Para acceder a la caja (biblioteca) de `bitcoincore-rpc`, debe añadirla a su `Cargo.toml` en la sección `dependencies`:
|
||||||
```rust
|
```rust
|
||||||
|
@ -36,11 +36,11 @@ Después, ejecute la aplicación GordianServer y decirle que inicie `Start` Test
|
|||||||
|
|
||||||
#### 3. Haga accesible su Gordian bitcoin-cli
|
#### 3. Haga accesible su Gordian bitcoin-cli
|
||||||
|
|
||||||
Cuando quiera acceder al `bitcoin-cli` creado por GordianServer en su Mac local, puede encontrarlo en `~/. standup/BitcoinCore/bitcoin-VERSION/bin/bitcoin-cli`, por ejemplo `~/. standup/BitcoinCore/bitcoin-0.20.1/bin/bitcoin-cli`.
|
Cuando quiera acceder al `bitcoin-cli` creado por GordianServer en su Mac local, puede encontrarlo en `~/.standup/BitcoinCore/bitcoin-VERSION/bin/bitcoin-cli`, por ejemplo `~/.standup/BitcoinCore/bitcoin-0.20.1/bin/bitcoin-cli`.
|
||||||
|
|
||||||
Es posible que desee crear un alias para eso:
|
Es posible que desee crear un alias para eso:
|
||||||
```
|
```
|
||||||
alias bitcoin-cli="~/. standup/BitcoinCore/bitcoin-0.20.1/bin/bitcoin-cli -testnet"
|
alias bitcoin-cli="~/.standup/BitcoinCore/bitcoin-0.20.1/bin/bitcoin-cli -testnet"
|
||||||
```
|
```
|
||||||
|
|
||||||
> :link: **TESTNET vs. MAINNET:** Obviamente, el parámetro `-testnet` solo es necesario si se está ejecutando en testnet.
|
> :link: **TESTNET vs. MAINNET:** Obviamente, el parámetro `-testnet` solo es necesario si se está ejecutando en testnet.
|
||||||
|
@ -24,7 +24,7 @@ Los objetivos de apoyo incluyen la capacidad de:
|
|||||||
|
|
||||||
* [Sección uno: Verificación de la configuración de c-lightning](19_1_Verificando_Su_Configuracion_Lightning.md)
|
* [Sección uno: Verificación de la configuración de c-lightning](19_1_Verificando_Su_Configuracion_Lightning.md)
|
||||||
* [Sección dos: Conozca su configuración de c-lightning](19_2_Conociendo_Su_Configuracion_Lightning.md)
|
* [Sección dos: Conozca su configuración de c-lightning](19_2_Conociendo_Su_Configuracion_Lightning.md)
|
||||||
* [Interludio: Acceso a un segundo nodo Lightning](19_2__Interludio_Accediendo_a_un_Segundo_Nodo_Lightning.md)
|
* [Interludio: Acceso a un segundo nodo Lightning](19_2_Interludio_Accediendo_a_un_Segundo_Nodo_Lightning.md)
|
||||||
* [Sección tres: Creación de un canal Lightning](19_3_Creando_un_Canal_en_Lightning.md)
|
* [Sección tres: Creación de un canal Lightning](19_3_Creando_un_Canal_en_Lightning.md)
|
||||||
|
|
||||||
|
|
||||||
|
@ -243,7 +243,7 @@ Continúe "Comprender su configuración Lightning" con [§19.2: Conocer su confi
|
|||||||
|
|
||||||
## Variante: instalar desde Ubuntu ppa
|
## Variante: instalar desde Ubuntu ppa
|
||||||
|
|
||||||
Si está usando una versión de Ubuntu que no sea Debian, puede instalar c-lightning usando [Ubuntu ppa] (https://launchpad.net/~lightningnetwork/+archive/ubuntu/ppa):
|
Si está usando una versión de Ubuntu que no sea Debian, puede instalar c-lightning usando [Ubuntu ppa](https://launchpad.net/~lightningnetwork/+archive/ubuntu/ppa):
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo apt-get install -y software-properties-common
|
$ sudo apt-get install -y software-properties-common
|
||||||
|
@ -53,7 +53,7 @@ A continuación, pueden decirle su `id` (`03240a4878a9a64aea6c3921a434e573845267
|
|||||||
|
|
||||||
## Crear un nuevo nodo c-lightning
|
## Crear un nuevo nodo c-lightning
|
||||||
|
|
||||||
Sin embargo, para fines de prueba, es probable que desee tener un segundo nodo bajo su propio control. La forma más fácil de hacerlo es crear un segundo nodo c-lightning en una máquina nueva, usando Bitcoin Standup, por [§2.1](02_1_Configurando_un_Bitcoin-Core_VPS_con_StackScript.md) o compilándolo a mano, por [§19.1](9_1_Verificando_Su_Configuracion_Lightning.md).
|
Sin embargo, para fines de prueba, es probable que desee tener un segundo nodo bajo su propio control. La forma más fácil de hacerlo es crear un segundo nodo c-lightning en una máquina nueva, usando Bitcoin Standup, por [§2.1](02_1_Configurando_un_Bitcoin-Core_VPS_con_StackScript.md) o compilándolo a mano, por [§19.1](19_1_Verificando_Su_Configuracion_Lightning.md).
|
||||||
|
|
||||||
Una vez que tenga su nodo en ejecución, puede ejecutar `getinfo` para recuperar su información, como se muestra arriba.
|
Una vez que tenga su nodo en ejecución, puede ejecutar `getinfo` para recuperar su información, como se muestra arriba.
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ $ lightning-cli --testnet newaddr
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Luego puede enviar fondos a esta dirección usando `bitcoin-cli sendtoaddress` (o cualquier otra metodología que prefiera). Para este ejemplo, lo hicimos en la transacción [11094bb9ac29ce5af9f1e5a0e4aac2066ae132f25b72bff90fcddf64bf2feb02](https://blockstream.info/testnet/tx/11094bb9ac29ce5af9f1e5a0e4b2ac2066ae2f25b72bff90fcddf64bf2feb02]
|
Luego puede enviar fondos a esta dirección usando `bitcoin-cli sendtoaddress` (o cualquier otra metodología que prefiera). Para este ejemplo, lo hicimos en la transacción [11094bb9ac29ce5af9f1e5a0e4aac2066ae132f25b72bff90fcddf64bf2feb02](https://blockstream.info/testnet/tx/11094bb9ac29ce5af9f1e5a0e4b2ac2066ae2f25b72bff90fcddf64bf2feb02)
|
||||||
|
|
||||||
Esta transacción se denomina [transacción de financiación](https://github.com/lightningnetwork/lightning-rfc/blob/master/03-transactions.md#funding-transaction-output) y debe confirmarse antes de que los fondos puedan ser usado.
|
Esta transacción se denomina [transacción de financiación](https://github.com/lightningnetwork/lightning-rfc/blob/master/03-transactions.md#funding-transaction-output) y debe confirmarse antes de que los fondos puedan ser usado.
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ Ahora que ha financiado su billetera c-lightning, necesitará información sobre
|
|||||||
|
|
||||||
Lo siguiente que debe hacer es conectar su nodo a un par. Esto se hace con el comando `lightning-cli connect`. Recuerde que si desea obtener más información sobre este comando, debe escribir `lightning-cli help connect`.
|
Lo siguiente que debe hacer es conectar su nodo a un par. Esto se hace con el comando `lightning-cli connect`. Recuerde que si desea obtener más información sobre este comando, debe escribir `lightning-cli help connect`.
|
||||||
|
|
||||||
Para conectar su nodo a un par remoto, necesita su ID, que representa la clave pública del nodo de destino. Para su comodidad, `id` puede tener el formato `id@host` o `id@host:port`. Es posible que haya recuperado esto con `lightning-cli getinfo` (en c-lightning) o `lncli --network=testnet getinfo` (en LND) como se discutió en el [interludio anterior](19_2__Interludio_Accediendo_a_un_Segundo_Nodo_Lightning.md).
|
Para conectar su nodo a un par remoto, necesita su ID, que representa la clave pública del nodo de destino. Para su comodidad, `id` puede tener el formato `id@host` o `id@host:port`. Es posible que haya recuperado esto con `lightning-cli getinfo` (en c-lightning) o `lncli --network=testnet getinfo` (en LND) como se discutió en el [interludio anterior](19_2_Interludio_Accediendo_a_un_Segundo_Nodo_Lightning.md).
|
||||||
|
|
||||||
Hemos seleccionado el nodo LND, `032a7572dc013b6382cde391d79f292ced27305aa4162ec3906279fc4334602543`, que se encuentra en la dirección IP `45.33.35.151`, a la que nos vamos a conectar desde nuestro nodo c-lightning:
|
Hemos seleccionado el nodo LND, `032a7572dc013b6382cde391d79f292ced27305aa4162ec3906279fc4334602543`, que se encuentra en la dirección IP `45.33.35.151`, a la que nos vamos a conectar desde nuestro nodo c-lightning:
|
||||||
|
|
||||||
@ -98,12 +98,12 @@ $ lightning-cli --network=testnet connect 032a7572dc013b6382cde391d79f292ced2730
|
|||||||
|
|
||||||
El comando fundchannel RPC abre un canal de pago con un par al realizar una transacción de financiación en la cadena de bloques. Debe usar el comando `lightning-cli fundchannel` para hacerlo, con los siguientes parámetros:
|
El comando fundchannel RPC abre un canal de pago con un par al realizar una transacción de financiación en la cadena de bloques. Debe usar el comando `lightning-cli fundchannel` para hacerlo, con los siguientes parámetros:
|
||||||
|
|
||||||
* ** id ** es el retorno de la identificación del par de connect.
|
* **id** es el retorno de la identificación del par de connect.
|
||||||
* ** monto ** es el monto en satoshis que se toma de la billetera interna para financiar el canal. El valor no puede ser menor que el límite de polvo, actualmente establecido en 546, ni más de 16.777.215 satoshi (a menos que se hayan negociado grandes canales con el par).
|
* **monto** es el monto en satoshis que se toma de la billetera interna para financiar el canal. El valor no puede ser menor que el límite de polvo, actualmente establecido en 546, ni más de 16.777.215 satoshi (a menos que se hayan negociado grandes canales con el par).
|
||||||
* ** tarifa ** es una tarifa opcional utilizada para la transacción de apertura y como tarifa inicial para transacciones de compromiso y HTLC.
|
* **tarifa** es una tarifa opcional utilizada para la transacción de apertura y como tarifa inicial para transacciones de compromiso y HTLC.
|
||||||
* ** anuncio ** es una bandera opcional que activa si anunciar este canal o no. Por defecto es verdadero. Si desea crear un canal privado no anunciado, configúrelo en falso.
|
* **anuncio** es una bandera opcional que activa si anunciar este canal o no. Por defecto es verdadero. Si desea crear un canal privado no anunciado, configúrelo en falso.
|
||||||
* ** minconf ** especifica el número mínimo de confirmaciones que deben tener las salidas utilizadas en el proceso de apertura del canal. El valor predeterminado es 1.
|
* **minconf** especifica el número mínimo de confirmaciones que deben tener las salidas utilizadas en el proceso de apertura del canal. El valor predeterminado es 1.
|
||||||
* ** utxos ** especifica los utxos que se utilizarán para financiar el canal, como una matriz de "txid: vout".
|
* **utxos** especifica los utxos que se utilizarán para financiar el canal, como una matriz de "txid: vout".
|
||||||
|
|
||||||
Ahora puede abrir el canal así:
|
Ahora puede abrir el canal así:
|
||||||
|
|
||||||
@ -165,7 +165,7 @@ c$ lightning-cli --testnet listfunds
|
|||||||
Si bien este nuevo canal con 100.000 satoshis no está confirmado, su estado será `CHANNELD_AWAITING_LOCKIN`. Tenga en cuenta que el cambio no confirmado de satoshis `99847` también se muestra como una nueva transacción en la billetera. Una vez completadas las seis confirmaciones, el canal cambiará al estado `CHANNELD_NORMAL`, que será su estado permanente. En este momento, también aparecerá un `short_channel_id`, como:
|
Si bien este nuevo canal con 100.000 satoshis no está confirmado, su estado será `CHANNELD_AWAITING_LOCKIN`. Tenga en cuenta que el cambio no confirmado de satoshis `99847` también se muestra como una nueva transacción en la billetera. Una vez completadas las seis confirmaciones, el canal cambiará al estado `CHANNELD_NORMAL`, que será su estado permanente. En este momento, también aparecerá un `short_channel_id`, como:
|
||||||
|
|
||||||
```
|
```
|
||||||
"short_channel_id": "1862856x29x0",
|
"short_channel_id": "1862856x29x0",
|
||||||
```
|
```
|
||||||
|
|
||||||
Estos valores indican dónde se puede encontrar la transacción de financiación en la cadena de bloques. Aparece en la forma `block x txid x vout`.
|
Estos valores indican dónde se puede encontrar la transacción de financiación en la cadena de bloques. Aparece en la forma `block x txid x vout`.
|
||||||
@ -178,7 +178,7 @@ En este caso, "1862856x29x0" significa:
|
|||||||
|
|
||||||
Es posible que deba usar este `short_channel_id` para ciertos comandos en Lightning.
|
Es posible que deba usar este `short_channel_id` para ciertos comandos en Lightning.
|
||||||
|
|
||||||
Esta transacción de financiación también se puede encontrar en la cadena en [66694d23ca15efe379e5f4a71d9be1a2d65e383b89ee3abe126ee36a12f23c1d](https://blockstream.info/testnet/tx/66694d23ca15efe379e5f4a71d9abe123a2d89e5f4a71d9a126ee36a12f23c1d]
|
Esta transacción de financiación también se puede encontrar en la cadena en [66694d23ca15efe379e5f4a71d9be1a2d65e383b89ee3abe126ee36a12f23c1d](https://blockstream.info/testnet/tx/66694d23ca15efe379e5f4a71d9be1a2d65e383b89ee3abe126ee36a12f23c1d)
|
||||||
|
|
||||||
> :book: ***¿Qué es la capacidad del canal?*** En un canal Lightning, ambos lados del canal poseen una parte de su capacidad. La cantidad de su lado del canal se llama *saldo local* y la cantidad de su lado se llama *saldo remoto*. Ambos saldos se pueden actualizar muchas veces sin cerrar el canal (cuando el saldo final se envía a la cadena de bloques), pero la capacidad del canal no puede cambiar sin cerrarlo o empalmarlo. La capacidad total de un canal es la suma del saldo que tiene cada participante en el canal.
|
> :book: ***¿Qué es la capacidad del canal?*** En un canal Lightning, ambos lados del canal poseen una parte de su capacidad. La cantidad de su lado del canal se llama *saldo local* y la cantidad de su lado se llama *saldo remoto*. Ambos saldos se pueden actualizar muchas veces sin cerrar el canal (cuando el saldo final se envía a la cadena de bloques), pero la capacidad del canal no puede cambiar sin cerrarlo o empalmarlo. La capacidad total de un canal es la suma del saldo que tiene cada participante en el canal.
|
||||||
|
|
||||||
|
@ -3,7 +3,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.
|
> :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.
|
||||||
|
|
||||||
Esta sección describe cómo funcionan los pagos en Lightning Network, cómo crear una solicitud de pago (o _factura_), y, finalmente, cómo entenderla. Le emisión de facturas depende de que tenga un segundo nodo Lightning, como se describe en [Acceso a un Segundo Nodo Lightning](19_2__Interludio_Accediendo_a_un_Segundo_Nodo_Lightning.md). Estos ejemplos usarán un nodo LND como su nodo secundario, para demostrar aún más las posibilidades de Lightning Network. Para diferenciar entre los nodos en estos ejemplos, las solicitudes se mostrarán como `c$` para el nodo c-lightning y `lnd$` como el nodo LND. Si desea reproducir estos pasos, debe [instalar su propio nodo LND secundario](19_2__Interludio_Accediendo_a_un_Segundo_Nodo_Lightning.md#Crear-un-nuevo-nodo-LND).
|
Esta sección describe cómo funcionan los pagos en Lightning Network, cómo crear una solicitud de pago (o _factura_), y, finalmente, cómo entenderla. Le emisión de facturas depende de que tenga un segundo nodo Lightning, como se describe en [Acceso a un Segundo Nodo Lightning](19_2_Interludio_Accediendo_a_un_Segundo_Nodo_Lightning.md). Estos ejemplos usarán un nodo LND como su nodo secundario, para demostrar aún más las posibilidades de Lightning Network. Para diferenciar entre los nodos en estos ejemplos, las solicitudes se mostrarán como `c$` para el nodo c-lightning y `lnd$` como el nodo LND. Si desea reproducir estos pasos, debe [instalar su propio nodo LND secundario](19_2_Interludio_Accediendo_a_un_Segundo_Nodo_Lightning.md#Crear-un-nuevo-nodo-LND).
|
||||||
|
|
||||||
> :book: ***¿Qué es una Factura?** Casi todos los pagos realizados en Lightning Network requieren una factura, que no es más que una **solicitud de pago** realizada por el destinatario del dinero y enviada por una variedad de medios al usario que paga. Todas las solicitudes de pago son de un solo uso. Las facturas Lightning utilizan la codificación bech32, que ya utiliza Segregated Witness para Bitcoin.
|
> :book: ***¿Qué es una Factura?** Casi todos los pagos realizados en Lightning Network requieren una factura, que no es más que una **solicitud de pago** realizada por el destinatario del dinero y enviada por una variedad de medios al usario que paga. Todas las solicitudes de pago son de un solo uso. Las facturas Lightning utilizan la codificación bech32, que ya utiliza Segregated Witness para Bitcoin.
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ Puede usar diferentes implementaciones complementos billeteras móviles o copias
|
|||||||
|
|
||||||
## ¿Que Sigue?
|
## ¿Que Sigue?
|
||||||
|
|
||||||
Ha completado Aprender Bitcoin Desde la Línea de Comandos, aunque si nunca visitó los [Apéndices](A0_Appendices.md) de configuraciones alternativas, puede hacerlo ahora.
|
Ha completado Aprender Bitcoin Desde la Línea de Comandos, aunque si nunca visitó los [Apéndices](A0_Apendices.md) de configuraciones alternativas, puede hacerlo ahora.
|
||||||
|
|
||||||
De lo contrario, le recomendamos que se una a las comunidades de desarrolladores, programe y ponga en práctica sus nuevos conocimientos.
|
De lo contrario, le recomendamos que se una a las comunidades de desarrolladores, programe y ponga en práctica sus nuevos conocimientos.
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user