Learning-Bitcoin-from-the-C.../es/17_1_Configurando_Libwally.md
2021-11-06 21:51:34 +01:00

8.1 KiB
Raw Permalink Blame History

17.1: Configuración de Libwally

NOTE: En esta sección se ha añadido recientemente al curso y es un borrador temprano que todavía puede estar pendiente de revisión. Lectura con advertencias.

Esta primera sección explicará cómo descargar la Biblioteca Libwally C y hacer que funcione.

📖 Qué es Libwally? Libwally es una biblioteca de primitivos útil para la creación de billeteras que son multiplataforma y multiplataforma, de modo que las mismas funciones se pueden utilizar en todas partes. Hay documentos en línea. Libwally está disponible como parte del proyecto Elements Project de Blockstream.

Instalar Libwally

Como siempre, usted necesitará algunos paquetes en su sistema:

$ sudo apt-get install git
$ sudo apt-get install dh-autoreconf

A continuación, usted puede descargar Libwally desde su repositorio Git:

$ git clone https://github.com/ElementsProject/libwally-core

Posteriormente, usted puede comenzar el proceso de configuración:

$ ./tools/autogen.sh

Al igual que con libbitcoinrpc, es posible que desee instalar esto en /usr/include y /usr/lib para facilitar su uso. Simplemente modifique la línea apropiada en el programa configure :

 ac_default_prefix=/usr
--
> ac_default_prefix=/usr/local

Después puede terminar su preparación:

$ ./configure
$ make

Luego, puede verificar que las pruebas están funcionando:

$ make check
Making check in src
make[1]: Entering directory '/home/standup/libwally-core/src'
Making check in secp256k1
make[2]: Entering directory '/home/standup/libwally-core/src/secp256k1'
make  check-TESTS
make[3]: Entering directory '/home/standup/libwally-core/src/secp256k1'
make[4]: Entering directory '/home/standup/libwally-core/src/secp256k1'
============================================================================
Testsuite summary for libsecp256k1 0.1
============================================================================
# TOTAL: 0
# PASS:  0
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================
make[4]: Leaving directory '/home/standup/libwally-core/src/secp256k1'
make[3]: Leaving directory '/home/standup/libwally-core/src/secp256k1'
make[2]: Leaving directory '/home/standup/libwally-core/src/secp256k1'
make[2]: Entering directory '/home/standup/libwally-core/src'
make  check-TESTS check-local
make[3]: Entering directory '/home/standup/libwally-core/src'
make[4]: Entering directory '/home/standup/libwally-core/src'
PASS: test_bech32
PASS: test_psbt
PASS: test_psbt_limits
PASS: test_tx
============================================================================
Testsuite summary for libwallycore 0.7.8
============================================================================
# TOTAL: 4
# PASS:  4
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================
make[4]: Leaving directory '/home/standup/libwally-core/src'
make[3]: Nothing to be done for 'check-local'.
make[3]: Leaving directory '/home/standup/libwally-core/src'
make[2]: Leaving directory '/home/standup/libwally-core/src'
make[1]: Leaving directory '/home/standup/libwally-core/src'
make[1]: Entering directory '/home/standup/libwally-core'
make[1]: Nothing to be done for 'check-am'.
make[1]: Leaving directory '/home/standup/libwally-core'

Por último, puede instalar:

$ sudo make install

Preparación para Libwally

Entonces, ¿cómo usar Libwally en un programa? Como de costumbre, usted necesitara incluir archivos apropiados y enlazar bibliotecas apropiadas para su código.

Incluir los archivos

Hay un número considerable de archivos de inclusión posibles:

$ ls /usr/include/wally*
/usr/include/wally_address.h  /usr/include/wally_bip39.h   /usr/include/wally_elements.h  /usr/include/wally_script.h
/usr/include/wally_bip32.h    /usr/include/wally_core.h    /usr/include/wally.hpp	  /usr/include/wally_symmetric.h
/usr/include/wally_bip38.h    /usr/include/wally_crypto.h  /usr/include/wally_psbt.h	  /usr/include/wally_transaction.h

Afortunadamente, los nombres de archivo coinciden en gran medida con las secciones de docs, por lo que debería ser capaz de incluir los archivos correctos en función de lo que está haciendo, después de incluir el ubicuo wally_core.h.

Enlazar las bibliotecas

También necesitará enlazar las bibliotecas apropiadas:

$ ls /usr/lib/libsecp* /usr/lib/libwally*
/usr/lib/libsecp256k1.a   /usr/lib/libwallycore.la  /usr/lib/libwallycore.so. 0
/usr/lib/libsecp256k1.la  /usr/lib/libwallycore.so  /usr/lib/libwallycore.so. 0.0.0

Mayormente, usted usara libwallycore.

Configurar un programa Libwally

En comparación con algunas de las bibliotecas anteriores, Libwally es ridículamente fácil de inicializar:

lw_response = wally_init(0);

Y cuando termine, hay una práctica función para limpiar cualquier memoria asignada:

wally_cleanup(0);

En ambos casos, el argumento es para flags, pero actualmente tiene el valor 0.

Prueba un programa de prueba de Libwally

El directorio src contiene testwally.c, que sólo muestra cómo funcionan las funciones de inicialización y limpieza.

Puede compilarlo de la siguiente manera:

$ cc testwally.c -lwallycore -o testwally

Después se puede ejecutar:

$ ./testwally
Startup: 0

El valor "Startup" es el retorno de wally_init. El valor 0 puede parecer inicialmente desalentador, pero es lo que quiere ver:

include/wally_core.h:#define WALLY_OK      0 /** Success */

Instalar Libsodium

También debe instalar Libsodium para obtener acceso a un generador de números aleatorios de alta calidad con fines de prueba.

⚠️ WARNING: La generación de números aleatorios puede ser uno de los mayores puntos de vulnerabilidad en cualquier software de Bitcoin. Si usted lo hace mal, expone a sus usuarios a ataques que podrían terminar como claves de Bitcoin inseguras, y esto no es un problema teórico. Blockchain.Info alguna vez generó incorrectamente el 0.0002% de sus claves, lo que dio lugar a la pérdida temporal de 250 Bitcoins. Conclusión: asegúrese de estar totalmente cómodo con su generación de números aleatorios. Podría ser Libsodium, o podría ser un método TRNG aún más robusto. Puede descargar Libsodium y seguir las instrucciones en Instalación de Libsodium para instalar.

En primer lugar, descomprimir:

$ tar xzfv /tmp/libsodium-1.0.18-stable.tar.gz 

Luego, ajuste el archivo configure exactamente como tiene las otras bibliotecas hasta la fecha:

< ac_default_prefix=/usr
---
> ac_default_prefix=/usr/local

Finalmente, make, check, e install

$ make
$ make check
...
============================================================================
Testsuite summary for libsodium 1.0.18
============================================================================
# TOTAL: 77
# PASS:  77
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================
...
$ sudo make install

Este curso sólo usará libsodium para un pequeño (¡pero crucial!) bit de generación de entropía, pero esté atento a ello en la siguiente sección.

Resumen: Configuración de Libwally

Al instalar Libwally (y Libsodium) se incluyen dependencias, bibliotecas y obtiene acceso a una serie de funciones criptográficas y de cartera, que pueden complementar sus bibliotecas RPC y ZMQ (o su línea de comandos bitcoin-cli).

Entonces, ¿qué puede hacer ahora? De eso es lo que se trata en el siguiente capítulo.

¿Qué es lo siguiente?

Más información sobre "Programar Bitcoin con Libwally" en 17.2: Usar BIP39 en Libwally.