Stwórz własny portfel Ergo: Zarządzanie monetami Ergo za pomocą ErgoTool

This page is machine-translated.
Alexander Slesarenko

31 grudnia 2019

Wprowadzenie

ErgoTool to interfejs wiersza poleceń (CLI) dla
blokchaina Ergo. Możesz używać ErgoTool bez uruchamiania własnego węzła Ergo. Chociaż uruchomienie węzła jest najbezpieczniejszym sposobem komunikacji z siecią blokchaina Ergo, ErgoTool ma na celu dostarczenie bardziej podstawowych narzędzi do twojej dyspozycji. Oczywiście, nadal możesz go używać z własnym działającym węzłem.

W tym poście przeprowadzimy przez proste kroki, aby wygenerować frazę mnemoniczna, stworzyć lokalne tajne przechowywanie i użyć go do wysyłania ERG-ów między adresami, wszystko z pomocą poleceń ErgoTool.

Rozpoczęcie

Przede wszystkim musimy zainstalować ErgoTool na naszym systemie z źródeł, postępując zgodnie z
instrukcjami instalacji. W katalogu, w którym sklonowaliśmy ErgoTool, znajduje się skrypt ergo-tool.sh, którego zamierzamy użyć do uruchamiania poleceń. Uruchom następujące polecenie, aby sprawdzić, czy ErgoTool jest poprawnie zainstalowany.

$ ./ergo-tool.sh help     
nie podano nazwy polecenia (uruchom ergo-tool bez argumentów, aby wyświetlić listę poleceń)

Nazwa polecenia:	help
Składnia użycia:	ergo-tool help <commandName>
Opis:	drukuje pomoc w użyciu dla polecenia
Strona dokumentacji:	https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/HelpCmd.html

Zobaczmy, co tutaj mamy. ErgoTool wyświetla komunikat o błędzie z informacjami o poleceniu help. To typowe wyjście ErgoTool, gdy jedno z znanych poleceń jest określone, ale jest używane niepoprawnie. Jak możemy się dowiedzieć z komunikatu, polecenie help wymaga od nas podania dodatkowego argumentu <commandName>. Ponadto każde polecenie ma stronę dokumentacji API z wszystkimi szczegółami dotyczącymi wykonania polecenia, więc jego adres URL jest tutaj pokazany.

Utwórz nową frazę mnemoniczna

Fraza mnemoniczna to losowa sekwencja znaków, która jest używana do generowania klucza głównego zgodnie z
specyfikacją Hierarchical Deterministic Wallets.
Dla wygody używa się losowej sekwencji angielskich słów, ale nie jest to wymagane.
Uruchom następujące polecenie, aby wygenerować nową frazę mnemoniczna:

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

Zapisz ją na papierze i przechowuj w bezpiecznym i tajnym miejscu.
Jako dodatkowy środek bezpieczeństwa możesz stworzyć dowolne hasło mnemoniczne.
W pewnym sensie może ono służyć jako dodatkowe słowo nie-w słowniku w mnemonice.
Hasło mnemoniczne jest opcjonalne i służy do dodatkowego zabezpieczenia.
Jeśli zdecydujesz się użyć hasła mnemonicznego, powinieneś również je zapisać i przechowywać w tajnym i
prawdopodobnie innym miejscu niż fraza mnemoniczna.

Ważne, zarówno fraza mnemoniczna, jak i hasło mnemoniczne są wymagane do przywrócenia tajnych kluczy,
jeśli zgubisz którykolwiek z nich, nie będziesz w stanie ponownie wygenerować swojego klucza głównego.

Następnie użyjmy wygenerowanej frazy mnemonicznej do stworzenia przechowywania z kluczem tajnym.

Utwórz nowe zaszyfrowane przechowywanie

Dla lepszego bezpieczeństwa ErgoTool nie wymaga ani frazy mnemonicznej, ani hasła do
podpisania transakcji. Zamiast tego, klucz tajny z zaszyfrowanego przechowywania jest
wymagany do podpisania transakcji wydania. Możemy wygenerować klucz tajny i przechować go w
zaszyfrowanym przechowywaniu, używając polecenia createStorage.

$ ./ergo-tool.sh help createStorage

Nazwa polecenia:	createStorage
Składnia użycia:	ergo-tool createStorage [<storageDir>="storage"] [<storageFileName>="secret.json"]
Opis:	Tworzy zaszyfrowany plik przechowywania dla frazy mnemonicznej wprowadzonej przez użytkownika
Strona dokumentacji:       https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/CreateStorageCmd.html

$ ./ergo-tool.sh createStorage 
Wprowadź frazę mnemoniczną> bird harbor wheat innocent business disease busy quick yellow trust time oil enter situate moon
Hasło mnemoniczne> 
Powtórz hasło mnemoniczne> 
Hasło przechowywania> 
Powtórz hasło przechowywania> 
Plik przechowywania: storage/secret.json

Klucz tajny główny jest generowany z pary (fraza mnemoniczna, hasło mnemoniczne) i
zapisany w zaszyfrowanym pliku storage/secret.json. Sama fraza mnemoniczna nie jest przechowywana w pliku i nie ma możliwości jej przywrócenia z pliku, nawet jeśli znasz hasła.

