Vytvorte si vlastnú Ergo peňaženku: Správa Ergo mincí s ErgoTool

This page is machine-translated.
Alexander Slesarenko

31. decembra 2019

Úvod

ErgoTool je príkazový riadok (CLI) pre
Ergo blockchain. Môžete používať ErgoTool bez spustenia vlastného
Ergo uzla. Aj keď spustenie uzla je najbezpečnejší spôsob komunikácie s
Ergo blockchain sieťou, ErgoTool sa snaží poskytnúť viac základných nástrojov k
dispozícii. Určite ho môžete používať aj so svojím vlastným bežiacim uzlom.

V tomto príspevku prejdeme jednoduchými krokmi na generovanie mnemotechnickej frázy, vytvorenie
lokálneho tajného úložiska a jeho použitie na posielanie ERG medzi adresami, všetko s pomocou
príkazov ErgoTool.

Začiatok

Najprv musíme nainštalovať ErgoTool na našom systéme zo zdrojov podľa
inštrukcií na inštaláciu. V
direktóriu, kde sme klonovali ErgoTool, je skript ergo-tool.sh, ktorý budeme používať
na spúšťanie príkazov. Spustite nasledujúci príkaz, aby ste skontrolovali, či je ErgoTool
nainštalovaný správne.

$ ./ergo-tool.sh help     
command name is not specified (run ergo-tool without arguments to list commands)

Command Name:	help
Usage Syntax:	ergo-tool help <commandName>
Description:	prints usage help for a command
Doc page:	https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/HelpCmd.html

Pozrime sa, čo tu dostaneme. ErgoTool vypisuje chybové hlásenie s informáciami o
help príkaze. Toto je typický výstup ErgoTool, keď je zadaný jeden z
známych príkazov, ale je použitý nesprávne. Ako sa môžeme dozvedieť z hlásenia, príkaz
help vyžaduje, aby sme špecifikovali ďalší argument <commandName>. Taktiež každý príkaz má
API dokumentačnú stránku so všetkými podrobnosťami o vykonávaní príkazu, takže jeho URL je tu
zobrazené.

Vytvorte novú mnemotechnickú frázu

Mnemotechnická fráza je náhodná sekvencia znakov, ktorá sa používa na generovanie hlavného kľúča
podľa špecifikácie Hierarchical Deterministic
Wallets
.
Pre pohodlie sa používa náhodná sekvencia anglických slov, ale to nie je povinné.
Spustite nasledujúci príkaz na generovanie novej mnemotechnickej frázy:

$ ./ergo-tool.sh mnemonic          
bird harbor wheat innocent business disease busy quick yellow trust time oil enter situate moon

Zapíšte si to na papier a uchovajte na bezpečnom a tajnom mieste.
Ako dodatočné bezpečnostné opatrenie môžete vytvoriť ľubovoľné mnemotechnické heslo.
V istom zmysle môže slúžiť ako dodatočné slovo, ktoré nie je v slovníku, v mnemotechnickej fráze.
Mnemotechnické heslo je voliteľné a používa sa na dodatočné zabezpečenie.
Ak sa rozhodnete použiť mnemotechnické heslo, mali by ste si ho tiež zapísať a uchovať na tajnom a
pravdepodobne inom mieste ako mnemotechnickú frázu.

Dôležité, obidve mnemotechnické frázy a mnemotechnické heslo sú potrebné na obnovenie tajných kľúčov,
ak ak ich stratíte, nebudete schopní regenerovať svoj hlavný kľúč.

Ďalej použijeme vygenerovanú mnemotechnickú frázu na vytvorenie úložiska s hlavným tajným kľúčom.

Vytvorte nové šifrované úložisko

Pre lepšiu bezpečnosť ErgoTool nevyžaduje ani mnemotechnickú frázu, ani heslo na
vykonanie podpisovania transakcie. Namiesto toho je potrebný tajný kľúč z šifrovaného úložiska na
podpisovanie transakcie. Môžeme vygenerovať tajný kľúč a uložiť ho do šifrovaného úložiska pomocou
príkazu createStorage.

