Buat Dompet Ergo Anda Sendiri: Mengelola Koin Ergo dengan ErgoTool

This page is machine-translated.
Alexander Slesarenko

31 Desember 2019

Pendahuluan

ErgoTool adalah antarmuka baris perintah (CLI) untuk
blockchain Ergo. Anda dapat menggunakan ErgoTool tanpa menjalankan
node Ergo Anda sendiri. Meskipun menjalankan node adalah cara yang paling aman untuk berkomunikasi dengan
jaringan blockchain Ergo, ErgoTool bertujuan untuk menyediakan lebih banyak alat dasar yang dapat
Anda gunakan. Tentu saja, Anda masih dapat menggunakannya dengan node yang sedang berjalan.

Dalam pos ini, kita akan melalui langkah-langkah sederhana untuk menghasilkan frasa mnemonik, membuat
penyimpanan rahasia lokal, dan menggunakannya untuk mengirim ERG antara alamat, semua dengan bantuan
perintah ErgoTool.

Memulai

Pertama-tama, kita perlu menginstal ErgoTool di sistem kita dari sumber dengan mengikuti
petunjuk instalasi. Di direktori tempat kita
mengkloning ErgoTool terdapat skrip ergo-tool.sh yang akan kita gunakan untuk menjalankan perintah.
Jalankan perintah berikut untuk memeriksa apakah ErgoTool terinstal dengan benar.

$ ./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

Mari kita lihat apa yang kita dapatkan di sini. ErgoTool mengeluarkan pesan kesalahan dengan informasi
mengenai perintah help. Ini adalah keluaran tipikal dari ErgoTool ketika salah satu perintah yang
dikenal ditentukan, tetapi digunakan dengan tidak benar. Seperti yang dapat kita pelajari dari pesan,
perintah help mengharuskan kita untuk menentukan argumen tambahan <commandName>. Juga, setiap
perintah memiliki halaman dokumen API dengan semua detail tentang eksekusi perintah, jadi url-nya ditampilkan di sini.

Buat Frasa Mnemonik Baru

Mnemonik adalah urutan karakter acak yang digunakan untuk menghasilkan kunci utama
sesuai dengan spesifikasi Dompet Hierarkis Deterministik.
Untuk kenyamanan, urutan acak kata-kata bahasa Inggris digunakan, tetapi ini tidak diwajibkan.
Jalankan perintah berikut untuk menghasilkan frasa mnemonik baru:

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

Tulis di atas kertas dan simpan di tempat yang aman dan rahasia.
Sebagai langkah keamanan tambahan, Anda dapat membuat kata sandi mnemonik sembarang.
Dalam beberapa hal, ini dapat berfungsi seperti kata non-kosakata tambahan dalam mnemonik.
Kata sandi mnemonik bersifat opsional dan digunakan untuk keamanan tambahan.
Jika Anda memutuskan untuk menggunakan kata sandi mnemonik, Anda juga harus menuliskannya dan menyimpannya di tempat yang rahasia dan
mungkin berbeda dari tempat mnemonik.

Penting, baik frasa mnemonik maupun kata sandi mnemonik diperlukan untuk memulihkan kunci rahasia,
jika Anda kehilangan salah satunya, maka Anda tidak akan dapat menghasilkan kembali kunci utama Anda.

Selanjutnya, mari kita gunakan mnemonik yang dihasilkan untuk membuat penyimpanan dengan kunci rahasia utama.

Buat Penyimpanan Terenkripsi Baru

Untuk keamanan yang lebih baik, baik frasa mnemonik maupun kata sandi tidak diperlukan oleh ErgoTool untuk
melakukan penandatanganan transaksi. Sebagai gantinya, kunci rahasia dari penyimpanan terenkripsi diperlukan untuk
menandatangani transaksi pengeluaran. Kita dapat menghasilkan kunci rahasia dan menyimpannya di
penyimpanan terenkripsi menggunakan perintah 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

