Strumenti da riga di comando
Gli strumenti pubblici di ZooBC permettono a chiunque di usare la catena da un terminale o dal proprio codice. Si trovano su github.com/zoobc/tools, pubblicati dalla ZooBC Foundation con licenza MIT, che permette a chiunque di integrarli nel proprio software, commerciale o no, senza chiedere il permesso. Non sono il nodo: dialogano con un nodo o con un gateway solo tramite la sua API HTTP pubblica, esattamente come qualsiasi altro client.
Dieci linguaggi, un solo comportamento
Gli stessi strumenti esistono in dieci linguaggi di programmazione: C++, TypeScript, JavaScript (un unico file senza dipendenze che una pagina web carica con un solo tag script), Python, Go, Rust, Kotlin, Swift, PHP e Perl. Ogni versione offre chiavi e indirizzi, costruzione e firma delle transazioni, e zbc-cli, un unico comando per ogni tipo di transazione. Le versioni C++, Go e Rust includono anche un piccolo programma per ogni transazione. Il pacchetto del nodo comprende gli strumenti C++, come zbc-account-gen, zbc-send, zbc-monitor e zbc-cli.
Ciò che mantiene identiche dieci versioni è un'unica specifica condivisa e un unico insieme di vettori di test di riferimento (spec/vectors). Ogni versione esegue gli stessi vettori nelle sue verifiche automatiche di compilazione, e un solo byte diverso fa fallire la compilazione. Una transazione costruita in Perl è quindi, byte per byte, la stessa transazione costruita in Rust.
Il contratto di zbc-cli
zbc-cli si comporta allo stesso modo in ogni linguaggio, quindi gli script possono contarci:
- Output: un unico oggetto JSON sullo standard output, e un codice di uscita da 0 a 10.
- Dove connettersi:
--apiindica il nodo o il gateway. In sua assenza, lo strumento legge la variabile d'ambienteZBC_APIe, in assenza anche di questa, usahttp://localhost:8080, un nodo sulla stessa macchina. - Timeout:
--timeout, o la variabileZBC_TIMEOUT; 20 secondi per impostazione predefinita. - La chiave: la fornisce la variabile d'ambiente
ZBC_KEY, così la chiave resta fuori dalla riga di comando. - Campi:
zbc-cli help <command>elenca i campi esatti di un comando;--json-inputli accetta come JSON, e--verbosestampa più dettagli.
zbc-cli help send-zbc
Ogni importo è un numero intero di unità atomiche (1 ZBC = 100.000.000 di unità, vedi moneta ZBC e le sue unità). Valori come 1.5, 1e3 o 12abc vengono rifiutati invece che interpretati.
Che cos'altro fanno gli strumenti
Gli strumenti firmano e verificano anche messaggi off-chain, per esempio per dimostrare a un sito web che controlli un indirizzo senza inviare una transazione (messaggi firmati e cifrati). Come ogni firmatario ZooBC, firmano le transazioni su un digest che include l'hash genesi della catena, quindi una transazione costruita per una rete non è mai valida su un'altra (firme legate alla catena).
Che cosa non sono
- Non sono il nodo, che ha un proprio repository e una propria licenza.
- Non producono blocchi e non guadagnano monete: i blocchi arrivano solo dai nodi registrati che si alternano (gestire un nodo).
- Non sono obbligatori. Una pagina web può firmare transazioni con nient'altro che Ed25519, SHA3-256 e l'hash genesi della catena (costruire un'app come singola pagina HTML); gli strumenti risparmiano quel lavoro.