nanook 2.1.0 → 2.2.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 +36 -1
- data/README.md +20 -9
- data/lib/nanook.rb +4 -4
- data/lib/nanook/account.rb +169 -111
- data/lib/nanook/error.rb +1 -0
- data/lib/nanook/node.rb +131 -4
- data/lib/nanook/rpc.rb +23 -2
- data/lib/nanook/util.rb +19 -0
- data/lib/nanook/version.rb +1 -1
- data/lib/nanook/wallet.rb +111 -75
- data/lib/nanook/wallet_account.rb +44 -40
- 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: 5a13b3163d4646a6b2be0f571fff5b848a7bb235
|
4
|
+
data.tar.gz: 07ecc5c01111b031717e8f2296405598997adda1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 386623ddde38720cb70b25dfb3c24dfbdc05b77ef47f0d977ac0f4e8486a5f0b00b05aee8993f61ece0c47fe1bc827208a1fddf74b5161e149f2e0052d1862b8
|
7
|
+
data.tar.gz: 3c7911c97fb02a1b8b5b449be32e916abfc6f585f3942546933ef6762528aad1bfed3b09abd35735b5451ec984ad5c7ea6133b6756d5c501ab513ad4fe2ae3e2
|
data/CHANGELOG.md
CHANGED
@@ -4,9 +4,42 @@ 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.2.0
|
8
|
+
|
9
|
+
### Added
|
10
|
+
|
11
|
+
- New `Nanook::Account#block_count` method returns number of blocks in ledger for an account.
|
12
|
+
- `Account#delegators` now takes `unit` argument.
|
13
|
+
- `Account#ledger` now takes `unit` and `modified_since` arguments.
|
14
|
+
- `Nanook::Node#block_count_type` is now an alias to the preferred `#block_count_by_type`
|
15
|
+
method.
|
16
|
+
- `Nanook::Node#representatives` now takes `unit` argument.
|
17
|
+
- new `Nanook::Node#representatives_online` method.
|
18
|
+
- `Nanook::Node#synchronizing_blocks` aliased by `#unchecked`, for people familiar with
|
19
|
+
what the RPC calls it.
|
20
|
+
- `Nanook::Node#version` now an aliased by `#info`
|
21
|
+
method.
|
22
|
+
- `Nanook::WalletAccount#exists?` now aliased by `#open?`
|
23
|
+
|
24
|
+
### Removed
|
25
|
+
|
26
|
+
- `Nanook::WalletAccount#account_id` Removed, as there was already an `id` method that returned this.
|
27
|
+
- `Nanook::WalletAccount#wallet_id` Removed, as the `WalletAccount` object should be considered a kind of Account.
|
28
|
+
|
29
|
+
### Changed
|
30
|
+
|
31
|
+
- `Nanook::Node#synced?` is deprecated with a `warn`. Nodes never seem to reach 100%
|
32
|
+
synchronized, so this method is useless.
|
33
|
+
- `Nanook::Rpc::DEFAULT_TIMEOUT` reduced from 500 to 60.
|
34
|
+
|
7
35
|
## 2.1.0
|
8
36
|
|
9
|
-
|
37
|
+
### Changed
|
38
|
+
|
39
|
+
- Payment methods no longer check that recipient account has an open block, as this prevents
|
40
|
+
funds being sent to accounts about to be opened.
|
41
|
+
- Payment methods now check the account id of the recipient is valid, raises ArgumentError if not.
|
42
|
+
- Payment methods now return a Nanook::Error if the RPC returns an error when trying to pay, instead of a String.
|
10
43
|
|
11
44
|
## 2.0.0
|
12
45
|
|
@@ -24,6 +57,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
24
57
|
- Added ruby version requirement >= 2.0 to gemspec.
|
25
58
|
|
26
59
|
### Changed
|
60
|
+
|
27
61
|
- `Nanook::Rpc#inspect` displays full hostname with scheme and port.
|
28
62
|
- `Nanook::Account#new` `account` param is now required.
|
29
63
|
- `Nanook::Account#info` now also returns the `id` of the account.
|
@@ -41,6 +75,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
41
75
|
- Changed documentation generating tool from rdoc to yard.
|
42
76
|
|
43
77
|
### Fixed
|
78
|
+
|
44
79
|
- Missing `Nanook#rpc` accessor.
|
45
80
|
- `Nanook::Block#publish` can return false when publish fails.
|
46
81
|
- `Nanook::Block#info` correctly handles `allow_unchecked: true` errors.
|
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.2"
|
15
15
|
```
|
16
16
|
|
17
17
|
And then execute:
|
@@ -120,11 +120,11 @@ 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.
|
123
|
+
Below is a quick reference list of commands. See the [full Nanook documentation](https://lukes.github.io/nanook/2.2.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
|
|
127
|
-
See the [full documentation for Nanook::Wallet](https://lukes.github.io/nanook/2.
|
127
|
+
See the [full documentation for Nanook::Wallet](https://lukes.github.io/nanook/2.2.0/Nanook/Wallet.html) for a detailed description of each method and example responses.
|
128
128
|
|
129
129
|
#### Create wallet:
|
130
130
|
|
@@ -150,7 +150,7 @@ wallet.balance
|
|
150
150
|
wallet.balance(account_break_down: true)
|
151
151
|
wallet.balance(unit: :raw)
|
152
152
|
wallet.pay(from: your_account_id, to: recipient_account_id, amount: 2, id: unique_id)
|
153
|
-
wallet.pay(from: your_account_id, to: recipient_account_id, amount: 2,
|
153
|
+
wallet.pay(from: your_account_id, to: recipient_account_id, amount: 2, id: unique_id, unit: :raw)
|
154
154
|
wallet.pending
|
155
155
|
wallet.pending(limit: 1)
|
156
156
|
wallet.pending(detailed: true)
|
@@ -185,13 +185,15 @@ Nanook.new.wallet(wallet_id).account.create(5)
|
|
185
185
|
|
186
186
|
#### Working with a single account:
|
187
187
|
|
188
|
+
See the [full documentation for Nanook::WalletAccount](https://lukes.github.io/nanook/2.2.0/Nanook/WalletAccount.html) for a detailed description of each method and example responses.
|
189
|
+
|
188
190
|
```ruby
|
189
191
|
account = Nanook.new.wallet(wallet_id).account(account_id)
|
190
192
|
|
191
193
|
account.balance
|
192
194
|
account.balance(unit: :raw)
|
193
195
|
account.pay(to: recipient_account_id, amount: 2, id: unique_id)
|
194
|
-
account.pay(to: recipient_account_id, amount: 2,
|
196
|
+
account.pay(to: recipient_account_id, amount: 2, id: unique_id, unit: :raw)
|
195
197
|
account.pending
|
196
198
|
account.pending(limit: 1)
|
197
199
|
account.pending(detailed: true)
|
@@ -206,11 +208,14 @@ account.info(unit: :raw)
|
|
206
208
|
account.last_modified_at
|
207
209
|
account.ledger
|
208
210
|
account.ledger(limit: 10)
|
211
|
+
account.ledger(modified_since: Time.now)
|
212
|
+
account.ledger(unit: :raw)
|
209
213
|
account.history
|
210
214
|
account.history(limit: 1)
|
211
215
|
account.history(unit: :raw)
|
212
216
|
account.public_key
|
213
217
|
account.delegators
|
218
|
+
account.delegators(unit: :raw)
|
214
219
|
account.representative
|
215
220
|
account.change_representative(new_representative)
|
216
221
|
account.weight
|
@@ -220,7 +225,7 @@ account.destroy
|
|
220
225
|
|
221
226
|
#### Working with any account (not necessarily in your wallet):
|
222
227
|
|
223
|
-
See the [full documentation for Nanook::Account](https://lukes.github.io/nanook/2.
|
228
|
+
See the [full documentation for Nanook::Account](https://lukes.github.io/nanook/2.2.0/Nanook/Account.html) for a detailed description of each method and example responses.
|
224
229
|
|
225
230
|
```ruby
|
226
231
|
account = Nanook.new.account(account_id)
|
@@ -239,18 +244,21 @@ account.info(unit: :raw)
|
|
239
244
|
account.last_modified_at
|
240
245
|
account.ledger
|
241
246
|
account.ledger(limit: 10)
|
247
|
+
account.ledger(modified_since: Time.now)
|
248
|
+
account.ledger(unit: :raw)
|
242
249
|
account.history
|
243
250
|
account.history(limit: 1)
|
244
251
|
account.history(unit: :raw)
|
245
252
|
account.public_key
|
246
253
|
account.delegators
|
254
|
+
account.delegators(unit: :raw)
|
247
255
|
account.representative
|
248
256
|
account.weight
|
249
257
|
```
|
250
258
|
|
251
259
|
### Blocks
|
252
260
|
|
253
|
-
See the [full documentation for Nanook::Block](https://lukes.github.io/nanook/2.
|
261
|
+
See the [full documentation for Nanook::Block](https://lukes.github.io/nanook/2.2.0/Nanook/Block.html) for a detailed description of each method and example responses.
|
254
262
|
|
255
263
|
```ruby
|
256
264
|
block = Nanook.new.block(block_id)
|
@@ -277,20 +285,23 @@ block.is_valid_work?(work_id)
|
|
277
285
|
|
278
286
|
### Managing your nano node
|
279
287
|
|
288
|
+
See the [full documentation for Nanook::Node](https://lukes.github.io/nanook/2.2.0/Nanook/Node.html) for a detailed description of each method and example responses.
|
289
|
+
|
280
290
|
```ruby
|
281
291
|
node = Nanook.new.node
|
282
292
|
|
283
293
|
node.account_count
|
284
294
|
node.block_count
|
285
|
-
node.
|
295
|
+
node.block_count_by_type
|
286
296
|
node.bootstrap_any
|
287
297
|
node.bootstrap(address: "::ffff:138.201.94.249", port: 7075)
|
288
298
|
node.peers
|
289
299
|
node.representatives
|
300
|
+
node.representatives(unit: :raw)
|
301
|
+
node.representatives_online
|
290
302
|
node.synchronizing_blocks
|
291
303
|
node.synchronizing_blocks(limit: 1)
|
292
304
|
node.sync_progress
|
293
|
-
node.synced?
|
294
305
|
node.version
|
295
306
|
|
296
307
|
node.stop
|
data/lib/nanook.rb
CHANGED
@@ -2,7 +2,7 @@ require 'net/http'
|
|
2
2
|
require 'uri'
|
3
3
|
require 'forwardable'
|
4
4
|
|
5
|
-
Dir[File.dirname(__FILE__) + '/nanook/*.rb'].each {|file| require file }
|
5
|
+
Dir[File.dirname(__FILE__) + '/nanook/*.rb'].each { |file| require file }
|
6
6
|
|
7
7
|
# ==== Initializing
|
8
8
|
#
|
@@ -42,12 +42,12 @@ class Nanook
|
|
42
42
|
# Returns a new instance of {Nanook}.
|
43
43
|
#
|
44
44
|
# ==== Examples:
|
45
|
-
# Connecting to http://localhost:7076 with the default timeout of
|
45
|
+
# Connecting to http://localhost:7076 with the default timeout of 10s:
|
46
46
|
# Nanook.new
|
47
47
|
# Setting a custom timeout:
|
48
|
-
# Nanook.new(timeout:
|
48
|
+
# Nanook.new(timeout: 10)
|
49
49
|
# Connecting to a custom RPC host and setting a timeout:
|
50
|
-
# Nanook.new("http://ip6-localhost.com:7076", timeout:
|
50
|
+
# Nanook.new("http://ip6-localhost.com:7076", timeout: 10)
|
51
51
|
#
|
52
52
|
# @param uri [String] default is {Nanook::Rpc::DEFAULT_URI}. The RPC host to connect to
|
53
53
|
# @param timeout [Integer] default is {Nanook::Rpc::DEFAULT_TIMEOUT}. Connection timeout in number of seconds
|
data/lib/nanook/account.rb
CHANGED
@@ -21,23 +21,43 @@ class Nanook
|
|
21
21
|
@account = account
|
22
22
|
end
|
23
23
|
|
24
|
-
#
|
25
|
-
#
|
24
|
+
# Information about this accounts that have set this account as their representative.
|
25
|
+
#
|
26
|
+
# === Example:
|
27
|
+
#
|
28
|
+
# account.delegators
|
29
|
+
#
|
30
|
+
# Example response:
|
31
|
+
#
|
26
32
|
# {
|
27
33
|
# :xrb_13bqhi1cdqq8yb9szneoc38qk899d58i5rcrgdk5mkdm86hekpoez3zxw5sd=>500000000000000000000000000000000000,
|
28
34
|
# :xrb_17k6ug685154an8gri9whhe5kb5z1mf5w6y39gokc1657sh95fegm8ht1zpn=>961647970820730000000000000000000000
|
29
35
|
# }
|
30
36
|
#
|
31
|
-
# @
|
32
|
-
|
33
|
-
|
37
|
+
# @param unit (see #balance)
|
38
|
+
# @return [Hash{Symbol=>Integer}] account ids which delegate to this account, and their account balance
|
39
|
+
def delegators(unit: Nanook.default_unit)
|
40
|
+
unless Nanook::UNITS.include?(unit)
|
41
|
+
raise ArgumentError.new("Unsupported unit: #{unit}")
|
42
|
+
end
|
43
|
+
|
44
|
+
response = rpc(:delegators)[:delegators]
|
45
|
+
|
46
|
+
return response if unit == :raw
|
47
|
+
|
48
|
+
r = response.map do |account_id, balance|
|
49
|
+
balance = Nanook::Util.raw_to_NANO(balance)
|
50
|
+
|
51
|
+
[account_id, balance]
|
52
|
+
end
|
53
|
+
|
54
|
+
Hash[r].to_symbolized_hash
|
34
55
|
end
|
35
56
|
|
36
|
-
# Returns
|
57
|
+
# Returns true if the account has an <i>open</i> block.
|
37
58
|
#
|
38
|
-
#
|
39
|
-
#
|
40
|
-
# an account receives a payment for the first time.
|
59
|
+
# An open block gets published when an account receives a payment
|
60
|
+
# for the first time.
|
41
61
|
#
|
42
62
|
# The reliability of this check depends on the node host having
|
43
63
|
# synchronized itself with most of the blocks on the nano network,
|
@@ -45,40 +65,33 @@ class Nanook
|
|
45
65
|
# You can check if a node's synchronization is particular low
|
46
66
|
# using {Nanook::Node#sync_progress}.
|
47
67
|
#
|
48
|
-
#
|
68
|
+
# ==== Example:
|
69
|
+
#
|
70
|
+
# account.exists? # => true
|
71
|
+
# # or
|
72
|
+
# account.open? # => true
|
73
|
+
#
|
74
|
+
# @return [Boolean] Indicates if this account has an open block
|
49
75
|
def exists?
|
50
76
|
response = rpc(:account_info)
|
51
77
|
!response.empty? && !response[:open_block].nil?
|
52
78
|
end
|
79
|
+
alias_method :open?, :exists?
|
53
80
|
|
54
|
-
#
|
81
|
+
# An account's history of send and receive payments.
|
55
82
|
#
|
56
83
|
# ==== Example:
|
57
84
|
#
|
58
85
|
# account.history
|
59
|
-
# account.history(limit: 1)
|
60
86
|
#
|
61
|
-
#
|
62
|
-
# [
|
63
|
-
# {
|
64
|
-
# :type=>"send",
|
65
|
-
# :account=>"xrb_1kdc5u48j3hr5r7eof9iao47szqh81ndqgq5e5hrsn1g9a3sa4hkkcotn3uq",
|
66
|
-
# :amount=>2,
|
67
|
-
# :hash=>"2C3C570EA8898443C0FD04A1C385A3E3A8C985AD792635FCDCEBB30ADF6A0570"
|
68
|
-
# }
|
69
|
-
# ]
|
70
|
-
# ==== Example:
|
71
|
-
#
|
72
|
-
# account.history
|
73
|
-
# account.history(unit: :raw)
|
87
|
+
# Example response:
|
74
88
|
#
|
75
|
-
# ==== Example response:
|
76
89
|
# [
|
77
90
|
# {
|
78
|
-
# :
|
79
|
-
# :
|
80
|
-
# :
|
81
|
-
# :
|
91
|
+
# type: "send",
|
92
|
+
# account: "xrb_1kdc5u48j3hr5r7eof9iao47szqh81ndqgq5e5hrsn1g9a3sa4hkkcotn3uq",
|
93
|
+
# amount: 2,
|
94
|
+
# hash: "2C3C570EA8898443C0FD04A1C385A3E3A8C985AD792635FCDCEBB30ADF6A0570"
|
82
95
|
# }
|
83
96
|
# ]
|
84
97
|
#
|
@@ -102,65 +115,78 @@ class Nanook
|
|
102
115
|
end
|
103
116
|
end
|
104
117
|
|
105
|
-
#
|
118
|
+
# The last modified time of the account in the time zone of
|
119
|
+
# your nano node (usually UTC).
|
120
|
+
#
|
121
|
+
# ==== Example:
|
122
|
+
#
|
123
|
+
# account.last_modified_at # => Time
|
124
|
+
#
|
125
|
+
# @return [Time] last modified time of the account in the time zone of
|
126
|
+
# your nano node (usually UTC).
|
106
127
|
def last_modified_at
|
107
128
|
response = rpc(:account_info)
|
108
129
|
Time.at(response[:modified_timestamp])
|
109
130
|
end
|
110
131
|
|
111
|
-
#
|
132
|
+
# The public key of the account.
|
112
133
|
#
|
113
|
-
# ==== Example
|
114
|
-
#
|
134
|
+
# ==== Example:
|
135
|
+
#
|
136
|
+
# account.public_key # => "3068BB1..."
|
115
137
|
#
|
116
|
-
# @return [String] public key of
|
138
|
+
# @return [String] public key of the account
|
117
139
|
def public_key
|
118
140
|
rpc(:account_key)[:key]
|
119
141
|
end
|
120
142
|
|
121
|
-
#
|
143
|
+
# The representative account id for the account.
|
122
144
|
# Representatives are accounts which cast votes in the case of a
|
123
145
|
# fork in the network.
|
124
146
|
#
|
125
|
-
# ==== Example
|
147
|
+
# ==== Example:
|
126
148
|
#
|
127
|
-
# "
|
149
|
+
# account.representative # => "xrb_3pc..."
|
128
150
|
#
|
129
|
-
# @return [String] Representative account of
|
151
|
+
# @return [String] Representative account of the account
|
130
152
|
def representative
|
131
153
|
rpc(:account_representative)[:representative]
|
132
154
|
end
|
133
155
|
|
134
|
-
#
|
156
|
+
# The account's balance, including pending (unreceived payments).
|
157
|
+
# To receive a pending amount see {WalletAccount#receive}.
|
135
158
|
#
|
136
|
-
# ====
|
159
|
+
# ==== Examples:
|
137
160
|
#
|
138
161
|
# account.balance
|
139
162
|
#
|
140
|
-
#
|
141
|
-
# # {
|
142
|
-
# # balance=>2, # Account balance
|
143
|
-
# # pending=>1.1 # Amount pending and not yet received by the account
|
144
|
-
# # }
|
163
|
+
# Example response:
|
145
164
|
#
|
146
|
-
#
|
165
|
+
# {
|
166
|
+
# balance: 2,
|
167
|
+
# pending: 1.1
|
168
|
+
# }
|
169
|
+
#
|
170
|
+
# Asking for the balance to be returned in raw instead of NANO:
|
147
171
|
#
|
148
172
|
# account.balance(unit: :raw)
|
149
173
|
#
|
150
|
-
#
|
151
|
-
#
|
152
|
-
#
|
153
|
-
#
|
154
|
-
#
|
174
|
+
# Example response:
|
175
|
+
#
|
176
|
+
# {
|
177
|
+
# balance: 2000000000000000000000000000000,
|
178
|
+
# pending: 1100000000000000000000000000000
|
179
|
+
# }
|
155
180
|
#
|
156
181
|
# @param unit [Symbol] default is {Nanook.default_unit}.
|
157
182
|
# Must be one of {Nanook::UNITS}.
|
158
183
|
# Represents the unit that the balances will be returned in.
|
159
184
|
# Note: this method interprets
|
160
|
-
# +:nano+ as NANO, which is technically Mnano
|
185
|
+
# +:nano+ as NANO, which is technically Mnano.
|
161
186
|
# See {https://nano.org/en/faq#what-are-nano-units- What are Nano's Units}
|
162
187
|
#
|
163
188
|
# @raise ArgumentError if an invalid +unit+ was given.
|
189
|
+
# @return [Hash{Symbol=>Integer|Float}]
|
164
190
|
def balance(unit: Nanook.default_unit)
|
165
191
|
unless Nanook::UNITS.include?(unit)
|
166
192
|
raise ArgumentError.new("Unsupported unit: #{unit}")
|
@@ -174,57 +200,69 @@ class Nanook
|
|
174
200
|
end
|
175
201
|
end
|
176
202
|
|
177
|
-
#
|
203
|
+
# @return [Integer] number of blocks for this account
|
204
|
+
def block_count
|
205
|
+
rpc(:account_block_count)[:block_count]
|
206
|
+
end
|
207
|
+
|
208
|
+
# The id of the account.
|
209
|
+
#
|
210
|
+
# ==== Example:
|
211
|
+
#
|
212
|
+
# account.id # => "xrb_16u..."
|
213
|
+
#
|
178
214
|
# @return [String] the id of the account
|
179
215
|
def id
|
180
216
|
@account
|
181
217
|
end
|
182
218
|
|
183
|
-
#
|
219
|
+
# Information about the account.
|
184
220
|
#
|
185
|
-
# ====
|
221
|
+
# ==== Examples:
|
186
222
|
#
|
187
223
|
# account.info
|
188
224
|
#
|
189
|
-
#
|
225
|
+
# Example response:
|
226
|
+
#
|
190
227
|
# {
|
191
|
-
# :
|
192
|
-
# :
|
193
|
-
# :
|
194
|
-
# :
|
195
|
-
# :
|
196
|
-
# :
|
197
|
-
# :
|
228
|
+
# id: "xrb_16u1uufyoig8777y6r8iqjtrw8sg8maqrm36zzcm95jmbd9i9aj5i8abr8u5",
|
229
|
+
# balance: 11.439597000000001,
|
230
|
+
# block_count: 4,
|
231
|
+
# frontier: "2C3C570EA8898443C0FD04A1C385A3E3A8C985AD792635FCDCEBB30ADF6A0570",
|
232
|
+
# modified_timestamp: 1520500357,
|
233
|
+
# open_block: "C82376314C387080A753871A32AD70F4168080C317C5E67356F0A62EB5F34FF9",
|
234
|
+
# representative_block: "C82376314C387080A753871A32AD70F4168080C317C5E67356F0A62EB5F34FF9"
|
198
235
|
# }
|
199
236
|
#
|
200
|
-
#
|
237
|
+
# Asking for more detail to be returned:
|
201
238
|
#
|
202
239
|
# account.info(detailed: true)
|
203
240
|
#
|
204
|
-
#
|
241
|
+
# Example response:
|
242
|
+
#
|
205
243
|
# {
|
206
|
-
# :
|
207
|
-
# :
|
208
|
-
# :
|
209
|
-
# :
|
210
|
-
# :
|
211
|
-
# :
|
212
|
-
# :
|
213
|
-
# :
|
214
|
-
# :
|
215
|
-
# :
|
216
|
-
# :
|
244
|
+
# id: "xrb_16u1uufyoig8777y6r8iqjtrw8sg8maqrm36zzcm95jmbd9i9aj5i8abr8u5",
|
245
|
+
# balance: 11.439597000000001,
|
246
|
+
# block_count: 4,
|
247
|
+
# frontier: "2C3C570EA8898443C0FD04A1C385A3E3A8C985AD792635FCDCEBB30ADF6A0570",
|
248
|
+
# modified_timestamp: 1520500357,
|
249
|
+
# open_block: "C82376314C387080A753871A32AD70F4168080C317C5E67356F0A62EB5F34FF9",
|
250
|
+
# pending: 0,
|
251
|
+
# public_key: "A82C906460046D230D7D37C6663723DC3EFCECC4B3254EBF45294B66746F4FEF",
|
252
|
+
# representative: "xrb_3pczxuorp48td8645bs3m6c3xotxd3idskrenmi65rbrga5zmkemzhwkaznh",
|
253
|
+
# representative_block: "C82376314C387080A753871A32AD70F4168080C317C5E67356F0A62EB5F34FF9",
|
254
|
+
# weight: 0
|
217
255
|
# }
|
218
256
|
#
|
219
257
|
# @param detailed [Boolean] (default is false). When +true+, four
|
220
258
|
# additional calls are made to the RPC to return more information
|
221
259
|
# @param unit (see #balance)
|
222
|
-
# @return [Hash] information about the account containing:
|
223
|
-
# [+id] The account id
|
260
|
+
# @return [Hash{Symbol=>String|Integer|Float}] information about the account containing:
|
261
|
+
# [+id+] The account id
|
224
262
|
# [+frontier+] The latest block hash
|
225
263
|
# [+open_block+] The first block in every account's blockchain. When this block was published the account was officially open
|
226
264
|
# [+representative_block+] The block that named the representative for the account
|
227
|
-
# [+balance+] Amount in
|
265
|
+
# [+balance+] Amount in either NANO or raw (depending on the <tt>unit:</tt> argument)
|
228
266
|
# [+last_modified+] Unix timestamp
|
229
267
|
# [+block_count+] Number of blocks in the account's blockchain
|
230
268
|
#
|
@@ -267,22 +305,16 @@ class Nanook
|
|
267
305
|
"#{self.class.name}(id: \"#{id}\", object_id: \"#{"0x00%x" % (object_id << 1)}\")"
|
268
306
|
end
|
269
307
|
|
270
|
-
#
|
308
|
+
# Information about the given account as well as other
|
271
309
|
# accounts up the ledger. The number of accounts returned is determined
|
272
310
|
# by the <tt>limit:</tt> argument.
|
273
311
|
#
|
274
|
-
#
|
275
|
-
# #info(detailed: false) method returns.
|
276
|
-
#
|
277
|
-
# ==== Arguments
|
278
|
-
#
|
279
|
-
# [+limit:+] Number of accounts to return in the ledger (default is 1)
|
280
|
-
#
|
281
|
-
# ==== Example
|
312
|
+
# ==== Example:
|
282
313
|
#
|
283
314
|
# account.ledger(limit: 2)
|
284
315
|
#
|
285
|
-
#
|
316
|
+
# Example response:
|
317
|
+
#
|
286
318
|
# {
|
287
319
|
# :xrb_3c3ek3k8135f6e8qtfy8eruk9q3yzmpebes7btzncccdest8ymzhjmnr196j=>{
|
288
320
|
# :frontier=>"2C3C570EA8898443C0FD04A1C385A3E3A8C985AD792635FCDCEBB30ADF6A0570",
|
@@ -294,40 +326,65 @@ class Nanook
|
|
294
326
|
# },
|
295
327
|
# :xrb_3c3ettq59kijuuad5fnaq35itc9schtr4r7r6rjhmwjbairowzq3wi5ap7h8=>{ ... }
|
296
328
|
# }
|
297
|
-
|
298
|
-
|
329
|
+
#
|
330
|
+
# @param [Integer] limit number of accounts to return in the ledger (default is 1)
|
331
|
+
# @param [Time] modified_since return only accounts modified in the local database after this time
|
332
|
+
# @param unit (see #balance)
|
333
|
+
# @return [Hash{Symbol=>String|Integer}]
|
334
|
+
def ledger(limit: 1, modified_since:nil, unit: Nanook.default_unit)
|
335
|
+
unless Nanook::UNITS.include?(unit)
|
336
|
+
raise ArgumentError.new("Unsupported unit: #{unit}")
|
337
|
+
end
|
338
|
+
|
339
|
+
params = { count: limit }
|
340
|
+
|
341
|
+
unless modified_since.nil?
|
342
|
+
params[:modified_since] = modified_since.to_i
|
343
|
+
end
|
344
|
+
|
345
|
+
response = rpc(:ledger, params)[:accounts]
|
346
|
+
|
347
|
+
return response if unit == :raw
|
348
|
+
|
349
|
+
r = response.map do |account_id, l|
|
350
|
+
l[:balance] = Nanook::Util.raw_to_NANO(l[:balance])
|
351
|
+
|
352
|
+
[account_id, l]
|
353
|
+
end
|
354
|
+
|
355
|
+
Hash[r].to_symbolized_hash
|
299
356
|
end
|
300
357
|
|
301
|
-
#
|
358
|
+
# Information about pending blocks (payments) that are
|
302
359
|
# waiting to be received by the account.
|
303
360
|
#
|
304
|
-
# See also the #receive method
|
361
|
+
# See also the {Nanook::WalletAccount#receive} method for how to
|
362
|
+
# receive a pending payment.
|
305
363
|
#
|
306
364
|
# The default response is an Array of block ids.
|
307
365
|
#
|
308
366
|
# With the +detailed:+ argument, the method returns an Array of Hashes,
|
309
367
|
# which contain the source account id, amount pending and block id.
|
310
368
|
#
|
311
|
-
# ====
|
369
|
+
# ==== Examples:
|
312
370
|
#
|
313
|
-
# account.pending # => ["
|
371
|
+
# account.pending # => ["000D1BA..."]
|
314
372
|
#
|
315
|
-
#
|
373
|
+
# Asking for more detail to be returned:
|
316
374
|
#
|
317
375
|
# account.pending(detailed: true)
|
318
|
-
#
|
319
|
-
#
|
320
|
-
#
|
321
|
-
#
|
322
|
-
#
|
323
|
-
#
|
324
|
-
#
|
325
|
-
#
|
326
|
-
#
|
327
|
-
#
|
328
|
-
#
|
329
|
-
#
|
330
|
-
# account.pending(detailed: true, unit: raw).first[:amount] # => 6000000000000000000000000000000
|
376
|
+
#
|
377
|
+
# Example response:
|
378
|
+
#
|
379
|
+
# [
|
380
|
+
# {
|
381
|
+
# block: "000D1BAEC8EC208142C99059B393051BAC8380F9B5A2E6B2489A277D81789F3F",
|
382
|
+
# amount: 6,
|
383
|
+
# source: "xrb_3dcfozsmekr1tr9skf1oa5wbgmxt81qepfdnt7zicq5x3hk65fg4fqj58mbr"
|
384
|
+
# },
|
385
|
+
# { ... }
|
386
|
+
# ]
|
387
|
+
#
|
331
388
|
# @param limit [Integer] number of pending blocks to return (default is 1000)
|
332
389
|
# @param detailed [Boolean]return a more complex Hash of pending block information (default is +false+)
|
333
390
|
# @param unit (see #balance)
|
@@ -358,13 +415,14 @@ class Nanook
|
|
358
415
|
end
|
359
416
|
end
|
360
417
|
|
361
|
-
#
|
418
|
+
# The account's weight.
|
362
419
|
#
|
363
420
|
# Weight is determined by the account's balance, and represents
|
364
421
|
# the voting weight that account has on the network. Only accounts
|
365
422
|
# with greater than 256 weight can vote.
|
366
423
|
#
|
367
424
|
# ==== Example:
|
425
|
+
#
|
368
426
|
# account.weight # => 0
|
369
427
|
#
|
370
428
|
# @return [Integer] the account's weight
|