$ ./ergo-tool.sh help createStorage

Command Name:	createStorage
Usage Syntax:	ergo-tool createStorage [<storageDir>="storage"] [<storageFileName>="secret.json"]
Description:	Creates an encrypted storage file for the mnemonic entered by the user
Doc page:       https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/CreateStorageCmd.html

$ ./ergo-tool.sh createStorage 
Enter mnemonic phrase> bird harbor wheat innocent business disease busy quick yellow trust time oil enter situate moon
Mnemonic password> 
Repeat mnemonic password> 
Storage password> 
Repeat storage password> 
Storage File: storage/secret.json

Hlavný tajný kľúč je generovaný z páru (mnemotechnická fráza, mnemotechnické heslo) a
uložený šifrovaný v súbore storage/secret.json. Mnemotechnická fráza sama nie je uložená v
súbore a nie je možné ju obnoviť zo súboru, aj keď poznáte heslá.

Prosím, dbajte na to, aby ste zadali správne mnemotechnické heslo, to, ktoré ste si vybrali a uložili predtým.
Keďže mnemotechnické heslo je voliteľné, môžete ho nechať prázdne stlačením enter.

Ak zabudnete heslo úložiska (t.j. heslo na šifrovanie), nebudete môcť používať
ten súbor úložiska, avšak vždy môžete obnoviť svoje tajné kľúče z páru (mnemotechnická
fráza, mnemotechnické heslo) a tak vytvoriť nový súbor úložiska s novým heslom.

Uchovávajte svoj súbor úložiska a heslo úložiska v tajnosti, každý, kto získa oba vaše súbory úložiska
a heslo úložiska, bude schopný dešifrovať ho a získať tajné kľúče.

Extrakcia údajov z úložiska

Tajné úložisko obsahuje hlavný tajný kľúč a ako výsledok môže byť použité na výpočet
ako verejného kľúča, tak aj adresy pay-to-public-key, ktorá zodpovedá tomuto tajnému kľúču. Príkaz
extractStorage robí presne to.

$ ./ergo-tool.sh help extractStorage

Command Name:	extractStorage
Usage Syntax:	ergo-tool extractStorage <storage file> address|masterKey|publicKey|secretKey mainnet|testnet
Description:	Reads the file, unlocks it using password and extract the requested property from the given storage file.
Doc page:	https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/ExtractStorageCmd.html 

$ ./ergo-tool.sh extractStorage storage/secret.json address mainnet     
Storage password> 
9iHiSAg3ko2ZGxR2vhc1Aem3tShqfzEPDAF7XK5cdtbZ3Ut2CCf

Tu príkaz transformuje tajný kľúč na zodpovedajúci verejný kľúč a potom vytvára
adresu pay-to-public-key na mainnete.

Rovnakým spôsobom môžeme získať verejný kľúč, súkromný kľúč a ďalšie údaje z úložiska.

$ ./ergo-tool.sh extractStorage storage/secret.json secretKey mainnet
Storage password> 
55dfde63c9b6b4f47683592e85ee997ba2e93507f38ba3f9c82933bcfbc677ca

$ ./ergo-tool.sh extractStorage storage/secret.json publicKey mainnet
Storage password> 
03f07aecb145a85920bf6e9be80efe5f1cd1a165b45ad3aa8e5c4ca3ba50856bb8

Zoznam nevyčerpaných boxov

ErgoTool má špeciálny príkaz na zoznam všetkých dostupných (t.j. nevyčerpaných) boxov pre danú adresu.

$ ./ergo-tool.sh listAddressBoxes 9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v                                                                
BoxId                                                             NanoERGs          
4840cb6facc20b765085db0ad24768ed0c5e7afd413e8e58e597c33a993f8119  4987000000

ak špecifikujeme možnosť --print-json, ErgoTool vypíše všetky boxy vo formáte json

