Learning-Bitcoin-from-the-C.../it/17_1_Configurare_Libwally.md
Lutxo 80377bfbba Uploading italian transtlation to it directory
Uploading italian transtlation to "it" directory
2024-08-08 11:54:13 +02:00

7.9 KiB
Raw Blame History

17.1: Configurare Libwally

NOTA: Questa sezione è stata recentemente aggiunta al corso ed è una bozza iniziale che potrebbe ancora essere in attesa di revisione. Lettore avvisato.

Questa prima sezione spiegherà come scaricare la libreria C Libwally e farla funzionare.

📖 Cos'è Libwally? Libwally è una libreria di primitive utili per la creazione di portafogli che è cross-platform e cross-language, così che le stesse funzioni possano essere utilizzate ovunque. Ci sono documenti online. Libwally è resa disponibile come parte del Elements Project di Blockstream.

Installare Libwally

Come al solito, avrai bisogno di alcuni pacchetti sul tuo sistema:

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

Puoi quindi scaricare Libwally dal suo repository Git:

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

Successivamente, puoi iniziare il processo di configurazione:

$ ./tools/autogen.sh

Come con libbitcoinrpc, potresti voler installarlo in /usr/include e /usr/lib per facilità di utilizzo. Basta modificare la linea appropriata nel programma configure:

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

Successivamente, puoi completare la preparazione:

$ ./configure
$ make

Puoi quindi verificare che i test funzionino:

$ 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'

Infine, puoi installare:

$ sudo make install

Prepararsi per Libwally

Quindi, come si usa Libwally in un programma? Come al solito, dovrai includere i file appropriati e collegare le librerie appropriate per il tuo codice.

Includere i File

Ci sono un numero considerevole di file di inclusione possibili:

$ 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

Fortunatamente, i nomi dei file corrispondono in gran parte alle sezioni nei documenti, quindi dovresti essere in grado di includere i file corretti in base a ciò che stai facendo, dopo aver incluso l'onnipresente wally_core.h.

Collegare le Librerie

Dovrai anche collegare le librerie appropriate:

$ 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

Principalmente, utilizzerai libwallycore.

Configurare un Programma Libwally

Rispetto ad alcune delle librerie precedenti, Libwally è ridicolmente facile da inizializzare:

lw_response = wally_init(0);

E poi, quando hai finito, c'è una comoda funzione per ripulire tutta la memoria allocata:

wally_cleanup(0);

In entrambi i casi, l'argomento è per i flag, ma è attualmente impostato su 0.

Testare un Programma di Test Libwally

La directory src contiene testwally.c, che mostra semplicemente come funzionano le funzioni di inizializzazione e pulizia.

Puoi compilarlo come segue:

$ cc testwally.c -lwallycore -o testwally

Dopo puoi eseguirlo:

$ ./testwally
Startup: 0

Il valore "Startup" è il ritorno di wally_init. Il valore 0 può inizialmente sembrare scoraggiante, ma è quello che vuoi vedere:

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

Install Libsodium

Installare Libsodium

Dovresti anche installare Libsodium per avere accesso a un generatore di numeri casuali di alta qualità per scopi di test.

⚠️ ATTENZIONE: La generazione di numeri casuali può essere uno dei maggiori punti di vulnerabilità in qualsiasi software Bitcoin. Se lo fai male, esponi i tuoi utenti ad attacchi perché finiscono con chiavi Bitcoin non sicure, e questo non è un problema teorico. BlockchainInfo una volta generò erroneamente lo 0,0002% delle loro chiavi, il che portò alla perdita temporanea di 250 Bitcoin. In breve: assicurati di essere completamente a tuo agio con la generazione dei numeri casuali. Potrebbe essere Libsodium, o potrebbe essere un metodo TRNG ancora più robusto.

Puoi scaricare un tarball Libsodium e poi seguire le istruzioni su installazione di Libsodium per installarlo.

Prima, decomprimi:

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

Poi, aggiusta il file configure esattamente come hai fatto con le altre librerie finora:

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

Infine, 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

Questo corso userà libsodium solo per un piccolo (ma cruciale!) bit di generazione di entropia, ma tienilo d'occhio nella sezione successiva.

Riepilogo: Configurare Libwally

Installando gli include e le librerie Libwally (e Libsodium), ottieni accesso a un numero di funzioni crittografiche e di portafoglio, che possono completare le tue librerie RPC e ZMQ (o il tuo bitcoin-cli da riga di comando).

Quindi, cosa puoi fare esattamente ora? È di questo che tratta il resto di questo capitolo.

Cosa c'è dopo?

Scopri di più su "Programmare Bitcoin con Libwally" nel Capitolo 17.2: Usare BIP39 in Libwally.