nanook 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +2 -2
- data/lib/nanook.rb +1 -0
- data/lib/nanook/account.rb +14 -9
- data/lib/nanook/version.rb +1 -1
- data/lib/nanook/wallet.rb +23 -42
- data/lib/nanook/wallet_account.rb +93 -23
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e1c2a7e556469efac09a609f78e8f3a4e0533a89
|
|
4
|
+
data.tar.gz: 12d86898565f21e0c483c891be2b36f1c838216e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 47b9839217c59af70980fb20b1f8cefe716654170d15c908dc25f24bcba7ba34ef8b9bc5dc0b50912b447e6a779d022dbc264b2a469219c383fae754d8828843
|
|
7
|
+
data.tar.gz: 94d4e68c2a9a8debbd06c48b98e3b30d8ec2fac6d567e5c40dba50044c82cd894b11051b9b7df32ae818dbc830b1a27b2826b0a5267e959f415dd9e90c2069bb
|
data/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|
5
5
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## 2.1.0
|
|
8
|
+
|
|
9
|
+
- Payment methods check the account id of the recipient is valid, raises ArgumentError if not.
|
|
10
|
+
|
|
7
11
|
## 2.0.0
|
|
8
12
|
|
|
9
13
|
### Added
|
data/README.md
CHANGED
|
@@ -11,7 +11,7 @@ This is a Ruby library for managing a [nano currency](https://nano.org/) node, i
|
|
|
11
11
|
Add this line to your application's Gemfile:
|
|
12
12
|
|
|
13
13
|
```ruby
|
|
14
|
-
gem 'nanook', "~> 2.
|
|
14
|
+
gem 'nanook', "~> 2.1"
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
And then execute:
|
|
@@ -120,7 +120,7 @@ wallet.receive(block_id, into: account_id)
|
|
|
120
120
|
|
|
121
121
|
## All commands
|
|
122
122
|
|
|
123
|
-
Below is a quick reference list of commands. See the [full Nanook documentation](https://lukes.github.io/nanook/2.0.0/) for a searchable detailed description of every class and method, what the arguments mean, and example responses (Tip:
|
|
123
|
+
Below is a quick reference list of commands. See the [full Nanook documentation](https://lukes.github.io/nanook/2.0.0/) for a searchable detailed description of every class and method, what the arguments mean, and example responses (Tip: the classes are listed under the "**Nanook** < Object" item in the sidebar).
|
|
124
124
|
|
|
125
125
|
### Wallets
|
|
126
126
|
|
data/lib/nanook.rb
CHANGED
data/lib/nanook/account.rb
CHANGED
|
@@ -133,20 +133,25 @@ class Nanook
|
|
|
133
133
|
|
|
134
134
|
# Returns a Hash containing the account's balance.
|
|
135
135
|
#
|
|
136
|
-
# ==== Example
|
|
137
|
-
#
|
|
138
|
-
#
|
|
139
|
-
#
|
|
140
|
-
#
|
|
136
|
+
# ==== Example:
|
|
137
|
+
#
|
|
138
|
+
# account.balance
|
|
139
|
+
#
|
|
140
|
+
# # =>
|
|
141
|
+
# # {
|
|
142
|
+
# # balance=>2, # Account balance
|
|
143
|
+
# # pending=>1.1 # Amount pending and not yet received by the account
|
|
144
|
+
# # }
|
|
141
145
|
#
|
|
142
146
|
# ==== Example balance returned in raw:
|
|
143
147
|
#
|
|
144
148
|
# account.balance(unit: :raw)
|
|
145
149
|
#
|
|
146
|
-
#
|
|
147
|
-
#
|
|
148
|
-
#
|
|
149
|
-
#
|
|
150
|
+
# # =>
|
|
151
|
+
# # {
|
|
152
|
+
# # balance: 2000000000000000000000000000000,
|
|
153
|
+
# # pending: 1100000000000000000000000000000
|
|
154
|
+
# # }
|
|
150
155
|
#
|
|
151
156
|
# @param unit [Symbol] default is {Nanook.default_unit}.
|
|
152
157
|
# Must be one of {Nanook::UNITS}.
|
data/lib/nanook/version.rb
CHANGED
data/lib/nanook/wallet.rb
CHANGED
|
@@ -207,32 +207,20 @@ class Nanook
|
|
|
207
207
|
!response.empty? && response[:exists] == 1
|
|
208
208
|
end
|
|
209
209
|
|
|
210
|
+
# @return [String]
|
|
210
211
|
def id
|
|
211
212
|
@wallet
|
|
212
213
|
end
|
|
213
214
|
alias_method :seed, :id
|
|
214
215
|
|
|
216
|
+
# @return [String]
|
|
215
217
|
def inspect
|
|
216
218
|
"#{self.class.name}(id: \"#{id}\", object_id: \"#{"0x00%x" % (object_id << 1)}\")"
|
|
217
219
|
end
|
|
218
220
|
|
|
219
221
|
# Make a payment from an account in your wallet to another account
|
|
220
|
-
# on the nano network. Returns a <i>send</i> block
|
|
221
|
-
# or
|
|
222
|
-
#
|
|
223
|
-
# ==== Arguments
|
|
224
|
-
#
|
|
225
|
-
# [+from:+] String account id of an account in your wallet
|
|
226
|
-
# [+to:+] String account id of the recipient of your payment
|
|
227
|
-
# [+amount:+] Can be either an Integer or Float.
|
|
228
|
-
# [+unit:+] Symbol (default is +:nano+). Represents the unit that +amount+ is in.
|
|
229
|
-
# Must be either +:nano+ or +:raw+. (Note: this method
|
|
230
|
-
# interprets +:nano+ as NANO, which is technically Mnano
|
|
231
|
-
# See {What are Nano's Units}[https://nano.org/en/faq#what-are-nano-units-])
|
|
232
|
-
# [+id:+] String. Must be unique per payment. It serves an important
|
|
233
|
-
# purpose; it allows you to make the same call multiple
|
|
234
|
-
# times with the same +id+ and be reassured that you will
|
|
235
|
-
# only ever send that nano payment once.
|
|
222
|
+
# on the nano network. Returns a <i>send</i> block id
|
|
223
|
+
# if successful, or a {Nanook::Error} if unsuccessful.
|
|
236
224
|
#
|
|
237
225
|
# Note, there may be a delay in receiving a response due to Proof of Work being done. From the {Nano RPC}[https://github.com/nanocurrency/raiblocks/wiki/RPC-protocol#account-create]:
|
|
238
226
|
#
|
|
@@ -240,15 +228,17 @@ class Nanook
|
|
|
240
228
|
#
|
|
241
229
|
# ==== Examples
|
|
242
230
|
#
|
|
243
|
-
# wallet.pay(from: "xrb_...", to: "xrb_...", amount: 1.1, id: "myUniqueId123")
|
|
244
|
-
# wallet.pay(from: "xrb_...", to: "xrb_...", amount: 54000000000000, unit: :raw, id: "myUniqueId123")
|
|
231
|
+
# wallet.pay(from: "xrb_...", to: "xrb_...", amount: 1.1, id: "myUniqueId123") # => "9AE2311..."
|
|
232
|
+
# wallet.pay(from: "xrb_...", to: "xrb_...", amount: 54000000000000, unit: :raw, id: "myUniqueId123") # => "9AE2311..."
|
|
245
233
|
#
|
|
246
|
-
# ====
|
|
247
|
-
# "718CC2121C3E641059BC1C2CFC45666C99E8AE922F7A807B7D07B62C995D79E2"
|
|
248
|
-
#
|
|
249
|
-
# Or:
|
|
234
|
+
# ==== Arguments
|
|
250
235
|
#
|
|
251
|
-
#
|
|
236
|
+
# @param from [String] account id of an account in your wallet
|
|
237
|
+
# @param to (see Nanook::WalletAccount#pay)
|
|
238
|
+
# @param amount (see Nanook::WalletAccount#pay)
|
|
239
|
+
# @param unit (see Nanook::Account#balance)
|
|
240
|
+
# @params id (see Nanook::WalletAccount#pay)
|
|
241
|
+
# @return (see Nanook::WalletAccount#pay)
|
|
252
242
|
def pay(from:, to:, amount:, unit: Nanook.default_unit, id:)
|
|
253
243
|
wallet_required!
|
|
254
244
|
validate_wallet_contains_account!(from)
|
|
@@ -342,31 +332,22 @@ class Nanook
|
|
|
342
332
|
# When called with no +block+ argument, the latest pending payment
|
|
343
333
|
# for the account will be received.
|
|
344
334
|
#
|
|
345
|
-
# Returns a <i>receive</i> block hash
|
|
346
|
-
# or +false+ if there were no pending
|
|
335
|
+
# Returns a <i>receive</i> block hash
|
|
336
|
+
# if a receive was successful, or +false+ if there were no pending
|
|
337
|
+
# payments to receive.
|
|
347
338
|
#
|
|
348
|
-
# You can
|
|
339
|
+
# You can receive a specific pending block if you know it by
|
|
349
340
|
# passing the block has in as an argument.
|
|
350
341
|
#
|
|
351
|
-
# ==== Arguments
|
|
352
|
-
#
|
|
353
|
-
# [+block+] Optional block hash of pending payment. If not provided,
|
|
354
|
-
# the latest pending payment will be received
|
|
355
|
-
# [+into:+] String account id of account in your wallet to receive the
|
|
356
|
-
# payment into
|
|
357
|
-
#
|
|
358
342
|
# ==== Examples
|
|
359
343
|
#
|
|
360
|
-
# wallet.receive(into: "xrb...")
|
|
361
|
-
# wallet.receive("718CC21...", into: "xrb...")
|
|
362
|
-
#
|
|
363
|
-
# ==== Example responses
|
|
364
|
-
#
|
|
365
|
-
# "718CC2121C3E641059BC1C2CFC45666C99E8AE922F7A807B7D07B62C995D79E2"
|
|
366
|
-
#
|
|
367
|
-
# Or:
|
|
344
|
+
# wallet.receive(into: "xrb...") # => "9AE2311..."
|
|
345
|
+
# wallet.receive("718CC21...", into: "xrb...") # => "9AE2311..."
|
|
368
346
|
#
|
|
369
|
-
#
|
|
347
|
+
# @param block (see Nanook::WalletAccount#receive)
|
|
348
|
+
# @param into [String] account id of account in your wallet to receive the
|
|
349
|
+
# payment into
|
|
350
|
+
# @return (see Nanook::WalletAccount#receive)
|
|
370
351
|
def receive(block=nil, into:)
|
|
371
352
|
wallet_required!
|
|
372
353
|
validate_wallet_contains_account!(into)
|
|
@@ -1,6 +1,33 @@
|
|
|
1
1
|
class Nanook
|
|
2
2
|
class WalletAccount
|
|
3
3
|
|
|
4
|
+
extend Forwardable
|
|
5
|
+
# @!method balance(unit: Nanook.default_unit)
|
|
6
|
+
# (see Nanook::Account#balance)
|
|
7
|
+
# @!method delegators
|
|
8
|
+
# (see Nanook::Account#delegators)
|
|
9
|
+
# @!method exists?
|
|
10
|
+
# (see Nanook::Account#exists?)
|
|
11
|
+
# @!method history(limit: 1000, unit: Nanook.default_unit)
|
|
12
|
+
# (see Nanook::Account#history)
|
|
13
|
+
# @!method id
|
|
14
|
+
# (see Nanook::Account#id)
|
|
15
|
+
# @!method info((detailed: false, unit: Nanook.default_unit)
|
|
16
|
+
# (see Nanook::Account#info)
|
|
17
|
+
# @!method last_modified_at
|
|
18
|
+
# (see Nanook::Account#last_modified_at)
|
|
19
|
+
# @!method ledger(limit: 1)
|
|
20
|
+
# (see Nanook::Account#ledger)
|
|
21
|
+
# @!method pending(limit: 1000, detailed: false, unit: Nanook.default_unit)
|
|
22
|
+
# (see Nanook::Account#pending)
|
|
23
|
+
# @!method public_key
|
|
24
|
+
# (see Nanook::Account#public_key)
|
|
25
|
+
# @!method representative
|
|
26
|
+
# (see Nanook::Account#representative)
|
|
27
|
+
# @!method weight
|
|
28
|
+
# (see Nanook::Account#weight)
|
|
29
|
+
def_delegators :@nanook_account_instance, :balance, :delegators, :exists?, :history, :id, :info, :last_modified_at, :ledger, :pending, :public_key, :representative, :weight
|
|
30
|
+
|
|
4
31
|
def initialize(rpc, wallet, account)
|
|
5
32
|
@rpc = rpc
|
|
6
33
|
@wallet = wallet
|
|
@@ -20,26 +47,27 @@ class Nanook
|
|
|
20
47
|
end
|
|
21
48
|
end
|
|
22
49
|
|
|
50
|
+
# @return [String] the account id of this account
|
|
23
51
|
def account_id
|
|
24
52
|
@account
|
|
25
53
|
end
|
|
26
54
|
|
|
27
|
-
#
|
|
55
|
+
# Creates a new account, or multiple new accounts, in this wallet.
|
|
28
56
|
#
|
|
29
57
|
# ==== Example:
|
|
30
58
|
#
|
|
31
|
-
# wallet.create # =>
|
|
32
|
-
# wallet.create(2) # =>
|
|
59
|
+
# wallet.create # => Creates 1 account, and return a {Nanook::WalletAccount}
|
|
60
|
+
# wallet.create(2) # => Creates 2 accounts, and return an Array of {Nanook::WalletAccount}
|
|
33
61
|
#
|
|
34
|
-
# @param n [Integer] number of accounts to create
|
|
62
|
+
# @param n [Integer] number of accounts to create
|
|
35
63
|
#
|
|
36
|
-
# @return [Nanook::WalletAccount]
|
|
37
|
-
#
|
|
38
|
-
# @return [Array<Nanook::WalletAccount>]
|
|
39
|
-
# if method was called with
|
|
64
|
+
# @return [Nanook::WalletAccount] returns a single {Nanook::WalletAccount}
|
|
65
|
+
# if invoked with no argument
|
|
66
|
+
# @return [Array<Nanook::WalletAccount>] returns an Array of {Nanook::WalletAccount}
|
|
67
|
+
# if method was called with argument +n+ > 1
|
|
40
68
|
def create(n=1)
|
|
41
69
|
if n < 1
|
|
42
|
-
raise ArgumentError.new("number of accounts must be greater than
|
|
70
|
+
raise ArgumentError.new("number of accounts must be greater than 0")
|
|
43
71
|
end
|
|
44
72
|
|
|
45
73
|
if n == 1
|
|
@@ -51,24 +79,55 @@ class Nanook
|
|
|
51
79
|
end
|
|
52
80
|
end
|
|
53
81
|
|
|
82
|
+
# Unlinks the account from the wallet.
|
|
83
|
+
#
|
|
84
|
+
# Note, it's impossible to truly destroy an account. Calling this
|
|
85
|
+
# method on a wallet causes the wallet to "forget" the account.
|
|
86
|
+
#
|
|
87
|
+
# @return [Boolean] returns true if action was successful, otherwise +false+
|
|
54
88
|
def destroy
|
|
55
89
|
rpc(:account_remove)[:removed] == 1
|
|
56
90
|
end
|
|
57
91
|
|
|
92
|
+
# @return [String]
|
|
58
93
|
def inspect
|
|
59
94
|
"#{self.class.name}(wallet_id: #{wallet_id}, account_id: #{account_id}, object_id: \"#{"0x00%x" % (object_id << 1)}\")"
|
|
60
95
|
end
|
|
61
96
|
|
|
97
|
+
# Make a payment from an account in this wallet to another account
|
|
98
|
+
# on the nano network. Returns a <i>send</i> block hash
|
|
99
|
+
# if successful, or a {Nanook::Error} if unsuccessful.
|
|
100
|
+
#
|
|
101
|
+
# Note, there may be a delay in receiving a response due to Proof of Work being done. From the {Nano RPC}[https://github.com/nanocurrency/raiblocks/wiki/RPC-protocol#account-create]:
|
|
102
|
+
#
|
|
103
|
+
# <i>Proof of Work is precomputed for one transaction in the background. If it has been a while since your last transaction it will send instantly, the next one will need to wait for Proof of Work to be generated.</i>
|
|
104
|
+
#
|
|
105
|
+
# ==== Examples:
|
|
106
|
+
#
|
|
107
|
+
# account.pay(to: "xrb_...", amount: 1.1, id: "myUniqueId123") # => "9AE2311..."
|
|
108
|
+
# account.pay(to: "xrb_...", amount: 54000000000000, unit: :raw, id: "myUniqueId123") # => "9AE2311..."
|
|
109
|
+
#
|
|
110
|
+
# @param to [String] account id of the recipient of your payment
|
|
111
|
+
# @param amount [Integer|Float]
|
|
112
|
+
# @param unit (see Nanook::Account#balance)
|
|
113
|
+
# @param id [String] must be unique per payment. It serves an important
|
|
114
|
+
# purpose; it allows you to make the same call multiple times with
|
|
115
|
+
# the same +id+ and be reassured that you will only ever send this
|
|
116
|
+
# nano payment once
|
|
117
|
+
# @return [String] the send block id for the payment
|
|
118
|
+
# @raise [Nanook::Error] if unsuccesful
|
|
62
119
|
def pay(to:, amount:, unit: Nanook::default_unit, id:)
|
|
63
120
|
unless Nanook::UNITS.include?(unit)
|
|
64
121
|
raise ArgumentError.new("Unsupported unit: #{unit}")
|
|
65
122
|
end
|
|
66
123
|
|
|
67
|
-
# Check that to
|
|
68
|
-
|
|
69
|
-
|
|
124
|
+
# Check that to account is a valid address
|
|
125
|
+
response = @rpc.call(:validate_account_number, account: to)
|
|
126
|
+
unless response[:valid] == 1
|
|
127
|
+
raise ArgumentError.new("Account address is invalid: #{to}")
|
|
70
128
|
end
|
|
71
129
|
|
|
130
|
+
# Determin amount in raw
|
|
72
131
|
raw = if unit.to_sym.eql?(:nano)
|
|
73
132
|
Nanook::Util.NANO_to_raw(amount)
|
|
74
133
|
else
|
|
@@ -87,13 +146,33 @@ class Nanook
|
|
|
87
146
|
response = @rpc.call(:send, p)
|
|
88
147
|
|
|
89
148
|
if response.has_key?(:error)
|
|
90
|
-
return response[:error]
|
|
149
|
+
return Nanook::Error.new(response[:error])
|
|
91
150
|
end
|
|
92
151
|
|
|
93
152
|
response[:block]
|
|
94
153
|
end
|
|
95
154
|
|
|
96
|
-
#
|
|
155
|
+
# Receives a pending payment for this account.
|
|
156
|
+
#
|
|
157
|
+
# When called with no +block+ argument, the latest pending payment
|
|
158
|
+
# for the account will be received.
|
|
159
|
+
#
|
|
160
|
+
# Returns a <i>receive</i> block id
|
|
161
|
+
# if a receive was successful, or +false+ if there were no pending
|
|
162
|
+
# payments to receive.
|
|
163
|
+
#
|
|
164
|
+
# You can receive a specific pending block if you know it by
|
|
165
|
+
# passing the block has in as an argument.
|
|
166
|
+
#
|
|
167
|
+
# ==== Examples
|
|
168
|
+
#
|
|
169
|
+
# account.receive # => "9AE2311..."
|
|
170
|
+
# account.receive("718CC21...") # => "9AE2311..."
|
|
171
|
+
#
|
|
172
|
+
# @param block [String] optional block id of pending payment. If
|
|
173
|
+
# not provided, the latest pending payment will be received
|
|
174
|
+
# @return [String] the receive block id
|
|
175
|
+
# @return [false] if no block to receive
|
|
97
176
|
def receive(block=nil)
|
|
98
177
|
if block.nil?
|
|
99
178
|
_receive_without_block
|
|
@@ -139,15 +218,6 @@ class Nanook
|
|
|
139
218
|
@wallet
|
|
140
219
|
end
|
|
141
220
|
|
|
142
|
-
# Any method of Nanook::Account can be called on this class too
|
|
143
|
-
def method_missing(m, *args, &block)
|
|
144
|
-
if @nanook_account_instance.respond_to?(m)
|
|
145
|
-
@nanook_account_instance.send(m, *args, &block)
|
|
146
|
-
else
|
|
147
|
-
super(m, *args, &block)
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
|
|
151
221
|
private
|
|
152
222
|
|
|
153
223
|
def _receive_without_block
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: nanook
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Luke Duncalfe
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-03
|
|
11
|
+
date: 2018-04-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|