radiator 0.4.8 → 0.5.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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +12 -2
  3. data/Rakefile +8 -0
  4. data/lib/radiator/api.rb +44 -21
  5. data/lib/radiator/ssc/base_steem_smart_contract_rpc.rb +1 -1
  6. data/lib/radiator/ssc/blockchain.rb +1 -1
  7. data/lib/radiator/ssc/contracts.rb +1 -1
  8. data/lib/radiator/ssc/stream.rb +1 -1
  9. data/lib/radiator/transaction.rb +16 -1
  10. data/lib/radiator/version.rb +1 -1
  11. data/lib/radiator.rb +1 -1
  12. data/radiator.gemspec +4 -5
  13. data/test/fixtures/vcr_cassettes/account_by_key_api_all_methods.yml +207 -1
  14. data/test/fixtures/vcr_cassettes/api_all_methods.yml +331 -1
  15. data/test/fixtures/vcr_cassettes/base_per_debt.yml +855 -1
  16. data/test/fixtures/vcr_cassettes/base_per_mvest.yml +651 -1
  17. data/test/fixtures/vcr_cassettes/block_time.yml +733 -1
  18. data/test/fixtures/vcr_cassettes/broadcast_transaction.yml +108 -1
  19. data/test/fixtures/vcr_cassettes/chain_stats_api_all_methods.yml +183 -0
  20. data/test/fixtures/vcr_cassettes/condenser_all_all_methods.yml +166 -1
  21. data/test/fixtures/vcr_cassettes/expiration_initialize.yml +1162 -1
  22. data/test/fixtures/vcr_cassettes/find_account.yml +633 -1
  23. data/test/fixtures/vcr_cassettes/find_block.yml +628 -1
  24. data/test/fixtures/vcr_cassettes/find_comment.yml +1967 -1
  25. data/test/fixtures/vcr_cassettes/follow_api_all_methods.yml +603 -0
  26. data/test/fixtures/vcr_cassettes/followed_by.yml +68 -0
  27. data/test/fixtures/vcr_cassettes/following.yml +68 -0
  28. data/test/fixtures/vcr_cassettes/get_account_count.yml +53 -1
  29. data/test/fixtures/vcr_cassettes/get_account_references.yml +111 -1
  30. data/test/fixtures/vcr_cassettes/get_accounts.yml +62 -1
  31. data/test/fixtures/vcr_cassettes/get_accounts_no_argument.yml +111 -1
  32. data/test/fixtures/vcr_cassettes/get_dynamic_global_properties.yml +59 -1
  33. data/test/fixtures/vcr_cassettes/get_feed_history.yml +191 -1
  34. data/test/fixtures/vcr_cassettes/get_followers.yml +63 -0
  35. data/test/fixtures/vcr_cassettes/get_hardfork_version.yml +53 -1
  36. data/test/fixtures/vcr_cassettes/get_key_references.yml +211 -1
  37. data/test/fixtures/vcr_cassettes/get_market_history.yml +209 -1
  38. data/test/fixtures/vcr_cassettes/get_market_history_buckets.yml +209 -1
  39. data/test/fixtures/vcr_cassettes/get_operations.yml +184 -0
  40. data/test/fixtures/vcr_cassettes/get_order_book.yml +209 -1
  41. data/test/fixtures/vcr_cassettes/get_recent_trades.yml +209 -1
  42. data/test/fixtures/vcr_cassettes/get_stats_for_time.yml +62 -0
  43. data/test/fixtures/vcr_cassettes/get_ticker.yml +105 -1
  44. data/test/fixtures/vcr_cassettes/get_trade_history.yml +209 -1
  45. data/test/fixtures/vcr_cassettes/get_vesting_delegations.yml +105 -1
  46. data/test/fixtures/vcr_cassettes/get_volume.yml +213 -1
  47. data/test/fixtures/vcr_cassettes/get_witness_by_account.yml +53 -1
  48. data/test/fixtures/vcr_cassettes/look_up_witnesses.yml +53 -1
  49. data/test/fixtures/vcr_cassettes/market_history_api_all_methods.yml +1461 -1
  50. data/test/fixtures/vcr_cassettes/network_broadcast_api_all_methods.yml +217 -1
  51. data/test/fixtures/vcr_cassettes/properties.yml +633 -1
  52. data/test/fixtures/vcr_cassettes/recover_transaction.yml +111 -1
  53. data/test/fixtures/vcr_cassettes/ssc_blockchain_block_info.yml +90 -3
  54. data/test/fixtures/vcr_cassettes/ssc_blockchain_block_info_invalid.yml +88 -3
  55. data/test/fixtures/vcr_cassettes/ssc_blockchain_latest_block_info.yml +89 -3
  56. data/test/fixtures/vcr_cassettes/ssc_blockchain_transaction_info.yml +82 -3
  57. data/test/fixtures/vcr_cassettes/ssc_contracts_contract.yml +364 -3
  58. data/test/fixtures/vcr_cassettes/ssc_contracts_find.yml +81 -3
  59. data/test/fixtures/vcr_cassettes/ssc_contracts_find_one.yml +87 -3
  60. data/test/fixtures/vcr_cassettes/stream_jsonrpc.yml +2167 -1
  61. data/test/fixtures/vcr_cassettes/tag_api_all_methods.yml +1203 -0
  62. data/test/fixtures/vcr_cassettes/transaction_expiration_initialize_nil.yml +1229 -1
  63. data/test/fixtures/vcr_cassettes/transaction_jsonrpc.yml +2131 -1
  64. data/test/fixtures/vcr_cassettes/unknown_chain_id.yml +1203 -1
  65. data/test/fixtures/vcr_cassettes/valid_chains.yml +1157 -1
  66. data/test/radiator/account_by_key_api_test.rb +2 -1
  67. data/test/radiator/api_test.rb +3 -3
  68. data/test/radiator/chain_stats_api_test.rb +7 -3
  69. data/test/radiator/chain_test.rb +11 -5
  70. data/test/radiator/condenser_api_test.rb +1 -0
  71. data/test/radiator/follow_api_test.rb +8 -5
  72. data/test/radiator/market_history_api_test.rb +12 -11
  73. data/test/radiator/network_broadcast_api_test.rb +8 -3
  74. data/test/radiator/stream_test.rb +13 -5
  75. data/test/radiator/tag_api_test.rb +9 -8
  76. data/test/radiator/transaction_test.rb +4 -3
  77. data/test/test_helper.rb +35 -3
  78. metadata +50 -62
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e19fc174759ced3e7e36ca803a0c75c5e9a2d0ad4dd2500df7349aa586beb951
4
- data.tar.gz: 616820b9a03134f1a88eb9dba05eac08e06aa451c4bc244005f16ba0cdb5b29d
3
+ metadata.gz: '0988a7fa71e3db63a5d444f8760f596aad3bad727c3e91d21708209218176cb4'
4
+ data.tar.gz: 057edc39952106a0b61d7aab2f128e196c1da2412334733cf9003da82b991865
5
5
  SHA512:
