Erstellen Sie Ihre eigene Ergo-Wallet: Verwaltung von Ergo-Coins mit ErgoTool
31. Dezember 2019

Einführung
ErgoTool ist eine Befehlszeilenschnittstelle (CLI) für
Ergo-Blockchain. Sie können ErgoTool verwenden, ohne Ihren
eigenen Ergo-Knoten auszuführen. Obwohl das Ausführen eines Knotens der sicherste Weg ist, um mit dem
Ergo-Blockchain-Netzwerk zu kommunizieren, zielt ErgoTool jedoch darauf ab, Ihnen mehr grundlegende Werkzeuge
zur Verfügung zu stellen. Sicherlich können Sie es auch mit Ihrem eigenen laufenden Knoten verwenden.
In diesem Beitrag werden wir einfache Schritte durchgehen, um eine mnemonische Phrase zu generieren, einen
lokalen geheimen Speicher zu erstellen und ihn zu verwenden, um ERGs zwischen Adressen zu senden, alles mit
der Hilfe von ErgoTool-Befehlen.
Erste Schritte
Zunächst müssen wir ErgoTool auf unserem System aus den Quellen installieren, indem wir den
Installationsanweisungen folgen. Im
directory, in dem wir ErgoTool geklont haben, gibt es das Skript ergo-tool.sh, das wir verwenden werden,
um Befehle auszuführen. Führen Sie den folgenden Befehl aus, um zu überprüfen, ob ErgoTool korrekt installiert ist.
$ ./ergo-tool.sh help
Befehlsname ist nicht angegeben (führen Sie ergo-tool ohne Argumente aus, um Befehle aufzulisten)
Befehlsname: help
Verwendungssyntax: ergo-tool help <commandName>
Beschreibung: zeigt die Verwendungshilfe für einen Befehl an
Dokumentseite: https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/HelpCmd.html
Sehen wir uns an, was wir hier erhalten. ErgoTool gibt die Fehlermeldung mit Informationen über den
help-Befehl aus. Dies ist eine typische Ausgabe von ErgoTool, wenn einer der bekannten Befehle
angegeben wird, aber er wird falsch verwendet. Wie wir aus der Nachricht lernen können, erfordert der help
Befehl, dass wir ein zusätzliches <commandName>-Argument angeben. Außerdem hat jeder Befehl
eine API-Dokumentseite mit allen Details zur Befehlsausführung, sodass die URL hier angezeigt wird.
Erstellen Sie eine neue mnemonische Phrase
Eine mnemonische Phrase ist eine zufällige Zeichenfolge, die verwendet wird, um einen Master-Schlüssel
entsprechend der Spezifikation der Hierarchical Deterministic
Wallets zu generieren.
Zur Bequemlichkeit wird eine zufällige Folge englischer Wörter verwendet, dies ist jedoch nicht erforderlich.
Führen Sie den folgenden Befehl aus, um eine neue mnemonische Phrase zu generieren:
$ ./ergo-tool.sh mnemonic
bird harbor wheat innocent business disease busy quick yellow trust time oil enter situate moon
Schreiben Sie es auf ein Blatt Papier und bewahren Sie es an einem sicheren und geheimen Ort auf.
Als zusätzliche Sicherheitsmaßnahme können Sie ein beliebiges mnemonisches Passwort erstellen.
In gewissem Sinne kann es wie ein zusätzliches nicht-vokabuläres Wort in der mnemonischen Phrase dienen.
Das mnemonische Passwort ist optional und wird zur zusätzlichen Sicherheit verwendet.
Wenn Sie sich entscheiden, ein mnemonisches Passwort zu verwenden, sollten Sie es ebenfalls aufschreiben und an einem geheimen und
wahrscheinlich anderen Ort als der mnemonischen Phrase aufbewahren.
Wichtig: Sowohl die mnemonische Phrase als auch das mnemonische Passwort sind erforderlich, um geheime Schlüssel wiederherzustellen.
Wenn Sie eines von beiden verlieren, können Sie Ihren Master-Schlüssel nicht erneut regenerieren.
Als Nächstes verwenden wir die generierte mnemonische Phrase, um einen Speicher mit einem Master-Geheimschlüssel zu erstellen.
Erstellen Sie einen neuen verschlüsselten Speicher
Zur besseren Sicherheit sind weder die mnemonische Phrase noch das Passwort erforderlich, um mit ErgoTool
Transaktionen zu signieren. Stattdessen ist der geheime Schlüssel aus dem verschlüsselten Speicher
erforderlich, um die Ausgaben zu signieren. Wir können einen geheimen Schlüssel generieren und ihn in einem
verschlüsselten Speicher mit dem Befehl createStorage speichern.
$ ./ergo-tool.sh help createStorage
Befehlsname: createStorage
Verwendungssyntax: ergo-tool createStorage [<storageDir>="storage"] [<storageFileName>="secret.json"]
Beschreibung: Erstellt eine verschlüsselte Speicherdatei für die vom Benutzer eingegebene mnemonische Phrase
Dokumentseite: https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/CreateStorageCmd.html
$ ./ergo-tool.sh createStorage
Geben Sie die mnemonische Phrase ein> bird harbor wheat innocent business disease busy quick yellow trust time oil enter situate moon
Mnemonisches Passwort>
Wiederholen Sie das mnemonische Passwort>
Speicherpasswort>
Wiederholen Sie das Speicherpasswort>
Speicherdatei: storage/secret.json
Ein Master-Geheimschlüssel wird aus dem Paar (mnemonische Phrase, mnemonisches Passwort) generiert und
verschlüsselt in der Datei storage/secret.json gespeichert. Die mnemonische Phrase selbst wird nicht in der
Datei gespeichert und es gibt keine Möglichkeit, sie aus der Datei wiederherzustellen, selbst wenn Sie die Passwörter kennen.
Bitte achten Sie darauf, das korrekte mnemonische Passwort einzugeben, das Sie zuvor gewählt und gespeichert haben.
Da ein mnemonisches Passwort optional ist, können Sie es leer lassen, indem Sie die Eingabetaste drücken.
Wenn Sie das Speicherpasswort (auch bekannt als Verschlüsselungs-Passwort) vergessen, können Sie diese Speicherdatei nicht mehr verwenden,
Sie können jedoch immer Ihre geheimen Schlüssel aus dem Paar (mnemonische Phrase, mnemonisches Passwort) wiederherstellen und somit eine neue Speicherdatei mit einem neuen Passwort erstellen.
Bewahren Sie Ihre Speicherdatei und Ihr Speicherpasswort geheim, denn jeder, der sowohl Ihre Speicherdatei als auch Ihr Speicherpasswort erhält, kann sie entschlüsseln und auf die geheimen Schlüssel zugreifen.
Daten aus dem Speicher extrahieren
Der geheime Speicher enthält den Master-Geheimschlüssel und kann daher verwendet werden, um sowohl den
öffentlichen Schlüssel als auch die Pay-to-Public-Key-Adresse zu berechnen, die zu diesem geheimen Schlüssel gehören. Der
Befehl extractStorage macht genau das.
$ ./ergo-tool.sh help extractStorage
Befehlsname: extractStorage
Verwendungssyntax: ergo-tool extractStorage <storage file> address|masterKey|publicKey|secretKey mainnet|testnet
Beschreibung: Liest die Datei, entsperrt sie mit dem Passwort und extrahiert die angeforderte Eigenschaft aus der angegebenen Speicherdatei.
Dokumentseite: https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/ExtractStorageCmd.html
$ ./ergo-tool.sh extractStorage storage/secret.json address mainnet
Speicherpasswort>
9iHiSAg3ko2ZGxR2vhc1Aem3tShqfzEPDAF7XK5cdtbZ3Ut2CCf
Hier transformiert der Befehl den geheimen Schlüssel in den entsprechenden öffentlichen Schlüssel und erstellt dann
die Pay-to-Public-Key-Adresse im Mainnet.
Auf die gleiche Weise können wir den öffentlichen Schlüssel, den privaten Schlüssel und andere Daten aus dem Speicher abrufen.
$ ./ergo-tool.sh extractStorage storage/secret.json secretKey mainnet
Speicherpasswort>
55dfde63c9b6b4f47683592e85ee997ba2e93507f38ba3f9c82933bcfbc677ca
$ ./ergo-tool.sh extractStorage storage/secret.json publicKey mainnet
Speicherpasswort>
03f07aecb145a85920bf6e9be80efe5f1cd1a165b45ad3aa8e5c4ca3ba50856bb8
Auflisten ungenutzter Boxen
ErgoTool hat den speziellen Befehl, um alle verfügbaren (d.h. ungenutzten) Boxen für eine gegebene Adresse aufzulisten.
$ ./ergo-tool.sh listAddressBoxes 9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v
BoxId NanoERGs
4840cb6facc20b765085db0ad24768ed0c5e7afd413e8e58e597c33a993f8119 4987000000
Wenn wir die Option --print-json angeben, gibt ErgoTool alle Boxen im JSON-Format aus.
$ ./ergo-tool.sh listAddressBoxes --print-json 9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v
[{"boxId":"4840cb6facc20b765085db0ad24768ed0c5e7afd413e8e58e597c33a993f8119","value":4987000000,"ergoTree":"0008cd02472963123ce32c057907c7a7268bc09f45d9ca57819d3327b9e7497d7b1cc347","creationHeight":125646,"assets":[],"additionalRegisters":{},"transactionId":"820c688f4b9d709924ba0186ee930a7df374d8852920bc769fc1f1d0b313e5ab","index":2}]
Coins übertragen
Jetzt, da der geheime Schlüssel sicher in der verschlüsselten Speicherdatei gespeichert ist, können wir ErgoTool verwenden, um
Coins von unserer Adresse an eine andere Empfängeradresse zu übertragen. Der Befehl dafür ist
send.
./ergo-tool.sh help send
Befehlsname: send
Verwendungssyntax: ergo-tool send <storageFile> <recipientAddr> <amountToSend>
Beschreibung: senden Sie den angegebenen <amountToSend> an die angegebene <recipientAddr> unter Verwendung der
given <storageFile> zur Signierung der Transaktion (fordert das Speicherpasswort an)
Dokumentseite: https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/SendCmd.html
Die Speicherdatei ist notwendig, um auf den geheimen Schlüssel zuzugreifen und eine Signatur zu generieren. Das
Speicherpasswort wird von ErgoTool angefordert, um den Inhalt der Datei zu entsperren und zu entschlüsseln.
Der Befehl send unterstützt die Option --dry-run, die ErgoTool zwingt, die
signierte Transaktion zu erstellen, aber anstatt sie an die Blockchain zu senden, gibt ErgoTool die
Transaktion auf der Konsole aus.
$ ./ergo-tool.sh send --dry-run storage/E1.json 9hHDQb26AjnJUXxcqriqY1mnhpLuUeC81C4pggtK7tupr92Ea1K 5000000
Speicherpasswort>
Erstellen des Beweises... Ok
Laden ungenutzter Boxen von der Adresse 9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v... Ok
Signieren der Transaktion... 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
}
]
}
Beachten Sie, dass die "ergoTree"-Skripte deserialisiert und als abstrakte Syntaxbäume ausgegeben werden. Dieses
Ausgabeformat kann durch zusätzliche Optionen geregelt werden, sodass die Skripte als menschenlesbares ErgoScript ausgegeben werden können. (Noch nicht implementiert, aber irgendwo auf der Roadmap.)
Wenn wir die Option --dry-run ausschließen, wird die Transaktion gesendet und in die
Blockchain aufgenommen.
$ ./ergo-tool.sh send storage/E1.json 9hHDQb26AjnJUXxcqriqY1mnhpLuUeC81C4pggtK7tupr92Ea1K 5000000
Speicherpasswort>
Erstellen des Beweises... Ok
Laden ungenutzter Boxen von der Adresse 9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v... Ok
Signieren der Transaktion... Ok
Senden der Transaktion... Ok
Server gab tx id zurück: "c5710af17f5124a232a5ef731fdf94a493025334c2a7d5a79e9923210972b962"
Die neu erstellte Transaktion wird über die gesamte Blockchain gesendet und die Miner beginnen,
sie in einen neuen Block aufzunehmen. Sobald der neue Block mit unserer Transaktion abgebaut und
vom Netzwerk akzeptiert wird, ist unsere Übertragung bestätigt und wir können es im Explorer sehen.
Wir können auch die Boxen der Empfängeradresse auflisten und die von uns erstellte Münze unter anderen sehen
(bis sie vom Empfänger ausgegeben wird).
$ ./ergo-tool.sh listAddressBoxes 9hHDQb26AjnJUXxcqriqY1mnhpLuUeC81C4pggtK7tupr92Ea1K
BoxId NanoERGs
252c5ce38fc367001ea48fa6813e6252ebc169288d9b5392c572edb55380b3cd 5000000
6df9dbf08b4859b7e280afbd0822dcf20dba5bf8e3e33b78fe278df6597276f1 2000000
d47f958b201dc7162f641f7eb055e9fa7a9cb65cc24d4447a10f86675fc58328 1000000
e050a3af38241ce444c34eb25c0ab880674fc23a0e63632633ae14f547141c37 1000000
b50ed8c2953fd33b52af816c4caa63ec5b6d236a262a5a192534695c3478da78 1000000
26d6e08027e005270b38e5c5f4a73ffdb6d65a3289efb51ac37f98ad395d887c 10000000000
Sicherheitsnotizen
ErgoTool wurde mit Sicherheit im Hinterkopf erstellt und versucht sein Bestes, um die Verwendung von
sensiblen Informationen wie mnemonischen Phrasen (die niemals dauerhaft gespeichert werden),
Passwörtern (die niemals auf dem Bildschirm angezeigt werden) usw. zu schützen. Darüber hinaus werden geheime Schlüssel niemals
unverschlüsselt auf der lokalen Festplatte gespeichert und sicherlich niemals irgendwohin gesendet.
Fazit
ErgoTool ist so konzipiert, dass es wie ein typisches CLI-Dienstprogramm aussieht und sich anfühlt:
- das einfach zu bedienen und schnell von der Befehlszeile auszuführen ist
- über Shell-Skripte skriptfähig ist
- eine integrierte Verwendungshilfe hat
Gleichzeitig ist ErgoTool so konzipiert, dass es leicht erweiterbar ist:
- in der Hochsprache Scala implementiert
- wiederverwendet die Kernbibliotheken, die im Ergo-Netzwerk-Client verwendet werden
- quelloffen und vollständig dokumentiert
Dieser letzte Punkt ist besonders wichtig, da viele neue Befehle dank seiner Architektur leicht zu ErgoTool hinzugefügt werden können. Wenn Sie eine bestimmte Funktion oder einen Befehl benötigen,
bitte erstellen Sie ein Issue oder vielleicht sogar einen PR.
Die Erweiterbarkeit von ErgoTool ist das Thema des nächsten geplanten Blogbeitrags, bleiben Sie dran!
Referenzen
Share post
13. August 2025
12. August 2025
9. Juli 2025
12. Mai 2025
9. Dezember 2024
19. August 2024