Kunci rahasia utama dihasilkan dari pasangan (frasa mnemonik, kata sandi mnemonik) dan
disimpan terenkripsi di file storage/secret.json. Mnemonik itu sendiri tidak disimpan di dalam
file dan tidak ada cara untuk memulihkannya dari file, bahkan jika Anda mengetahui kata sandi.

Silakan berhati-hati untuk memasukkan kata sandi mnemonik yang benar, yang Anda pilih dan simpan sebelumnya.
Karena kata sandi mnemonik bersifat opsional, Anda dapat membiarkannya kosong dengan menekan enter.

Jika Anda lupa kata sandi penyimpanan (alias kata sandi enkripsi), Anda tidak akan dapat menggunakan
file penyimpanan itu lagi, namun, Anda selalu dapat memulihkan kunci rahasia Anda dari pasangan (frasa
mnemonik, kata sandi mnemonik) dan dengan demikian membuat file penyimpanan baru dengan kata sandi baru.

Simpan file penyimpanan dan kata sandi penyimpanan Anda dengan rahasia, siapa pun yang mendapatkan baik file penyimpanan
maupun kata sandi penyimpanan Anda akan dapat mendekripsinya dan mengakses kunci rahasia.

Mengekstrak Data Dari Penyimpanan

Penyimpanan rahasia berisi kunci rahasia utama dan sebagai hasilnya dapat digunakan untuk menghitung baik
kunci publik maupun alamat pay-to-public-key yang sesuai dengan kunci rahasia tersebut. Perintah
extractStorage melakukan hal itu.

$ ./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

Di sini perintah mengubah kunci rahasia menjadi kunci publik yang sesuai dan kemudian membuat
alamat pay-to-public-key di mainnet.

Dengan cara yang sama kita dapat memperoleh kunci publik, kunci pribadi, dan data lainnya dari penyimpanan.

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

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

Mendaftar Kotak yang Belum Dibelanjakan

ErgoTool memiliki perintah khusus untuk mendaftar semua kotak yang tersedia (alias belum dibelanjakan) untuk alamat tertentu.

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

jika kita menentukan opsi --print-json, maka ErgoTool akan mengeluarkan semua kotak dalam format json

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

Transfer Koin

Sekarang, dengan kunci rahasia yang disimpan dengan aman di file penyimpanan terenkripsi, kita dapat menggunakan ErgoTool untuk
mentransfer koin dari alamat kita ke alamat penerima lainnya. Perintah untuk melakukan itu adalah
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

File penyimpanan diperlukan untuk mengakses kunci rahasia dan menghasilkan tanda tangan. Kata sandi penyimpanan akan diminta oleh ErgoTool untuk membuka kunci dan mendekripsi konten file.
Perintah send mendukung opsi --dry-run yang memaksa ErgoTool untuk membuat
transaksi yang ditandatangani, tetapi alih-alih mengirimkannya ke blockchain, ErgoTool mencetak transaksi di konsol.

$ ./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
    }
  ]
}

Perhatikan bahwa skrip "ergoTree" dide-serialisasi dan dicetak sebagai pohon sintaksis abstrak. Format pencetakan ini dapat diatur dengan opsi tambahan sehingga skrip dapat dicetak sebagai ErgoScript yang dapat dibaca manusia. (Belum diimplementasikan, tetapi ada di peta jalan.)

Jika kita mengecualikan opsi --dry-run, transaksi akan dikirim dan dimasukkan ke dalam
blockchain.

$ ./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"

Transaksi yang baru dibuat akan disiarkan ke seluruh blockchain dan penambang mulai
memasukkannya ke dalam blok baru. Setelah blok baru dengan transaksi kita ditambang dan
diterima oleh jaringan, transfer kita dikonfirmasi dan kita dapat melihatnya di Explorer.

Kita juga dapat mendaftar kotak dari alamat penerima dan melihat koin yang kita buat di antara yang lain
(sampai koin tersebut dibelanjakan oleh penerima)

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

Catatan Keamanan