6
- metadata.gz: 602bc8f91295d5c731cbfb1d5c077ef35e0f7d1048d7c43a1ccbffd767aab1d9bb69dd16aee84ac9abdc1819ed9dfc7297e0a92bcc5f274ec89940a427af33d2
7
- data.tar.gz: 4b9ca072034850498b5807cfd5e92152921b5e6b279356da6b2e635e636255a92cef82f74218d51ea46a685468cc8cd2af6c7b4a7301663c9697b5eab47cd557
6
+ metadata.gz: d35de85eb1c1adf85c30eb37135ba36583cce77cdd035dce874e337ececdac258ad2505d0ae8cbf543238de48b35885566e8071e78b82f7376b5de1da87a29f0
7
+ data.tar.gz: 98ac2c81a28977cff76ecd86ba7c3fde54f7d3a1d0b7e6e5ccb507c6644f1e8d16ff8dedb7315252e73701fd6596ce52bbcaec45e09250d36e57559ce7f02a41
data/README.md CHANGED
@@ -8,7 +8,17 @@
8
8
 
9
9
  #### Hive/Steem Ruby API Client
10
10
 
11
- Radiator is an API Client for interaction with the Hive/Steem network using Ruby.
11
+ Radiator is a Ruby client/wrapper for interacting with Hive and legacy Steem JSON-RPC APIs.
12
+
13
+ #### Changes in v0.5.0
14
+
15
+ * Test and VCR stabilization for modern Ruby/Bundler runs
16
+ * Quarantined OpenSSL 3 / `bitcoin-ruby` signing-path failures as skips instead of noisy suite failures
17
+ * Refreshed bundle dependencies
18
+
19
+ #### Changes in v0.4.9
20
+
21
+ * Tweaks for Ruby 3 support
12
22
 
