Crea il tuo portafoglio Ergo: Gestire i token Ergo con ErgoTool
31 dicembre 2019

Introduzione
ErgoTool è un'interfaccia a riga di comando (CLI) per
Ergo blockchain. Puoi utilizzare ErgoTool senza eseguire il tuo
nodo Ergo. Anche se eseguire un nodo è il modo più sicuro per comunicare con la
rete della blockchain di Ergo, ErgoTool mira a fornire strumenti più fondamentali a tua
disposizione. Certamente, puoi comunque usarlo con il tuo nodo in esecuzione.
In questo post passeremo attraverso semplici passaggi per generare una frase mnemonica, creare un
archivio segreto locale e usarlo per inviare ERG tra indirizzi, tutto con l'aiuto dei
comandi di ErgoTool.
Iniziare
Prima di tutto, dobbiamo installare ErgoTool sul nostro sistema dai sorgenti seguendo le
istruzioni di installazione. Nella
directory in cui abbiamo clonato ErgoTool c'è lo script ergo-tool.sh che utilizzeremo
per eseguire i comandi. Esegui il seguente comando per controllare che ErgoTool sia installato correttamente.
$ ./ergo-tool.sh help
Il nome del comando non è specificato (esegui ergo-tool senza argomenti per elencare i comandi)
Nome del Comando: help
Sintassi d'uso: ergo-tool help <commandName>
Descrizione: stampa aiuto per l'uso di un comando
Pagina doc: https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/HelpCmd.html
Vediamo cosa otteniamo qui. ErgoTool restituisce il messaggio di errore con le informazioni sul
comando help. Questo è un output tipico di ErgoTool quando uno dei comandi noti è
specificato, ma viene utilizzato in modo errato. Come possiamo apprendere dal messaggio, il comando help
richiede di specificare un argomento <commandName> aggiuntivo. Inoltre, ogni comando ha
una pagina di documentazione API con tutti i dettagli sull'esecuzione del comando, quindi il suo URL è mostrato qui.
Crea una Nuova Frase Mnemonica
La frase mnemonica è una sequenza casuale di caratteri utilizzata per generare una chiave master
secondo la specifica dei Wallets Gerarchici Deterministici.
Per comodità, viene utilizzata una sequenza casuale di parole inglesi, ma questo non è obbligatorio.
Esegui il seguente comando per generare una nuova frase mnemonica:
$ ./ergo-tool.sh mnemonic
bird harbor wheat innocent business disease busy quick yellow trust time oil enter situate moon
Scrivila su un foglio e conservala in un luogo sicuro e segreto.
Come misura di sicurezza aggiuntiva, puoi creare una password mnemonica arbitraria.
In un certo senso, può servire come una parola non vocabolario aggiuntiva nella mnemonica.
La password mnemonica è facoltativa e viene utilizzata per una sicurezza aggiuntiva.
Se decidi di utilizzare una password mnemonica, dovresti anche scriverla e conservarla in un luogo segreto e
probabilmente diverso dalla mnemonica.
Importante, sia la frase mnemonica che la password mnemonica sono necessarie per ripristinare le chiavi segrete,
se perdi una di esse non sarai in grado di rigenerare la tua chiave master.
Successivamente, utilizziamo la mnemonica generata per creare un archivio con una chiave segreta master.
Crea un Nuovo Archivio Crittografato
Per una maggiore sicurezza, né la frase mnemonica né la password sono richieste da ErgoTool per
eseguire la firma della transazione. Invece, è necessaria la chiave segreta dall'archivio crittografato per
firmare la transazione di spesa. Possiamo generare una chiave segreta e memorizzarla in un
archivio crittografato utilizzando il comando createStorage.
$ ./ergo-tool.sh help createStorage
Nome del Comando: createStorage
Sintassi d'uso: ergo-tool createStorage [<storageDir>="storage"] [<storageFileName>="secret.json"]
Descrizione: Crea un file di archiviazione crittografato per la mnemonica inserita dall'utente
Pagina doc: https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/CreateStorageCmd.html
$ ./ergo-tool.sh createStorage
Inserisci la frase mnemonica> bird harbor wheat innocent business disease busy quick yellow trust time oil enter situate moon
Password mnemonica>
Ripeti la password mnemonica>
Password di archiviazione>
Ripeti la password di archiviazione>
File di archiviazione: storage/secret.json
Una chiave segreta master viene generata dalla coppia (frase mnemonica, password mnemonica) e
salvata crittografata nel file storage/secret.json. La mnemonica stessa non è memorizzata nel
file e non c'è modo di ripristinarla dal file, anche se conosci le password.
Fai attenzione a inserire la password mnemonica corretta, quella che hai scelto e salvato prima.
Poiché una password mnemonica è facoltativa, puoi lasciarla vuota premendo invio.
Se dimentichi la password di archiviazione (alias password di crittografia), non sarai in grado di utilizzare
quel file di archiviazione, tuttavia, puoi sempre ripristinare le tue chiavi segrete dalla coppia (frase
mnemonica, password mnemonica) e quindi creare un nuovo file di archiviazione con una nuova password.
Tieni il tuo file di archiviazione e la password di archiviazione segreti, chiunque ottenga sia il tuo file di archiviazione
che la password di archiviazione sarà in grado di decifrarlo e accedere alle chiavi segrete.
Estrazione dei Dati dall'Archivio
L'archivio segreto contiene la chiave segreta master e, di conseguenza, può essere utilizzato per calcolare sia la
chiave pubblica che l'indirizzo pay-to-public-key che corrisponde a quella chiave segreta. Il
comando extractStorage fa proprio questo.
$ ./ergo-tool.sh help extractStorage
Nome del Comando: extractStorage
Sintassi d'uso: ergo-tool extractStorage <storage file> address|masterKey|publicKey|secretKey mainnet|testnet
Descrizione: Legge il file, lo sblocca utilizzando la password ed estrae la proprietà richiesta dal file di archiviazione fornito.
Pagina doc: https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/ExtractStorageCmd.html
$ ./ergo-tool.sh extractStorage storage/secret.json address mainnet
Password di archiviazione>
9iHiSAg3ko2ZGxR2vhc1Aem3tShqfzEPDAF7XK5cdtbZ3Ut2CCf
Qui il comando trasforma la chiave segreta nella corrispondente chiave pubblica e poi crea
l'indirizzo pay-to-public-key sulla mainnet.
Allo stesso modo possiamo ottenere la chiave pubblica, la chiave privata e altri dati dall'archivio.
$ ./ergo-tool.sh extractStorage storage/secret.json secretKey mainnet
Password di archiviazione>
55dfde63c9b6b4f47683592e85ee997ba2e93507f38ba3f9c82933bcfbc677ca
$ ./ergo-tool.sh extractStorage storage/secret.json publicKey mainnet
Password di archiviazione>
03f07aecb145a85920bf6e9be80efe5f1cd1a165b45ad3aa8e5c4ca3ba50856bb8
Elenco delle Box Non Spese
ErgoTool ha un comando speciale per elencare tutte le box disponibili (alias non spese) per un dato indirizzo.
$ ./ergo-tool.sh listAddressBoxes 9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v
BoxId NanoERGs
4840cb6facc20b765085db0ad24768ed0c5e7afd413e8e58e597c33a993f8119 4987000000
se specifichiamo l'opzione --print-json, ErgoTool restituirà tutte le box in formato json
$ ./ergo-tool.sh listAddressBoxes --print-json 9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v
[{"boxId":"4840cb6facc20b765085db0ad24768ed0c5e7afd413e8e58e597c33a993f8119","value":4987000000,"ergoTree":"0008cd02472963123ce32c057907c7a7268bc09f45d9ca57819d3327b9e7497d7b1cc347","creationHeight":125646,"assets":[],"additionalRegisters":{},"transactionId":"820c688f4b9d709924ba0186ee930a7df374d8852920bc769fc1f1d0b313e5ab","index":2}]
Trasferire Token
Ora, con la chiave segreta memorizzata in modo sicuro nel file di archiviazione crittografato, possiamo utilizzare ErgoTool per
trasferire token dal nostro indirizzo a un altro indirizzo destinatario. Il comando per farlo è
send.
./ergo-tool.sh help send
Nome del Comando: send
Sintassi d'uso: ergo-tool send <storageFile> <recipientAddr> <amountToSend>
Descrizione: invia il dato <amountToSend> all'indirizzo <recipientAddr> utilizzando
il dato <storageFile> per firmare la transazione (richiede la password di archiviazione)
Pagina doc: https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/SendCmd.html
Il file di archiviazione è necessario per accedere alla chiave segreta e generare una firma. La
password di archiviazione verrà richiesta da ErgoTool per sbloccare e decifrare il contenuto del file.
Il comando send supporta l'opzione --dry-run che costringe ErgoTool a creare la
transazione firmata, ma invece di inviarla alla blockchain, ErgoTool stampa la
transazione sulla console.
$ ./ergo-tool.sh send --dry-run storage/E1.json 9hHDQb26AjnJUXxcqriqY1mnhpLuUeC81C4pggtK7tupr92Ea1K 5000000
Password di archiviazione>
Creazione del prover... Ok
Caricamento delle box non spese dall'indirizzo 9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v... Ok
Firma della transazione... Ok
Tx: {
"id": "2633733a1d81b8fc747d984bdc36fac42cb52118b5057375b081b4c543c62b0e",
"inputs": [
{
"boxId": "4840cb6facc20b765085db0ad24768ed0c5e7afd413e8e58e597c33a993f8119",
"spendingProof": {
"proofBytes": "060e7c99c9c9cecf89ec5c3e7b692075e0b3415318f8064c64f7f01401ac29c6637b44535151e51d43d4cd25e05ad459dbe33718a99a22dd",
"extension": {}
}
}
],
"dataInputs": [],
"outputs": [
{
"boxId": "4eaed414ae763158126859bbf912fa9ffb9ea67ac13d81d473b1c81ec65b06fd",
"value": 5000000,
"ergoTree": "ErgoTree(0,WrappedArray(),Right(ConstantNode(SigmaProp(ProveDlog(ECPoint(6ba5cf,8ae5ac,...))),SSigmaProp)),80,[B@1117fff48)",
"creationHeight": 130508,
"assets": [],
"additionalRegisters": {},
"transactionId": "2633733a1d81b8fc747d984bdc36fac42cb52118b5057375b081b4c543c62b0e",
"index": 0
},
{
"boxId": "059b426fe2aaef10b6a9a618f0c5b4e97d4dd9931328bf4f52bcf92b0943a42c",
"value": 1000000,
"ergoTree": "ErgoTree(16,WrappedArray(IntConstant(0), IntConstant(0), ConstantNode(Coll(16,2,4,-96,11,8,-51,2,121,-66,102,126,-7,-36,-69,-84,85,-96,98,-107,-50,-121,11,7,2,-101,-4,-37,45,-50,40,-39,89,-14,-127,91,22,-8,23,-104,-22,2,-47,-110,-93,-102,-116,-57,-89,1,115,0,115,1),Coll[SByte$]), ConstantNode(Coll(1),Coll[SInt$]), IntConstant(1)),Right(BoolToSigmaProp(AND(ConcreteCollection(WrappedArray(EQ(Height$(163),SelectField(ExtractCreationInfo(ByIndex(Outputs$(165),ConstantPlaceholder(0,SInt$),None)),1)), EQ(ExtractScriptBytes(ByIndex(Outputs$(165),ConstantPlaceholder(1,SInt$),None)),SubstConstants(ConstantPlaceholder(2,Coll[SByte$]),ConstantPlaceholder(3,Coll[SInt$]),ConcreteCollection(WrappedArray(CreateProveDlog(DecodePoint(MinerPubkey$(172)))),SSigmaProp))), EQ(SizeOf(Outputs$(165)),ConstantPlaceholder(4,SInt$))),SBoolean)))),4836,[B@111805c40)",
"creationHeight": 130508,
"assets": [],
"additionalRegisters": {},
"transactionId": "2633733a1d81b8fc747d984bdc36fac42cb52118b5057375b081b4c543c62b0e",
"index": 1
},
{
"boxId": "0638ddb0fe6a8cc6ca4f981f71777f4a6e8aad72d57fdf945b24e0ef4ca714e1",
"value": 4981000000,
"ergoTree": "ErgoTree(0,WrappedArray(),Right(ConstantNode(SigmaProp(ProveDlog(ECPoint(472963,7c85fd,...))),SSigmaProp)),80,[B@111816258)",
"creationHeight": 130508,
"assets": [],
"additionalRegisters": {},
"transactionId": "2633733a1d81b8fc747d984bdc36fac42cb52118b5057375b081b4c543c62b0e",
"index": 2
}
]
}
Nota che gli script "ergoTree" sono deserializzati e stampati come alberi di sintassi astratta. Questo
formato di stampa può essere regolato da opzioni aggiuntive in modo che gli script possano essere stampati come
ErgoScript leggibile dall'uomo. (Non ancora implementato, ma da qualche parte nella roadmap.)
Se escludiamo l'opzione --dry-run, la transazione verrà inviata e inclusa nella
blockchain.
$ ./ergo-tool.sh send storage/E1.json 9hHDQb26AjnJUXxcqriqY1mnhpLuUeC81C4pggtK7tupr92Ea1K 5000000
Password di archiviazione>
Creazione del prover... Ok
Caricamento delle box non spese dall'indirizzo 9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v... Ok
Firma della transazione... Ok
Invio della transazione... Ok
Il server ha restituito l'id tx: "c5710af17f5124a232a5ef731fdf94a493025334c2a7d5a79e9923210972b962"
La nuova transazione creata verrà trasmessa in tutta la blockchain e i miner inizieranno
a includerla in un nuovo blocco. Una volta che il nuovo blocco con la nostra transazione è stato estratto e
accettato dalla rete, il nostro trasferimento è confermato e possiamo vederlo in Explorer.
Possiamo anche elencare le box dell'indirizzo destinatario e vedere il token che abbiamo creato tra gli altri
(finché non viene speso dal destinatario)
$ ./ergo-tool.sh listAddressBoxes 9hHDQb26AjnJUXxcqriqY1mnhpLuUeC81C4pggtK7tupr92Ea1K
BoxId NanoERGs
252c5ce38fc367001ea48fa6813e6252ebc169288d9b5392c572edb55380b3cd 5000000
6df9dbf08b4859b7e280afbd0822dcf20dba5bf8e3e33b78fe278df6597276f1 2000000
d47f958b201dc7162f641f7eb055e9fa7a9cb65cc24d4447a10f86675fc58328 1000000
e050a3af38241ce444c34eb25c0ab880674fc23a0e63632633ae14f547141c37 1000000
b50ed8c2953fd33b52af816c4caa63ec5b6d236a262a5a192534695c3478da78 1000000
26d6e08027e005270b38e5c5f4a73ffdb6d65a3289efb51ac37f98ad395d887c 10000000000
Note di Sicurezza
ErgoTool è stato creato con la sicurezza in mente e cerca di fare del suo meglio per proteggere l'uso di
informazioni sensibili come le frasi mnemoniche (che non vengono mai memorizzate in modo persistente),
le password (che non vengono mai mostrate sullo schermo) ecc. Inoltre, le chiavi segrete non vengono mai
memorizzate su disco locale in modo non crittografato e sicuramente non vengono mai inviate da nessuna parte.
Conclusione
ErgoTool è progettato per sembrare e funzionare come un'utilità CLI tipica:
- che è facile da usare e veloce da eseguire dalla riga di comando
- può essere scriptabile tramite script shell
- ha un aiuto all'uso integrato
Allo stesso tempo, ErgoTool è progettato per essere facilmente estensibile:
- implementato in linguaggio di alto livello Scala
- riutilizza le librerie core utilizzate nel client della rete Ergo
- open-source e completamente documentato
Questo ultimo punto è particolarmente importante poiché molti nuovi comandi possono essere facilmente aggiunti a
ErgoTool, grazie alla sua architettura. Se hai bisogno di una funzionalità o di un comando specifico,
per favore apri un problema o magari anche una PR.
L'estensibilità di ErgoTool è oggetto del prossimo post del blog pianificato, resta sintonizzato!
Riferimenti
Share post
13 agosto 2025
9 luglio 2025
12 maggio 2025
7 agosto 2022




















