hive-ruby 1.0.0.pre.1 → 1.0.0.pre.2
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 +4 -4
- data/.gitignore +1 -1
- data/.gitlab-ci.yml +17 -0
- data/assets/logo-128.png +0 -0
- data/assets/logo.png +0 -0
- data/assets/logo.xcf +0 -0
- data/hive-ruby.gemspec +2 -2
- data/lib/hive.rb +4 -0
- data/lib/hive/base_error.rb +9 -0
- data/lib/hive/block_api.rb +2 -2
- data/lib/hive/broadcast.rb +131 -16
- data/lib/hive/fallback.rb +33 -5
- data/lib/hive/jsonrpc.rb +1 -1
- data/lib/hive/marshal.rb +9 -6
- data/lib/hive/mixins/serializable.rb +1 -1
- data/lib/hive/operation.rb +5 -1
- data/lib/hive/operation/account_update2.rb +4 -0
- data/lib/hive/operation/create_proposal.rb +9 -0
- data/lib/hive/operation/remove_proposal.rb +4 -0
- data/lib/hive/operation/update_proposal_votes.rb +5 -0
- data/lib/hive/rpc/http_client.rb +29 -10
- data/lib/hive/rpc/thread_safe_http_client.rb +13 -6
- data/lib/hive/version.rb +1 -1
- metadata +22 -16
- data/Gemfile.lock +0 -91
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 03ce4beaef9c60b95e78bcc6d5589f01ea02902a59a151669ce26a774bad3e20
|
4
|
+
data.tar.gz: f8f05b4c3763b3d06f20466bf691a7fd5d3d7ee0a808a99942d42d39086775e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 295873eef303017a329752b385478249490232e6bd6fe8862ce91b1fab6da3c73a53c71ea14f989fa376fbdc93669895a4de9b25a415c64c32c936b998dcde0f
|
7
|
+
data.tar.gz: d32254187206ed4f704355ec768e67e6746b52c05f7a1da02682e5714db6034faca654f9c9492cbaecc14d476da9cfe2c78a14429aeedf3c93f5a6713a4e8e42
|
data/.gitignore
CHANGED
data/.gitlab-ci.yml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
image: ruby:2.6.1-alpine
|
2
|
+
|
3
|
+
pages:
|
4
|
+
script:
|
5
|
+
- apk add --update --no-cache build-base libxml2-dev libxslt-dev libstdc++ tzdata mariadb-dev nodejs ca-certificates yarn
|
6
|
+
- bundle install --path vendor
|
7
|
+
- bundle exec yard
|
8
|
+
- rm -rf public
|
9
|
+
- mv doc public
|
10
|
+
artifacts:
|
11
|
+
paths:
|
12
|
+
- public
|
13
|
+
cache:
|
14
|
+
paths:
|
15
|
+
- vendor
|
16
|
+
only:
|
17
|
+
- master
|
data/assets/logo-128.png
ADDED
Binary file
|
data/assets/logo.png
ADDED
Binary file
|
data/assets/logo.xcf
ADDED
Binary file
|
data/hive-ruby.gemspec
CHANGED
@@ -19,12 +19,12 @@ Gem::Specification.new do |spec|
|
|
19
19
|
|
20
20
|
spec.add_development_dependency 'bundler', '~> 1.16', '>= 1.16.1'
|
21
21
|
spec.add_development_dependency 'rake', '~> 13.0.1', '>= 12.3.0'
|
22
|
-
spec.add_development_dependency 'minitest', '~> 5.
|
22
|
+
spec.add_development_dependency 'minitest', '~> 5.14', '>= 5.10.3'
|
23
23
|
spec.add_development_dependency 'minitest-line', '~> 0.6', '>= 0.6.4'
|
24
24
|
spec.add_development_dependency 'minitest-proveit', '~> 1.0', '>= 1.0.0'
|
25
25
|
spec.add_development_dependency 'webmock', '~> 3.3', '>= 3.3.0'
|
26
26
|
spec.add_development_dependency 'simplecov', '~> 0.15', '>= 0.15.1'
|
27
|
-
spec.add_development_dependency 'vcr', '~>
|
27
|
+
spec.add_development_dependency 'vcr', '~> 6.0', '>= 4.0.0'
|
28
28
|
spec.add_development_dependency 'yard', '~> 0.9', '>= 0.9.12'
|
29
29
|
spec.add_development_dependency 'pry', '~> 0.11', '>= 0.11.3'
|
30
30
|
spec.add_development_dependency 'awesome_print', '~> 1.8', '>= 1.8.0'
|
data/lib/hive.rb
CHANGED
@@ -16,6 +16,7 @@ require 'hive/operation'
|
|
16
16
|
require 'hive/operation/account_create.rb'
|
17
17
|
require 'hive/operation/account_create_with_delegation.rb'
|
18
18
|
require 'hive/operation/account_update.rb'
|
19
|
+
require 'hive/operation/account_update2.rb'
|
19
20
|
require 'hive/operation/account_witness_proxy.rb'
|
20
21
|
require 'hive/operation/account_witness_vote.rb'
|
21
22
|
require 'hive/operation/cancel_transfer_from_savings.rb'
|
@@ -27,6 +28,7 @@ require 'hive/operation/comment.rb'
|
|
27
28
|
require 'hive/operation/comment_options.rb'
|
28
29
|
require 'hive/operation/convert.rb'
|
29
30
|
require 'hive/operation/create_claimed_account.rb'
|
31
|
+
require 'hive/operation/create_proposal.rb'
|
30
32
|
require 'hive/operation/custom.rb'
|
31
33
|
require 'hive/operation/custom_binary.rb'
|
32
34
|
require 'hive/operation/custom_json.rb'
|
@@ -43,6 +45,7 @@ require 'hive/operation/limit_order_create.rb'
|
|
43
45
|
require 'hive/operation/limit_order_create2.rb'
|
44
46
|
require 'hive/operation/prove_authority.rb'
|
45
47
|
require 'hive/operation/recover_account.rb'
|
48
|
+
require 'hive/operation/remove_proposal.rb'
|
46
49
|
require 'hive/operation/report_over_production.rb'
|
47
50
|
require 'hive/operation/request_account_recovery.rb'
|
48
51
|
require 'hive/operation/reset_account.rb'
|
@@ -52,6 +55,7 @@ require 'hive/operation/transfer.rb'
|
|
52
55
|
require 'hive/operation/transfer_from_savings.rb'
|
53
56
|
require 'hive/operation/transfer_to_savings.rb'
|
54
57
|
require 'hive/operation/transfer_to_vesting.rb'
|
58
|
+
require 'hive/operation/update_proposal_votes.rb'
|
55
59
|
require 'hive/operation/vote.rb'
|
56
60
|
require 'hive/operation/withdraw_vesting.rb'
|
57
61
|
require 'hive/operation/witness_update.rb'
|
data/lib/hive/base_error.rb
CHANGED
@@ -74,6 +74,10 @@ module Hive
|
|
74
74
|
raise Hive::ArgumentError, "#{context}: #{error.message}", build_backtrace(error)
|
75
75
|
end
|
76
76
|
|
77
|
+
if error.message.include? 'Invalid parameter'
|
78
|
+
raise Hive::ArgumentError, "#{context}: #{error.message}", build_backtrace(error)
|
79
|
+
end
|
80
|
+
|
77
81
|
if error.message.include? 'blk->transactions.size() > itr->trx_in_block'
|
78
82
|
raise Hive::VirtualOperationsNotAllowedError, "#{context}: #{error.message}", build_backtrace(error)
|
79
83
|
end
|
@@ -122,6 +126,10 @@ module Hive
|
|
122
126
|
raise Hive::UpstreamResponseError, "#{context}: #{error.message}", build_backtrace(error)
|
123
127
|
end
|
124
128
|
|
129
|
+
if error.message.include? 'Request Timeout'
|
130
|
+
raise Hive::RequestTimeoutUpstreamResponseError, "#{context}: #{error.message}", build_backtrace(error)
|
131
|
+
end
|
132
|
+
|
125
133
|
if error.message.include? 'Bad or missing upstream response'
|
126
134
|
raise Hive::BadOrMissingUpstreamResponseError, "#{context}: #{error.message}", build_backtrace(error)
|
127
135
|
end
|
@@ -205,6 +213,7 @@ module Hive
|
|
205
213
|
class UpstreamResponseError < RemoteNodeError; end
|
206
214
|
class RemoteDatabaseLockError < UpstreamResponseError; end
|
207
215
|
class PluginNotEnabledError < UpstreamResponseError; end
|
216
|
+
class RequestTimeoutUpstreamResponseError < UpstreamResponseError; end
|
208
217
|
class BadOrMissingUpstreamResponseError < UpstreamResponseError; end
|
209
218
|
class TransactionIndexDisabledError < BaseError; end
|
210
219
|
class NotAppBaseError < BaseError; end
|
data/lib/hive/block_api.rb
CHANGED
@@ -52,7 +52,7 @@ module Hive
|
|
52
52
|
|
53
53
|
if !!block
|
54
54
|
index = 0
|
55
|
-
@rpc_client.rpc_batch_execute(request_object: request_object) do |result, error, id|
|
55
|
+
@rpc_client.rpc_batch_execute(api_name: self.class.api_name, request_object: request_object) do |result, error, id|
|
56
56
|
block_num = sub_range.to_a[index]
|
57
57
|
index = index + 1
|
58
58
|
|
@@ -66,7 +66,7 @@ module Hive
|
|
66
66
|
else
|
67
67
|
blocks = []
|
68
68
|
|
69
|
-
@rpc_client.rpc_batch_execute(request_object: request_object) do |result, error, id|
|
69
|
+
@rpc_client.rpc_batch_execute(api_name: self.class.api_name, request_object: request_object) do |result, error, id|
|
70
70
|
blocks << result
|
71
71
|
end
|
72
72
|
end
|
data/lib/hive/broadcast.rb
CHANGED
@@ -713,31 +713,29 @@ module Hive
|
|
713
713
|
params = options[:params]
|
714
714
|
check_required_fields(params, *required_fields)
|
715
715
|
|
716
|
-
|
717
|
-
|
716
|
+
props = params[:props]
|
717
|
+
|
718
|
+
if !!(account_creation_fee = props[:account_creation_fee] rescue nil)
|
719
|
+
props[:account_creation_fee] = hexlify normalize_amount(options.merge amount: account_creation_fee, serialize: true)
|
718
720
|
end
|
719
721
|
|
720
|
-
if !!(sbd_exchange_rate =
|
721
|
-
|
722
|
-
|
723
|
-
|
722
|
+
if !!(sbd_exchange_rate = props[:sbd_exchange_rate] rescue nil)
|
723
|
+
props[:sbd_exchange_rate][:base] = normalize_amount(options.merge amount: sbd_exchange_rate[:base], serialize: true)
|
724
|
+
props[:sbd_exchange_rate][:quote] = normalize_amount(options.merge amount: sbd_exchange_rate[:quote], serialize: true)
|
725
|
+
props[:sbd_exchange_rate] = hexlify props[:sbd_exchange_rate].to_json
|
724
726
|
end
|
725
727
|
|
726
728
|
%i(key new_signing_key).each do |key|
|
727
|
-
if !!
|
728
|
-
|
729
|
+
if !!props[key] && props[key].length == 53
|
730
|
+
props[key] = hexlify props[key][3..-1]
|
729
731
|
end
|
730
732
|
end
|
731
733
|
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
val = params[:props][key].to_s
|
736
|
-
|
737
|
-
params[:props][key] = hexlify val unless val =~ /^[0-9A-F]+$/i
|
734
|
+
if !!(val = props[:url])
|
735
|
+
props[:url] = hexlify val unless val =~ /^[0-9A-F]+$/i
|
738
736
|
end
|
739
737
|
|
740
|
-
params[:props] =
|
738
|
+
params[:props] = props.sort_by{|k,v| k}
|
741
739
|
|
742
740
|
params[:extensions] ||= []
|
743
741
|
ops = [[:witness_set_properties, params]]
|
@@ -1239,7 +1237,124 @@ module Hive
|
|
1239
1237
|
|
1240
1238
|
process(options.merge(ops: ops), &block)
|
1241
1239
|
end
|
1242
|
-
|
1240
|
+
|
1241
|
+
# @param options [Hash] options
|
1242
|
+
# @option options [String] :wif Posting wif
|
1243
|
+
# @option options [Hash] :params
|
1244
|
+
# * :account (String) Account claiming rewards.
|
1245
|
+
# * :reward_steem (Amount) Amount of HIVE to claim.
|
1246
|
+
# * :reward_sbd (Amount) Amount of HBD to claim.
|
1247
|
+
# * :reward_vests (Amount) Amount of VESTS to claim.
|
1248
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
1249
|
+
# @see https://developers.hive.io/apidefinitions/broadcast-ops.html#broadcast_ops_claim_reward_balance
|
1250
|
+
def self.claim_reward_balance(options, &block)
|
1251
|
+
required_fields = %i(account)
|
1252
|
+
params = options[:params]
|
1253
|
+
|
1254
|
+
check_required_fields(params, *required_fields)
|
1255
|
+
|
1256
|
+
params[:reward_steem] = normalize_amount(options.merge amount: params[:reward_steem])
|
1257
|
+
params[:reward_sbd] = normalize_amount(options.merge amount: params[:reward_sbd])
|
1258
|
+
params[:reward_vests] = normalize_amount(options.merge amount: params[:reward_vests])
|
1259
|
+
|
1260
|
+
ops = [[:claim_reward_balance, params]]
|
1261
|
+
|
1262
|
+
process(options.merge(ops: ops), &block)
|
1263
|
+
end
|
1264
|
+
|
1265
|
+
# @param options [Hash] options
|
1266
|
+
# @option options [String] :wif Active wif
|
1267
|
+
# @option options [Hash] :params
|
1268
|
+
# * :account (String) Account being updated.
|
1269
|
+
# * :metadata (Hash) Metadata of the account, becomes `json_metadata`.
|
1270
|
+
# * :json_metadata (String) String version of `metadata` (use one or the other).
|
1271
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
1272
|
+
# @see https://developers.hive.io/apidefinitions/broadcast-ops.html#broadcast_ops_account_update2
|
1273
|
+
def self.account_update2(options, &block)
|
1274
|
+
required_fields = %i(account)
|
1275
|
+
params = options[:params]
|
1276
|
+
|
1277
|
+
check_required_fields(params, *required_fields)
|
1278
|
+
|
1279
|
+
if !!params[:metadata] && !!params[:json_metadata]
|
1280
|
+
raise Hive::ArgumentError, 'Assign either metadata or json_metadata, not both.'
|
1281
|
+
end
|
1282
|
+
|
1283
|
+
metadata = params.delete(:metadata) || {}
|
1284
|
+
metadata ||= (JSON[params[:json_metadata]] || nil) || {}
|
1285
|
+
params[:json_metadata] = metadata.to_json
|
1286
|
+
|
1287
|
+
ops = [[:account_update2, params]]
|
1288
|
+
|
1289
|
+
process(options.merge(ops: ops), &block)
|
1290
|
+
end
|
1291
|
+
|
1292
|
+
# @param options [Hash] options
|
1293
|
+
# @option options [String] :wif Active wif
|
1294
|
+
# @option options [Hash] :params
|
1295
|
+
# * :creator (String) Creator of the new proposal.
|
1296
|
+
# * :receiver (String) Reciever of `daily_pay` (or creator if empty)
|
1297
|
+
# * :start_date (String) When the proposal starts.
|
1298
|
+
# * :end_date (String) When the proposal ends.
|
1299
|
+
# * :daily_pay (String) Daily pay in HBD starting on the `start_date` and ending on the `end_date`.
|
1300
|
+
# * :subject (String) Subject of the proposal.
|
1301
|
+
# * :permlink (String) Proposal permlink must point to the article posted by creator or receiver.
|
1302
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
1303
|
+
# @see https://developers.hive.io/apidefinitions/broadcast-ops.html#broadcast_ops_create_proposal
|
1304
|
+
def self.create_proposal(options, &block)
|
1305
|
+
required_fields = %i(creator start_date end_date daily_pay subject permlink)
|
1306
|
+
params = options[:params]
|
1307
|
+
|
1308
|
+
check_required_fields(params, *required_fields)
|
1309
|
+
|
1310
|
+
params[:start_date] = Time.parse(params[:start_date].to_s)
|
1311
|
+
params[:start_date] = params[:start_date].strftime('%Y-%m-%dT%H:%M:%S')
|
1312
|
+
params[:end_date] = Time.parse(params[:end_date].to_s)
|
1313
|
+
params[:end_date] = params[:end_date].strftime('%Y-%m-%dT%H:%M:%S')
|
1314
|
+
params[:daily_pay] = normalize_amount(options.merge amount: params[:daily_pay])
|
1315
|
+
|
1316
|
+
ops = [[:create_proposal, params]]
|
1317
|
+
|
1318
|
+
process(options.merge(ops: ops), &block)
|
1319
|
+
end
|
1320
|
+
|
1321
|
+
# @param options [Hash] options
|
1322
|
+
# @option options [String] :wif Active wif
|
1323
|
+
# @option options [Hash] :params
|
1324
|
+
# * :voter (String) Account doing approval (or removing approval).
|
1325
|
+
# * :proposal_ids (Array<Integer>) Proposals to approve (or remove approval) for.
|
1326
|
+
# * :approve (Boolean) Approve or unapprove.
|
1327
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
1328
|
+
# @see https://developers.hive.io/apidefinitions/broadcast-ops.html#broadcast_ops_update_proposal_votes
|
1329
|
+
def self.update_proposal_votes(options, &block)
|
1330
|
+
required_fields = %i(voter proposal_ids approve)
|
1331
|
+
params = options[:params]
|
1332
|
+
|
1333
|
+
check_required_fields(params, *required_fields)
|
1334
|
+
|
1335
|
+
ops = [[:update_proposal_votes, params]]
|
1336
|
+
|
1337
|
+
process(options.merge(ops: ops), &block)
|
1338
|
+
end
|
1339
|
+
|
1340
|
+
# @param options [Hash] options
|
1341
|
+
# @option options [String] :wif Active wif
|
1342
|
+
# @option options [Hash] :params
|
1343
|
+
# * :proposal_owner (String) Creator of the proposal.
|
1344
|
+
# * :proposal_ids (Array<Integer>) Proposals to remove.
|
1345
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
1346
|
+
# @see https://developers.hive.io/apidefinitions/broadcast-ops.html#broadcast_ops_update_proposal_votes
|
1347
|
+
def self.remove_proposal(options, &block)
|
1348
|
+
required_fields = %i(proposal_owner proposal_ids)
|
1349
|
+
params = options[:params]
|
1350
|
+
|
1351
|
+
check_required_fields(params, *required_fields)
|
1352
|
+
|
1353
|
+
ops = [[:remove_proposal, params]]
|
1354
|
+
|
1355
|
+
process(options.merge(ops: ops), &block)
|
1356
|
+
end
|
1357
|
+
|
1243
1358
|
# @param options [Hash] options
|
1244
1359
|
# @option options [Array<Array<Hash>] :ops Operations to process.
|
1245
1360
|
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
data/lib/hive/fallback.rb
CHANGED
@@ -208,11 +208,25 @@ module Hive::Fallback
|
|
208
208
|
:get_account_reputations
|
209
209
|
],
|
210
210
|
bridge: [
|
211
|
+
:normalize_post,
|
212
|
+
:get_post_header,
|
213
|
+
:get_discussion,
|
214
|
+
:get_post,
|
215
|
+
:get_account_posts,
|
216
|
+
:get_ranked_posts,
|
217
|
+
:get_profile,
|
218
|
+
:get_trending_topics,
|
219
|
+
:post_notifications,
|
211
220
|
:account_notifications,
|
221
|
+
:unread_notifications,
|
222
|
+
:get_payout_stats,
|
212
223
|
:get_community,
|
213
|
-
:
|
224
|
+
:get_community_context,
|
225
|
+
:list_pop_communities,
|
226
|
+
:list_subscribers,
|
214
227
|
:list_all_subscriptions,
|
215
228
|
:list_community_roles,
|
229
|
+
:list_communities
|
216
230
|
]
|
217
231
|
}
|
218
232
|
|
@@ -277,11 +291,25 @@ module Hive::Fallback
|
|
277
291
|
get_account_reputations: {account_lower_bound: String, limit: Integer}
|
278
292
|
},
|
279
293
|
bridge: {
|
280
|
-
|
294
|
+
normalize_post: {post: Hash},
|
295
|
+
get_post_header: {author: String, permlink: String},
|
296
|
+
get_discussion: {author: String, permlink: String},
|
297
|
+
get_post: {author: String, permlink: String, observer: String},
|
298
|
+
get_account_posts: {sort: String, account: String, start_account: String, start_permlink: String, limit: Integer, observer: String},
|
299
|
+
get_ranked_posts: {sort: String, tag: String, observer: String, limit: Integer, start_author: String, start_permlink: String},
|
300
|
+
get_profile: {account: String, observer: String},
|
301
|
+
get_trending_topics: {limit: Integer, observer: String},
|
302
|
+
post_notifications: {author: String, permlink: String, min_score: Integer, last_id: String, limit: Integer},
|
303
|
+
account_notifications: {account: String, min_score: Integer, last_id: Integer, limit: Integer},
|
304
|
+
unread_notifications: {account: String, min_score: Integer},
|
305
|
+
get_payout_stats: {limit: Integer},
|
281
306
|
get_community: {name: String, observer: String},
|
282
|
-
|
283
|
-
|
284
|
-
|
307
|
+
get_community_context: {name: String, account: String},
|
308
|
+
list_communities: {last: String, limit: Integer, query: String, sort: String, observer: String},
|
309
|
+
list_pop_communities: {limit: Integer},
|
310
|
+
list_community_roles: {community: String, last: String, limit: Integer},
|
311
|
+
list_subscribers: {community: String},
|
312
|
+
list_all_subscriptions: {account: String}
|
285
313
|
}
|
286
314
|
}
|
287
315
|
end
|
data/lib/hive/jsonrpc.rb
CHANGED
@@ -90,7 +90,7 @@ module Hive
|
|
90
90
|
end
|
91
91
|
|
92
92
|
for request_object in chunks do
|
93
|
-
@rpc_client.rpc_batch_execute(request_object: request_object) do |result, error, id|
|
93
|
+
@rpc_client.rpc_batch_execute(api_name: self.class.api_name, request_object: request_object) do |result, error, id|
|
94
94
|
api, method = method_map[id]
|
95
95
|
api = api.to_sym
|
96
96
|
method = method.to_sym
|
data/lib/hive/marshal.rb
CHANGED
@@ -159,17 +159,16 @@ module Hive
|
|
159
159
|
key = string.to_sym
|
160
160
|
properties[key] = case key
|
161
161
|
when :account_creation_fee then Hive::Type::Amount.new(string)
|
162
|
-
when :account_subsidy_budget then
|
163
|
-
when :account_subsidy_decay, :maximum_block_size then uint32
|
164
|
-
when :url then string
|
162
|
+
# when :account_subsidy_budget then int32
|
163
|
+
# when :account_subsidy_decay, :maximum_block_size then uint32
|
165
164
|
when :sbd_exchange_rate
|
166
165
|
JSON[string].tap do |rate|
|
167
166
|
rate["base"] = Hive::Type::Amount.new(rate["base"])
|
168
167
|
rate["quote"] = Hive::Type::Amount.new(rate["quote"])
|
169
168
|
end
|
170
|
-
when :sbd_interest_rate then uint16
|
171
|
-
when :key, :new_signing_key then
|
172
|
-
else;
|
169
|
+
# when :sbd_interest_rate then uint16
|
170
|
+
when :url, :key, :new_signing_key then string
|
171
|
+
else; warn "Unsupported witness property: #{key}"
|
173
172
|
end
|
174
173
|
end
|
175
174
|
|
@@ -180,6 +179,10 @@ module Hive
|
|
180
179
|
unsigned_char == 0 and [] or raise "Found non-empty array."
|
181
180
|
end
|
182
181
|
|
182
|
+
def uint64_array
|
183
|
+
varint.times{ uint64 }
|
184
|
+
end
|
185
|
+
|
183
186
|
def transaction(options = {})
|
184
187
|
trx = options[:trx] || Transaction.new
|
185
188
|
|
@@ -6,7 +6,7 @@ module Hive
|
|
6
6
|
KNOWN_TYPES = NUMERIC_TYPES + %i(boolean string raw_bytes point_in_time
|
7
7
|
public_key amount price authority optional_authority
|
8
8
|
comment_options_extensions beneficiaries chain_properties required_auths
|
9
|
-
witness_properties empty_array lambda)
|
9
|
+
witness_properties uint64_array empty_array lambda)
|
10
10
|
|
11
11
|
module ClassMethods
|
12
12
|
def def_attr key_pair
|
data/lib/hive/operation.rb
CHANGED
@@ -5,7 +5,7 @@ module Hive
|
|
5
5
|
include Utils
|
6
6
|
|
7
7
|
# IDs derrived from:
|
8
|
-
# https://
|
8
|
+
# https://gitlab.syncad.com/hive/hive/-/blob/master/libraries/protocol/include/steem/protocol/operations.hpp
|
9
9
|
|
10
10
|
IDS = [
|
11
11
|
:vote_operation,
|
@@ -60,6 +60,10 @@ module Hive
|
|
60
60
|
:delegate_vesting_shares_operation,
|
61
61
|
:account_create_with_delegation_operation,
|
62
62
|
:witness_set_properties_operation,
|
63
|
+
:account_update2_operation,
|
64
|
+
:create_proposal_operation,
|
65
|
+
:update_proposal_votes_operation,
|
66
|
+
:remove_proposal_operation,
|
63
67
|
|
64
68
|
# SMT operations
|
65
69
|
:claim_reward_balance2_operation,
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class Hive::Operation::CreateProposal < Hive::Operation
|
2
|
+
def_attr creator: :string
|
3
|
+
def_attr receiver: :string
|
4
|
+
def_attr start_date: :point_in_time
|
5
|
+
def_attr end_date: :point_in_time
|
6
|
+
def_attr daily_pay: :amount
|
7
|
+
def_attr subject: :string
|
8
|
+
def_attr permlink: :string
|
9
|
+
end
|
data/lib/hive/rpc/http_client.rb
CHANGED
@@ -17,7 +17,8 @@ module Hive
|
|
17
17
|
#
|
18
18
|
# @private
|
19
19
|
TIMEOUT_ERRORS = [Net::OpenTimeout, JSON::ParserError, Net::ReadTimeout,
|
20
|
-
Errno::EBADF, IOError, Errno::ENETDOWN, Hive::RemoteDatabaseLockError
|
20
|
+
Errno::EBADF, IOError, Errno::ENETDOWN, Hive::RemoteDatabaseLockError,
|
21
|
+
Hive::RequestTimeoutUpstreamResponseError, Hive::RemoteNodeError]
|
21
22
|
|
22
23
|
# @private
|
23
24
|
POST_HEADERS = {
|
@@ -57,8 +58,10 @@ module Hive
|
|
57
58
|
def rpc_execute(api_name = @api_name, api_method = nil, options = {}, &block)
|
58
59
|
reset_timeout
|
59
60
|
|
60
|
-
|
61
|
-
|
61
|
+
response = nil
|
62
|
+
|
63
|
+
loop do
|
64
|
+
request = http_post(api_name)
|
62
65
|
|
63
66
|
request_object = if !!api_name && !!api_method
|
64
67
|
put(api_name, api_method, options)
|
@@ -80,11 +83,11 @@ module Hive
|
|
80
83
|
|
81
84
|
response = catch :http_request do; begin; http_request(request)
|
82
85
|
rescue *TIMEOUT_ERRORS => e
|
83
|
-
|
86
|
+
retry_timeout(:http_request, e) and redo
|
84
87
|
end; end
|
85
88
|
|
86
89
|
if response.nil?
|
87
|
-
|
90
|
+
retry_timeout(:tota_cera_pila, 'response was nil') and redo
|
88
91
|
end
|
89
92
|
|
90
93
|
case response.code
|
@@ -108,6 +111,9 @@ module Hive
|
|
108
111
|
else; response
|
109
112
|
end
|
110
113
|
|
114
|
+
timeout_detected = false
|
115
|
+
timeout_cause = nil
|
116
|
+
|
111
117
|
[response].flatten.each_with_index do |r, i|
|
112
118
|
if defined?(r.error) && !!r.error
|
113
119
|
if !!r.error.message
|
@@ -116,7 +122,10 @@ module Hive
|
|
116
122
|
rpc_args = [request_object].flatten[i]
|
117
123
|
raise_error_response rpc_method_name, rpc_args, r
|
118
124
|
rescue *TIMEOUT_ERRORS => e
|
119
|
-
|
125
|
+
timeout_detected = true
|
126
|
+
timeout_cause = nil
|
127
|
+
|
128
|
+
break # fail fast
|
120
129
|
end
|
121
130
|
else
|
122
131
|
raise Hive::ArgumentError, r.error.inspect
|
@@ -124,19 +133,29 @@ module Hive
|
|
124
133
|
end
|
125
134
|
end
|
126
135
|
|
136
|
+
if timeout_detected
|
137
|
+
retry_timeout(:tota_cera_pila, timeout_cause) and redo
|
138
|
+
end
|
139
|
+
|
127
140
|
yield_response response, &block
|
128
141
|
when '504' # Gateway Timeout
|
129
|
-
|
142
|
+
retry_timeout(:tota_cera_pila, response.body) and redo
|
130
143
|
when '502' # Bad Gateway
|
131
|
-
|
144
|
+
retry_timeout(:tota_cera_pila, response.body) and redo
|
132
145
|
else
|
133
146
|
raise UnknownError, "#{api_name}.#{api_method}: #{response.body}"
|
134
147
|
end
|
135
|
-
|
148
|
+
|
149
|
+
break # success!
|
150
|
+
end
|
151
|
+
|
152
|
+
response
|
136
153
|
end
|
137
154
|
|
138
155
|
def rpc_batch_execute(options = {}, &block)
|
139
|
-
|
156
|
+
api_name = options[:api_name]
|
157
|
+
|
158
|
+
yield_response rpc_execute(api_name, nil, options), &block
|
140
159
|
end
|
141
160
|
end
|
142
161
|
end
|
@@ -10,13 +10,20 @@ module Hive
|
|
10
10
|
class ThreadSafeHttpClient < HttpClient
|
11
11
|
SEMAPHORE = Mutex.new.freeze
|
12
12
|
|
13
|
-
# Same as #{HttpClient#http_post}, but scoped to each thread
|
14
|
-
# thread safe.
|
15
|
-
def http_post
|
13
|
+
# Same as #{HttpClient#http_post}, but scoped to each thread, uri, and
|
14
|
+
# api_name so it is thread safe.
|
15
|
+
def http_post(api_name)
|
16
|
+
raise "Namespace required." if api_name.nil?
|
17
|
+
|
16
18
|
thread = Thread.current
|
17
|
-
|
18
|
-
|
19
|
-
|
19
|
+
http_posts = thread.thread_variable_get(:http_posts) || {}
|
20
|
+
|
21
|
+
SEMAPHORE.synchronize do
|
22
|
+
http_posts[[uri, api_name]] ||= Net::HTTP::Post.new(uri.request_uri, POST_HEADERS)
|
23
|
+
thread.thread_variable_set(:http_posts, http_posts)
|
24
|
+
end
|
25
|
+
|
26
|
+
http_posts[[uri, api_name]]
|
20
27
|
end
|
21
28
|
|
22
29
|
def http_request(request); SEMAPHORE.synchronize{super}; end
|
data/lib/hive/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hive-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.pre.
|
4
|
+
version: 1.0.0.pre.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anthony Martin
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -54,22 +54,22 @@ dependencies:
|
|
54
54
|
name: minitest
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
|
-
- - "~>"
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: '5.10'
|
60
57
|
- - ">="
|
61
58
|
- !ruby/object:Gem::Version
|
62
59
|
version: 5.10.3
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '5.14'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - "~>"
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '5.10'
|
70
67
|
- - ">="
|
71
68
|
- !ruby/object:Gem::Version
|
72
69
|
version: 5.10.3
|
70
|
+
- - "~>"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '5.14'
|
73
73
|
- !ruby/object:Gem::Dependency
|
74
74
|
name: minitest-line
|
75
75
|
requirement: !ruby/object:Gem::Requirement
|
@@ -159,7 +159,7 @@ dependencies:
|
|
159
159
|
version: 4.0.0
|
160
160
|
- - "~>"
|
161
161
|
- !ruby/object:Gem::Version
|
162
|
-
version: '
|
162
|
+
version: '6.0'
|
163
163
|
type: :development
|
164
164
|
prerelease: false
|
165
165
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -169,7 +169,7 @@ dependencies:
|
|
169
169
|
version: 4.0.0
|
170
170
|
- - "~>"
|
171
171
|
- !ruby/object:Gem::Version
|
172
|
-
version: '
|
172
|
+
version: '6.0'
|
173
173
|
- !ruby/object:Gem::Dependency
|
174
174
|
name: yard
|
175
175
|
requirement: !ruby/object:Gem::Requirement
|
@@ -398,12 +398,15 @@ extensions: []
|
|
398
398
|
extra_rdoc_files: []
|
399
399
|
files:
|
400
400
|
- ".gitignore"
|
401
|
+
- ".gitlab-ci.yml"
|
401
402
|
- CONTRIBUTING.md
|
402
403
|
- Gemfile
|
403
|
-
- Gemfile.lock
|
404
404
|
- LICENSE
|
405
405
|
- README.md
|
406
406
|
- Rakefile
|
407
|
+
- assets/logo-128.png
|
408
|
+
- assets/logo.png
|
409
|
+
- assets/logo.xcf
|
407
410
|
- gource.sh
|
408
411
|
- hive-ruby.gemspec
|
409
412
|
- images/Anthony Martin.png
|
@@ -425,6 +428,7 @@ files:
|
|
425
428
|
- lib/hive/operation/account_create.rb
|
426
429
|
- lib/hive/operation/account_create_with_delegation.rb
|
427
430
|
- lib/hive/operation/account_update.rb
|
431
|
+
- lib/hive/operation/account_update2.rb
|
428
432
|
- lib/hive/operation/account_witness_proxy.rb
|
429
433
|
- lib/hive/operation/account_witness_vote.rb
|
430
434
|
- lib/hive/operation/cancel_transfer_from_savings.rb
|
@@ -436,6 +440,7 @@ files:
|
|
436
440
|
- lib/hive/operation/comment_options.rb
|
437
441
|
- lib/hive/operation/convert.rb
|
438
442
|
- lib/hive/operation/create_claimed_account.rb
|
443
|
+
- lib/hive/operation/create_proposal.rb
|
439
444
|
- lib/hive/operation/custom.rb
|
440
445
|
- lib/hive/operation/custom_binary.rb
|
441
446
|
- lib/hive/operation/custom_json.rb
|
@@ -452,6 +457,7 @@ files:
|
|
452
457
|
- lib/hive/operation/limit_order_create2.rb
|
453
458
|
- lib/hive/operation/prove_authority.rb
|
454
459
|
- lib/hive/operation/recover_account.rb
|
460
|
+
- lib/hive/operation/remove_proposal.rb
|
455
461
|
- lib/hive/operation/report_over_production.rb
|
456
462
|
- lib/hive/operation/request_account_recovery.rb
|
457
463
|
- lib/hive/operation/reset_account.rb
|
@@ -461,6 +467,7 @@ files:
|
|
461
467
|
- lib/hive/operation/transfer_from_savings.rb
|
462
468
|
- lib/hive/operation/transfer_to_savings.rb
|
463
469
|
- lib/hive/operation/transfer_to_vesting.rb
|
470
|
+
- lib/hive/operation/update_proposal_votes.rb
|
464
471
|
- lib/hive/operation/vote.rb
|
465
472
|
- lib/hive/operation/withdraw_vesting.rb
|
466
473
|
- lib/hive/operation/witness_set_properties.rb
|
@@ -479,7 +486,7 @@ homepage: https://gitlab.syncad.com/hive/hive-ruby
|
|
479
486
|
licenses:
|
480
487
|
- MIT
|
481
488
|
metadata: {}
|
482
|
-
post_install_message:
|
489
|
+
post_install_message:
|
483
490
|
rdoc_options: []
|
484
491
|
require_paths:
|
485
492
|
- lib
|
@@ -494,9 +501,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
494
501
|
- !ruby/object:Gem::Version
|
495
502
|
version: 1.3.1
|
496
503
|
requirements: []
|
497
|
-
|
498
|
-
|
499
|
-
signing_key:
|
504
|
+
rubygems_version: 3.0.8
|
505
|
+
signing_key:
|
500
506
|
specification_version: 4
|
501
507
|
summary: Hive Ruby Client
|
502
508
|
test_files: []
|
data/Gemfile.lock
DELETED
@@ -1,91 +0,0 @@
|
|
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
|