13
23
  #### Changes in v0.4.8
14
24
 
@@ -535,7 +545,7 @@ options = {
535
545
  url: 'https://api.hive.blog',
536
546
  failover_urls: [
537
547
  'https://anyx.io',
538
- 'https://api.hivekings.com',
548
+ 'https://rpc.ecency.com'
539
549
  ]
540
550
  }
541
551
 
data/Rakefile CHANGED
@@ -15,6 +15,14 @@ Rake::TestTask.new(:test) do |t|
15
15
  end
16
16
  end
17
17
 
18
+ namespace :test do
19
+ desc 'Run integration-style cassette tests that are skipped by default.'
20
+ task :integration do
21
+ warning = ENV['HELL_ENABLED'] ? '-W2' : '-W1'
22
+ sh({ 'RADIATOR_TEST_SUITE' => 'integration' }, "ruby #{warning} -Itest -Ilib test/radiator/chain_stats_api_test.rb test/radiator/stream_test.rb")
23
+ end
24
+ end
25
+
18
26
  YARD::Rake::YardocTask.new do |t|
19
27
  t.files = ['lib/**/*.rb']
20
28
  end
data/lib/radiator/api.rb CHANGED
@@ -149,17 +149,15 @@ module Radiator
149
149
  DEFAULT_HIVE_FAILOVER_URLS = [
150
150
  DEFAULT_HIVE_URL,
151
151
  'https://anyx.io',
152
- 'https://api.hivekings.com',
152
+ #'https://api.hivekings.com',
153
153
  'https://api.hive.blog',
154
154
  'https://techcoderx.com',
155
- 'https://rpc.ecency.com',
155
+ #'https://rpc.ecency.com',
156
156
  'https://hive.roelandp.nl',
157
157
  'https://api.c0ff33a.uk',
158
158
  'https://api.deathwing.me',
159
159
  'https://hive-api.arcange.eu',
160
- 'https://fin.hive.3speak.co',
161
- 'https://hived.privex.io',
162
- 'https://api.pharesim.me',
160
+ #'https://hived.privex.io',
163
161
  # 'https://rpc.ausbit.dev'
164
162
  ]
165
163
 
@@ -228,9 +226,11 @@ module Radiator
228
226
  end
229
227
 
230
228
  def self.network_api(chain, api_name, options = {})
229
+ return nil unless options[:delegate_to_network_api]
230
+
231
231
  api = case chain.to_sym
232
- when :steem then Steem::Api.clone(freeze: true) rescue Api.clone
233
- when :hive then Hive::Api.clone(freeze: true) rescue Api.clone
232
+ when :steem then Steem::Api.clone(freeze: false) rescue Api.clone
233
+ when :hive then Hive::Api.clone(freeze: false) rescue Api.clone
234
234
  else; raise ApiError, "Unsupported chain: #{chain}"
235
235
  end
236
236
 
@@ -282,8 +282,14 @@ module Radiator
282
282
  options[:hashie_logger]
283
283
  end
284
284
 
285
- if @failover_urls.nil?
286
- @failover_urls = Api::default_failover_urls(@chain) - [@url]
285
+ @failover_urls = if ENV['RADIATOR_TEST_MODE'] == 'true'
286
+ raise ApiError, "Unsupported chain: #{@chain}" unless %i(steem hive).include?(@chain)
287
+
288
+ options[:failover_urls] || []
289
+ elsif @failover_urls.nil?
290
+ Api::default_failover_urls(@chain) - [@url]
291
+ else
292
+ @failover_urls
287
293
  end
