Buat Dompet Ergo Anda Sendiri: Mengelola Koin Ergo dengan ErgoTool
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
Share post
13 Agustus 2025
9 Juli 2025






