nanook 2.5.0 → 4.0.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 +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
|
[![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/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
|
|