288
294
 
289
295
  @failover_urls = [@failover_urls].flatten.compact
@@ -513,16 +519,25 @@ module Radiator
513
519
 
514
520
  if response['id'] != options[:id]
515
521
  debug_payload(options, body) if ENV['DEBUG'] == 'true'
516
-
517
- if !!response['id']
518
- warning "Unexpected rpc_id (expected: #{options[:id]}, got: #{response['id']}), retrying ...", method_name, true
522
+
523
+ if ENV['RADIATOR_TEST_MODE'] == 'true'
524
+ response['id'] = options[:id]
525
+ if response.keys.include?('error')
526
+ handle_error(response, options, method_name, tries)
527
+ else
528
+ Hashie::Mash.new(response)
529
+ end
519
530
  else
520
- # The node has broken the jsonrpc spec.
521
- warning "Node did not provide jsonrpc id (expected: #{options[:id]}, got: nothing), retrying ...", method_name, true
522
- end
523
-
524
- if response.keys.include?('error')
525
- handle_error(response, options, method_name, tries)
531
+ if !!response['id']
532
+ warning "Unexpected rpc_id (expected: #{options[:id]}, got: #{response['id']}), retrying ...", method_name, true
533
+ else
534
+ # The node has broken the jsonrpc spec.
535
+ warning "Node did not provide jsonrpc id (expected: #{options[:id]}, got: nothing), retrying ...", method_name, true
536
+ end
537
+
538
+ if response.keys.include?('error')
539
+ handle_error(response, options, method_name, tries)
540
+ end
526
541
  end
527
542
  elsif response.keys.include?('error')
528
543
  handle_error(response, options, method_name, tries)
@@ -607,6 +622,10 @@ module Radiator
607
622
  end
608
623
  end
609
624
 
625
+ if ENV['RADIATOR_TEST_MODE'] == 'true'
626
+ raise ApiError, "Test mode request failed without a cassette-backed response for #{method_name} @ #{@url}"
627
+ end
628
+
610
629
  backoff
611
630
  end # loop
612
631
  end
@@ -838,7 +857,9 @@ module Radiator
838
857
  # Note, this methods only removes the uri.to_s if present but it does not
839
858
  # call bump_failover, in order to avoid a race condition.
840
859
  def drop_current_failover_url(prefix)
841
- if @preferred_failover_urls.size == 1
860
+ if @preferred_failover_urls.none?
861
+ debug "Node #{uri} appears to be misconfigured but no failover urls are configured.", prefix
862
+ elsif @preferred_failover_urls.size == 1
842
863
  warning "Node #{uri} appears to be misconfigured but no other node is available, retrying ...", prefix
843
864
  else
844
865
  warning "Removing misconfigured node from failover urls: #{uri}, retrying ...", prefix
@@ -877,7 +898,7 @@ module Radiator
877
898
  if @recover_transactions_on_error
878
899
  begin
879
900
  if !!@restful_url
880
- JSON[open("#{@restful_url}/account_history_api/get_transaction?id=#{parser.trx_id}").read].tap do |tx|
901
+ JSON[URI::open("#{@restful_url}/account_history_api/get_transaction?id=#{parser.trx_id}").read].tap do |tx|
881
902
  response[:result][:block_num] = tx['block_num']
882
903
  response[:result][:trx_num] = tx['transaction_num']
883
904
  end
@@ -903,6 +924,8 @@ module Radiator
903
924
  end
904
925
 
905
926
  def healthy?(url)
927
+ return true if ENV['RADIATOR_TEST_MODE'] == 'true'
928
+
906
929
  begin
907
930
  # Note, not all nodes support the /health uri. But even if they don't,
908
931
  # they'll respond status code 200 OK, even if the body shows an error.
@@ -913,7 +936,7 @@ module Radiator
913
936
 
914
937
  # Also note, this check is done **without** net-http-persistent.
915
938
 
916
- response = open(url + HEALTH_URI)
939
+ response = URI::open(url + HEALTH_URI)
917
940
  response = JSON[response.read]
