steem-ruby 0.9.1 → 0.9.6
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/.gitignore +1 -1
- data/README.md +83 -10
- data/Rakefile +128 -31
- data/lib/steem.rb +49 -0
- data/lib/steem/api.rb +38 -36
- data/lib/steem/base_error.rb +32 -11
- data/lib/steem/block_api.rb +23 -3
- data/lib/steem/broadcast.rb +165 -2
- data/lib/steem/marshal.rb +231 -0
- data/lib/steem/mixins/jsonable.rb +37 -0
- data/lib/steem/mixins/retriable.rb +22 -13
- data/lib/steem/mixins/serializable.rb +45 -0
- data/lib/steem/operation.rb +141 -0
- data/lib/steem/operation/account_create.rb +10 -0
- data/lib/steem/operation/account_create_with_delegation.rb +12 -0
- data/lib/steem/operation/account_update.rb +8 -0
- data/lib/steem/operation/account_witness_proxy.rb +4 -0
- data/lib/steem/operation/account_witness_vote.rb +5 -0
- data/lib/steem/operation/cancel_transfer_from_savings.rb +4 -0
- data/lib/steem/operation/challenge_authority.rb +5 -0
- data/lib/steem/operation/change_recovery_account.rb +5 -0
- data/lib/steem/operation/claim_account.rb +5 -0
- data/lib/steem/operation/claim_reward_balance.rb +6 -0
- data/lib/steem/operation/comment.rb +9 -0
- data/lib/steem/operation/comment_options.rb +10 -0
- data/lib/steem/operation/convert.rb +5 -0
- data/lib/steem/operation/create_claimed_account.rb +10 -0
- data/lib/steem/operation/custom.rb +5 -0
- data/lib/steem/operation/custom_binary.rb +8 -0
- data/lib/steem/operation/custom_json.rb +6 -0
- data/lib/steem/operation/decline_voting_rights.rb +4 -0
- data/lib/steem/operation/delegate_vesting_shares.rb +5 -0
- data/lib/steem/operation/delete_comment.rb +4 -0
- data/lib/steem/operation/escrow_approve.rb +8 -0
- data/lib/steem/operation/escrow_dispute.rb +7 -0
- data/lib/steem/operation/escrow_release.rb +10 -0
- data/lib/steem/operation/escrow_transfer.rb +12 -0
- data/lib/steem/operation/feed_publish.rb +4 -0
- data/lib/steem/operation/limit_order_cancel.rb +4 -0
- data/lib/steem/operation/limit_order_create.rb +8 -0
- data/lib/steem/operation/limit_order_create2.rb +8 -0
- data/lib/steem/operation/prove_authority.rb +4 -0
- data/lib/steem/operation/recover_account.rb +6 -0
- data/lib/steem/operation/report_over_production.rb +5 -0
- data/lib/steem/operation/request_account_recovery.rb +6 -0
- data/lib/steem/operation/reset_account.rb +5 -0
- data/lib/steem/operation/set_reset_account.rb +5 -0
- data/lib/steem/operation/set_withdraw_vesting_route.rb +6 -0
- data/lib/steem/operation/transfer.rb +6 -0
- data/lib/steem/operation/transfer_from_savings.rb +7 -0
- data/lib/steem/operation/transfer_to_savings.rb +6 -0
- data/lib/steem/operation/transfer_to_vesting.rb +5 -0
- data/lib/steem/operation/vote.rb +6 -0
- data/lib/steem/operation/withdraw_vesting.rb +4 -0
- data/lib/steem/operation/witness_set_properties.rb +5 -0
- data/lib/steem/operation/witness_update.rb +7 -0
- data/lib/steem/rpc/base_client.rb +14 -2
- data/lib/steem/rpc/http_client.rb +17 -1
- data/lib/steem/stream.rb +385 -0
- data/lib/steem/transaction.rb +96 -0
- data/lib/steem/transaction_builder.rb +77 -70
- data/lib/steem/type/amount.rb +6 -0
- data/lib/steem/version.rb +1 -1
- data/steem-ruby.gemspec +9 -4
- metadata +203 -56
- data/Gemfile.lock +0 -73
@@ -0,0 +1,37 @@
|
|
1
|
+
module Steem
|
2
|
+
module JSONable
|
3
|
+
module ClassMethods
|
4
|
+
attr_accessor :attributes
|
5
|
+
|
6
|
+
def attr_accessor *attrs
|
7
|
+
self.attributes = Array attrs
|
8
|
+
|
9
|
+
super
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.included(base)
|
14
|
+
base.extend(ClassMethods)
|
15
|
+
end
|
16
|
+
|
17
|
+
def as_json options = {}
|
18
|
+
serialized = Hash.new
|
19
|
+
|
20
|
+
self.class.attributes.each do |attribute|
|
21
|
+
unless (value = self.public_send attribute).nil?
|
22
|
+
serialized[attribute] = if value.respond_to? :strftime
|
23
|
+
value.strftime('%Y-%m-%dT%H:%M:%S')
|
24
|
+
else
|
25
|
+
value
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
serialized
|
31
|
+
end
|
32
|
+
|
33
|
+
def to_json *a
|
34
|
+
as_json.to_json *a
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -13,24 +13,12 @@ module Steem
|
|
13
13
|
IncorrectResponseIdError, RemoteDatabaseLockError
|
14
14
|
]
|
15
15
|
|
16
|
-
# Expontential backoff.
|
17
|
-
#
|
18
|
-
# @private
|
19
|
-
def backoff
|
20
|
-
@backoff ||= 0.1
|
21
|
-
@backoff *= 2
|
22
|
-
@backoff = 0.1 if @backoff > MAX_BACKOFF
|
23
|
-
|
24
|
-
sleep @backoff
|
25
|
-
end
|
26
|
-
|
27
16
|
def can_retry?(e = nil)
|
28
17
|
@retry_count ||= 0
|
29
|
-
@first_retry_at ||= Time.now.utc
|
30
18
|
|
31
19
|
return false if @retry_count >= MAX_RETRY_COUNT
|
32
20
|
|
33
|
-
@retry_count = if
|
21
|
+
@retry_count = if retry_reset?
|
34
22
|
@first_retry_at = nil
|
35
23
|
else
|
36
24
|
@retry_count + 1
|
@@ -45,5 +33,26 @@ module Steem
|
|
45
33
|
|
46
34
|
can_retry
|
47
35
|
end
|
36
|
+
private
|
37
|
+
# @private
|
38
|
+
def first_retry_at
|
39
|
+
@first_retry_at ||= Time.now.utc
|
40
|
+
end
|
41
|
+
|
42
|
+
# @private
|
43
|
+
def retry_reset?
|
44
|
+
Time.now.utc - first_retry_at > MAX_RETRY_ELAPSE
|
45
|
+
end
|
46
|
+
|
47
|
+
# Expontential backoff.
|
48
|
+
#
|
49
|
+
# @private
|
50
|
+
def backoff
|
51
|
+
@backoff ||= 0.1
|
52
|
+
@backoff *= 2
|
53
|
+
@backoff = 0.1 if @backoff > MAX_BACKOFF
|
54
|
+
|
55
|
+
sleep @backoff
|
56
|
+
end
|
48
57
|
end
|
49
58
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Steem
|
2
|
+
module Serializable
|
3
|
+
NUMERIC_TYPES = %i(unsigned_char uint16 uint32 uint64 signed_char int16 int32
|
4
|
+
int64 varint)
|
5
|
+
|
6
|
+
KNOWN_TYPES = NUMERIC_TYPES + %i(boolean string raw_bytes point_in_time
|
7
|
+
public_key amount price authority optional_authority
|
8
|
+
comment_options_extensions beneficiaries chain_properties required_auths
|
9
|
+
witness_properties empty_array lambda)
|
10
|
+
|
11
|
+
module ClassMethods
|
12
|
+
def def_attr key_pair
|
13
|
+
name = key_pair.keys.first.to_sym
|
14
|
+
type = key_pair.values.first.to_sym
|
15
|
+
|
16
|
+
self.attributes ||= []
|
17
|
+
self.attributes << name
|
18
|
+
|
19
|
+
attr_accessor *attributes
|
20
|
+
add_type name, type
|
21
|
+
end
|
22
|
+
|
23
|
+
def add_type name, type
|
24
|
+
name = name.to_sym
|
25
|
+
type = type.to_sym
|
26
|
+
raise "Unknown type: #{type}" unless KNOWN_TYPES.include? type
|
27
|
+
|
28
|
+
@serializable_types ||= {}
|
29
|
+
@serializable_types[name] = type
|
30
|
+
end
|
31
|
+
|
32
|
+
def numeric?(name)
|
33
|
+
NUMERIC_TYPES.include? @serializable_types[name.to_sym]
|
34
|
+
end
|
35
|
+
|
36
|
+
def serializable_types
|
37
|
+
@serializable_types
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.included(base)
|
42
|
+
base.extend(ClassMethods)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,141 @@
|
|
1
|
+
module Steem
|
2
|
+
class Operation
|
3
|
+
include JSONable
|
4
|
+
include Serializable
|
5
|
+
include Utils
|
6
|
+
|
7
|
+
# IDs derrived from:
|
8
|
+
# https://github.com/steemit/steem/blob/127a441fbac2f06804359968bda83b66e602c891/libraries/protocol/include/steem/protocol/operations.hpp
|
9
|
+
|
10
|
+
IDS = [
|
11
|
+
:vote_operation,
|
12
|
+
:comment_operation,
|
13
|
+
|
14
|
+
:transfer_operation,
|
15
|
+
:transfer_to_vesting_operation,
|
16
|
+
:withdraw_vesting_operation,
|
17
|
+
|
18
|
+
:limit_order_create_operation,
|
19
|
+
:limit_order_cancel_operation,
|
20
|
+
|
21
|
+
:feed_publish_operation,
|
22
|
+
:convert_operation,
|
23
|
+
|
24
|
+
:account_create_operation,
|
25
|
+
:account_update_operation,
|
26
|
+
|
27
|
+
:witness_update_operation,
|
28
|
+
:account_witness_vote_operation,
|
29
|
+
:account_witness_proxy_operation,
|
30
|
+
|
31
|
+
:pow_operation,
|
32
|
+
|
33
|
+
:custom_operation,
|
34
|
+
|
35
|
+
:report_over_production_operation,
|
36
|
+
|
37
|
+
:delete_comment_operation,
|
38
|
+
:custom_json_operation,
|
39
|
+
:comment_options_operation,
|
40
|
+
:set_withdraw_vesting_route_operation,
|
41
|
+
:limit_order_create2_operation,
|
42
|
+
:claim_account_operation,
|
43
|
+
:create_claimed_account_operation,
|
44
|
+
:request_account_recovery_operation,
|
45
|
+
:recover_account_operation,
|
46
|
+
:change_recovery_account_operation,
|
47
|
+
:escrow_transfer_operation,
|
48
|
+
:escrow_dispute_operation,
|
49
|
+
:escrow_release_operation,
|
50
|
+
:pow2_operation,
|
51
|
+
:escrow_approve_operation,
|
52
|
+
:transfer_to_savings_operation,
|
53
|
+
:transfer_from_savings_operation,
|
54
|
+
:cancel_transfer_from_savings_operation,
|
55
|
+
:custom_binary_operation,
|
56
|
+
:decline_voting_rights_operation,
|
57
|
+
:reset_account_operation,
|
58
|
+
:set_reset_account_operation,
|
59
|
+
:claim_reward_balance_operation,
|
60
|
+
:delegate_vesting_shares_operation,
|
61
|
+
:account_create_with_delegation_operation,
|
62
|
+
:witness_set_properties_operation,
|
63
|
+
|
64
|
+
# SMT operations
|
65
|
+
:claim_reward_balance2_operation,
|
66
|
+
|
67
|
+
:smt_setup_operation,
|
68
|
+
:smt_cap_reveal_operation,
|
69
|
+
:smt_refund_operation,
|
70
|
+
:smt_setup_emissions_operation,
|
71
|
+
:smt_set_setup_parameters_operation,
|
72
|
+
:smt_set_runtime_parameters_operation,
|
73
|
+
:smt_create_operation,
|
74
|
+
|
75
|
+
# virtual operations below this point
|
76
|
+
:fill_convert_request_operation,
|
77
|
+
:author_reward_operation,
|
78
|
+
:curation_reward_operation,
|
79
|
+
:comment_reward_operation,
|
80
|
+
:liquidity_reward_operation,
|
81
|
+
:interest_operation,
|
82
|
+
:fill_vesting_withdraw_operation,
|
83
|
+
:fill_order_operation,
|
84
|
+
:shutdown_witness_operation,
|
85
|
+
:fill_transfer_from_savings_operation,
|
86
|
+
:hardfork_operation,
|
87
|
+
:comment_payout_update_operation,
|
88
|
+
:return_vesting_delegation_operation,
|
89
|
+
:comment_benefactor_reward_operation,
|
90
|
+
:producer_reward_operation,
|
91
|
+
:clear_null_account_balance_operation
|
92
|
+
]
|
93
|
+
|
94
|
+
def self.op_id(op)
|
95
|
+
IDS.find_index op
|
96
|
+
end
|
97
|
+
|
98
|
+
def inspect
|
99
|
+
properties = self.class.attributes.map do |prop|
|
100
|
+
unless (v = instance_variable_get("@#{prop}")).nil?
|
101
|
+
v = if v.respond_to? :strftime
|
102
|
+
v.strftime('%Y-%m-%dT%H:%M:%S')
|
103
|
+
else
|
104
|
+
v
|
105
|
+
end
|
106
|
+
|
107
|
+
"@#{prop}=#{v}"
|
108
|
+
end
|
109
|
+
end.compact.join(', ')
|
110
|
+
|
111
|
+
"#<#{self.class.name} [#{properties}]>"
|
112
|
+
end
|
113
|
+
|
114
|
+
def [](key)
|
115
|
+
key = key.to_sym
|
116
|
+
send(key) if self.class.attributes.include?(key)
|
117
|
+
end
|
118
|
+
|
119
|
+
def []=(key, value)
|
120
|
+
key = key.to_sym
|
121
|
+
|
122
|
+
if self.class.attributes.include?(key)
|
123
|
+
if self.class.numeric? key
|
124
|
+
send("#{key}=", value.to_i)
|
125
|
+
else
|
126
|
+
send("#{key}=", value)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def ==(other_op)
|
132
|
+
return false if self.class != other_op.class
|
133
|
+
|
134
|
+
self.class.attributes.each do |prop|
|
135
|
+
return false if self[prop] != other_op[prop]
|
136
|
+
end
|
137
|
+
|
138
|
+
true
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class Steem::Operation::AccountCreate < Steem::Operation
|
2
|
+
def_attr fee: :amount
|
3
|
+
def_attr creator: :string
|
4
|
+
def_attr new_account_name: :string
|
5
|
+
def_attr owner: :authority
|
6
|
+
def_attr active: :authority
|
7
|
+
def_attr posting: :authority
|
8
|
+
def_attr memo_key: :public_key
|
9
|
+
def_attr json_metadata: :string
|
10
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class Steem::Operation::AccountCreateWithDelegation < Steem::Operation
|
2
|
+
def_attr fee: :amount
|
3
|
+
def_attr delegation: :amount
|
4
|
+
def_attr creator: :string
|
5
|
+
def_attr new_account_name: :string
|
6
|
+
def_attr owner: :authority
|
7
|
+
def_attr active: :authority
|
8
|
+
def_attr posting: :authority
|
9
|
+
def_attr memo_key: :public_key
|
10
|
+
def_attr json_metadata: :string
|
11
|
+
def_attr extensions: :empty_array
|
12
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
class Steem::Operation::AccountUpdate < Steem::Operation
|
2
|
+
def_attr account: :string
|
3
|
+
def_attr owner: :optional_authority
|
4
|
+
def_attr active: :optional_authority
|
5
|
+
def_attr posting: :optional_authority
|
6
|
+
def_attr memo_key: :public_key
|
7
|
+
def_attr json_metadata: :string
|
8
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class Steem::Operation::Comment < Steem::Operation
|
2
|
+
def_attr parent_author: :string
|
3
|
+
def_attr parent_permlink: :string
|
4
|
+
def_attr author: :string
|
5
|
+
def_attr permlink: :string
|
6
|
+
def_attr title: :string
|
7
|
+
def_attr body: :string
|
8
|
+
def_attr json_metadata: :string
|
9
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class Steem::Operation::CommentOptions < Steem::Operation
|
2
|
+
def_attr author: :string
|
3
|
+
def_attr permlink: :string
|
4
|
+
def_attr max_accepted_payout: :amount
|
5
|
+
def_attr percent_steem_dollars: :uint32
|
6
|
+
# def_attr allow_replies: :boolean
|
7
|
+
def_attr allow_votes: :boolean
|
8
|
+
def_attr allow_curation_rewards: :boolean
|
9
|
+
def_attr extensions: :comment_options_extensions
|
10
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class Steem::Operation::CreateClaimedAccount < Steem::Operation
|
2
|
+
def_attr creator: :string
|
3
|
+
def_attr new_account_name: :string
|
4
|
+
def_attr owner: :authority
|
5
|
+
def_attr active: :authority
|
6
|
+
def_attr posting: :authority
|
7
|
+
def_attr memo_key: :public_key
|
8
|
+
def_attr json_metadata: :string
|
9
|
+
def_attr extensions: :empty_array
|
10
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
class Steem::Operation::CustomBinary < Steem::Operation
|
2
|
+
def_attr required_owner_auths: :required_auths
|
3
|
+
def_attr required_active_auths: :required_auths
|
4
|
+
def_attr required_posting_auths: :required_auths
|
5
|
+
def_attr required_auths: :required_auths
|
6
|
+
def_attr id: :string
|
7
|
+
def_attr data: :raw_bytes
|
8
|
+
end
|