hive-ruby 1.0.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +54 -0
  3. data/CONTRIBUTING.md +79 -0
  4. data/Gemfile +3 -0
  5. data/Gemfile.lock +91 -0
  6. data/LICENSE +21 -0
  7. data/README.md +248 -0
  8. data/Rakefile +358 -0
  9. data/gource.sh +6 -0
  10. data/hive-ruby.gemspec +40 -0
  11. data/images/Anthony Martin.png +0 -0
  12. data/lib/hive.rb +89 -0
  13. data/lib/hive/api.rb +223 -0
  14. data/lib/hive/base_error.rb +218 -0
  15. data/lib/hive/block_api.rb +78 -0
  16. data/lib/hive/bridge.rb +12 -0
  17. data/lib/hive/broadcast.rb +1334 -0
  18. data/lib/hive/chain_config.rb +34 -0
  19. data/lib/hive/fallback.rb +287 -0
  20. data/lib/hive/formatter.rb +14 -0
  21. data/lib/hive/jsonrpc.rb +112 -0
  22. data/lib/hive/marshal.rb +231 -0
  23. data/lib/hive/mixins/jsonable.rb +37 -0
  24. data/lib/hive/mixins/retriable.rb +58 -0
  25. data/lib/hive/mixins/serializable.rb +45 -0
  26. data/lib/hive/operation.rb +141 -0
  27. data/lib/hive/operation/account_create.rb +10 -0
  28. data/lib/hive/operation/account_create_with_delegation.rb +12 -0
  29. data/lib/hive/operation/account_update.rb +8 -0
  30. data/lib/hive/operation/account_witness_proxy.rb +4 -0
  31. data/lib/hive/operation/account_witness_vote.rb +5 -0
  32. data/lib/hive/operation/cancel_transfer_from_savings.rb +4 -0
  33. data/lib/hive/operation/challenge_authority.rb +5 -0
  34. data/lib/hive/operation/change_recovery_account.rb +5 -0
  35. data/lib/hive/operation/claim_account.rb +5 -0
  36. data/lib/hive/operation/claim_reward_balance.rb +6 -0
  37. data/lib/hive/operation/comment.rb +9 -0
  38. data/lib/hive/operation/comment_options.rb +10 -0
  39. data/lib/hive/operation/convert.rb +5 -0
  40. data/lib/hive/operation/create_claimed_account.rb +10 -0
  41. data/lib/hive/operation/custom.rb +5 -0
  42. data/lib/hive/operation/custom_binary.rb +8 -0
  43. data/lib/hive/operation/custom_json.rb +6 -0
  44. data/lib/hive/operation/decline_voting_rights.rb +4 -0
  45. data/lib/hive/operation/delegate_vesting_shares.rb +5 -0
  46. data/lib/hive/operation/delete_comment.rb +4 -0
  47. data/lib/hive/operation/escrow_approve.rb +8 -0
  48. data/lib/hive/operation/escrow_dispute.rb +7 -0
  49. data/lib/hive/operation/escrow_release.rb +10 -0
  50. data/lib/hive/operation/escrow_transfer.rb +12 -0
  51. data/lib/hive/operation/feed_publish.rb +4 -0
  52. data/lib/hive/operation/limit_order_cancel.rb +4 -0
  53. data/lib/hive/operation/limit_order_create.rb +8 -0
  54. data/lib/hive/operation/limit_order_create2.rb +8 -0
  55. data/lib/hive/operation/prove_authority.rb +4 -0
  56. data/lib/hive/operation/recover_account.rb +6 -0
  57. data/lib/hive/operation/report_over_production.rb +5 -0
  58. data/lib/hive/operation/request_account_recovery.rb +6 -0
  59. data/lib/hive/operation/reset_account.rb +5 -0
  60. data/lib/hive/operation/set_reset_account.rb +5 -0
  61. data/lib/hive/operation/set_withdraw_vesting_route.rb +6 -0
  62. data/lib/hive/operation/transfer.rb +6 -0
  63. data/lib/hive/operation/transfer_from_savings.rb +7 -0
  64. data/lib/hive/operation/transfer_to_savings.rb +6 -0
  65. data/lib/hive/operation/transfer_to_vesting.rb +5 -0
  66. data/lib/hive/operation/vote.rb +6 -0
  67. data/lib/hive/operation/withdraw_vesting.rb +4 -0
  68. data/lib/hive/operation/witness_set_properties.rb +5 -0
  69. data/lib/hive/operation/witness_update.rb +7 -0
  70. data/lib/hive/rpc/base_client.rb +179 -0
  71. data/lib/hive/rpc/http_client.rb +143 -0
  72. data/lib/hive/rpc/thread_safe_http_client.rb +35 -0
  73. data/lib/hive/stream.rb +385 -0
  74. data/lib/hive/transaction.rb +115 -0
  75. data/lib/hive/transaction_builder.rb +406 -0
  76. data/lib/hive/type/amount.rb +126 -0
  77. data/lib/hive/type/base_type.rb +10 -0
  78. data/lib/hive/utils.rb +17 -0
  79. data/lib/hive/version.rb +4 -0
  80. metadata +502 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f12eb926857666814b1ddd99302952102c91299bba3d2efc9ffb75888f72c520