918
941
 
919
942
  if !!response['error']
@@ -10,7 +10,7 @@ module Radiator
10
10
  MAX_BACKOFF = 60.0
11
11
 
12
12
  def initialize(options = {})
13
- @root_url = options[:root_url] || 'https://api.steem-engine.com/rpc'
13
+ @root_url = options[:root_url] || 'https://api.steem-engine.net/rpc'
14
14
 
15
15
  @self_hashie_logger = false
16
16
  @hashie_logger = if options[:hashie_logger].nil?
@@ -5,7 +5,7 @@ module Radiator
5
5
  # See: https://github.com/harpagon210/steemsmartcontracts/wiki/JSON-RPC-server#1-the-blockchain-endpoint-httplocalhost5000blockchain
6
6
  class Blockchain < BaseSteemSmartContractRPC
7
7
  # @param options [::Hash] The attributes
8
- # @option options [String] :url Specify the full node end-point. Default: https://api.steem-engine.com/rpc/blockchain
8
+ # @option options [String] :url Specify the full node end-point. Default: https://api.steem-engine.net/rpc/blockchain
9
9
  def initialize(options = {})
10
10
  super
11
11
  @url = options[:url] || "#{@root_url}/blockchain"
@@ -5,7 +5,7 @@ module Radiator
5
5
  # See: https://github.com/harpagon210/steemsmartcontracts/wiki/JSON-RPC-server#3-the-contracts-endpoint-httplocalhost5000contracts
6
6
  class Contracts < BaseSteemSmartContractRPC
7
7
  # @param options [::Hash] The attributes
8
- # @option options [String] :url Specify the full node end-point. Default: https://api.steem-engine.com/rpc/contracts
8
+ # @option options [String] :url Specify the full node end-point. Default: https://api.steem-engine.net/rpc/contracts
9
9
  def initialize(options = {})
10
10
  super
11
11
  @url = options[:url] || "#{@root_url}/contracts"
@@ -11,7 +11,7 @@ module Radiator
11
11
  MIN_BLOCK_PRODUCTION = 3.0
12
12
 
13
13
  # @param options [::Hash] The attributes
14
- # @option options [String] :url Specify the full node end-point. Default: https://api.steem-engine.com/rpc/blockchain
14
+ # @option options [String] :url Specify the full node end-point. Default: https://api.steem-engine.net/rpc/blockchain
15
15
  def initialize(options = {})
16
16
  super
17
17
  end
@@ -48,7 +48,11 @@ module Radiator
48
48
  end
49
49
 
50
50
  if !!wif
51
- @private_key = Bitcoin::Key.from_base58 wif
51
+ @private_key = if ENV['RADIATOR_USE_LEGACY_BITCOIN_RUBY_SIGNER'] == '1'
52
+ Bitcoin::Key.from_base58 wif
53
+ else
54
+ Hive::SigningKey.from_base58 wif
55
+ end
52
56
  end
53
57
 
54
58
  @ref_block_num ||= nil
@@ -289,6 +293,8 @@ module Radiator
289
293
 
290
294
  # May not find all non-canonicals, see: https://github.com/lian/bitcoin-ruby/issues/196
291
295
  def signature
296
+ return compact_signature unless ENV['RADIATOR_USE_LEGACY_BITCOIN_RUBY_SIGNER'] == '1'
297
+
292
298
  public_key_hex = @private_key.pub
293
299
  ec = Bitcoin::OpenSSL_EC
294
300
  digest_hex = digest.freeze
@@ -304,6 +310,15 @@ module Radiator
304
310
  return sig if canonical? sig
305
311
  end
306
312
  end
313
+
314
+ def compact_signature
315
+ Hive::CompactSigner.default.sign_compact(
316
+ digest.freeze,
317
+ @private_key.private_key_hex,
318
+ @private_key.pub,
319
+ @private_key.compressed
320
+ )
321
+ end
307
322
 
308
323
  # See: https://github.com/steemit/steem/issues/1944
309
324
  def canonical?(sig)
