Kendi Ergo Cüzdanınızı Yapın: ErgoTool ile Ergo Coin'leri Yönetme
31 Aralık 2019

Giriş
ErgoTool, Ergo blockchain için bir komut satırı arayüzüdür (CLI). Kendi Ergo düğümünüzü çalıştırmadan ErgoTool'u kullanabilirsiniz. Bir düğüm çalıştırmak, Ergo blockchain ağı ile iletişim kurmanın en güvenli yoludur, ancak ErgoTool, elinizde daha temel araçlar sağlamayı amaçlamaktadır. Elbette, kendi çalışan düğümünüzle de kullanabilirsiniz.
Bu yazıda, bir mnemonik ifade oluşturmak, yerel bir gizli depolama oluşturmak ve bunu adresler arasında ERG göndermek için ErgoTool komutlarının yardımıyla basit adımları takip edeceğiz.
Başlarken
Öncelikle, kurulum talimatlarını takip ederek sistemimize ErgoTool'u kaynaklardan kurmamız gerekiyor. ErgoTool'u klonladığımız dizinde, komutları çalıştırmak için kullanacağımız ergo-tool.sh betiği bulunmaktadır. ErgoTool'un doğru bir şekilde kurulduğunu kontrol etmek için aşağıdaki komutu çalıştırın.
$ ./ergo-tool.sh help
komut adı belirtilmemiş (komutları listelemek için argüman olmadan ergo-tool'u çalıştırın)
Komut Adı: help
Kullanım Söz Dizimi: ergo-tool help <commandName>
Açıklama: bir komut için kullanım yardımını yazdırır
Doküman sayfası: https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/HelpCmd.html
Burada ne elde ettiğimize bakalım. ErgoTool, help komutu hakkında bilgi veren hata mesajını çıkartıyor. Bu, bilinen komutlardan biri belirtildiğinde ancak yanlış kullanıldığında ErgoTool'un tipik bir çıktısıdır. Mesajdan öğrenebileceğimiz gibi, help komutu, ek bir <commandName> argümanını belirtmemizi gerektiriyor. Ayrıca, her komutun, komut yürütmesi hakkında tüm detayları içeren bir API doküman sayfası vardır, bu nedenle URL burada gösterilmektedir.
Yeni Bir Mnemonik İfade Oluşturun
Mnemonik, Hiyerarşik Belirleyici Cüzdanlar spesifikasyonuna göre bir anahtar oluşturmak için kullanılan rastgele bir karakter dizisidir. Kolaylık olması açısından rastgele bir İngilizce kelime dizisi kullanılır, ancak bu zorunlu değildir. Yeni bir mnemonik ifade oluşturmak için aşağıdaki komutu çalıştırın:
$ ./ergo-tool.sh mnemonic
bird harbor wheat innocent business disease busy quick yellow trust time oil enter situate moon
Bunu bir kağıda yazın ve güvenli ve gizli bir yerde saklayın. Ek bir güvenlik önlemi olarak, keyfi bir mnemonik şifre oluşturabilirsiniz. Bu, mnemonikte ek bir kelime gibi işlev görebilir. Mnemonik şifre isteğe bağlıdır ve ek güvenlik için kullanılır. Mnemonik şifre kullanmaya karar verirseniz, bunu da yazmalı ve gizli ve muhtemelen mnemonikten farklı bir yerde saklamalısınız.
Önemli, hem mnemonik ifade hem de mnemonik şifre, gizli anahtarları geri yüklemek için gereklidir, eğer bunlardan herhangi birini kaybederseniz, anahtarınızı yeniden üretemezsiniz.
Şimdi, oluşturulan mnemonik ifadeyi kullanarak bir anahtar gizli depolama oluşturalım.
Yeni Bir Şifreli Depolama Oluşturun
Daha iyi güvenlik için, ErgoTool'un işlem imzalamak için ne mnemonik ifade ne de şifre gereklidir. Bunun yerine, harcama işlemini imzalamak için şifreli depolamadan gizli anahtar gereklidir. createStorage komutunu kullanarak bir gizli anahtar oluşturabilir ve bunu şifreli bir depolamada saklayabiliriz.
$ ./ergo-tool.sh help createStorage
Komut Adı: createStorage
Kullanım Söz Dizimi: ergo-tool createStorage [<storageDir>="storage"] [<storageFileName>="secret.json"]
Açıklama: Kullanıcı tarafından girilen mnemonik için şifreli bir depolama dosyası oluşturur
Doküman sayfası: https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/CreateStorageCmd.html
$ ./ergo-tool.sh createStorage
Mnemonik ifade girin> bird harbor wheat innocent business disease busy quick yellow trust time oil enter situate moon
Mnemonik şifre>
Mnemonik şifreyi tekrar edin>
Depolama şifresi>
Depolama şifresini tekrar edin>
Depolama Dosyası: storage/secret.json
Bir anahtar gizli anahtarı (mnemonik ifade, mnemonik şifre) çiftinden oluşturulur ve storage/secret.json dosyasında şifreli olarak saklanır. Mnemonik kendisi dosyada saklanmaz ve dosyadan geri yüklenemez, şifreleri bilseniz bile.
Doğru mnemonik şifresini girdiğinizden emin olun, daha önce seçtiğiniz ve kaydettiğiniz şifre. Mnemonik şifre isteğe bağlı olduğundan, boş bırakmak için enter tuşuna basabilirsiniz.
Eğer depolama şifresini (yani şifreleme şifresi) unutursanız, o depolama dosyasını bir daha kullanamazsınız, ancak her zaman (mnemonik ifade, mnemonik şifre) çiftinden gizli anahtarlarınızı geri yükleyebilir ve böylece yeni bir şifre ile yeni bir depolama dosyası oluşturabilirsiniz.
Depolama dosyanızı ve depolama şifrenizi gizli tutun, depolama dosyanızı ve depolama şifrenizi elde eden herkes, onu çözebilir ve gizli anahtarlara erişebilir.
Depolamadan Veri Çıkartma
Gizli depolama, anahtar gizli anahtarını içerir ve sonuç olarak, bu gizli anahtara karşılık gelen hem genel anahtarı hem de pay-to-public-key adresini hesaplamak için kullanılabilir. extractStorage komutu tam olarak bunu yapar.
$ ./ergo-tool.sh help extractStorage
Komut Adı: extractStorage
Kullanım Söz Dizimi: ergo-tool extractStorage <storage file> address|masterKey|publicKey|secretKey mainnet|testnet
Açıklama: Dosyayı okur, şifre ile açar ve verilen depolama dosyasından istenen özelliği çıkartır.
Doküman sayfası: https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/ExtractStorageCmd.html
$ ./ergo-tool.sh extractStorage storage/secret.json address mainnet
Depolama şifresi>
9iHiSAg3ko2ZGxR2vhc1Aem3tShqfzEPDAF7XK5cdtbZ3Ut2CCf
Burada komut, gizli anahtarı karşılık gelen genel anahtara dönüştürür ve ardından ana ağda pay-to-public-key adresini oluşturur.
Aynı şekilde, depolamadan genel anahtar, özel anahtar ve diğer verileri elde edebiliriz.
$ ./ergo-tool.sh extractStorage storage/secret.json secretKey mainnet
Depolama şifresi>
55dfde63c9b6b4f47683592e85ee997ba2e93507f38ba3f9c82933bcfbc677ca
$ ./ergo-tool.sh extractStorage storage/secret.json publicKey mainnet
Depolama şifresi>
03f07aecb145a85920bf6e9be80efe5f1cd1a165b45ad3aa8e5c4ca3ba50856bb8
Harcanmamış Kutuları Listeleme
ErgoTool, belirli bir adres için tüm mevcut (yani harcanmamış) kutuları listelemek için özel bir komuta sahiptir.
$ ./ergo-tool.sh listAddressBoxes 9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v
BoxId NanoERGs
4840cb6facc20b765085db0ad24768ed0c5e7afd413e8e58e597c33a993f8119 4987000000
Eğer --print-json seçeneğini belirtirsek, ErgoTool tüm kutuları JSON formatında çıkartacaktır.
$ ./ergo-tool.sh listAddressBoxes --print-json 9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v
[{"boxId":"4840cb6facc20b765085db0ad24768ed0c5e7afd413e8e58e597c33a993f8119","value":4987000000,"ergoTree":"0008cd02472963123ce32c057907c7a7268bc09f45d9ca57819d3327b9e7497d7b1cc347","creationHeight":125646,"assets":[],"additionalRegisters":{},"transactionId":"820c688f4b9d709924ba0186ee930a7df374d8852920bc769fc1f1d0b313e5ab","index":2}]
Coin Transferi
Artık, gizli anahtarımızı şifreli depolama dosyasında güvenli bir şekilde sakladığımıza göre, ErgoTool'u kullanarak coin'leri adresimizden başka bir alıcı adresine transfer edebiliriz. Bunu yapmak için komut send'dir.
./ergo-tool.sh help send
Komut Adı: send
Kullanım Söz Dizimi: ergo-tool send <storageFile> <recipientAddr> <amountToSend>
Açıklama: verilen <amountToSend> miktarını verilen <recipientAddr> adresine gönderir
verilen <storageFile> kullanarak işlemi imzalar (depolama şifresi ister)
Doküman sayfası: https://aslesarenko.github.io/ergo-tool/api/org/ergoplatform/appkit/ergotool/SendCmd.html
Depolama dosyası, gizli anahtara erişmek ve bir imza oluşturmak için gereklidir. Depolama şifresi, ErgoTool tarafından dosya içeriğini açmak ve çözmek için istenecektir. send komutu, ErgoTool'un imzalı işlemi oluşturmasını zorlayan --dry-run seçeneğini destekler, ancak bunu blockchain'e göndermek yerine, ErgoTool işlemi konsolda yazdırır.
$ ./ergo-tool.sh send --dry-run storage/E1.json 9hHDQb26AjnJUXxcqriqY1mnhpLuUeC81C4pggtK7tupr92Ea1K 5000000
Depolama şifresi>
Prover oluşturuluyor... Tamam
9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v adresinden harcanmamış kutular yükleniyor... Tamam
İşlem imzalanıyor... Tamam
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
}
]
}
Not edin ki "ergoTree" betikleri, soyut sözdizim ağaçları olarak ayrıştırılır ve yazdırılır. Bu yazdırma formatı, betiklerin insan tarafından okunabilir ErgoScript olarak yazdırılabilmesi için ek seçeneklerle düzenlenebilir. (Henüz uygulanmadı, ancak bir yerde yol haritasında.)
--dry-run seçeneğini hariç tutarsak, işlem gönderilecek ve blockchain'e dahil edilecektir.
$ ./ergo-tool.sh send storage/E1.json 9hHDQb26AjnJUXxcqriqY1mnhpLuUeC81C4pggtK7tupr92Ea1K 5000000
Depolama şifresi>
Prover oluşturuluyor... Tamam
9f4QF8AD1nQ3nJahQVkMj8hFSVVzVom77b52JU7EW71Zexg6N8v adresinden harcanmamış kutular yükleniyor... Tamam
İşlem imzalanıyor... Tamam
İşlem gönderiliyor... Tamam
Sunucu tx id'sini döndürdü: "c5710af17f5124a232a5ef731fdf94a493025334c2a7d5a79e9923210972b962"
Yeni oluşturulan işlem, blockchain genelinde yayınlanacak ve madenciler bunu yeni bir bloğa dahil etmeye başlayacak. Yeni blok, işlemimizle birlikte madencilik yapıldığında ve ağ tarafından kabul edildiğinde, transferimiz onaylanır ve Explorer'da görebiliriz.
Ayrıca alıcı adresinin kutularını listeleyebilir ve oluşturduğumuz coin'i diğerleri arasında görebiliriz (alıcı tarafından harcanana kadar).
$ ./ergo-tool.sh listAddressBoxes 9hHDQb26AjnJUXxcqriqY1mnhpLuUeC81C4pggtK7tupr92Ea1K
BoxId NanoERGs
252c5ce38fc367001ea48fa6813e6252ebc169288d9b5392c572edb55380b3cd 5000000
6df9dbf08b4859b7e280afbd0822dcf20dba5bf8e3e33b78fe278df6597276f1 2000000
d47f958b201dc7162f641f7eb055e9fa7a9cb65cc24d4447a10f86675fc58328 1000000
e050a3af38241ce444c34eb25c0ab880674fc23a0e63632633ae14f547141c37 1000000
b50ed8c2953fd33b52af816c4caa63ec5b6d236a262a5a192534695c3478da78 1000000
26d6e08027e005270b38e5c5f4a73ffdb6d65a3289efb51ac37f98ad395d887c 10000000000
Güvenlik Notları
ErgoTool, güvenlik düşünülerek oluşturulmuştur ve mnemonik ifadeler (asla kalıcı olarak saklanmaz), şifreler (asla ekranda gösterilmez) gibi hassas bilgilerin kullanımını korumak için elinden geleni yapar. Ayrıca, gizli anahtarlar asla yerel diskte şifresiz saklanmaz ve kesinlikle hiçbir yere gönderilmez.
Sonuç
ErgoTool, tipik bir CLI aracına benzemek ve hissettirmek için tasarlanmıştır:
- kullanımı kolay ve komut satırından hızlı çalıştırılabilir
- kabuk betikleri aracılığıyla scriptlenebilir
- yerleşik kullanım yardımı vardır
Aynı zamanda ErgoTool, kolayca genişletilebilir şekilde tasarlanmıştır:
- yüksek seviyeli dil olan Scala'da uygulanmıştır
- Ergo ağ istemcisinde kullanılan temel kütüphaneleri yeniden kullanır
- açık kaynaklıdır ve tamamen belgelenmiştir
Bu son nokta özellikle önemlidir çünkü birçok yeni komut, ErgoTool'un mimarisi sayesinde kolayca eklenebilir. Eğer belirli bir özellik veya komut gerekiyorsa, lütfen bir sorun açın veya belki de bir PR gönderin.
ErgoTool'un genişletilebilirliği, bir sonraki planlanan blog yazısının konusudur, takipte kalın!
Referanslar
Share post
13 Ağustos 2025
9 Temmuz 2025
12 Mayıs 2025