4
+ data.tar.gz: e1103584e3aec71e89f336c3a044d54ad8f3f8bd0056fdf6d1cf694ce3c4f816
5
+ SHA512:
6
+ metadata.gz: 16e20294bf841fa651c9a236c499f659dbf10b136876e31acead394e4362f68583fcb846a86cd19cfdd7505c46dda22d13c05f008f290e1b92c4b7b36b2589dc
7
+ data.tar.gz: 4c3104a416ce1010e6e4543bb9830aad3a884e7af34d8083d59f8b57d4043cdb3454a37eefe3927aeee516f9eda9c12109495deb7ec0252fd5d454d50b9d7222
data/.gitignore ADDED
@@ -0,0 +1,54 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /spec/examples.txt
9
+ /test/tmp/
10
+ /test/fixtures/vcr_cassettes/*.yml
11
+ /test/version_tmp/
12
+ /tmp/
13
+
14
+ # Used by dotenv library to load environment variables.
15
+ # .env
16
+
17
+ ## Specific to RubyMotion:
18
+ .dat*
19
+ .repl_history
20
+ build/
21
+ *.bridgesupport
22
+ build-iPhoneOS/
23
+ build-iPhoneSimulator/
24
+
25
+ ## Specific to RubyMotion (use of CocoaPods):
26
+ #
27
+ # We recommend against adding the Pods directory to your .gitignore. However
28
+ # you should judge for yourself, the pros and cons are mentioned at:
29
+ # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
30
+ #
31
+ # vendor/Pods/
32
+
33
+ ## Documentation cache and generated files:
34
+ /.yardoc/
35
+ /_yardoc/
36
+ /doc/
37
+ /rdoc/
38
+
39
+ ## Environment normalization:
40
+ /.bundle/
41
+ /vendor/bundle
42
+ /lib/bundler/man/
43
+
44
+ # for a library or gem, you might want to ignore these files since the code is
45
+ # intended to run in multiple environments; otherwise, check them in:
46
+ # Gemfile.lock
47
+ # .ruby-version
48
+ # .ruby-gemset
49
+
50
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
51
+ .rvmrc
52
+
53
+ # gource output
54
+ output.mp4
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,79 @@
1
+
2
+ # Contributing
3
+
4
+ Everyone is welcome to contribute code to Galactica Actual projects. We have a Code of Conduct;
5
+ we ask that you please follow it in all your interactions with our team and your fellow
6
+ contributors.
7
+
8
+ Please note that this contributing guide only applies to our development presence.
9
+
10
+ ## How to contribute
11
+
12
+ 1. File an issue describing the problem you would like to
13
+ solve or the feature you would like to add. It saves unnecessary work on your part,
14
+ in case there's a nontechnical reason we can't accept a particular change.
15
+ Please note that we can and will _automatically close all pull requests that do not refer to
16
+ an issue_.
17
+ 2. Learn the conventions of the project you are submitting code to, even implicit ones,
18
+ and follow them. In case you have a question about a project's conventions, please
19
+ ask on the issue you filed. This includes writing tests, formatting code, and documentation.
20
+ 3. File a pull request against your Github issue and fill out the pull request template.
21
+ Remember, you are agreeing to license your code and any intellectual property associated
22
+ with your code under the same terms as the repository you are contributing to.
23
+ 4. If one of our teammates asks you to make changes, please make them. Our rule is that all
24
+ requests for changes in code review are resolved in favor of the reviewer. Our teammates
25
+ follow this rule too!
26
+
27
+ ## Code of Conduct
28
+
29
+ Again, please note that this Code of Conduct _only applies to our development presence_.
30
+
31
+ ### Our Pledge
32
+
33
+ We welcome your membership in our project and community under the rules that we have set below.
34
+
35
+ In the interest of fostering an open and welcoming environment, we as
36
+ contributors and maintainers will work to make your participation in
37
+ our project and community as fulfilling as possible.
38
+
39
+ ### Our Rules
40
+
41
+ All members of our project and community must:
42
+
43
+ 1. Show empathy toward other project and community members
44
+ 2. Use welcoming and inclusive language
45
+ 3. Respect differing viewpoints and experiences
46
+ 4. Gracefully accept constructive criticism
47
+
48
+ All members of our project and community must not:
49
+
50
+ 1. Harm our project and community, or advocate harm to our project and community
51
+ 2. Insult or make derogatory comments about others
52
+ 3. Interact with others after they have withdrawn permission to do so
53
+
54
+ ### Our Responsibilities
55
+
56
+ We will use any and all lawful means at our disposal to enforce our rules. This includes
57
+ but is not limited to:
58
+
59
+ 1. Rejecting contributions
60
+ 2. Removing comments, commits, code, wiki edits, and issues
61
+ 3. Banning abusers
62
+
63
+ We will clarify standards of acceptable behavior and we will take appropriate
64
+ and fair corrective action in response to any instances of unacceptable behavior.
65
+
66
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
67
+ reported by contacting us at github.abuse@martin-studio.com. All
68
+ complaints will be reviewed and investigated and will result in a response that
69
+ is deemed necessary and appropriate to the circumstances. We
70
+ maintain strict confidentiality with regard to the reporter of an incident.
71
+ Further details of specific enforcement policies may be posted separately.
72
+
73
+ ### Attribution
74
+
75
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
76
+ available at [http://contributor-covenant.org/version/1/4][version]
77
+
78
+ [homepage]: http://contributor-covenant.org
79
+ [version]: http://contributor-covenant.org/version/1/4/gg
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,91 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ hive-ruby (1.0.0.pre.1)
5
+ base58 (~> 0.2, >= 0.2.3)
6
+ bindata (~> 2.4, >= 2.4.4)
7
+ bitcoin-ruby (~> 0.0, >= 0.0.18)
8
+ ffi (~> 1.9, >= 1.9.23)
9
+ hashie (~> 3.5, >= 3.5.7)
10
+ json (~> 2.1, >= 2.1.0)
11
+ logging (~> 2.2, >= 2.2.0)
12
+
13
+ GEM
14
+ remote: https://rubygems.org/
15
+ specs:
16
+ addressable (2.7.0)
17
+ public_suffix (>= 2.0.2, < 5.0)
18
+ awesome_print (1.8.0)
19
+ base58 (0.2.3)
20
+ bindata (2.4.7)
21
+ bitcoin-ruby (0.0.20)
22
+ eventmachine
23
+ ffi
24
+ scrypt
25
+ coderay (1.1.2)
26
+ crack (0.4.3)
27
+ safe_yaml (~> 1.0.0)
28
+ docile (1.3.2)
29
+ eventmachine (1.2.7)
30
+ ffi (1.12.2)
31
+ ffi-compiler (1.0.1)
32
+ ffi (>= 1.0.0)
33
+ rake
34
+ hashdiff (1.0.1)
35
+ hashie (3.6.0)
36
+ io-console (0.5.6)
37
+ irb (1.2.4)
38
+ reline (>= 0.0.1)
39
+ json (2.3.0)
40
+ little-plugger (1.1.4)
41
+ logging (2.2.2)
42
+ little-plugger (~> 1.1)
43
+ multi_json (~> 1.10)
44
+ method_source (1.0.0)
45
+ minitest (5.14.0)
46
+ minitest-line (0.6.5)
47
+ minitest (~> 5.0)
48
+ minitest-proveit (1.0.0)
49
+ minitest (> 5, < 7)
50
+ multi_json (1.14.1)
51
+ pry (0.13.1)
52
+ coderay (~> 1.1)
53
+ method_source (~> 1.0)
54
+ public_suffix (4.0.4)
55
+ rake (13.0.1)
56
+ reline (0.1.4)
57
+ io-console (~> 0.5)
58
+ safe_yaml (1.0.5)
59
+ scrypt (3.0.7)
60
+ ffi-compiler (>= 1.0, < 2.0)
61
+ simplecov (0.18.5)
62
+ docile (~> 1.1)
63
+ simplecov-html (~> 0.11)
64
+ simplecov-html (0.12.2)
65
+ vcr (5.1.0)
66
+ webmock (3.8.3)
67
+ addressable (>= 2.3.6)
68
+ crack (>= 0.3.2)
69
+ hashdiff (>= 0.4.0, < 2.0.0)
70
+ yard (0.9.25)
71
+
72
+ PLATFORMS
73
+ ruby
74
+
75
+ DEPENDENCIES
76
+ awesome_print (~> 1.8, >= 1.8.0)
77
+ bundler (~> 1.16, >= 1.16.1)
78
+ hive-ruby!
79
+ irb (~> 1.2, >= 1.2.3)
80
+ minitest (~> 5.10, >= 5.10.3)
81
+ minitest-line (~> 0.6, >= 0.6.4)
82
+ minitest-proveit (~> 1.0, >= 1.0.0)
83
+ pry (~> 0.11, >= 0.11.3)
84
+ rake (~> 13.0.1, >= 12.3.0)
85
+ simplecov (~> 0.15, >= 0.15.1)
86
+ vcr (~> 5.1, >= 4.0.0)
87
+ webmock (~> 3.3, >= 3.3.0)
88
+ yard (~> 0.9, >= 0.9.12)
89
+
90
+ BUNDLED WITH
91
+ 1.16.6
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2020 hive-ruby
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,248 @@
1
+ [![Gem Version](https://badge.fury.io/rb/hive-ruby.svg)](https://badge.fury.io/rb/hive-ruby)
2
+ <!-- [![Inline docs](http://inch-ci.org/github/GalacticaActual/hive-ruby.svg?branch=master&style=shields)](http://inch-ci.org/github/GalacticaActual/hive-ruby) -->
3
+
4
+ # `hive-ruby`
5
+
6
+ Hive-ruby the Ruby API for Hive blockchain.
7
+
8
+ <!-- Full documentation: http://www.rubydoc.info/gems/hive-ruby -->
9
+
10
+ ## `radiator` vs. `hive-ruby`
11
+
12
+ The `hive-ruby` gem was written from the ground up by `@inertia`, who is also the author of [`radiator`](https://github.com/inertia186/radiator).
13
+
14
+ > "I intend to continue work on `radiator` indefinitely. But in `radiator-0.5`, I intend to refactor `radiator` so that is uses `hive-ruby` as its core. This means that some features of `radiator` like Serialization will become redundant. I think it's still useful for radiator to do its own serialization because it reduces the number of API requests." - @inertia
15
+
16
+ `radiator` | `hive-ruby`
17
+ ---------- | ------------
18
+ Has internal failover logic | Can have failover delegated externally
19
+ Passes `error` responses to the caller | Handles `error` responses and raises exceptions
20
+ Supports tx signing, does its own serialization | Also supports tx signing, but delegates serialization to `database_api.get_transaction_hex`, then deserializes to verify
21
+ All apis and methods are hardcoded | Asks `jsonrpc` what apis and methods are available from the node
22
+ (`radiator-0.4.x`) Only supports AppBase but relies on `condenser_api` | Only supports AppBase but does not rely on `condenser_api` **(WIP)**
23
+ Small list of helper methods for select ops (in addition to build your own transaction) | Complete implementation of helper methods for every op (in addition to build your own transaction)
24
+ Does not (yet) support `json-rpc-batch` requests | Supports `json-rpc-batch` requests
25
+
26
+ ## Getting Started
27
+
28
+ The hive-ruby gem is compatible with Ruby 2.2.5 or later.
29
+
30
+ ### Install the gem for your project
31
+
32
+ *(Assuming that [Ruby is installed](https://www.ruby-lang.org/en/downloads/) on your computer, as well as [RubyGems](http://rubygems.org/pages/download))*
33
+
34
+ To install the gem on your computer, run in shell:
35
+
36
+ ```bash
37
+ gem install hive-ruby
38
+ ```
39
+
40
+ ... then add in your code:
41
+
42
+ ```ruby
43
+ require 'hive'
44
+ ```
45
+
46
+ To add the gem as a dependency to your project with [Bundler](http://bundler.io/), you can add this line in your Gemfile:
47
+
48
+ ```ruby
49
+ gem 'hive-ruby', require: 'hive'
50
+ ```
51
+
52
+ ## Examples
53
+
54
+ ### Broadcast Vote
55
+
56
+ ```ruby
57
+ params = {
58
+ voter: voter,
59
+ author: author,
60
+ permlink: permlink,
61
+ weight: weight
62
+ }
63
+
64
+ Hive::Broadcast.vote(wif: wif, params: params) do |result|
65
+ puts result
66
+ end
67
+ ```
68
+
69
+ <!-- *See: [Broadcast](https://www.rubydoc.info/gems/hive-ruby/Hive/Broadcast)* -->
70
+
71
+ ### Streaming
72
+
73
+ The value passed to the block is an object, with the keys: `:type` and `:value`.
74
+
75
+ ```ruby
76
+ stream = Hive::Stream.new
77
+
78
+ stream.operations do |op|
79
+ puts "#{op.type}: #{op.value}"
80
+ end
81
+ ```
82
+
83
+ To start a stream from a specific block number, pass it as an argument:
84
+
85
+ ```ruby
86
+ stream = Hive::Stream.new
87
+
88
+ stream.operations(at_block_num: 9001) do |op|
89
+ puts "#{op.type}: #{op.value}"
90
+ end
91
+ ```
92
+
93
+ You can also grab the related transaction id and block number for each operation:
94
+
95
+ ```ruby
96
+ stream = Hive::Stream.new
97
+
98
+ stream.operations do |op, trx_id, block_num|
99
+ puts "#{block_num} :: #{trx_id}"
100
+ puts "#{op.type}: #{op.value}"
101
+ end
102
+ ```
103
+
104
+ To stream only certain operations:
105
+
106
+ ```ruby
107
+ stream = Hive::Stream.new
108
+
109
+ stream.operations(types: :vote_operation) do |op|
110
+ puts "#{op.type}: #{op.value}"
111
+ end
112
+ ```
113
+
114
+ Or pass an array of certain operations:
115
+
116
+ ```ruby
117
+ stream = Hive::Stream.new
118
+
119
+ stream.operations(types: [:comment_operation, :vote_operation]) do |op|
120
+ puts "#{op.type}: #{op.value}"
121
+ end
122
+ ```
123
+
124
+ Or (optionally) just pass the operation(s) you want as the only arguments. This is semantic sugar for when you want specific types and take all of the defaults.
125
+
126
+ ```ruby
127
+ stream = Hive::Stream.new
128
+
129
+ stream.operations(:vote_operation) do |op|
130
+ puts "#{op.type}: #{op.value}"
131
+ end
132
+ ```
133
+
134
+ To also include virtual operations:
135
+
136
+ ```ruby
137
+ stream = Hive::Stream.new
138
+
139
+ stream.operations(include_virtual: true) do |op|
140
+ puts "#{op.type}: #{op.value}"
141
+ end
142
+ ```
143
+
144
+ ### Multisig
145
+
146
+ You can use multisignature to broadcast an operation.
147
+
148
+ ```ruby
149
+ params = {
150
+ voter: voter,
151
+ author: author,
152
+ permlink: permlink,
153
+ weight: weight
154
+ }
155
+
156
+ Hive::Broadcast.vote(wif: [wif1, wif2], params: params) do |result|
157
+ puts result
158
+ end
159
+ ```
160
+
161
+ In addition to signing with multiple `wif` private keys, it is possible to also export a partially signed transaction to have signing completed by someone else.
162
+
163
+ ```ruby
164
+ builder = Hive::TransactionBuilder.new(wif: wif1)
165
+
166
+ builder.put(vote: {
167
+ voter: voter,
168
+ author: author,
169
+ permlink: permlink,
170
+ weight: weight
171
+ })
172
+
173
+ trx = builder.sign.to_json
174
+
175
+ File.open('trx.json', 'w') do |f|
176
+ f.write(trx)
177
+ end
178
+ ```
179
+
180
+ Then send the contents of `trx.json` to the other signing party so they can privately sign and broadcast the transaction.
181
+
182
+ ```ruby
183
+ trx = open('trx.json').read
184
+ builder = Hive::TransactionBuilder.new(wif: wif2, trx: trx)
185
+ api = Hive::CondenserApi.new
186
+ trx = builder.transaction
187
+ api.broadcast_transaction_synchronous(trx)
188
+ ```
189
+
190
+ ### Get Accounts
191
+
192
+ ```ruby
193
+ api = Hive::DatabaseApi.new
194
+
195
+ api.find_accounts(accounts: ['hiveio', 'alice']) do |result|
196
+ puts result.accounts
197
+ end
198
+ ```
199
+
200
+ <!-- *See: [Api](https://www.rubydoc.info/gems/hive-ruby/Hive/Api)* -->
201
+
202
+ ### Reputation Formatter
203
+
204
+ ```ruby
205
+ rep = Hive::Formatter.reputation(account.reputation)
206
+ puts rep
207
+ ```
208
+
209
+ ### Tests
210
+
211
+ * Clone the client repository into a directory of your choice:
212
+ * `git clone https://gitlab.syncad.com/hive/hive-ruby.git`
213
+ * Navigate into the new folder
214
+ * `cd hive-ruby`
215
+ * All tests can be invoked as follows:
216
+ * `bundle exec rake test`
217
+ * To run `static` tests:
218
+ * `bundle exec rake test:static`
219
+ * To run `broadcast` tests (broadcast is simulated, only `verify` is actually used):
220
+ * `bundle exec rake test:broadcast`
221
+ * To run `threads` tests (which quickly verifies thread safety):
222
+ * `bundle exec rake test:threads`
223
+ * To run `testnet` tests (which does actual broadcasts)
224
+ * `TEST_NODE=https://testnet-api.openhive.network bundle exec rake test:testnet`
225
+
226
+ You can also run other tests that are not part of the above `test` execution:
227
+
228
+ * To run `block_range`, which streams blocks (using `json-rpc-batch`)
229
+ * `bundle exec rake stream:block_range`
230
+
231
+
232
+ If you want to point to any node for tests, instead of letting the test suite pick the default, set the environment variable to `TEST_NODE`, e.g.:
233
+
234
+ ```bash
235
+ $ TEST_NODE=https://testnet-api.openhive.network bundle exec rake test
236
+ ```
237
+
238
+ ## Contributions
239
+
240
+ Patches are welcome! Contributors are listed in the `hive-ruby.gemspec` file. Please run the tests (`rake test`) before opening a pull request and make sure that you are passing all of them. If you would like to contribute, but don't know what to work on, check the issues list.
241
+
242
+ ## Issues
243
+
244
+ When you find issues, please report them!
245
+
246
+ ## License
247
+
248
+ MIT