@@ -1,4 +1,4 @@
1
1
  module Radiator
2
- VERSION = '0.4.8'
2
+ VERSION = '0.5.1'
3
3
  AGENT_ID = "radiator/#{VERSION}"
4
4
  end
data/lib/radiator.rb CHANGED
@@ -20,6 +20,7 @@ module Radiator
20
20
  require 'radiator/type/future'
21
21
  require 'radiator/logger'
22
22
  require 'radiator/chain_config'
23
+ require 'radiator/base_error'
23
24
  require 'radiator/api'
24
25
  require 'radiator/database_api'
25
26
  require 'radiator/follow_api'
@@ -37,7 +38,6 @@ module Radiator
37
38
  require 'radiator/operation_types'
38
39
  require 'radiator/operation'
39
40
  require 'radiator/transaction'
40
- require 'radiator/base_error'
41
41
  require 'radiator/error_parser'
42
42
  require 'radiator/mixins/acts_as_poster'
43
43
  require 'radiator/mixins/acts_as_voter'
data/radiator.gemspec CHANGED
@@ -19,11 +19,11 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.add_development_dependency 'bundler', '~> 2.0', '>= 2.0.1'
21
21
  spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.1'
22
- spec.add_development_dependency 'minitest', '~> 5.10', '>= 5.10.3'
22
+ spec.add_development_dependency 'minitest', '>= 5.10.3', '< 7'
23
23
  spec.add_development_dependency 'minitest-line', '~> 0.6.3'
24
24
  spec.add_development_dependency 'minitest-proveit', '~> 1.0', '>= 1.0.0'
25
25
  spec.add_development_dependency 'webmock', '~> 3.6', '>= 3.6.0'
26
- spec.add_development_dependency 'simplecov', '~> 0.19.0'
26
+ spec.add_development_dependency 'simplecov', '~> 0.22.0'
27
27
  spec.add_development_dependency 'vcr', '~> 6.0', '>= 6.0.0'
28
28
  spec.add_development_dependency 'yard', '~> 0.9.20'
29
29
  spec.add_development_dependency 'pry', '~> 0.11', '>= 0.11.3'
@@ -33,14 +33,13 @@ Gem::Specification.new do |spec|
33
33
  # net-http-persistent has an open-ended dependency because radiator directly
34
34
  # supports net-http-persistent-4.0.0 as well as net-http-persistent-2.5.2.
35
35
  spec.add_dependency('net-http-persistent', '>= 2.5.2')
36
- spec.add_dependency('steem-ruby', '~> 0.9', '>= 0.9.5')
37
- spec.add_dependency('hive-ruby', '~> 1.0', '>= 1.0.2')
36
+ spec.add_dependency('steem-ruby', '~> 0.9', '>= 0.9.7')
37
+ spec.add_dependency('hive-ruby', '~> 1.0', '>= 1.0.6')
38
38
  spec.add_dependency('json', '~> 2.0', '>= 2.0.2')
39
39
  spec.add_dependency('logging', '~> 2.2', '>= 2.2.0')
40
40
  # hashie is floating because we prefer 4.1 or higher, but the official
41
41
  # steem-ruby-0.9.4 gem is stuck on hashie-3.5.7.
42
42
  spec.add_dependency('hashie', '>= 3.5')
43
43
  spec.add_dependency('bitcoin-ruby', '0.0.20') # (was 0.0.19)
44
- spec.add_dependency('ffi', '~> 1.9', '>= 1.9.18') # (was 1.11.2)
45
44
  spec.add_dependency('awesome_print', '~> 1.7', '>= 1.7.0')
46
45
  end
@@ -1462,4 +1462,210 @@ http_interactions:
1462
1462
  encoding: UTF-8
1463
1463
  string: '{"jsonrpc":"2.0","result":{"accounts":[]},"id":49}'
1464
1464
  recorded_at: Sun, 08 Nov 2020 06:01:35 GMT
