Class: ItsyBtc::Wallet
- Inherits:
-
Object
show all
- Defined in:
- lib/itsy-btc/wallet.rb
Defined Under Namespace
Classes: DuplicateAddressError, WalletError, WalletReadError
Constant Summary
collapse
- ALGORITHM =
"aes-256-cbc"
- PBKDF2_ITERATIONS =
4096
- SALT_LEN =
8
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(path) ⇒ Wallet
Returns a new instance of Wallet.
15
16
17
18
|
# File 'lib/itsy-btc/wallet.rb', line 15
def initialize(path)
@path = path
@passphrase = nil
end
|
Instance Attribute Details
#path ⇒ Object
Returns the value of attribute path.
13
14
15
|
# File 'lib/itsy-btc/wallet.rb', line 13
def path
@path
end
|
Instance Method Details
#add(base58, comment = "") ⇒ Object
25
26
27
28
29
30
31
32
33
34
|
# File 'lib/itsy-btc/wallet.rb', line 25
def add(base58, = "")
key = Bitcoin::Key.from_base58(base58)
data = read
raise DuplicateAddressError if data[:entries].any? { |e| e[:address] == key.addr }
data[:entries] << { address: key.addr, comment: }
keys = decrypt_keys(data[:keys])
keys << key.to_base58
data[:keys] = encrypt_keys(keys)
write(data)
end
|
#addresses_starting_with(beginning) ⇒ Object
74
75
76
|
# File 'lib/itsy-btc/wallet.rb', line 74
def addresses_starting_with(beginning)
entries.select { |e| e.address.start_with? beginning }
end
|
#change_passphrase(new_passphrase) ⇒ Object
59
60
61
62
63
64
65
|
# File 'lib/itsy-btc/wallet.rb', line 59
def change_passphrase(new_passphrase)
data = read
keys = decrypt_keys(data[:keys])
@passphrase = new_passphrase
data[:keys] = encrypt_keys(keys)
write(data)
end
|
#create(passphrase) ⇒ Object
20
21
22
23
|
# File 'lib/itsy-btc/wallet.rb', line 20
def create(passphrase)
@passphrase = passphrase
write({entries: [], keys: encrypt_keys([])})
end
|
#entries ⇒ Object
84
85
86
87
88
89
90
91
|
# File 'lib/itsy-btc/wallet.rb', line 84
def entries
read[:entries].inject([]) do |list, entry|
e = WalletEntry.new
e.address = entry[:address]
e. = entry[:comment]
list << e
end
end
|
#entries_with_keys ⇒ Object
93
94
95
96
97
98
99
100
101
102
103
|
# File 'lib/itsy-btc/wallet.rb', line 93
def entries_with_keys
data = read
keys = decrypt_keys(data[:keys])
data[:entries].inject([]) do |list, entry|
e = WalletEntry.new
e.address = entry[:address]
e. = entry[:comment]
e.key = keys.shift
list << e
end
end
|
#key_for_address(address) ⇒ Object
78
79
80
81
82
|
# File 'lib/itsy-btc/wallet.rb', line 78
def key_for_address(address)
if entry = entries_with_keys.find { |e| e.address == address }
entry.key
end
end
|
#remove(address) ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/itsy-btc/wallet.rb', line 36
def remove(address)
data = read
keys = decrypt_keys(data[:keys])
entry_index = data[:entries].index { |e| e[:address] == address }
if entry_index
data[:entries].delete_at(entry_index)
keys.delete_at(entry_index)
data[:keys] = encrypt_keys(keys)
write(data)
true
else
false
end
end
|
67
68
69
70
71
72
|
# File 'lib/itsy-btc/wallet.rb', line 67
def (address, )
data = read
entry_index = data[:entries].index { |e| e[:address] == address }
data[:entries][entry_index][:comment] =
write(data)
end
|
#verify_passphrase(passphrase) ⇒ Object
53
54
55
56
57
|
# File 'lib/itsy-btc/wallet.rb', line 53
def verify_passphrase(passphrase)
@passphrase = passphrase
decrypt_keys(read[:keys])
nil
end
|