nanook 2.3.0 → 3.0.1
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 +5 -5
- data/CHANGELOG.md +140 -0
- data/README.md +154 -91
- data/bin/console +4 -3
- data/lib/nanook.rb +77 -21
- data/lib/nanook/account.rb +238 -168
- data/lib/nanook/block.rb +374 -119
- data/lib/nanook/errors.rb +10 -0
- data/lib/nanook/node.rb +229 -66
- 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
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 86e9dced1a4ce9942cd123c262d7ff45fad6e982ce67c6903b6495a2609c29f9
|
4
|
+
data.tar.gz: 11d3752a80bc33e41ba7e19c7d4e2ad54b2d4a08212b71e7fd3579092d9b8c55
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c53742261c03ba53fdcc46ffbcd0c556ccfe3d1b025f593d1b3f1ee9c6f1c1fcacb387b419aac07eefab390356022373dcc2121449097e968f051ac0498d4dfc
|
7
|
+
data.tar.gz: d1d4e28e58f28ee5ea161232276454b5eafd8959b63685db3440a6e15e1328e31b6676f5676f94fe0d30420e6e5b0c540a9345033dfb137fbf89d56ccf0de951
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,146 @@ 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.0.1
|
8
|
+
|
9
|
+
### Fixed
|
10
|
+
|
11
|
+
- Fix `Block#type` being `nil` when RPC doesn't return a `subtype`.
|
12
|
+
|
13
|
+
## 3.0.0
|
14
|
+
|
15
|
+
### Removed
|
16
|
+
|
17
|
+
- `Nanook::Block#block_count_by_type` Removed, as the RPC no longer supports this command.
|
18
|
+
- `Nanook::Block#history` Removed, as the RPC command is deprecated.
|
19
|
+
- `Nanook::Block#publish` Removed, as the RPC command expects more data than what we instantiate within `Nanook::Block`.
|
20
|
+
- Removed all RPC calls that are not recommended for production:
|
21
|
+
- `Nanook::Node#bootstrap_status`.
|
22
|
+
- `Nanook::Node#confirmation_history`.
|
23
|
+
- `Nanook::Node#confirmed_recently?`.
|
24
|
+
- `Nanook::Key` Replaced by `Nanook::PrivateKey`.
|
25
|
+
- `Nanook::Account#info` No longer accepts `detailed:` argument.
|
26
|
+
- `Nanook::Node#synced?` As this was deprecated for removal in v3.0.
|
27
|
+
|
28
|
+
### Added
|
29
|
+
|
30
|
+
- Added missing `Nanook::WalletAccount#block_count` delegate.
|
31
|
+
- Added `Nanook#network_telemetry`.
|
32
|
+
- Added `Nanook::Rpc#test`.
|
33
|
+
- Added `Nanook::WalletAccount#work`.
|
34
|
+
- Added `Nanook::WalletAccount#set_work`.
|
35
|
+
- Added `Nanook::Account#blocks`.
|
36
|
+
- Added `Nanook::Account#delegators_count`.
|
37
|
+
- Added `Nanook::Account#open_block`.
|
38
|
+
- Added `Nanook::Node#change_receive_minimum`.
|
39
|
+
- Added `Nanook::Node#confirmation_quorum`.
|
40
|
+
- Added `Nanook::Node#keepalive`.
|
41
|
+
- Added `Nanook::Node#receive_minimum`.
|
42
|
+
- Added `Nanook::Node#search_pending`.
|
43
|
+
- Added `Nanook::Wallet#history`.
|
44
|
+
- Added `Nanook::Wallet#exists?`.
|
45
|
+
- Added `Nanook::Wallet#ledger`.
|
46
|
+
- Added `Nanook::Wallet#move_accounts`.
|
47
|
+
- Added `Nanook::Wallet#remove_account`.
|
48
|
+
- Added `Nanook::Wallet#republish_blocks`.
|
49
|
+
- Added `Nanook::Wallet#search_pending`.
|
50
|
+
- Added `Nanook::Wallet#work`.
|
51
|
+
- Added `Nanook::Block#account`.
|
52
|
+
- Added `Nanook::Block#amount`.
|
53
|
+
- Added `Nanook::Block#balance`.
|
54
|
+
- Added `Nanook::Block#change?`.
|
55
|
+
- Added `Nanook::Block#confirmed?`.
|
56
|
+
- Added `Nanook::Block#epoch?`.
|
57
|
+
- Added `Nanook::Block#exists?`.
|
58
|
+
- Added `Nanook::Block#height`.
|
59
|
+
- Added `Nanook::Block#open?`.
|
60
|
+
- Added `Nanook::Block#previous`.
|
61
|
+
- Added `Nanook::Block#receive?`.
|
62
|
+
- Added `Nanook::Block#representative`.
|
63
|
+
- Added `Nanook::Block#send?`.
|
64
|
+
- Added `Nanook::Block#signature`.
|
65
|
+
- Added `Nanook::Block#timestamp`.
|
66
|
+
- Added `Nanook::Block#type`.
|
67
|
+
- Added `Nanook::Block#unconfirmed?`.
|
68
|
+
- Added `Nanook::Block#work`.
|
69
|
+
- Added `Nanook::PrivateKey` with methods `#create`, `#account` and `#public_key`.
|
70
|
+
- Added `Nanook::PublicKey` with method `#account`.
|
71
|
+
- Added equality testing methods `#==`, `#eql?` and `#hash` for:
|
72
|
+
- `Nanook::Account`
|
73
|
+
- `Nanook::Block`
|
74
|
+
- `Nanook::PrivateKey`
|
75
|
+
- `Nanook::PublicKey`
|
76
|
+
- `Nanook::Wallet`
|
77
|
+
- `Nanook::WalletAccount`
|
78
|
+
|
79
|
+
### Changed
|
80
|
+
|
81
|
+
- New error classes: `Nanook::ConnectionError`, `NanoUnitError`, `NodeRpcError` and `NodeRpcConfigurationError`.
|
82
|
+
- `Nanook::Wallet#default_representative` returns a `Nanook::Account`.
|
83
|
+
- `Nanook::Wallet#change_representative` returns a `Nanook::Account`.
|
84
|
+
- `Nanook::Wallet#unlock` can be passed no argument (`password` will be `nil`).
|
85
|
+
- `Nanook::Wallet#info` returns data from `wallet_info` RPC.
|
86
|
+
- `Nanook::Block#is_valid_work?` renamed to `#valid_work?`.
|
87
|
+
- `Nanook::Block#republish` returns an Array of `Nanook::Block`s.
|
88
|
+
- `Nanook::Block#chain` returns an Array of `Nanook::Block`s.
|
89
|
+
- `Nanook::Block#successors` returns an Array of `Nanook::Block`s.
|
90
|
+
- `Nanook::Block#info`:
|
91
|
+
- returns balances in nano, and can optionally be passed `unit: :raw` argument.
|
92
|
+
- returns account values as `Nanook::Account` and block values as `Nanook::Block`.
|
93
|
+
- `Nanook::Node#peers` returns details as a `Hash` keyed by `Nanook::Account`.
|
94
|
+
- `Nanook::Account#pending` returns source as `Nanook::Account` and block as `Nanook::Block` when `detailed: true`.
|
95
|
+
- `Nanook::Account#representative` returns a `Nanook::Account`.
|
96
|
+
- `Nanook::Account#delegators` returns accounts as `Nanook::Account`s.
|
97
|
+
- `Nanook::Account#history` returns accounts as `Nanook::Account` and blocks as `Nanook::Block`.
|
98
|
+
- `Nanook::Account#ledger` returns accounts as `Nanook::Account` and blocks as `Nanook::Block`.
|
99
|
+
- `Nanook::Account#public_key` returns a `Nanook::PublicKey`.
|
100
|
+
- `Nanook::Account#weight` accepts an optional `unit:` argment.
|
101
|
+
- `Nanook::Account#info`:
|
102
|
+
- returns the `frontier`, `open_block`, `representative_block` values as `Nanook::Block`s.
|
103
|
+
- returns the `representative` as a `Nanook::Account`.
|
104
|
+
- `modified_timestamp` key renamed to `last_modified_at` and value is a `Time` in UTC.
|
105
|
+
- `Nanook::Key` has become `Nanook::PrivateKey`, `#generate` has been renamed `#create` and returns a `Nanook::PrivateKey`.
|
106
|
+
|
107
|
+
### Fixed
|
108
|
+
|
109
|
+
- A number of errors when node is still bootstrapping and is missing accounts from the ledger.
|
110
|
+
- `Nanook::Node#representatives_online` accessing representative list as a `Hash` after RPC change.
|
111
|
+
|
112
|
+
## 2.5.1
|
113
|
+
|
114
|
+
### Fixed
|
115
|
+
|
116
|
+
- undefined method 'new' for `BigDecimal:Class` (thank you @MihaiVoinea)
|
117
|
+
|
118
|
+
## 2.5.0
|
119
|
+
|
120
|
+
### Added
|
121
|
+
|
122
|
+
- New `Nanook::Node#bootstrap_lazy` method.
|
123
|
+
- New `Nanook::Node#bootstrap_status` method.
|
124
|
+
- New `Nanook::Node#difficulty` method.
|
125
|
+
- New `Nanook::Node#uptime` method.
|
126
|
+
- New `Nanook::Wallet#lock` method.
|
127
|
+
|
128
|
+
### Changed
|
129
|
+
|
130
|
+
- `Nanook::Node#chain` now takes optional `offset` argument.
|
131
|
+
- `Nanook::Node#successors` now takes optional `offset` argument.
|
132
|
+
- `Nanook::Node#successors` now aliased as `Nanook::Node#ancestors`
|
133
|
+
- Updated docs to use `nano_` prefixed addresses.
|
134
|
+
|
135
|
+
## 2.4.0
|
136
|
+
|
137
|
+
### Added
|
138
|
+
|
139
|
+
- New `Nanook::Node#confirmation_history` method.
|
140
|
+
- New `Nanook::Block#confirm` method.
|
141
|
+
- New `Nanook::Block#confirmed_recently?` method.
|
142
|
+
|
143
|
+
### Changed
|
144
|
+
|
145
|
+
- `Nanook::Block#generate_work` now can take optional `use_peers` argument.
|
146
|
+
|
7
147
|
## 2.3.0
|
8
148
|
|
9
149
|
### 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)
|
@@ -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'
|
14
|
+
gem 'nanook'
|
15
15
|
```
|
16
16
|
|
17
17
|
And then execute:
|
@@ -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.0.1/) 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.0.1/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,131 +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.0.1/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.0.1/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.0.1/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
|
|
283
|
+
block.account
|
284
|
+
block.amount
|
285
|
+
block.amount(unit: :raw)
|
286
|
+
block.balance
|
287
|
+
block.change?
|
288
|
+
block.checked?
|
289
|
+
block.epoch?
|
290
|
+
block.exists?
|
291
|
+
block.exists?(allow_unchecked: true)
|
292
|
+
block.height
|
270
293
|
block.info # Verified blocks in the ledger
|
271
294
|
block.info(allow_unchecked: true) # Verified blocks AND unchecked synchronizing blocks
|
295
|
+
block.info(unit: :raw)
|
272
296
|
block.account
|
273
297
|
block.chain
|
274
298
|
block.chain(limit: 10)
|
275
|
-
block.
|
276
|
-
block.
|
299
|
+
block.chain(offset: 10)
|
300
|
+
block.confirm
|
277
301
|
block.republish
|
278
302
|
block.republish(sources: 2)
|
279
303
|
block.republish(destinations: 2)
|
304
|
+
block.open?
|
280
305
|
block.pending?
|
281
|
-
block.
|
306
|
+
block.previous
|
307
|
+
block.receive?
|
308
|
+
block.representative
|
309
|
+
block.send?
|
310
|
+
block.signature
|
282
311
|
block.successors
|
283
312
|
block.successors(limit: 10)
|
313
|
+
block.successors(offset: 10)
|
314
|
+
block.timestamp
|
315
|
+
block.type
|
316
|
+
block.unchecked?
|
317
|
+
block.work
|
284
318
|
|
285
319
|
block.generate_work
|
320
|
+
block.generate_work(use_peers: true)
|
286
321
|
block.cancel_work
|
287
|
-
block.
|
322
|
+
block.valid_work?(work)
|
288
323
|
```
|
289
324
|
|
290
325
|
### Managing your nano node
|
291
326
|
|
292
|
-
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.0.1/Nanook/Node.html) for a detailed description of each method and example responses.
|
293
328
|
|
294
329
|
```ruby
|
295
|
-
node =
|
330
|
+
node = nanook.node
|
296
331
|
|
297
332
|
node.account_count
|
298
333
|
node.block_count
|
299
|
-
node.block_count_by_type
|
300
|
-
node.bootstrap_any
|
301
334
|
node.bootstrap(address: "::ffff:138.201.94.249", port: 7075)
|
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)
|
302
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)
|
303
347
|
node.representatives
|
304
348
|
node.representatives(unit: :raw)
|
305
349
|
node.representatives_online
|
350
|
+
node.search_pending
|
306
351
|
node.synchronizing_blocks
|
307
352
|
node.synchronizing_blocks(limit: 1)
|
308
353
|
node.sync_progress
|
@@ -314,7 +359,7 @@ node.stop
|
|
314
359
|
### Work peers
|
315
360
|
|
316
361
|
```ruby
|
317
|
-
work_peers =
|
362
|
+
work_peers = nanook.work_peers
|
318
363
|
|
319
364
|
work_peers.add(address: "::ffff:172.17.0.1:7076", port: 7076)
|
320
365
|
work_peers.clear
|
@@ -326,26 +371,44 @@ work_peers.list
|
|
326
371
|
#### Create private public key pair:
|
327
372
|
|
328
373
|
```ruby
|
329
|
-
|
330
|
-
|
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
|
331
377
|
```
|
332
378
|
|
333
|
-
#### Working with a
|
379
|
+
#### Working with a private key
|
334
380
|
|
335
381
|
```ruby
|
336
|
-
key =
|
382
|
+
key = nanook.private_key(private_key)
|
383
|
+
|
384
|
+
key.account
|
385
|
+
key.public_key
|
386
|
+
```
|
337
387
|
|
338
|
-
key
|
388
|
+
#### Working with a public key
|
389
|
+
|
390
|
+
```ruby
|
391
|
+
key = nanook.public_key(public_key)
|
392
|
+
|
393
|
+
key.account
|
394
|
+
```
|
395
|
+
|
396
|
+
### Network
|
397
|
+
|
398
|
+
A summarized overview of the Nano network:
|
399
|
+
|
400
|
+
```ruby
|
401
|
+
nanook.network_telemetry
|
339
402
|
```
|
340
403
|
|
341
404
|
## Nanook Metal
|
342
405
|
|
343
|
-
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.
|
344
407
|
|
345
|
-
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:
|
346
409
|
|
347
410
|
```ruby
|
348
|
-
|
411
|
+
nanook.rpc.call(:accounts_create, wallet: wallet_id, count: 2)
|
349
412
|
```
|
350
413
|
|
351
414
|
## Contributing
|
@@ -366,11 +429,11 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
366
429
|
|
367
430
|
## Buy me a nano coffee
|
368
431
|
|
369
|
-
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!
|
370
433
|
|
371
|
-
|
434
|
+
nano_3c3ek3k8135f6e8qtfy8eruk9q3yzmpebes7btzncccdest8ymzhjmnr196j
|
372
435
|
|
373
|
-

|
374
437
|
|
375
438
|
|
376
439
|
|