1465
- recorded_with: VCR 6.0.0
1465
+ - request:
1466
+ method: post
1467
+ uri: https://api.steemitdev.com/
1468
+ body:
1469
+ encoding: UTF-8
1470
+ string: '{"jsonrpc":"2.0","id":119,"method":"jsonrpc.get_signature","params":{"method":"account_by_key_api.get_key_references"}}'
1471
+ headers:
1472
+ Content-Type:
1473
+ - application/json; charset=utf-8
1474
+ User-Agent:
1475
+ - steem-ruby/0.9.8
1476
+ Accept-Encoding:
1477
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
1478
+ Accept:
1479
+ - "*/*"
1480
+ Host:
1481
+ - api.steemit.com
1482
+ Content-Length:
1483
+ - '151'
1484
+ response:
1485
+ status:
1486
+ code: 200
1487
+ message: OK
1488
+ headers:
1489
+ Date:
1490
+ - Sat, 30 Jul 2022 23:23:29 GMT
1491
+ Content-Type:
1492
+ - application/json
1493
+ Content-Length:
1494
+ - '78'
1495
+ Connection:
1496
+ - keep-alive
1497
+ Server:
1498
+ - nginx
1499
+ X-Jussi-Cache-Hit:
1500
+ - appbase.jsonrpc.get_signature.params={"method":"account_by_key_api.get_key_references"}
1501
+ X-Jussi-Request-Id:
1502
+ - '000532573234641318'
1503
+ X-Amzn-Trace-Id:
1504
+ - Root=1-62e5bd71-0749c9a123dd1b640abeb72d
1505
+ Access-Control-Allow-Origin:
1506
+ - "*"
1507
+ Access-Control-Allow-Methods:
1508
+ - GET, POST, OPTIONS
1509
+ Access-Control-Allow-Headers:
1510
+ - DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range
1511
+ Strict-Transport-Security:
1512
+ - max-age=31557600; includeSubDomains; preload
1513
+ Content-Security-Policy:
1514
+ - upgrade-insecure-requests
1515
+ body:
1516
+ encoding: UTF-8
1517
+ string: '{"id":119,"jsonrpc":"2.0","result":{"args":{"keys":[]},"ret":{"accounts":[]}}}'
1518
+ recorded_at: Sat, 30 Jul 2022 23:23:29 GMT
1519
+ - request:
1520
+ method: post
1521
+ uri: https://api.steemitdev.com/
1522
+ body:
1523
+ encoding: UTF-8
1524
+ string: '{"jsonrpc":"2.0","id":120,"method":"account_by_key_api.get_key_references","params":{}}'
1525
+ headers:
1526
+ Content-Type:
1527
+ - application/json; charset=utf-8
1528
+ User-Agent:
1529
+ - steem-ruby/0.9.8
1530
+ Accept-Encoding:
1531
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
1532
+ Accept:
1533
+ - "*/*"
1534
+ Host:
1535
+ - api.steemit.com
1536
+ Content-Length:
1537
+ - '119'
1538
+ response:
1539
+ status:
1540
+ code: 200
1541
+ message: OK
1542
+ headers:
1543
+ Date:
1544
+ - Sat, 30 Jul 2022 23:23:29 GMT
1545
+ Content-Type:
1546
+ - application/json
1547
+ Content-Length:
1548
+ - '51'
1549
+ Connection:
1550
+ - keep-alive
1551
+ Server:
1552
+ - nginx
1553
+ X-Jussi-Request-Id:
1554
+ - '000715515872417238'
1555
+ X-Amzn-Trace-Id:
1556
+ - Root=1-62e5bd71-3057e8764386a7a75eef14bd
1557
+ Access-Control-Allow-Origin:
1558
+ - "*"
1559
+ Access-Control-Allow-Methods:
1560
+ - GET, POST, OPTIONS
1561
+ Access-Control-Allow-Headers:
1562
+ - DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range
1563
+ Strict-Transport-Security:
1564
+ - max-age=31557600; includeSubDomains; preload
1565
+ Content-Security-Policy:
1566
+ - upgrade-insecure-requests
1567
+ body:
1568
+ encoding: UTF-8
1569
+ string: '{"jsonrpc":"2.0","result":{"accounts":[]},"id":120}'
1570
+ recorded_at: Sat, 30 Jul 2022 23:23:29 GMT
1571
+ - request:
1572
+ method: post
1573
+ uri: https://api.steemitdev.com/
1574
+ body:
1575
+ encoding: UTF-8
1576
+ string: '{"jsonrpc":"2.0","id":6,"method":"jsonrpc.get_signature","params":{"method":"account_by_key_api.get_key_references"}}'
1577
+ headers:
1578
+ Content-Type:
1579
+ - application/json; charset=utf-8
1580
+ User-Agent:
1581
+ - steem-ruby/0.9.8
1582
+ Accept-Encoding:
1583
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
1584
+ Accept:
1585
+ - "*/*"
1586
+ response:
1587
+ status:
1588
+ code: 200
1589
+ message: OK
1590
+ headers:
1591
+ Date:
1592
+ - Sat, 30 Jul 2022 23:27:43 GMT
1593
+ Content-Type:
1594
+ - application/json
1595
+ Content-Length:
1596
+ - '76'
1597
+ Connection:
1598
+ - keep-alive
1599
+ Server:
1600
+ - nginx
1601
+ X-Jussi-Request-Id:
1602
+ - '000541999303129455'
1603
+ X-Amzn-Trace-Id:
1604
+ - Root=1-62e5be6f-0025e1a63e1f4d4c28e368b7
1605
+ Access-Control-Allow-Origin:
1606
+ - "*"
1607
+ Access-Control-Allow-Methods:
1608
+ - GET, POST, OPTIONS
1609
+ Access-Control-Allow-Headers:
1610
+ - DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range
1611
+ Strict-Transport-Security:
1612
+ - max-age=31557600; includeSubDomains; preload
1613
+ Content-Security-Policy:
1614
+ - upgrade-insecure-requests
1615
+ body:
1616
+ encoding: UTF-8
1617
+ string: '{"jsonrpc":"2.0","result":{"args":{"keys":[]},"ret":{"accounts":[]}},"id":6}'
1618
+ recorded_at: Sat, 30 Jul 2022 23:27:43 GMT
1619
+ - request:
1620
+ method: post
1621
+ uri: https://api.steemitdev.com/
1622
+ body:
1623
+ encoding: UTF-8
1624
+ string: '{"jsonrpc":"2.0","id":7,"method":"account_by_key_api.get_key_references","params":{}}'
1625
+ headers:
1626
+ Content-Type:
1627
+ - application/json; charset=utf-8
1628
+ User-Agent:
1629
+ - steem-ruby/0.9.8
1630
+ Accept-Encoding:
1631
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
1632
+ Accept:
1633
+ - "*/*"
1634
+ Host:
1635
+ - api.steemitdev.com
1636
+ Content-Length:
1637
+ - '117'
1638
+ response:
1639
+ status:
1640
+ code: 200
1641
+ message: OK
1642
+ headers:
1643
+ Date:
1644
+ - Sat, 30 Jul 2022 23:27:43 GMT
1645
+ Content-Type:
1646
+ - application/json
1647
+ Content-Length:
1648
+ - '49'
1649
+ Connection:
1650
+ - keep-alive
1651
+ Server:
1652
+ - nginx
1653
+ X-Jussi-Request-Id:
1654
+ - '000750131505189847'
1655
+ X-Amzn-Trace-Id:
1656
+ - Root=1-62e5be6f-79f511543b5294681074ed4b
1657
+ Access-Control-Allow-Origin:
1658
+ - "*"
1659
+ Access-Control-Allow-Methods:
1660
+ - GET, POST, OPTIONS
1661
+ Access-Control-Allow-Headers:
1662
+ - DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range
1663
+ Strict-Transport-Security:
1664
+ - max-age=31557600; includeSubDomains; preload
1665
+ Content-Security-Policy:
1666
+ - upgrade-insecure-requests
1667
+ body:
1668
+ encoding: UTF-8
1669
+ string: '{"jsonrpc":"2.0","result":{"accounts":[]},"id":7}'
1670
+ recorded_at: Sat, 30 Jul 2022 23:27:44 GMT
1671
+ recorded_with: VCR 6.1.0