ErgoTool dibuat dengan keamanan dalam pikiran dan berusaha sebaik mungkin untuk melindungi penggunaan
informasi sensitif seperti frasa mnemonik (yang tidak pernah disimpan secara permanen),
kata sandi (yang tidak pernah ditampilkan di layar) dll. Selain itu, kunci rahasia tidak pernah
disimpan di disk lokal tanpa enkripsi dan tentu saja tidak pernah dikirim ke mana pun.

Kesimpulan

ErgoTool dirancang untuk terlihat dan terasa seperti utilitas CLI tipikal:

  • yang mudah digunakan dan cepat dijalankan dari baris perintah
  • dapat diprogram melalui skrip shell
  • memiliki bantuan penggunaan bawaan

Pada saat yang sama, ErgoTool dirancang untuk mudah diperluas:

  • diimplementasikan dalam bahasa tingkat tinggi Scala
  • menggunakan kembali pustaka inti yang digunakan dalam klien jaringan Ergo
  • sumber terbuka dan sepenuhnya didokumentasikan

Poin terakhir ini sangat penting karena banyak perintah baru dapat dengan mudah ditambahkan ke
ErgoTool, berkat arsitekturnya. Jika Anda memerlukan fitur atau perintah tertentu,
harap ajukan masalah atau bahkan PR.

Kemudahan perluasan ErgoTool adalah subjek dari pos blog yang direncanakan berikutnya, tetap disini!

Referensi

  1. Situs Ergo
  2. Sumber Ergo
  3. Ergo Appkit
  4. Ergo Tool

Share post

Ergo Infrastructure DAO: Mendekentralisasi Tulang Punggung Ekosistem Ergo

Ergo Infrastructure DAO: Mendekentralisasi Tulang Punggung Ekosistem Ergo

Misi Ergo selalu berakar pada desentralisasi, tidak hanya di lapisan konsensus, tetapi di seluruh tumpukan.

Ergo Platform

13 Agustus 2025

Mew Finance: Alat DeFi yang Menyenangkan untuk Ekosistem Ergo

Mew Finance: Alat DeFi yang Menyenangkan untuk Ekosistem Ergo

Mew Finance adalah rangkaian aplikasi terdesentralisasi di Blockchain Ergo.

Ergo Platform

12 Agustus 2025

Lithos: Mendekentralisasi Penambangan dengan Kolam On-Chain

Lithos: Mendekentralisasi Penambangan dengan Kolam On-Chain

Lithos adalah protokol baru yang dirancang untuk merombak cara kerja kolam penambangan dengan memindahkannya ke on-chain, memberik.

Ergo Platform

24 Juli 2025

Sigma 6.0: Ergo yang Lebih Cerdas dan Fleksibel

Sigma 6.0: Ergo yang Lebih Cerdas dan Fleksibel

Sigma 6.0 adalah peningkatan besar yang diusulkan untuk blockchain Ergo.

Ergo Platform

23 Juli 2025

Membentuk Masa Depan Rosen: Panggilan Komunitas tentang Lima Proposal Kunci Perbendaharaan

Membentuk Masa Depan Rosen: Panggilan Komunitas tentang Lima Proposal Kunci Perbendaharaan

Pendiri bersama Rosen, Armeanio, telah mengajukan lima proposal baru ke Perbendaharaan Rosen.

Ergo Platform

9 Juli 2025

UTXO Diperluas Ergo dan Kebangkitan Kecerdasan Ekonomi Buatan

UTXO Diperluas Ergo dan Kebangkitan Kecerdasan Ekonomi Buatan

Visi Praktis untuk Agen Ekonomi Otonom Agen ekonomi otonom di blockchain Ergo melakukan pekerjaan berguna dalam ekonomi digital y.

Ergo Platform

12 Mei 2025

ErgoHACK X: Kecerdasan Buatan di Blockchain Ergo

ErgoHACK X: Kecerdasan Buatan di Blockchain Ergo

Merayakan Satu Dekade Inovasi Terdesentralisasi Bergabunglah dengan ulang tahun ke-10 ErgoHACK dan jadilah yang terdepan dalam rev.

Ergo Platform

10 April 2025