Proszę zadbać o wprowadzenie poprawnego hasła mnemonicznego, tego, które wybrałeś i zapisałeś wcześniej.
Ponieważ hasło mnemoniczne jest opcjonalne, możesz je pozostawić puste, naciskając enter.

Jeśli zapomnisz hasła przechowywania (tzw. hasła szyfrowania), nie będziesz mógł już używać
tego pliku przechowywania, jednak zawsze możesz przywrócić swoje tajne klucze z pary (fraza
mnemoniczna, hasło mnemoniczne) i w ten sposób stworzyć nowy plik przechowywania z nowym hasłem.

Przechowuj swój plik przechowywania i hasło przechowywania w tajemnicy, każdy, kto zdobędzie zarówno twój plik przechowywania, jak i hasło przechowywania, będzie mógł go odszyfrować i uzyskać dostęp do tajnych kluczy.

Ekstrakcja danych z przechowywania

Tajne przechowywanie zawiera klucz tajny główny i w rezultacie może być używane do obliczenia zarówno
klucza publicznego, jak i adresu pay-to-public-key, który odpowiada temu kluczowi tajnemu. Polecenie extractStorage robi dokładnie to.

$ ./ergo-tool.sh help extractStorage

Nazwa polecenia:	extractStorage
Składnia użycia:	ergo-tool extractStorage <plik przechowywania> address|masterKey|publicKey|secretKey mainnet|testnet
Opis:	Odczytuje plik, odblokowuje go za pomocą hasła i ekstraktuje żądany atrybut z podanego pliku przechowywania.
Strona dokumentacji:	https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/ExtractStorageCmd.html 

$ ./ergo-tool.sh extractStorage storage/secret.json address mainnet     
Hasło przechowywania> 
9iHiSAg3ko2ZGxR2vhc1Aem3tShqfzEPDAF7XK5cdtbZ3Ut2CCf

Tutaj polecenie przekształca klucz tajny w odpowiadający mu klucz publiczny, a następnie tworzy
adres pay-to-public-key w sieci głównej.

W ten sam sposób możemy uzyskać klucz publiczny, klucz prywatny i inne dane z przechowywania.

$ ./ergo-tool.sh extractStorage storage/secret.json secretKey mainnet
Hasło przechowywania> 
55dfde63c9b6b4f47683592e85ee997ba2e93507f38ba3f9c82933bcfbc677ca

$ ./ergo-tool.sh extractStorage storage/secret.json publicKey mainnet
Hasło przechowywania> 
03f07aecb145a85920bf6e9be80efe5f1cd1a165b45ad3aa8e5c4ca3ba50856bb8

Wyświetlanie niewydanych skrzynek

ErgoTool ma specjalne polecenie do wyświetlania wszystkich dostępnych (tzw. niewydanych) skrzynek dla danego adresu.

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

jeśli określimy opcję --print-json, ErgoTool wyświetli wszystkie skrzynki w formacie json

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

Przesyłanie monet

Teraz, gdy klucz tajny jest bezpiecznie przechowywany w zaszyfrowanym pliku przechowywania, możemy użyć ErgoTool do
przesyłania monet z naszego adresu do innego adresu odbiorcy. Polecenie do tego to
send.

./ergo-tool.sh help send                                     

Nazwa polecenia:	send
Składnia użycia:	ergo-tool send <storageFile> <recipientAddr> <amountToSend>
Opis:	przesyła podaną <amountToSend> do podanego <recipientAddr> używając 
 podanego <storageFile> do podpisania transakcji (wymaga hasła przechowywania)
Strona dokumentacji:	https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/SendCmd.html

Plik przechowywania jest niezbędny, aby uzyskać dostęp do klucza tajnego i wygenerować podpis. Hasło przechowywania będzie wymagane przez ErgoTool do odblokowania i odszyfrowania zawartości pliku.
Polecenie send obsługuje opcję --dry-run, która zmusza ErgoTool do stworzenia
podpisanej transakcji, ale zamiast wysyłania jej do blokchaina, ErgoTool wyświetla
transakcję na konsoli.

$ ./ergo-tool.sh send --dry-run storage/E1.json 9hHDQb26AjnJUXxcqriqY1mnhpLuUeC81C4pggtK7tupr92Ea1K 5000000
Hasło przechowywania>
Tworzenie dowodu... Ok
Ładowanie niewydanych skrzynek z adresu 9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v... Ok
Podpisywanie transakcji... 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
    }
  ]
}

Zauważ, że skrypty "ergoTree" są deserializowane i drukowane jako drzewa składniowe. Ten
format drukowania można regulować za pomocą dodatkowych opcji, aby skrypty mogły być drukowane jako
czytelny dla ludzi ErgoScript. (Jeszcze nie zaimplementowane, ale gdzieś na liście zadań.)

Jeśli wykluczymy opcję --dry-run, transakcja zostanie wysłana i uwzględniona w
blokchainie.