$ ./ergo-tool.sh listAddressBoxes --print-json 9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v
[{"boxId":"4840cb6facc20b765085db0ad24768ed0c5e7afd413e8e58e597c33a993f8119","value":4987000000,"ergoTree":"0008cd02472963123ce32c057907c7a7268bc09f45d9ca57819d3327b9e7497d7b1cc347","creationHeight":125646,"assets":[],"additionalRegisters":{},"transactionId":"820c688f4b9d709924ba0186ee930a7df374d8852920bc769fc1f1d0b313e5ab","index":2}]

Prenos mincí

Teraz, keď je tajný kľúč bezpečne uložený v šifrovanom súbore úložiska, môžeme použiť ErgoTool na
prenos mincí z našej adresy na inú adresu príjemcu. Príkaz na to je
send.

./ergo-tool.sh help send                                     

Command Name:	send
Usage Syntax:	ergo-tool send <storageFile> <recipientAddr> <amountToSend>
Description:	send the given <amountToSend> to the given <recipientAddr> using 
 the given <storageFile> to sign transaction (requests storage password)
Doc page:	https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/SendCmd.html

Súbor úložiska je potrebný na prístup k tajnému kľúču a generovanie podpisu. Heslo úložiska bude
požadované ErgoTool na odomknutie a dešifrovanie obsahu súboru.
Príkaz send podporuje možnosť --dry-run, ktorá núti ErgoTool vytvoriť
podpísanú transakciu, ale namiesto jej odoslania do blockchainu, ErgoTool vytlačí
transakciu na konzolu.

$ ./ergo-tool.sh send --dry-run storage/E1.json 9hHDQb26AjnJUXxcqriqY1mnhpLuUeC81C4pggtK7tupr92Ea1K 5000000
Storage password>
Creating prover... Ok
Loading unspent boxes from at address 9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v... Ok
Signing the transaction... 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
    }
  ]
}

Všimnite si, že skripty "ergoTree" sú deserializované a vytlačené ako abstraktné syntaktické stromy. Tento
formát tlače môže byť regulovaný dodatočnými možnosťami, aby sa skripty mohli tlačiť ako
čitateľný ErgoScript. (Ešte nie je implementované, ale niekde na pláne.)

Ak vylúčime možnosť --dry-run, transakcia bude odoslaná a zahrnutá do
blockchainu.

$ ./ergo-tool.sh send storage/E1.json 9hHDQb26AjnJUXxcqriqY1mnhpLuUeC81C4pggtK7tupr92Ea1K 5000000          
Storage password>
Creating prover... Ok
Loading unspent boxes from at address 9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v... Ok
Signing the transaction... Ok
Sendng the transaction... Ok
Server returned tx id: "c5710af17f5124a232a5ef731fdf94a493025334c2a7d5a79e9923210972b962"

Novovytvorená transakcia bude vysielaná po celom blockchain a baníci začnú
zahrňovať ju do nového bloku. Akonáhle je nový blok s našou transakciou vyťažený a
prijatý sieťou, náš prenos je potvrdený a môžeme vidieť ho v Exploreri.

Môžeme tiež zoznam boxov adresy príjemcu a vidieť mincu, ktorú sme vytvorili medzi ostatnými
(až kým ju príjemca nevyužije)

$ ./ergo-tool.sh listAddressBoxes 9hHDQb26AjnJUXxcqriqY1mnhpLuUeC81C4pggtK7tupr92Ea1K                      
BoxId                                                             NanoERGs          
252c5ce38fc367001ea48fa6813e6252ebc169288d9b5392c572edb55380b3cd  5000000
6df9dbf08b4859b7e280afbd0822dcf20dba5bf8e3e33b78fe278df6597276f1  2000000
d47f958b201dc7162f641f7eb055e9fa7a9cb65cc24d4447a10f86675fc58328  1000000
e050a3af38241ce444c34eb25c0ab880674fc23a0e63632633ae14f547141c37  1000000
b50ed8c2953fd33b52af816c4caa63ec5b6d236a262a5a192534695c3478da78  1000000
26d6e08027e005270b38e5c5f4a73ffdb6d65a3289efb51ac37f98ad395d887c  10000000000

Bezpečnostné poznámky

