Class: Bitcoin::Wallet::DB
Constant Summary collapse
- KEY_PREFIX =
{ account: 'a', # key: account index, value: Account raw data. master: 'm', # value: wallet seed. version: 'v', # value: wallet version }
Instance Attribute Summary collapse
-
#level_db ⇒ Object
readonly
Returns the value of attribute level_db.
-
#master_key ⇒ Object
get master_key.
Instance Method Summary collapse
-
#accounts ⇒ Object
get accounts raw data.
-
#close ⇒ Object
close database.
-
#initialize(path = "#{Bitcoin.base_dir}/db/wallet") ⇒ DB
constructor
A new instance of DB.
-
#register_master_key(master) ⇒ Object
save seed.
-
#registered_master? ⇒ Boolean
whether master key registered.
- #save_account(account) ⇒ Object
-
#version ⇒ Object
wallet version.
Constructor Details
Instance Attribute Details
#level_db ⇒ Object (readonly)
Returns the value of attribute level_db.
12 13 14 |
# File 'lib/bitcoin/wallet/db.rb', line 12 def level_db @level_db end |
#master_key ⇒ Object
get master_key
41 42 43 |
# File 'lib/bitcoin/wallet/db.rb', line 41 def master_key @master_key end |
Instance Method Details
#accounts ⇒ Object
get accounts raw data.
26 27 28 29 30 |
# File 'lib/bitcoin/wallet/db.rb', line 26 def accounts from = KEY_PREFIX[:account] + '00000000' to = KEY_PREFIX[:account] + 'ffffffff' level_db.each(from: from, to: to).map { |k, v| v} end |
#close ⇒ Object
close database
21 22 23 |
# File 'lib/bitcoin/wallet/db.rb', line 21 def close level_db.close end |
#register_master_key(master) ⇒ Object
save seed
47 48 49 50 51 |
# File 'lib/bitcoin/wallet/db.rb', line 47 def register_master_key(master) level_db.put(KEY_PREFIX[:master], master.to_payload) level_db.put(KEY_PREFIX[:version], Bitcoin::Wallet::Base::VERSION.to_s) @master_key = master end |
#registered_master? ⇒ Boolean
whether master key registered.
54 55 56 |
# File 'lib/bitcoin/wallet/db.rb', line 54 def registered_master? !level_db.get(KEY_PREFIX[:master]).nil? end |
#save_account(account) ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/bitcoin/wallet/db.rb', line 32 def save_account(account) level_db.batch do id = [account.purpose, account.index].pack('I*').bth key = KEY_PREFIX[:account] + id level_db.put(key, account.to_payload) end end |
#version ⇒ Object
wallet version
59 60 61 |
# File 'lib/bitcoin/wallet/db.rb', line 59 def version level_db.get(KEY_PREFIX[:version]).to_i end |