$ ./ergo-tool.sh send storage/E1.json 9hHDQb26AjnJUXxcqriqY1mnhpLuUeC81C4pggtK7tupr92Ea1K 5000000          
Hasło przechowywania>
Tworzenie dowodu... Ok
Ładowanie niewydanych skrzynek z adresu 9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v... Ok
Podpisywanie transakcji... Ok
Wysyłanie transakcji... Ok
Serwer zwrócił id transakcji: "c5710af17f5124a232a5ef731fdf94a493025334c2a7d5a79e9923210972b962"

Nowo utworzona transakcja zostanie rozesłana po całym blokchainie, a górnicy rozpoczną
uwzględnianie jej w nowym bloku. Gdy nowy blok z naszą transakcją zostanie wydobyty i
zaakceptowany przez sieć, nasz transfer jest potwierdzony i możemy zobaczyć go w Explorerze.

Możemy również wyświetlić skrzynki adresu odbiorcy i zobaczyć monetę, którą stworzyliśmy wśród innych
(dopóki nie zostanie wydana przez odbiorcę)

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

Uwagi dotyczące bezpieczeństwa

ErgoTool został stworzony z myślą o bezpieczeństwie i stara się jak najlepiej chronić użycie
wrażliwych informacji, takich jak frazy mnemoniczne (które nigdy nie są przechowywane trwale),
hasła (które nigdy nie są wyświetlane na ekranie) itp. Dodatkowo, tajne klucze nigdy nie są
przechowywane na lokalnym dysku w postaci niezaszyfrowanej i z pewnością nigdy nie są wysyłane nigdzie.

Podsumowanie

ErgoTool jest zaprojektowany tak, aby wyglądał i działał jak typowe narzędzie CLI:

  • które jest łatwe w użyciu i szybko uruchamiane z wiersza poleceń
  • może być skryptowalne za pomocą skryptów powłoki
  • ma wbudowaną pomoc w użyciu

Jednocześnie ErgoTool jest zaprojektowany tak, aby był łatwo rozszerzalny:

  • zaimplementowany w języku wysokiego poziomu Scala
  • ponownie wykorzystuje podstawowe biblioteki, które są używane w kliencie sieci Ergo
  • jest otwartoźródłowy i w pełni udokumentowany

Ten ostatni punkt jest szczególnie ważny, ponieważ wiele nowych poleceń można łatwo dodać do
ErgoTool, dzięki jego architekturze. Jeśli potrzebujesz konkretnej funkcji lub polecenia,
proszę zgłoś problem lub może nawet PR.

Rozszerzalność ErgoTool jest tematem następnego planowanego wpisu na blogu, bądź na bieżąco!

Źródła

  1. Strona Ergo
  2. Źródła Ergo
  3. Ergo Appkit
  4. Narzędzie Ergo

Share post

Ergo Infrastructure DAO: Decentralizacja Kręgosłupa Ekosystemu Ergo

Ergo Infrastructure DAO: Decentralizacja Kręgosłupa Ekosystemu Ergo

Misja Ergo zawsze była zakorzeniona w decentralizacji, nie tylko na warstwie konsensusu, ale w całym stosie.

Ergo Platform

13 sierpnia 2025

Mew Finance: Zabawne narzędzie DeFi dla ekosystemu Ergo

Mew Finance: Zabawne narzędzie DeFi dla ekosystemu Ergo

Mew Finance to zestaw aplikacji zdecentralizowanych na blockchainie Ergo.

Ergo Platform

12 sierpnia 2025

Lithos: Decentralizacja wydobycia z użyciem pul on-chain

Lithos: Decentralizacja wydobycia z użyciem pul on-chain

Lithos to nowy protokół zaprojektowany w celu przekształcenia sposobu działania pul wydobywczych poprzez przeniesienie ich na łańc.

Ergo Platform

24 lipca 2025

Sigma 6.0: Mądrzejszy, bardziej elastyczny Ergo

Sigma 6.0: Mądrzejszy, bardziej elastyczny Ergo

Sigma 6.0 to główna proponowana aktualizacja blockchaina Ergo.

Ergo Platform

23 lipca 2025

Kształtowanie przyszłości Rosen: Wezwanie społeczności w sprawie pięciu kluczowych propozycji skarbowych

Kształtowanie przyszłości Rosen: Wezwanie społeczności w sprawie pięciu kluczowych propozycji skarbowych

Współzałożyciel Rosen, Armeanio, złożył pięć nowych propozycji do Skarbu Rosen.

Ergo Platform

9 lipca 2025

Rozszerzony UTXO Ergo i Wzrost Sztucznej Inteligencji Ekonomicznej

Rozszerzony UTXO Ergo i Wzrost Sztucznej Inteligencji Ekonomicznej

Praktyczna Wizja dla Autonomicznych Agentów Ekonomicznych Autonomiczne agenty ekonomiczne na blockchainie Ergo wykonują użyteczną.

Ergo Platform

12 maja 2025

ErgoHACK X: Sztuczna Inteligencja na Blockchainie Ergo

ErgoHACK X: Sztuczna Inteligencja na Blockchainie Ergo

Świętowanie Dekady Zdecentralizowanej Innowacji Dołącz do 10.

Ergo Platform

10 kwietnia 2025