ErgoTool je vytvorený s ohľadom na bezpečnosť a snaží sa čo najlepšie chrániť používanie
citlivých informácií, ako sú mnemotechnické frázy (ktoré sa nikdy neukladajú trvalo),
heslá (ktoré sa nikdy nezobrazujú na obrazovke) atď. Okrem toho sa tajné kľúče nikdy
neukladajú na lokálny disk nešifrované a určite sa nikdy nikam neposielajú.

Záver

ErgoTool je navrhnutý tak, aby vyzeral a pôsobil ako typická CLI utilita:

  • ktorá je jednoduchá na použitie a rýchla na spustenie z príkazového riadku
  • môže byť skriptovateľná prostredníctvom shell skriptov
  • má zabudovanú pomoc pri používaní

Zároveň je ErgoTool navrhnutý tak, aby bol ľahko rozšíriteľný:

  • implementovaný v jazyku Scala na vysokej úrovni
  • znovu používa základné knižnice, ktoré sa používajú v Ergo sieťovom klientovi
  • open-sourced a plne zdokumentovaný

Tento posledný bod je obzvlášť dôležitý, pretože mnohé nové príkazy môžu byť ľahko pridané do
ErgoTool, vďaka jeho architektúre. Ak potrebujete konkrétnu funkciu alebo príkaz,
prosím, podajte problém alebo možno aj PR.

Rozšíriteľnosť ErgoTool je predmetom nasledujúceho plánovaného blogového príspevku, sledujte nás!

Odkazy

  1. Ergo Site
  2. Ergo Sources
  3. Ergo Appkit
  4. Ergo Tool

Share post

Ergo Infrastructure DAO: Decentralizácia chrbtice ekosystému Ergo

Ergo Infrastructure DAO: Decentralizácia chrbtice ekosystému Ergo

Misia Ergo bola vždy zakorenená v decentralizácii, nielen na konsenzuálnej vrstve, ale naprieč celým stackom.

Ergo Platform

13. augusta 2025

Mew Finance: Hravý DeFi nástroj pre ekosystém Ergo

Mew Finance: Hravý DeFi nástroj pre ekosystém Ergo

Mew Finance je decentralizovaná aplikácia na blockchainu Ergo.

Ergo Platform

12. augusta 2025

Lithos: Decentralizácia ťažby s on-chain poolmi

Lithos: Decentralizácia ťažby s on-chain poolmi

Lithos je nový protokol navrhnutý na prepracovanie fungovania ťažobných poolov presunutím ich na on-chain, čo dáva ťažiarom plnú k.

Ergo Platform

24. júla 2025

Sigma 6.0: Inteligentnejší, flexibilnejší Ergo

Sigma 6.0: Inteligentnejší, flexibilnejší Ergo

Sigma 6.0 je významná navrhovaná aktualizácia blockchainu Ergo.

Ergo Platform

23. júla 2025

Formovanie budúcnosti Rosen: Výzva komunity na päť kľúčových návrhov pokladnice

Formovanie budúcnosti Rosen: Výzva komunity na päť kľúčových návrhov pokladnice

Spoluzakladateľ Rosen, Armeanio, predložil päť nových návrhov pre Rosen Treasury.

Ergo Platform

9. júla 2025

Ergo's Extended UTXO a vzostup umelej ekonomickej inteligencie

Ergo's Extended UTXO a vzostup umelej ekonomickej inteligencie

Praktická vízia pre autonómne ekonomické agentov Autonómne ekonomické agenti na blockchaine Ergo vykonávajú užitočnú prácu v reál.

Ergo Platform

12. mája 2025

ErgoHACK X: Umelá inteligencia na Ergo blockchaine

ErgoHACK X: Umelá inteligencia na Ergo blockchaine

Oslavujeme desaťročie decentralizovanej inovácií Pridajte sa k 10.

Ergo Platform

10. apríla 2025

The Ergo Manifesto

The Ergo Manifesto

Ergo Manifesto dúfa vo vzdelanie a ukážku vízie, čo blockchain technológia môže dosiahnuť.

Ergo Foundation

26. apríla 2021