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

208 lines
7.9 KiB
Markdown

# 17.1: Configurare Libwally
> :information_source: **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.
> :book: ***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](https://wally.readthedocs.io/en/latest/). Libwally è resa disponibile come parte del [Elements Project](https://github.com/ElementsProject) 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](https://wally.readthedocs.io/en/latest/), 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](src/17_1_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.
> :warning: **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](https://github.com/BlockchainCommons/SmartCustodyBook/blob/master/manuscript/03-adversaries.md#adversary-systemic-key-compromise). 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](https://download.libsodium.org/libsodium/releases/) e poi seguire le istruzioni su [installazione di Libsodium](https://doc.libsodium.org/installation) 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](17_2_Usare_BIP39_in_Libwally.md).