nanook 2.4.0 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +139 -0
- data/README.md +158 -99
- data/bin/console +4 -3
- data/lib/nanook.rb +77 -21
- data/lib/nanook/account.rb +238 -168
- data/lib/nanook/block.rb +380 -149
- data/lib/nanook/errors.rb +10 -0
- data/lib/nanook/node.rb +218 -83
- data/lib/nanook/private_key.rb +115 -0
- data/lib/nanook/public_key.rb +55 -0
- data/lib/nanook/rpc.rb +104 -44
- data/lib/nanook/util.rb +68 -19
- data/lib/nanook/version.rb +3 -1
- data/lib/nanook/wallet.rb +369 -167
- data/lib/nanook/wallet_account.rb +151 -91
- data/lib/nanook/work_peer.rb +14 -7
- metadata +28 -27
- data/lib/nanook/error.rb +0 -5
- data/lib/nanook/key.rb +0 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd2278329714fcd1e6778b5cbc85791f67e4fc835a7e6210abedc698f677645f
|
4
|
+
data.tar.gz: 074e3d14d1692038016973492c6d7475815e2b67f670ddba8d0e118e6fcbedfa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2fb9465657aa458639093281da94821ce9b07731c4b44309fa3372416ec2fa928a77e3d1c8260f4013a21cd51335c92d1cf58aa48cdbb0f5629796b46977c814
|
7
|
+
data.tar.gz: 3d518590b7433bdce1696ccc5d23fa2fc93d60101649ccb954de813493e51f2535f6d85bc91d841bdb7f54539c6f7f20444daaea877562b240191354bd37d3d9
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,145 @@ 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
|
+
## 3.1.0
|
8
|
+
|
9
|
+
### Added
|
10
|
+
|
11
|
+
- `Block#next`.
|
12
|
+
- `Block#descendants` aliases `Block#successors`
|
13
|
+
|
14
|
+
### Changed
|
15
|
+
|
16
|
+
- `Block.chain` and `Block.successors` no longer return the Block itself in the response.
|
17
|
+
|
18
|
+
## 3.0.1
|
19
|
+
|
20
|
+
### Fixed
|
21
|
+
|
22
|
+
- Fix `Block#type` being `nil` when RPC doesn't return a `subtype`.
|
23
|
+
|
24
|
+
## 3.0.0
|
25
|
+
|
26
|
+
### Removed
|
27
|
+
|
28
|
+
- `Nanook::Block#block_count_by_type` Removed, as the RPC no longer supports this command.
|
29
|
+
- `Nanook::Block#history` Removed, as the RPC command is deprecated.
|
30
|
+
- `Nanook::Block#publish` Removed, as the RPC command expects more data than what we instantiate within `Nanook::Block`.
|
31
|
+
- Removed all RPC calls that are not recommended for production:
|
32
|
+
- `Nanook::Node#bootstrap_status`.
|
33
|
+
- `Nanook::Node#confirmation_history`.
|
34
|
+
- `Nanook::Node#confirmed_recently?`.
|
35
|
+
- `Nanook::Key` Replaced by `Nanook::PrivateKey`.
|
36
|
+
- `Nanook::Account#info` No longer accepts `detailed:` argument.
|
37
|
+
- `Nanook::Node#synced?` As this was deprecated for removal in v3.0.
|
38
|
+
|
39
|
+
### Added
|
40
|
+
|
41
|
+
- Added missing `Nanook::WalletAccount#block_count` delegate.
|
42
|
+
- Added `Nanook#network_telemetry`.
|
43
|
+
- Added `Nanook::Rpc#test`.
|
44
|
+
- Added `Nanook::WalletAccount#work`.
|
45
|
+
- Added `Nanook::WalletAccount#set_work`.
|
46
|
+
- Added `Nanook::Account#blocks`.
|
47
|
+
- Added `Nanook::Account#delegators_count`.
|
48
|
+
- Added `Nanook::Account#open_block`.
|
49
|
+
- Added `Nanook::Node#change_receive_minimum`.
|
50
|
+
- Added `Nanook::Node#confirmation_quorum`.
|
51
|
+
- Added `Nanook::Node#keepalive`.
|
52
|
+
- Added `Nanook::Node#receive_minimum`.
|
53
|
+
- Added `Nanook::Node#search_pending`.
|
54
|
+
- Added `Nanook::Wallet#history`.
|
55
|
+
- Added `Nanook::Wallet#exists?`.
|
56
|
+
- Added `Nanook::Wallet#ledger`.
|
57
|
+
- Added `Nanook::Wallet#move_accounts`.
|
58
|
+
- Added `Nanook::Wallet#remove_account`.
|
59
|
+
- Added `Nanook::Wallet#republish_blocks`.
|
60
|
+
- Added `Nanook::Wallet#search_pending`.
|
61
|
+
- Added `Nanook::Wallet#work`.
|
62
|
+
- Added `Nanook::Block#account`.
|
63
|
+
- Added `Nanook::Block#amount`.
|
64
|
+
- Added `Nanook::Block#balance`.
|
65
|
+
- Added `Nanook::Block#change?`.
|
66
|
+
- Added `Nanook::Block#confirmed?`.
|
67
|
+
- Added `Nanook::Block#epoch?`.
|
68
|
+
- Added `Nanook::Block#exists?`.
|
69
|
+
- Added `Nanook::Block#height`.
|
70
|
+
- Added `Nanook::Block#open?`.
|
71
|
+
- Added `Nanook::Block#previous`.
|
72
|
+
- Added `Nanook::Block#receive?`.
|
73
|
+
- Added `Nanook::Block#representative`.
|
74
|
+
- Added `Nanook::Block#send?`.
|
75
|
+
- Added `Nanook::Block#signature`.
|
76
|
+
- Added `Nanook::Block#timestamp`.
|
77
|
+
- Added `Nanook::Block#type`.
|
78
|
+
- Added `Nanook::Block#unconfirmed?`.
|
79
|
+
- Added `Nanook::Block#work`.
|
80
|
+
- Added `Nanook::PrivateKey` with methods `#create`, `#account` and `#public_key`.
|
81
|
+
- Added `Nanook::PublicKey` with method `#account`.
|
82
|
+
- Added equality testing methods `#==`, `#eql?` and `#hash` for:
|
83
|
+
- `Nanook::Account`
|
84
|
+
- `Nanook::Block`
|
85
|
+
- `Nanook::PrivateKey`
|
86
|
+
- `Nanook::PublicKey`
|
87
|
+
- `Nanook::Wallet`
|
88
|
+
- `Nanook::WalletAccount`
|
89
|
+
|
90
|
+
### Changed
|
91
|
+
|
92
|
+
- New error classes: `Nanook::ConnectionError`, `NanoUnitError`, `NodeRpcError` and `NodeRpcConfigurationError`.
|
93
|
+
- `Nanook::Wallet#default_representative` returns a `Nanook::Account`.
|
94
|
+
- `Nanook::Wallet#change_representative` returns a `Nanook::Account`.
|
95
|
+
- `Nanook::Wallet#unlock` can be passed no argument (`password` will be `nil`).
|
96
|
+
- `Nanook::Wallet#info` returns data from `wallet_info` RPC.
|
97
|
+
- `Nanook::Block#is_valid_work?` renamed to `#valid_work?`.
|
98
|
+
- `Nanook::Block#republish` returns an Array of `Nanook::Block`s.
|
99
|
+
- `Nanook::Block#chain` returns an Array of `Nanook::Block`s.
|
100
|
+
- `Nanook::Block#successors` returns an Array of `Nanook::Block`s.
|
101
|
+
- `Nanook::Block#info`:
|
102
|
+
- returns balances in nano, and can optionally be passed `unit: :raw` argument.
|
103
|
+
- returns account values as `Nanook::Account` and block values as `Nanook::Block`.
|
104
|
+
- `Nanook::Node#peers` returns details as a `Hash` keyed by `Nanook::Account`.
|
105
|
+
- `Nanook::Account#pending` returns source as `Nanook::Account` and block as `Nanook::Block` when `detailed: true`.
|
106
|
+
- `Nanook::Account#representative` returns a `Nanook::Account`.
|
107
|
+
- `Nanook::Account#delegators` returns accounts as `Nanook::Account`s.
|
108
|
+
- `Nanook::Account#history` returns accounts as `Nanook::Account` and blocks as `Nanook::Block`.
|
109
|
+
- `Nanook::Account#ledger` returns accounts as `Nanook::Account` and blocks as `Nanook::Block`.
|
110
|
+
- `Nanook::Account#public_key` returns a `Nanook::PublicKey`.
|
111
|
+
- `Nanook::Account#weight` accepts an optional `unit:` argment.
|
112
|
+
- `Nanook::Account#info`:
|
113
|
+
- returns the `frontier`, `open_block`, `representative_block` values as `Nanook::Block`s.
|
114
|
+
- returns the `representative` as a `Nanook::Account`.
|
115
|
+
- `modified_timestamp` key renamed to `last_modified_at` and value is a `Time` in UTC.
|
116
|
+
- `Nanook::Key` has become `Nanook::PrivateKey`, `#generate` has been renamed `#create` and returns a `Nanook::PrivateKey`.
|
117
|
+
|
118
|
+
### Fixed
|
119
|
+
|
120
|
+
- A number of errors when node is still bootstrapping and is missing accounts from the ledger.
|
121
|
+
- `Nanook::Node#representatives_online` accessing representative list as a `Hash` after RPC change.
|
122
|
+
|
123
|
+
## 2.5.1
|
124
|
+
|
125
|
+
### Fixed
|
126
|
+
|
127
|
+
- undefined method 'new' for `BigDecimal:Class` (thank you @MihaiVoinea)
|
128
|
+
|
129
|
+
## 2.5.0
|
130
|
+
|
131
|
+
### Added
|
132
|
+
|
133
|
+
- New `Nanook::Node#bootstrap_lazy` method.
|
134
|
+
- New `Nanook::Node#bootstrap_status` method.
|
135
|
+
- New `Nanook::Node#difficulty` method.
|
136
|
+
- New `Nanook::Node#uptime` method.
|
137
|
+
- New `Nanook::Wallet#lock` method.
|
138
|
+
|
139
|
+
### Changed
|
140
|
+
|
141
|
+
- `Nanook::Node#chain` now takes optional `offset` argument.
|
142
|
+
- `Nanook::Node#successors` now takes optional `offset` argument.
|
143
|
+
- `Nanook::Node#successors` now aliased as `Nanook::Node#ancestors`
|
144
|
+
- Updated docs to use `nano_` prefixed addresses.
|
145
|
+
|
7
146
|
## 2.4.0
|
8
147
|
|
9
148
|
### Added
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Nanook
|
2
2
|
|
3
|
-
This is a Ruby library for managing a [nano currency](https://nano.org/) node, including making and receiving payments, using the [nano RPC protocol](https://
|
3
|
+
This is a Ruby library for managing a [nano currency](https://nano.org/) node, including making and receiving payments, using the [nano RPC protocol](https://docs.nano.org/commands/rpc-protocol). Nano is a fee-less, fast, environmentally-friendly cryptocurrency. It's awesome. See [https://nano.org](https://nano.org/).
|
4
4
|
|
5
5
|
[![Gem Version](https://badge.fury.io/rb/nanook.svg)](https://badge.fury.io/rb/nanook)
|
6
6
|
[![CircleCI](https://circleci.com/gh/lukes/nanook/tree/master.svg?style=shield)](https://circleci.com/gh/lukes/nanook/tree/master)
|
@@ -26,7 +26,7 @@ Or install it yourself as:
|
|
26
26
|
|
27
27
|
## Initializing
|
28
28
|
|
29
|
-
Nanook will by default connect to `http://
|
29
|
+
Nanook will by default connect to `http://[::1]:7076`.
|
30
30
|
|
31
31
|
```ruby
|
32
32
|
nanook = Nanook.new
|
@@ -35,7 +35,7 @@ nanook = Nanook.new
|
|
35
35
|
To connect to another host instead:
|
36
36
|
|
37
37
|
```ruby
|
38
|
-
nanook = Nanook.new("http://
|
38
|
+
nanook = Nanook.new("http://localhost:7076")
|
39
39
|
```
|
40
40
|
|
41
41
|
## Basics
|
@@ -45,19 +45,19 @@ nanook = Nanook.new("http://ip6-localhost:7076")
|
|
45
45
|
Create a wallet:
|
46
46
|
|
47
47
|
```ruby
|
48
|
-
|
48
|
+
wallet = nanook.wallet.create
|
49
49
|
```
|
50
50
|
|
51
51
|
Create an account within a wallet:
|
52
52
|
|
53
53
|
```ruby
|
54
|
-
|
54
|
+
account = wallet.account.create
|
55
55
|
```
|
56
56
|
|
57
57
|
List accounts within a wallet:
|
58
58
|
|
59
59
|
```ruby
|
60
|
-
|
60
|
+
accounts = wallet.accounts
|
61
61
|
```
|
62
62
|
|
63
63
|
### Sending a payment
|
@@ -65,28 +65,28 @@ Nanook.new.wallet(wallet_id).accounts
|
|
65
65
|
To send a payment from an account in a wallet:
|
66
66
|
|
67
67
|
```ruby
|
68
|
-
account =
|
68
|
+
account = nanook.wallet(wallet_id).account(account_id)
|
69
69
|
account.pay(to: recipient_account_id, amount: 0.2, id: unique_id)
|
70
70
|
```
|
71
71
|
|
72
72
|
Or, a wallet:
|
73
73
|
|
74
74
|
```ruby
|
75
|
-
wallet =
|
75
|
+
wallet = nanook.wallet(wallet_id)
|
76
76
|
wallet.pay(from: your_account_id, to: recipient_account_id, amount: 0.2, id: unique_id)
|
77
77
|
```
|
78
78
|
|
79
|
-
The `id` can be any string and needs to be unique per payment. It serves an important purpose; it allows you to make this call multiple times with the same `id` and be reassured that you will only ever send that nano payment once. From the [Nano RPC](https://
|
79
|
+
The `id` can be any string and needs to be unique per payment. It serves an important purpose; it allows you to make this call multiple times with the same `id` and be reassured that you will only ever send that nano payment once. From the [Nano RPC](https://docs.nano.org/commands/rpc-protocol/#send):
|
80
80
|
|
81
81
|
> You can (and should) specify a unique id for each spend to provide idempotency. That means that if you [make the payment call] two times with the same id, the second request won't send any additional Nano.
|
82
82
|
|
83
|
-
The unit of the `amount` is NANO (which is currently technically Mnano — see [What are Nano's Units](https://nano.org/
|
83
|
+
The unit of the `amount` is NANO (which is currently technically Mnano — see [What are Nano's Units](https://docs.nano.org/protocol-design/distribution-and-units/#unit-dividers)). You can pass an amount of raw instead by adding the `unit: :raw` argument:
|
84
84
|
|
85
85
|
```ruby
|
86
86
|
account.pay(to: recipient_account_id, amount: 999, unit: :raw, id: unique_id)
|
87
87
|
```
|
88
88
|
|
89
|
-
Note, there may be a delay in receiving a response due to Proof of Work being done. From the [Nano RPC](https://
|
89
|
+
Note, there may be a delay in receiving a response due to Proof of Work being done. From the [Nano RPC](https://docs.nano.org/commands/rpc-protocol/#send):
|
90
90
|
|
91
91
|
> 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.
|
92
92
|
|
@@ -95,12 +95,12 @@ Note, there may be a delay in receiving a response due to Proof of Work being do
|
|
95
95
|
The simplest way to receive a payment is:
|
96
96
|
|
97
97
|
```ruby
|
98
|
-
account =
|
98
|
+
account = nanook.wallet(wallet_id).account(account_id)
|
99
99
|
account.receive
|
100
100
|
|
101
101
|
# or:
|
102
102
|
|
103
|
-
wallet =
|
103
|
+
wallet = nanook.wallet(wallet_id)
|
104
104
|
wallet.receive(into: account_id)
|
105
105
|
```
|
106
106
|
|
@@ -109,42 +109,46 @@ The `receive` method when called as above will receive the latest pending paymen
|
|
109
109
|
You can also receive a specific pending block if you know it (you may have discovered it through calling `account.pending` for example):
|
110
110
|
|
111
111
|
```ruby
|
112
|
-
account =
|
112
|
+
account = nanook.wallet(wallet_id).account(account_id)
|
113
113
|
account.receive(block_id)
|
114
114
|
|
115
115
|
# or:
|
116
116
|
|
117
|
-
wallet =
|
117
|
+
wallet = nanook.wallet(wallet_id)
|
118
118
|
wallet.receive(block_id, into: account_id)
|
119
119
|
```
|
120
120
|
|
121
|
+
## Exploring further
|
122
|
+
|
123
|
+
Read the [Using Nanook](https://github.com/lukes/nanook/wiki/Using-nanook) page for some example uses of Nanook to query the network.
|
124
|
+
|
121
125
|
## All commands
|
122
126
|
|
123
|
-
Below is a quick reference list of commands. See the [full Nanook documentation](https://lukes.github.io/nanook/
|
127
|
+
Below is a quick reference list of commands. See the [full Nanook documentation](https://lukes.github.io/nanook/3.1.0/) for a searchable detailed description of every class and method, what the arguments mean, and example responses.
|
124
128
|
|
125
129
|
### Wallets
|
126
130
|
|
127
|
-
See the [full documentation for Nanook::Wallet](https://lukes.github.io/nanook/
|
131
|
+
See the [full documentation for Nanook::Wallet](https://lukes.github.io/nanook/3.1.0/Nanook/Wallet.html) for a detailed description of each method and example responses.
|
128
132
|
|
129
133
|
#### Create wallet:
|
130
134
|
|
131
135
|
```ruby
|
132
|
-
|
136
|
+
nanook.wallet.create
|
133
137
|
```
|
134
138
|
#### Restoring a wallet from a seed
|
135
139
|
|
136
140
|
```ruby
|
137
|
-
|
141
|
+
nanook.wallet.restore(seed)
|
138
142
|
```
|
139
143
|
Optionally also restore the wallet's accounts:
|
140
144
|
```ruby
|
141
|
-
|
145
|
+
nanook.wallet.restore(seed, accounts: 2)
|
142
146
|
```
|
143
147
|
|
144
|
-
#### Working with a
|
148
|
+
#### Working with a wallet:
|
145
149
|
|
146
150
|
```ruby
|
147
|
-
wallet =
|
151
|
+
wallet = nanook.wallet(wallet_id)
|
148
152
|
|
149
153
|
wallet.balance
|
150
154
|
wallet.balance(account_break_down: true)
|
@@ -157,19 +161,32 @@ wallet.pending(detailed: true)
|
|
157
161
|
wallet.pending(unit: :raw)
|
158
162
|
wallet.receive(into: account_id)
|
159
163
|
wallet.receive(pending_block_id, into: account_id)
|
164
|
+
wallet.search_pending
|
160
165
|
|
161
166
|
wallet.account.create
|
167
|
+
wallet.account.create(5)
|
162
168
|
wallet.accounts
|
163
169
|
wallet.contains?(account_id)
|
170
|
+
wallet.move_accounts(from_wallet_id, [account_1_id, account_2_id])
|
171
|
+
wallet.remove_account(account_id)
|
164
172
|
|
165
173
|
wallet.default_representative
|
166
|
-
wallet.change_default_representative(
|
174
|
+
wallet.change_default_representative(representative_account_id)
|
175
|
+
wallet.change_password(password)
|
176
|
+
wallet.exists?
|
177
|
+
wallet.history
|
178
|
+
wallet.history(unit: :raw)
|
167
179
|
wallet.info
|
168
180
|
wallet.info(unit: :raw)
|
169
181
|
wallet.export
|
182
|
+
wallet.ledger
|
183
|
+
wallet.ledger(unit: :raw)
|
184
|
+
wallet.lock
|
170
185
|
wallet.locked?
|
186
|
+
wallet.republish_blocks
|
187
|
+
wallet.republish_blocks(limit: 5)
|
171
188
|
wallet.unlock(password)
|
172
|
-
wallet.
|
189
|
+
wallet.work
|
173
190
|
|
174
191
|
wallet.destroy
|
175
192
|
```
|
@@ -178,135 +195,159 @@ wallet.destroy
|
|
178
195
|
#### Create account:
|
179
196
|
|
180
197
|
```ruby
|
181
|
-
|
198
|
+
nanook.wallet(wallet_id).account.create
|
182
199
|
```
|
183
200
|
|
184
201
|
#### Create multiple accounts:
|
185
202
|
|
186
203
|
```ruby
|
187
|
-
|
204
|
+
nanook.wallet(wallet_id).account.create(5)
|
188
205
|
```
|
189
206
|
|
190
|
-
#### Working with
|
207
|
+
#### Working with an account:
|
191
208
|
|
192
|
-
|
209
|
+
Any account on the Nano network that is known by your node can be initialized through `Nanook#account`:
|
193
210
|
|
194
211
|
```ruby
|
195
|
-
account =
|
212
|
+
account = nanook.account(account_id)
|
213
|
+
```
|
196
214
|
|
215
|
+
See the [full documentation for Nanook::Account](https://lukes.github.io/nanook/3.1.0/Nanook/Account.html) for a detailed description of each method and example responses.
|
216
|
+
|
217
|
+
```ruby
|
197
218
|
account.balance
|
198
219
|
account.balance(unit: :raw)
|
199
|
-
account.pay(to: recipient_account_id, amount: 2, id: unique_id)
|
200
|
-
account.pay(to: recipient_account_id, amount: 2, id: unique_id, unit: :raw)
|
201
220
|
account.pending
|
202
221
|
account.pending(limit: 1)
|
203
222
|
account.pending(detailed: true)
|
204
223
|
account.pending(unit: :raw)
|
205
|
-
account.receive
|
206
|
-
account.receive(pending_block_id)
|
207
224
|
|
225
|
+
account.blocks
|
226
|
+
account.blocks(limit: 1)
|
227
|
+
account.blocks(sort: :desc)
|
228
|
+
account.delegators
|
229
|
+
account.delegators(unit: :raw)
|
230
|
+
account.delegators_count
|
208
231
|
account.exists?
|
232
|
+
account.history
|
233
|
+
account.history(limit: 1)
|
234
|
+
account.history(unit: :raw)
|
235
|
+
account.history(sort: :desc)
|
209
236
|
account.info
|
210
|
-
account.info(detailed: true)
|
211
237
|
account.info(unit: :raw)
|
212
238
|
account.last_modified_at
|
213
239
|
account.ledger
|
214
240
|
account.ledger(limit: 10)
|
215
241
|
account.ledger(modified_since: Time.now)
|
216
242
|
account.ledger(unit: :raw)
|
217
|
-
account.
|
218
|
-
account.
|
219
|
-
account.history(unit: :raw)
|
243
|
+
account.ledger(sort: :desc)
|
244
|
+
account.open_block
|
220
245
|
account.public_key
|
221
|
-
account.delegators
|
222
|
-
account.delegators(unit: :raw)
|
223
246
|
account.representative
|
224
|
-
account.change_representative(new_representative)
|
225
247
|
account.weight
|
226
|
-
|
227
|
-
account.destroy
|
248
|
+
account.weight(unit: :raw)
|
228
249
|
```
|
229
250
|
|
230
|
-
#### Working with
|
251
|
+
#### Working with an account created on the node:
|
231
252
|
|
232
|
-
|
253
|
+
Accounts that have been created on your node can have
|
254
|
+
additional methods when initialized through `Nanook::Wallet#account`:
|
233
255
|
|
234
256
|
```ruby
|
235
|
-
|
257
|
+
wallet = nanook.wallet(wallet_id)
|
258
|
+
account = wallet.account(account_id)
|
259
|
+
```
|
236
260
|
|
237
|
-
account.
|
238
|
-
account.balance(unit: :raw)
|
239
|
-
account.pending
|
240
|
-
account.pending(limit: 1)
|
241
|
-
account.pending(detailed: true)
|
242
|
-
account.pending(unit: :raw)
|
261
|
+
As well as the following methods, all methods of [regular accounts](#working-with-any-account) can also be called.
|
243
262
|
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
account.
|
248
|
-
account.
|
249
|
-
account.
|
250
|
-
account.
|
251
|
-
account.
|
252
|
-
account.
|
253
|
-
account.
|
254
|
-
account.
|
255
|
-
account.history(unit: :raw)
|
256
|
-
account.public_key
|
257
|
-
account.delegators
|
258
|
-
account.delegators(unit: :raw)
|
259
|
-
account.representative
|
260
|
-
account.weight
|
263
|
+
See the [full documentation for Nanook::WalletAccount](https://lukes.github.io/nanook/3.1.0/Nanook/WalletAccount.html) for a detailed description of each method and example responses.
|
264
|
+
|
265
|
+
```ruby
|
266
|
+
account.pay(to: recipient_account_id, amount: 2, id: unique_id)
|
267
|
+
account.pay(to: recipient_account_id, amount: 2, id: unique_id, unit: :raw)
|
268
|
+
account.receive
|
269
|
+
account.receive(pending_block_id)
|
270
|
+
account.change_representative(new_representative)
|
271
|
+
account.set_work(work)
|
272
|
+
account.work
|
273
|
+
account.destroy
|
261
274
|
```
|
262
275
|
|
263
276
|
### Blocks
|
264
277
|
|
265
|
-
See the [full documentation for Nanook::Block](https://lukes.github.io/nanook/
|
278
|
+
See the [full documentation for Nanook::Block](https://lukes.github.io/nanook/3.1.0/Nanook/Block.html) for a detailed description of each method and example responses.
|
266
279
|
|
267
280
|
```ruby
|
268
|
-
block =
|
281
|
+
block = nanook.block(block_id)
|
269
282
|
|
270
|
-
block.info # Verified blocks in the ledger
|
271
|
-
block.info(allow_unchecked: true) # Verified blocks AND unchecked synchronizing blocks
|
272
283
|
block.account
|
273
|
-
block.
|
274
|
-
block.
|
284
|
+
block.amount
|
285
|
+
block.amount(unit: :raw)
|
286
|
+
block.ancestors
|
287
|
+
block.ancestors(limit: 10)
|
288
|
+
block.ancestors(offset: 10)
|
289
|
+
block.balance
|
290
|
+
block.change?
|
291
|
+
block.checked?
|
275
292
|
block.confirm
|
276
|
-
block.
|
277
|
-
block.
|
278
|
-
block.
|
293
|
+
block.descendants
|
294
|
+
block.descendants(limit: 10)
|
295
|
+
block.descendants(offset: 10)
|
296
|
+
block.epoch?
|
297
|
+
block.exists?
|
298
|
+
block.exists?(allow_unchecked: true)
|
299
|
+
block.height
|
300
|
+
block.info # Verified blocks in the ledger
|
301
|
+
block.info(allow_unchecked: true) # Verified blocks AND unchecked synchronizing blocks
|
302
|
+
block.info(unit: :raw)
|
303
|
+
block.next
|
304
|
+
block.open?
|
305
|
+
block.pending?
|
306
|
+
block.previous
|
307
|
+
block.receive?
|
308
|
+
block.representative
|
279
309
|
block.republish
|
280
310
|
block.republish(sources: 2)
|
281
311
|
block.republish(destinations: 2)
|
282
|
-
block.
|
283
|
-
block.
|
284
|
-
block.
|
285
|
-
block.
|
312
|
+
block.send?
|
313
|
+
block.signature
|
314
|
+
block.timestamp
|
315
|
+
block.type
|
316
|
+
block.unchecked?
|
317
|
+
block.work
|
286
318
|
|
287
319
|
block.generate_work
|
288
320
|
block.generate_work(use_peers: true)
|
289
321
|
block.cancel_work
|
290
|
-
block.
|
322
|
+
block.valid_work?(work)
|
291
323
|
```
|
292
324
|
|
293
325
|
### Managing your nano node
|
294
326
|
|
295
|
-
See the [full documentation for Nanook::Node](https://lukes.github.io/nanook/
|
327
|
+
See the [full documentation for Nanook::Node](https://lukes.github.io/nanook/3.1.0/Nanook/Node.html) for a detailed description of each method and example responses.
|
296
328
|
|
297
329
|
```ruby
|
298
|
-
node =
|
330
|
+
node = nanook.node
|
299
331
|
|
300
332
|
node.account_count
|
301
333
|
node.block_count
|
302
|
-
node.block_count_by_type
|
303
|
-
node.bootstrap_any
|
304
334
|
node.bootstrap(address: "::ffff:138.201.94.249", port: 7075)
|
305
|
-
node.
|
335
|
+
node.bootstrap_any
|
336
|
+
node.bootstrap_lazy(block_id)
|
337
|
+
node.bootstrap_lazy(block_id, force: true)
|
338
|
+
node.confirmation_quorum
|
339
|
+
node.difficulty
|
340
|
+
node.difficulty(include_trend: true)
|
341
|
+
node.keepalive(address: "::ffff:138.201.94.249", port: 7075)
|
306
342
|
node.peers
|
343
|
+
node.receive_minimum
|
344
|
+
node.receive_minimum(unit: :raw)
|
345
|
+
node.change_receive_minimum(amount)
|
346
|
+
node.change_receive_minimum(amount, unit: :raw)
|
307
347
|
node.representatives
|
308
348
|
node.representatives(unit: :raw)
|
309
349
|
node.representatives_online
|
350
|
+
node.search_pending
|
310
351
|
node.synchronizing_blocks
|
311
352
|
node.synchronizing_blocks(limit: 1)
|
312
353
|
node.sync_progress
|
@@ -318,7 +359,7 @@ node.stop
|
|
318
359
|
### Work peers
|
319
360
|
|
320
361
|
```ruby
|
321
|
-
work_peers =
|
362
|
+
work_peers = nanook.work_peers
|
322
363
|
|
323
364
|
work_peers.add(address: "::ffff:172.17.0.1:7076", port: 7076)
|
324
365
|
work_peers.clear
|
@@ -330,26 +371,44 @@ work_peers.list
|
|
330
371
|
#### Create private public key pair:
|
331
372
|
|
332
373
|
```ruby
|
333
|
-
|
334
|
-
|
374
|
+
private_key = nanook.private_key.create
|
375
|
+
private_key = nanook.private_key.create(seed: seed, index: 0)
|
376
|
+
private_key.public_key # => Nanook::PublicKey
|
377
|
+
```
|
378
|
+
|
379
|
+
#### Working with a private key
|
380
|
+
|
381
|
+
```ruby
|
382
|
+
key = nanook.private_key(private_key)
|
383
|
+
|
384
|
+
key.account
|
385
|
+
key.public_key
|
335
386
|
```
|
336
387
|
|
337
|
-
#### Working with a
|
388
|
+
#### Working with a public key
|
338
389
|
|
339
390
|
```ruby
|
340
|
-
key =
|
391
|
+
key = nanook.public_key(public_key)
|
341
392
|
|
342
|
-
key.
|
393
|
+
key.account
|
394
|
+
```
|
395
|
+
|
396
|
+
### Network
|
397
|
+
|
398
|
+
A summarized overview of the Nano network:
|
399
|
+
|
400
|
+
```ruby
|
401
|
+
nanook.network_telemetry
|
343
402
|
```
|
344
403
|
|
345
404
|
## Nanook Metal
|
346
405
|
|
347
|
-
You can do any call listed in the [Nano RPC](https://
|
406
|
+
You can do any call listed in the [Nano RPC](https://docs.nano.org/commands/rpc-protocol) directly through the `rpc` method. The first argument should match the `action` of the RPC call, and then all remaining parameters are passed in as arguments.
|
348
407
|
|
349
|
-
E.g., the [accounts_create command](https://
|
408
|
+
E.g., the [accounts_create command](https://docs.nano.org/commands/rpc-protocol/#accounts_create) can be called like this:
|
350
409
|
|
351
410
|
```ruby
|
352
|
-
|
411
|
+
nanook.rpc.call(:accounts_create, wallet: wallet_id, count: 2)
|
353
412
|
```
|
354
413
|
|
355
414
|
## Contributing
|
@@ -370,11 +429,11 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
370
429
|
|
371
430
|
## Buy me a nano coffee
|
372
431
|
|
373
|
-
This library is
|
432
|
+
This library is always free to use, but feel free to send some nano [my way](https://www.nanode.co/account/nano_3c3ek3k8135f6e8qtfy8eruk9q3yzmpebes7btzncccdest8ymzhjmnr196j) if you'd like to!
|
374
433
|
|
375
|
-
|
434
|
+
nano_3c3ek3k8135f6e8qtfy8eruk9q3yzmpebes7btzncccdest8ymzhjmnr196j
|
376
435
|
|
377
|
-
![alt
|
436
|
+
![alt nano_3c3ek3k8135f6e8qtfy8eruk9q3yzmpebes7btzncccdest8ymzhjmnr196j](https://raw.githubusercontent.com/lukes/nanook/master/img/qr.png)
|
378
437
|
|
379
438
|
|
380
439
|
|