nanook 2.5.0 → 4.0.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 +137 -0
- data/README.md +156 -99
- data/bin/console +4 -3
- data/lib/nanook.rb +76 -20
- data/lib/nanook/account.rb +271 -170
- data/lib/nanook/block.rb +384 -156
- data/lib/nanook/errors.rb +10 -0
- data/lib/nanook/node.rb +188 -131
- 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 +72 -19
- data/lib/nanook/version.rb +3 -1
- data/lib/nanook/wallet.rb +355 -164
- data/lib/nanook/wallet_account.rb +152 -92
- data/lib/nanook/work_peer.rb +14 -7
- metadata +30 -29
- 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: c6a8de62127c895a74b956a2b24a7619e526ef0050c34639edd4eeec20bac187
|
4
|
+
data.tar.gz: a2ac4e3e26838a04e33156d38a892623fa2ba893ca1ec02707caf07c72a1b955
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6bc6c116aac59f7f3a124ef8e4c6db3377fb8d4c944be240576260ff985503c0b05d131b2f644abbc655ba2c741e057c9344654993dad9ed20f03622a604485
|
7
|
+
data.tar.gz: a2bb0a64d566613fa5c7e29ff454afd95491ccaac3233b1647f90c0d89afeac83d921748327ea417747e8675afd1f4978ca1ce9f1cb39603b50f3870a6dabaa0
|
data/CHANGELOG.md
CHANGED
@@ -1,9 +1,146 @@
|
|
1
1
|
# Changelog
|
2
|
+
|
2
3
|
All notable changes to this project will be documented in this file.
|
3
4
|
|
4
5
|
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
5
6
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
6
7
|
|
8
|
+
## 4.0.0 (v22 compatible)
|
9
|
+
|
10
|
+
### Changed
|
11
|
+
|
12
|
+
- `Node#bootstrap_lazy` now returns the v22 node response of a `Hash` of keys `started` and `key_inserted` with boolean values.
|
13
|
+
- `Node#bootstrap_any` now optionally takes `account` argument.
|
14
|
+
- `Account#pending` and `WalletAccount#pending`:
|
15
|
+
- now optionally takes `sorted` argument.
|
16
|
+
- now optionally takes `allow_unconfirmed` argument.
|
17
|
+
- `Account#balance` and `WalletAccount#balance` now optionally takes `allow_unconfirmed` argument.
|
18
|
+
- `Account#info` and `WalletAccount#info` now optionally takes `allow_unconfirmed` argument.
|
19
|
+
- `Block#pending?` now optionally takes `allow_unconfirmed` argument.
|
20
|
+
- `Wallet#pending` now optionally takes `allow_unconfirmed` argument.
|
21
|
+
|
22
|
+
## 3.1.0 (v21 compatible)
|
23
|
+
|
24
|
+
### Added
|
25
|
+
|
26
|
+
- `Block#next`.
|
27
|
+
- `Block#descendants` aliases `Block#successors`
|
28
|
+
|
29
|
+
### Changed
|
30
|
+
|
31
|
+
- `Block.chain` and `Block.successors` no longer return the Block itself in the response.
|
32
|
+
|
33
|
+
## 3.0.1 (v21 compatible)
|
34
|
+
|
35
|
+
### Fixed
|
36
|
+
|
37
|
+
- Fix `Block#type` being `nil` when RPC doesn't return a `subtype`.
|
38
|
+
|
39
|
+
## 3.0.0 (v21 compatible)
|
40
|
+
|
41
|
+
### Removed
|
42
|
+
|
43
|
+
- `Nanook::Block#block_count_by_type` Removed, as the RPC no longer supports this command.
|
44
|
+
- `Nanook::Block#history` Removed, as the RPC command is deprecated.
|
45
|
+
- `Nanook::Block#publish` Removed, as the RPC command expects more data than what we instantiate within `Nanook::Block`.
|
46
|
+
- Removed all RPC calls that are not recommended for production:
|
47
|
+
- `Nanook::Node#bootstrap_status`.
|
48
|
+
- `Nanook::Node#confirmation_history`.
|
49
|
+
- `Nanook::Node#confirmed_recently?`.
|
50
|
+
- `Nanook::Key` Replaced by `Nanook::PrivateKey`.
|
51
|
+
- `Nanook::Account#info` No longer accepts `detailed:` argument.
|
52
|
+
- `Nanook::Node#synced?` As this was deprecated for removal in v3.0.
|
53
|
+
|
54
|
+
### Added
|
55
|
+
|
56
|
+
- Added missing `Nanook::WalletAccount#block_count` delegate.
|
57
|
+
- Added `Nanook#network_telemetry`.
|
58
|
+
- Added `Nanook::Rpc#test`.
|
59
|
+
- Added `Nanook::WalletAccount#work`.
|
60
|
+
- Added `Nanook::WalletAccount#set_work`.
|
61
|
+
- Added `Nanook::Account#blocks`.
|
62
|
+
- Added `Nanook::Account#delegators_count`.
|
63
|
+
- Added `Nanook::Account#open_block`.
|
64
|
+
- Added `Nanook::Node#change_receive_minimum`.
|
65
|
+
- Added `Nanook::Node#confirmation_quorum`.
|
66
|
+
- Added `Nanook::Node#keepalive`.
|
67
|
+
- Added `Nanook::Node#receive_minimum`.
|
68
|
+
- Added `Nanook::Node#search_pending`.
|
69
|
+
- Added `Nanook::Wallet#history`.
|
70
|
+
- Added `Nanook::Wallet#exists?`.
|
71
|
+
- Added `Nanook::Wallet#ledger`.
|
72
|
+
- Added `Nanook::Wallet#move_accounts`.
|
73
|
+
- Added `Nanook::Wallet#remove_account`.
|
74
|
+
- Added `Nanook::Wallet#republish_blocks`.
|
75
|
+
- Added `Nanook::Wallet#search_pending`.
|
76
|
+
- Added `Nanook::Wallet#work`.
|
77
|
+
- Added `Nanook::Block#account`.
|
78
|
+
- Added `Nanook::Block#amount`.
|
79
|
+
- Added `Nanook::Block#balance`.
|
80
|
+
- Added `Nanook::Block#change?`.
|
81
|
+
- Added `Nanook::Block#confirmed?`.
|
82
|
+
- Added `Nanook::Block#epoch?`.
|
83
|
+
- Added `Nanook::Block#exists?`.
|
84
|
+
- Added `Nanook::Block#height`.
|
85
|
+
- Added `Nanook::Block#open?`.
|
86
|
+
- Added `Nanook::Block#previous`.
|
87
|
+
- Added `Nanook::Block#receive?`.
|
88
|
+
- Added `Nanook::Block#representative`.
|
89
|
+
- Added `Nanook::Block#send?`.
|
90
|
+
- Added `Nanook::Block#signature`.
|
91
|
+
- Added `Nanook::Block#timestamp`.
|
92
|
+
- Added `Nanook::Block#type`.
|
93
|
+
- Added `Nanook::Block#unconfirmed?`.
|
94
|
+
- Added `Nanook::Block#work`.
|
95
|
+
- Added `Nanook::PrivateKey` with methods `#create`, `#account` and `#public_key`.
|
96
|
+
- Added `Nanook::PublicKey` with method `#account`.
|
97
|
+
- Added equality testing methods `#==`, `#eql?` and `#hash` for:
|
98
|
+
- `Nanook::Account`
|
99
|
+
- `Nanook::Block`
|
100
|
+
- `Nanook::PrivateKey`
|
101
|
+
- `Nanook::PublicKey`
|
102
|
+
- `Nanook::Wallet`
|
103
|
+
- `Nanook::WalletAccount`
|
104
|
+
|
105
|
+
### Changed
|
106
|
+
|
107
|
+
- New error classes: `Nanook::ConnectionError`, `NanoUnitError`, `NodeRpcError` and `NodeRpcConfigurationError`.
|
108
|
+
- `Nanook::Wallet#default_representative` returns a `Nanook::Account`.
|
109
|
+
- `Nanook::Wallet#change_representative` returns a `Nanook::Account`.
|
110
|
+
- `Nanook::Wallet#unlock` can be passed no argument (`password` will be `nil`).
|
111
|
+
- `Nanook::Wallet#info` returns data from `wallet_info` RPC.
|
112
|
+
- `Nanook::Block#is_valid_work?` renamed to `#valid_work?`.
|
113
|
+
- `Nanook::Block#republish` returns an Array of `Nanook::Block`s.
|
114
|
+
- `Nanook::Block#chain` returns an Array of `Nanook::Block`s.
|
115
|
+
- `Nanook::Block#successors` returns an Array of `Nanook::Block`s.
|
116
|
+
- `Nanook::Block#info`:
|
117
|
+
- returns balances in nano, and can optionally be passed `unit: :raw` argument.
|
118
|
+
- returns account values as `Nanook::Account` and block values as `Nanook::Block`.
|
119
|
+
- `Nanook::Node#peers` returns details as a `Hash` keyed by `Nanook::Account`.
|
120
|
+
- `Nanook::Account#pending` returns source as `Nanook::Account` and block as `Nanook::Block` when `detailed: true`.
|
121
|
+
- `Nanook::Account#representative` returns a `Nanook::Account`.
|
122
|
+
- `Nanook::Account#delegators` returns accounts as `Nanook::Account`s.
|
123
|
+
- `Nanook::Account#history` returns accounts as `Nanook::Account` and blocks as `Nanook::Block`.
|
124
|
+
- `Nanook::Account#ledger` returns accounts as `Nanook::Account` and blocks as `Nanook::Block`.
|
125
|
+
- `Nanook::Account#public_key` returns a `Nanook::PublicKey`.
|
126
|
+
- `Nanook::Account#weight` accepts an optional `unit:` argment.
|
127
|
+
- `Nanook::Account#info`:
|
128
|
+
- returns the `frontier`, `open_block`, `representative_block` values as `Nanook::Block`s.
|
129
|
+
- returns the `representative` as a `Nanook::Account`.
|
130
|
+
- `modified_timestamp` key renamed to `last_modified_at` and value is a `Time` in UTC.
|
131
|
+
- `Nanook::Key` has become `Nanook::PrivateKey`, `#generate` has been renamed `#create` and returns a `Nanook::PrivateKey`.
|
132
|
+
|
133
|
+
### Fixed
|
134
|
+
|
135
|
+
- A number of errors when node is still bootstrapping and is missing accounts from the ledger.
|
136
|
+
- `Nanook::Node#representatives_online` accessing representative list as a `Hash` after RPC change.
|
137
|
+
|
138
|
+
## 2.5.1
|
139
|
+
|
140
|
+
### Fixed
|
141
|
+
|
142
|
+
- undefined method 'new' for `BigDecimal:Class` (thank you @MihaiVoinea)
|
143
|
+
|
7
144
|
## 2.5.0
|
8
145
|
|
9
146
|
### 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
|
[](https://badge.fury.io/rb/nanook)
|
6
6
|
[](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/4.0.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/4.0.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)
|
@@ -154,24 +158,36 @@ wallet.pay(from: your_account_id, to: recipient_account_id, amount: 2, id: uniqu
|
|
154
158
|
wallet.pending
|
155
159
|
wallet.pending(limit: 1)
|
156
160
|
wallet.pending(detailed: true)
|
161
|
+
wallet.pending(allow_unconfirmed: true)
|
157
162
|
wallet.pending(unit: :raw)
|
158
163
|
wallet.receive(into: account_id)
|
159
164
|
wallet.receive(pending_block_id, into: account_id)
|
165
|
+
wallet.search_pending
|
160
166
|
|
161
167
|
wallet.account.create
|
162
168
|
wallet.account.create(5)
|
163
169
|
wallet.accounts
|
164
170
|
wallet.contains?(account_id)
|
171
|
+
wallet.move_accounts(from_wallet_id, [account_1_id, account_2_id])
|
172
|
+
wallet.remove_account(account_id)
|
165
173
|
|
166
174
|
wallet.default_representative
|
167
|
-
wallet.change_default_representative(
|
175
|
+
wallet.change_default_representative(representative_account_id)
|
176
|
+
wallet.change_password(password)
|
177
|
+
wallet.exists?
|
178
|
+
wallet.history
|
179
|
+
wallet.history(unit: :raw)
|
168
180
|
wallet.info
|
169
181
|
wallet.info(unit: :raw)
|
170
182
|
wallet.export
|
183
|
+
wallet.ledger
|
184
|
+
wallet.ledger(unit: :raw)
|
171
185
|
wallet.lock
|
172
186
|
wallet.locked?
|
187
|
+
wallet.republish_blocks
|
188
|
+
wallet.republish_blocks(limit: 5)
|
173
189
|
wallet.unlock(password)
|
174
|
-
wallet.
|
190
|
+
wallet.work
|
175
191
|
|
176
192
|
wallet.destroy
|
177
193
|
```
|
@@ -180,142 +196,165 @@ wallet.destroy
|
|
180
196
|
#### Create account:
|
181
197
|
|
182
198
|
```ruby
|
183
|
-
|
199
|
+
nanook.wallet(wallet_id).account.create
|
184
200
|
```
|
185
201
|
|
186
202
|
#### Create multiple accounts:
|
187
203
|
|
188
204
|
```ruby
|
189
|
-
|
205
|
+
nanook.wallet(wallet_id).account.create(5)
|
190
206
|
```
|
191
207
|
|
192
|
-
#### Working with
|
208
|
+
#### Working with an account:
|
193
209
|
|
194
|
-
|
210
|
+
Any account on the Nano network that is known by your node can be initialized through `Nanook#account`:
|
195
211
|
|
196
212
|
```ruby
|
197
|
-
account =
|
213
|
+
account = nanook.account(account_id)
|
214
|
+
```
|
198
215
|
|
216
|
+
See the [full documentation for Nanook::Account](https://lukes.github.io/nanook/4.0.0/Nanook/Account.html) for a detailed description of each method and example responses.
|
217
|
+
|
218
|
+
```ruby
|
199
219
|
account.balance
|
220
|
+
account.balance(allow_unconfirmed: true)
|
200
221
|
account.balance(unit: :raw)
|
201
|
-
account.pay(to: recipient_account_id, amount: 2, id: unique_id)
|
202
|
-
account.pay(to: recipient_account_id, amount: 2, id: unique_id, unit: :raw)
|
203
222
|
account.pending
|
204
223
|
account.pending(limit: 1)
|
224
|
+
account.pending(allow_unconfirmed: true)
|
205
225
|
account.pending(detailed: true)
|
226
|
+
account.pending(sorted: true)
|
206
227
|
account.pending(unit: :raw)
|
207
|
-
account.receive
|
208
|
-
account.receive(pending_block_id)
|
209
228
|
|
229
|
+
account.blocks
|
230
|
+
account.blocks(limit: 1)
|
231
|
+
account.blocks(sort: :desc)
|
232
|
+
account.delegators
|
233
|
+
account.delegators(unit: :raw)
|
234
|
+
account.delegators_count
|
210
235
|
account.exists?
|
236
|
+
account.history
|
237
|
+
account.history(limit: 1)
|
238
|
+
account.history(unit: :raw)
|
239
|
+
account.history(sort: :desc)
|
211
240
|
account.info
|
212
|
-
account.info(
|
241
|
+
account.info(allow_unconfirmed: true)
|
213
242
|
account.info(unit: :raw)
|
214
243
|
account.last_modified_at
|
215
244
|
account.ledger
|
216
245
|
account.ledger(limit: 10)
|
217
246
|
account.ledger(modified_since: Time.now)
|
218
247
|
account.ledger(unit: :raw)
|
219
|
-
account.
|
220
|
-
account.
|
221
|
-
account.history(unit: :raw)
|
248
|
+
account.ledger(sort: :desc)
|
249
|
+
account.open_block
|
222
250
|
account.public_key
|
223
|
-
account.delegators
|
224
|
-
account.delegators(unit: :raw)
|
225
251
|
account.representative
|
226
|
-
account.change_representative(new_representative)
|
227
252
|
account.weight
|
228
|
-
|
229
|
-
account.destroy
|
253
|
+
account.weight(unit: :raw)
|
230
254
|
```
|
231
255
|
|
232
|
-
#### Working with
|
256
|
+
#### Working with an account created on the node:
|
233
257
|
|
234
|
-
|
258
|
+
Accounts that have been created on your node can have
|
259
|
+
additional methods when initialized through `Nanook::Wallet#account`:
|
235
260
|
|
236
261
|
```ruby
|
237
|
-
|
262
|
+
wallet = nanook.wallet(wallet_id)
|
263
|
+
account = wallet.account(account_id)
|
264
|
+
```
|
238
265
|
|
239
|
-
account.
|
240
|
-
account.balance(unit: :raw)
|
241
|
-
account.pending
|
242
|
-
account.pending(limit: 1)
|
243
|
-
account.pending(detailed: true)
|
244
|
-
account.pending(unit: :raw)
|
266
|
+
As well as the following methods, all methods of [regular accounts](#working-with-any-account) can also be called.
|
245
267
|
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
account.
|
250
|
-
account.
|
251
|
-
account.
|
252
|
-
account.
|
253
|
-
account.
|
254
|
-
account.
|
255
|
-
account.
|
256
|
-
account.
|
257
|
-
account.history(unit: :raw)
|
258
|
-
account.public_key
|
259
|
-
account.delegators
|
260
|
-
account.delegators(unit: :raw)
|
261
|
-
account.representative
|
262
|
-
account.weight
|
268
|
+
See the [full documentation for Nanook::WalletAccount](https://lukes.github.io/nanook/4.0.0/Nanook/WalletAccount.html) for a detailed description of each method and example responses.
|
269
|
+
|
270
|
+
```ruby
|
271
|
+
account.pay(to: recipient_account_id, amount: 2, id: unique_id)
|
272
|
+
account.pay(to: recipient_account_id, amount: 2, id: unique_id, unit: :raw)
|
273
|
+
account.receive
|
274
|
+
account.receive(pending_block_id)
|
275
|
+
account.change_representative(new_representative)
|
276
|
+
account.set_work(work)
|
277
|
+
account.work
|
278
|
+
account.destroy
|
263
279
|
```
|
264
280
|
|
265
281
|
### Blocks
|
266
282
|
|
267
|
-
See the [full documentation for Nanook::Block](https://lukes.github.io/nanook/
|
283
|
+
See the [full documentation for Nanook::Block](https://lukes.github.io/nanook/4.0.0/Nanook/Block.html) for a detailed description of each method and example responses.
|
268
284
|
|
269
285
|
```ruby
|
270
|
-
block =
|
286
|
+
block = nanook.block(block_id)
|
271
287
|
|
272
|
-
block.info # Verified blocks in the ledger
|
273
|
-
block.info(allow_unchecked: true) # Verified blocks AND unchecked synchronizing blocks
|
274
288
|
block.account
|
275
|
-
block.
|
276
|
-
block.
|
277
|
-
block.
|
289
|
+
block.amount
|
290
|
+
block.amount(unit: :raw)
|
291
|
+
block.ancestors
|
292
|
+
block.ancestors(limit: 10)
|
293
|
+
block.ancestors(offset: 10)
|
294
|
+
block.balance
|
295
|
+
block.change?
|
296
|
+
block.checked?
|
278
297
|
block.confirm
|
279
|
-
block.
|
280
|
-
block.
|
281
|
-
block.
|
298
|
+
block.descendants
|
299
|
+
block.descendants(limit: 10)
|
300
|
+
block.descendants(offset: 10)
|
301
|
+
block.epoch?
|
302
|
+
block.exists?
|
303
|
+
block.exists?(allow_unchecked: true)
|
304
|
+
block.height
|
305
|
+
block.info # Verified blocks in the ledger
|
306
|
+
block.info(allow_unchecked: true) # Verified blocks AND unchecked synchronizing blocks
|
307
|
+
block.info(unit: :raw)
|
308
|
+
block.next
|
309
|
+
block.open?
|
310
|
+
block.pending?
|
311
|
+
block.pending?(allow_unconfirmed: true)
|
312
|
+
block.previous
|
313
|
+
block.receive?
|
314
|
+
block.representative
|
282
315
|
block.republish
|
283
316
|
block.republish(sources: 2)
|
284
317
|
block.republish(destinations: 2)
|
285
|
-
block.
|
286
|
-
block.
|
287
|
-
block.
|
288
|
-
block.
|
289
|
-
block.
|
318
|
+
block.send?
|
319
|
+
block.signature
|
320
|
+
block.timestamp
|
321
|
+
block.type
|
322
|
+
block.unchecked?
|
323
|
+
block.work
|
290
324
|
|
291
325
|
block.generate_work
|
292
326
|
block.generate_work(use_peers: true)
|
293
327
|
block.cancel_work
|
294
|
-
block.
|
328
|
+
block.valid_work?(work)
|
295
329
|
```
|
296
330
|
|
297
331
|
### Managing your nano node
|
298
332
|
|
299
|
-
See the [full documentation for Nanook::Node](https://lukes.github.io/nanook/
|
333
|
+
See the [full documentation for Nanook::Node](https://lukes.github.io/nanook/4.0.0/Nanook/Node.html) for a detailed description of each method and example responses.
|
300
334
|
|
301
335
|
```ruby
|
302
|
-
node =
|
336
|
+
node = nanook.node
|
303
337
|
|
304
338
|
node.account_count
|
305
339
|
node.block_count
|
306
|
-
node.block_count_by_type
|
307
340
|
node.bootstrap(address: "::ffff:138.201.94.249", port: 7075)
|
308
341
|
node.bootstrap_any
|
342
|
+
node.bootstrap_any(account: account_id)
|
309
343
|
node.bootstrap_lazy(block_id)
|
310
344
|
node.bootstrap_lazy(block_id, force: true)
|
311
|
-
node.
|
312
|
-
node.confirmation_history
|
345
|
+
node.confirmation_quorum
|
313
346
|
node.difficulty
|
314
347
|
node.difficulty(include_trend: true)
|
348
|
+
node.keepalive(address: "::ffff:138.201.94.249", port: 7075)
|
315
349
|
node.peers
|
350
|
+
node.receive_minimum
|
351
|
+
node.receive_minimum(unit: :raw)
|
352
|
+
node.change_receive_minimum(amount)
|
353
|
+
node.change_receive_minimum(amount, unit: :raw)
|
316
354
|
node.representatives
|
317
355
|
node.representatives(unit: :raw)
|
318
356
|
node.representatives_online
|
357
|
+
node.search_pending
|
319
358
|
node.synchronizing_blocks
|
320
359
|
node.synchronizing_blocks(limit: 1)
|
321
360
|
node.sync_progress
|
@@ -327,7 +366,7 @@ node.stop
|
|
327
366
|
### Work peers
|
328
367
|
|
329
368
|
```ruby
|
330
|
-
work_peers =
|
369
|
+
work_peers = nanook.work_peers
|
331
370
|
|
332
371
|
work_peers.add(address: "::ffff:172.17.0.1:7076", port: 7076)
|
333
372
|
work_peers.clear
|
@@ -339,26 +378,44 @@ work_peers.list
|
|
339
378
|
#### Create private public key pair:
|
340
379
|
|
341
380
|
```ruby
|
342
|
-
|
343
|
-
|
381
|
+
private_key = nanook.private_key.create
|
382
|
+
private_key = nanook.private_key.create(seed: seed, index: 0)
|
383
|
+
private_key.public_key # => Nanook::PublicKey
|
344
384
|
```
|
345
385
|
|
346
|
-
#### Working with a
|
386
|
+
#### Working with a private key
|
347
387
|
|
348
388
|
```ruby
|
349
|
-
key =
|
389
|
+
key = nanook.private_key(private_key)
|
390
|
+
|
391
|
+
key.account
|
392
|
+
key.public_key
|
393
|
+
```
|
350
394
|
|
351
|
-
key
|
395
|
+
#### Working with a public key
|
396
|
+
|
397
|
+
```ruby
|
398
|
+
key = nanook.public_key(public_key)
|
399
|
+
|
400
|
+
key.account
|
401
|
+
```
|
402
|
+
|
403
|
+
### Network
|
404
|
+
|
405
|
+
A summarized overview of the Nano network:
|
406
|
+
|
407
|
+
```ruby
|
408
|
+
nanook.network_telemetry
|
352
409
|
```
|
353
410
|
|
354
411
|
## Nanook Metal
|
355
412
|
|
356
|
-
You can do any call listed in the [Nano RPC](https://
|
413
|
+
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.
|
357
414
|
|
358
|
-
E.g., the [accounts_create command](https://
|
415
|
+
E.g., the [accounts_create command](https://docs.nano.org/commands/rpc-protocol/#accounts_create) can be called like this:
|
359
416
|
|
360
417
|
```ruby
|
361
|
-
|
418
|
+
nanook.rpc.call(:accounts_create, wallet: wallet_id, count: 2)
|
362
419
|
```
|
363
420
|
|
364
421
|
## Contributing
|
@@ -379,7 +436,7 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
379
436
|
|
380
437
|
## Buy me a nano coffee
|
381
438
|
|
382
|
-
This library is
|
439
|
+
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!
|
383
440
|
|
384
441
|
nano_3c3ek3k8135f6e8qtfy8eruk9q3yzmpebes7btzncccdest8ymzhjmnr196j
|
385
442
|
|