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

|
370
437
|
|
371
438
|
|
372
439
|
|