HiddenBitcoin: Managemen key
(nopara73) "Saya mengembangkan privasi yang berorientasi untuk wallet Bitcoin, disebut dengan HiddenWallet. Library HiddenBitcoin adalah pengenalan dari abstraksi lain antara NBitcoin dan user interface."
Sebuah wallet Bitcoin mempunyai fungsi tiga key utama, dan pada studi kasus ini, akan membahas seputar hal tersebut:
Mengamankan penyimpanan key, dan mengelola akses.
Memonitor key, dan key lain pada Blockchain.
Membangun transaksi dan mempublikasikan transaksi tersebut.
Dalam pembelajaran ini, saya akan berusaha mengatasi fungsi penyimpanan key. Jika anda ingin memeriksa kode secara lebih luas dan detail, anda dapat mencari solusi itu di GitHub. Jika anda hanya ingin tahu saja bagaimana cara cepat untuk mengatur itu dan menggunakannya, anda dapat menemukan tutorial high level saya di CodeProject.
High level yang bagaimana sebenarnya? Menurut pendapat saya, pengembang GUI, desainer tidak harus banyak melakukan kesalahan. Mereka tidak harus tahu tentang input dan output dan juga scriptpubkeys. Mereka harus tetap berkisar pada addresses, privatekeys dan level wallet. NBitcoin akan dapat memudahkan anda.
Keputusan saat mendesain Key storage
Sekarang adalah waktu yang tepat untuk memberikan anda template yang sesuai dengan keputusan anda untuk membuat sebuah ruang penyimpanan key (key storage), dan hal apa yang harus tetap anda ingat saat membangunnya.
Hanya menggunakan satu key
Ini hanya sebagai sebuah jalan pintas saja. Tidak terlalu banyak hal yang bisa menjelaskan mengapa cara ini perlu dilakukan. Meski demikian, mungkin saja hal ini akan cocok untuk kebutuhan anda. Untuk sebuah contoh saja, ini adalah sebuah ilustrasi buruk dari sebuah wallet Bitcoin yang pernah saya buat, yang hanya menggunakan satu key saja. Saya menyerahkan keputusan kepada anda dengan segala konsekuensinya.
Wallet JBOK
Wallet ini adalah singkatan dari Just a Bunch Of Keys. Pada saat menuliskan ini, referensi dari klien menggunakan metode ini untuk dapat menyimpan key. Masalah dengan wallet ini, pengguna harus mencadangkan (backup) wallet secara periodik. Jika anda ingin dapat mengimport key, dropping key, atau juga merubah password, anda mungkin akan membutuhkan beberapa kombinasi dari wallet ini dan wallet deterministik. Saya memutuskan untuk tidak menggunakan wallet ini karena HiddenWallet saya sedang mencoba untuk berinovasi terhadap privasi, dan saya mempunyai struktur wallet yang lebih bagus tanpa menggunakan wallet ini.
BIP38 (Bagian 2) - Generator key dari Untrusted third party
Untuk mengulangi saja: Ide ini untuk dapat generate PassphraseCode kepada key generator. Sehingga dengan PassphraseCode, dapat digunakan untuk generate key yang terenkripsi atas nama anda, tanpa harus mengetahui password anda, maupun private key anda. HiddenWallet adalah sebuah wallet desktop (mungkin tidak akan berubah untuk sementara waktu). Oleh karena itu saya tidak perlu menggunakan pihak ketiga untuk dapat melakukan generate key maupun untuk menyimpan key. Saya memutuskan untuk tidak menerapkan dulu hal ini.
Wallet SHD
Struktur wallet ini yang telah saya terapkan. Dalam benak saya, wallet itu adalah singkatan dari Stealth and Hierarchical Deterministic wallet. Dan itu manjadi cara yang bagus untuk menjelaskan apa yang coba saya kembangkan. Sebelum masuk dan menjelaskan tentang pengkodeannya, saya ingin memberikan catatan terlebih dahulu, bahwa saya hanya mengimplementasikan bagian Stealth saja. Karena mudah seperti menggapai sebuah buah di pohon yang rendah. Meski begitu, saya tidak begitu yakin apakah stealth addresses akan banyak digunakan di masa mendatang Bitcoin.
Pada sebuah address stealth, akan nampak seperti dibawah ini: waPXAvDCDGv8sXYRY6XDEymDGscYeepXBV5tgSDF1JHn61rzNk4EXTuBfx22J2W9rPAszXFmPXwD2m52psYhXQe5Yu1cG26A7hkPxs
Black box
Saya menerapkan sebuah class, dan meyebutnya dengan Safe. Menggunakan class tersebut sebagai sebuah intuitif dari black box.
Network tersebut diatas bukanlah NBitcoin.Network, developer GUI tidak harus tahu apakah itu menggunakan NBitcoin. Anda mempunyai banyak pilihan network yang bisa digunakan di NBitcoin, namun HiddenBitcoin tidak bisa menangani semuanya. Pada saat ini, yang bisa support hanya MainNet
dan TestNet
.
Network (jaringan) adalah sebuah enum, dapat ditemukan dibawah HiddenBitcoin.DataClasses namespace.
Anda juga dapat me-load atau recover class safe:
Anda juga bisa mendapat beberapa key dari safe sebagai string:
Catatan: Idealnya seed keys tidak pernah digunakan. Ini adalah praktek yang lebih baik, jika anda mulai beriterasi melalui key, dengan menggunakan safe.
White box
Safe.Create
safe.SetSeed
menciptakan sebuah mnemonic dan mengatur _seedPrivateKey
. Akhirnya dapat mengembalikan mnemonic, jadi dapat memberikan class tersebut kembali kepada pengguna.
safe.Save
Saves disini adalah sebuah file wallet, pertanyaannya adalah apa yang kita simpan kedalam file ini?
File wallet ini berupa format JSON. Kita bisa mendapatkan kode rantai dan private key dari sebuah ExtKey. Ini bisa bekerja dan begitu juga pada cara yang lain.
Dan pada bagian akhir kita mengenkripsi private key.
Safe.Load
Mari kita balikkan dengan proses penyimpanan.
Berikut apa yang terjadi pada constructor Safe:
SetNetwork
Di dalam class kita ingin agar bisa bekerja diNBitcoin.Network
. Jadi mari kita membuat sebuah private member.
Safe.Recover
Agar bisa bekerja, maka kita perlu memperluas constructor:
Getters
Berikut bagaimana saya bisa memperoleh key. Dalam hal ini, cukup tidak masuk akal jika menggunakan terlalu banyak keypath yang rumit:
Stealth
Last updated