steem-ruby 0.9.0 → 0.9.5
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 +88 -15
- data/Rakefile +128 -31
- data/lib/steem.rb +49 -0
- data/lib/steem/api.rb +39 -37
- data/lib/steem/base_error.rb +80 -41
- data/lib/steem/block_api.rb +23 -3
- data/lib/steem/broadcast.rb +465 -29
- data/lib/steem/chain_config.rb +3 -3
- data/lib/steem/marshal.rb +231 -0
- data/lib/steem/mixins/jsonable.rb +37 -0
- data/lib/steem/mixins/retriable.rb +30 -24
- 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 +16 -4
- data/lib/steem/rpc/http_client.rb +18 -2
- data/lib/steem/stream.rb +385 -0
- data/lib/steem/transaction.rb +96 -0
- data/lib/steem/transaction_builder.rb +176 -103
- data/lib/steem/type/amount.rb +61 -9
- data/lib/steem/version.rb +1 -1
- data/steem-ruby.gemspec +9 -4
- metadata +203 -56
- data/Gemfile.lock +0 -73
data/lib/steem/base_error.rb
CHANGED
@@ -1,153 +1,185 @@
|
|
1
1
|
module Steem
|
2
2
|
class BaseError < StandardError
|
3
|
-
def initialize(error, cause = nil)
|
3
|
+
def initialize(error = nil, cause = nil)
|
4
4
|
@error = error
|
5
5
|
@cause = cause
|
6
6
|
end
|
7
7
|
|
8
8
|
def to_s
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
detail = {}
|
10
|
+
detail[:error] = @error if !!@error
|
11
|
+
detail[:cause] = @cause if !!@cause
|
12
|
+
|
13
|
+
JSON[detail] rescue detail.to_s
|
14
14
|
end
|
15
15
|
|
16
16
|
def self.build_error(error, context)
|
17
17
|
if error.message == 'Unable to acquire database lock'
|
18
|
-
raise Steem::RemoteDatabaseLockError, error.message,
|
18
|
+
raise Steem::RemoteDatabaseLockError, error.message, build_backtrace(error)
|
19
19
|
end
|
20
20
|
|
21
21
|
if error.message.include? 'Internal Error'
|
22
|
-
raise Steem::RemoteNodeError
|
22
|
+
raise Steem::RemoteNodeError, error.message, build_backtrace(error)
|
23
|
+
end
|
24
|
+
|
25
|
+
if error.message.include? 'Server error'
|
26
|
+
raise Steem::RemoteNodeError, error.message, build_backtrace(error)
|
23
27
|
end
|
24
28
|
|
25
29
|
if error.message.include? 'plugin not enabled'
|
26
|
-
raise Steem::PluginNotEnabledError, error.message,
|
30
|
+
raise Steem::PluginNotEnabledError, error.message, build_backtrace(error)
|
27
31
|
end
|
28
32
|
|
29
33
|
if error.message.include? 'argument'
|
30
|
-
raise Steem::ArgumentError, "#{context}: #{error.message}",
|
34
|
+
raise Steem::ArgumentError, "#{context}: #{error.message}", build_backtrace(error)
|
35
|
+
end
|
36
|
+
|
37
|
+
if error.message.include? 'Invalid params'
|
38
|
+
raise Steem::ArgumentError, "#{context}: #{error.message}", build_backtrace(error)
|
31
39
|
end
|
32
40
|
|
33
41
|
if error.message.start_with? 'Bad Cast:'
|
34
|
-
raise Steem::ArgumentError, "#{context}: #{error.message}",
|
42
|
+
raise Steem::ArgumentError, "#{context}: #{error.message}", build_backtrace(error)
|
35
43
|
end
|
36
44
|
|
37
45
|
if error.message.include? 'prefix_len'
|
38
|
-
raise Steem::ArgumentError, "#{context}: #{error.message}",
|
46
|
+
raise Steem::ArgumentError, "#{context}: #{error.message}", build_backtrace(error)
|
39
47
|
end
|
40
48
|
|
41
49
|
if error.message.include? 'Parse Error'
|
42
|
-
raise Steem::ArgumentError, "#{context}: #{error.message}",
|
50
|
+
raise Steem::ArgumentError, "#{context}: #{error.message}", build_backtrace(error)
|
43
51
|
end
|
44
52
|
|
45
53
|
if error.message.include? 'unknown key'
|
46
|
-
raise Steem::ArgumentError, "#{context}: #{error.message} (or content has been deleted)",
|
54
|
+
raise Steem::ArgumentError, "#{context}: #{error.message} (or content has been deleted)", build_backtrace(error)
|
47
55
|
end
|
48
56
|
|
49
57
|
if error.message.include? 'Comment is not in account\'s comments'
|
50
|
-
raise Steem::ArgumentError, "#{context}: #{error.message}",
|
58
|
+
raise Steem::ArgumentError, "#{context}: #{error.message}", build_backtrace(error)
|
51
59
|
end
|
52
60
|
|
53
61
|
if error.message.include? 'Could not find comment'
|
54
|
-
raise Steem::ArgumentError, "#{context}: #{error.message}",
|
62
|
+
raise Steem::ArgumentError, "#{context}: #{error.message}", build_backtrace(error)
|
55
63
|
end
|
56
64
|
|
57
65
|
if error.message.include? 'unable to convert ISO-formatted string to fc::time_point_sec'
|
58
|
-
raise Steem::ArgumentError, "#{context}: #{error.message}",
|
66
|
+
raise Steem::ArgumentError, "#{context}: #{error.message}", build_backtrace(error)
|
59
67
|
end
|
60
68
|
|
61
69
|
if error.message.include? 'Input data have to treated as object.'
|
62
|
-
raise Steem::ArgumentError, "#{context}: #{error.message}",
|
70
|
+
raise Steem::ArgumentError, "#{context}: #{error.message}", build_backtrace(error)
|
71
|
+
end
|
72
|
+
|
73
|
+
if error.message.include? 'base.amount > share_type(0)'
|
74
|
+
raise Steem::ArgumentError, "#{context}: #{error.message}", build_backtrace(error)
|
63
75
|
end
|
64
76
|
|
65
77
|
if error.message.include? 'blk->transactions.size() > itr->trx_in_block'
|
66
|
-
raise Steem::VirtualOperationsNotAllowedError, "#{context}: #{error.message}",
|
78
|
+
raise Steem::VirtualOperationsNotAllowedError, "#{context}: #{error.message}", build_backtrace(error)
|
67
79
|
end
|
68
80
|
|
69
81
|
if error.message.include? 'A transaction must have at least one operation'
|
70
|
-
raise Steem::EmptyTransactionError, "#{context}: #{error.message}",
|
82
|
+
raise Steem::EmptyTransactionError, "#{context}: #{error.message}", build_backtrace(error)
|
71
83
|
end
|
72
84
|
|
73
85
|
if error.message.include? 'transaction expiration exception'
|
74
|
-
raise Steem::TransactionExpiredError, "#{context}: #{error.message}",
|
86
|
+
raise Steem::TransactionExpiredError, "#{context}: #{error.message}", build_backtrace(error)
|
75
87
|
end
|
76
88
|
|
77
89
|
if error.message.include? 'Duplicate transaction check failed'
|
78
|
-
raise Steem::DuplicateTransactionError, "#{context}: #{error.message}",
|
90
|
+
raise Steem::DuplicateTransactionError, "#{context}: #{error.message}", build_backtrace(error)
|
79
91
|
end
|
80
92
|
|
81
93
|
if error.message.include? 'signature is not canonical'
|
82
|
-
raise Steem::NonCanonicalSignatureError, "#{context}: #{error.message}",
|
94
|
+
raise Steem::NonCanonicalSignatureError, "#{context}: #{error.message}", build_backtrace(error)
|
83
95
|
end
|
84
96
|
|
85
97
|
if error.message.include? 'attempting to push a block that is too old'
|
86
|
-
raise Steem::BlockTooOldError, "#{context}: #{error.message}",
|
98
|
+
raise Steem::BlockTooOldError, "#{context}: #{error.message}", build_backtrace(error)
|
87
99
|
end
|
88
100
|
|
89
101
|
if error.message.include? 'irrelevant signature'
|
90
|
-
raise Steem::IrrelevantSignatureError, "#{context}: #{error.message}",
|
102
|
+
raise Steem::IrrelevantSignatureError, "#{context}: #{error.message}", build_backtrace(error)
|
91
103
|
end
|
92
104
|
|
93
105
|
if error.message.include? 'missing required posting authority'
|
94
|
-
raise Steem::MissingPostingAuthorityError, "#{context}: #{error.message}",
|
106
|
+
raise Steem::MissingPostingAuthorityError, "#{context}: #{error.message}", build_backtrace(error)
|
95
107
|
end
|
96
108
|
|
97
109
|
if error.message.include? 'missing required active authority'
|
98
|
-
raise Steem::MissingActiveAuthorityError, "#{context}: #{error.message}",
|
110
|
+
raise Steem::MissingActiveAuthorityError, "#{context}: #{error.message}", build_backtrace(error)
|
99
111
|
end
|
100
112
|
|
101
113
|
if error.message.include? 'missing required owner authority'
|
102
|
-
raise Steem::MissingOwnerAuthorityError, "#{context}: #{error.message}",
|
114
|
+
raise Steem::MissingOwnerAuthorityError, "#{context}: #{error.message}", build_backtrace(error)
|
103
115
|
end
|
104
116
|
|
105
117
|
if error.message.include? 'missing required other authority'
|
106
|
-
raise Steem::MissingOtherAuthorityError, "#{context}: #{error.message}",
|
118
|
+
raise Steem::MissingOtherAuthorityError, "#{context}: #{error.message}", build_backtrace(error)
|
119
|
+
end
|
120
|
+
|
121
|
+
if error.message.include? 'Upstream response error'
|
122
|
+
raise Steem::UpstreamResponseError, "#{context}: #{error.message}", build_backtrace(error)
|
123
|
+
end
|
124
|
+
|
125
|
+
if error.message.include? 'Bad or missing upstream response'
|
126
|
+
raise Steem::BadOrMissingUpstreamResponseError, "#{context}: #{error.message}", build_backtrace(error)
|
107
127
|
end
|
108
128
|
|
109
129
|
if error.message.include? 'operator has disabled operation indexing by transaction_id'
|
110
|
-
raise Steem::TransactionIndexDisabledError, "#{context}: #{error.message}",
|
130
|
+
raise Steem::TransactionIndexDisabledError, "#{context}: #{error.message}", build_backtrace(error)
|
111
131
|
end
|
112
132
|
|
113
133
|
if error.message.include? 'is_valid_account_name'
|
114
|
-
raise Steem::InvalidAccountError, "#{context}: #{error.message}",
|
134
|
+
raise Steem::InvalidAccountError, "#{context}: #{error.message}", build_backtrace(error)
|
135
|
+
end
|
136
|
+
|
137
|
+
if error.message.include?('Method') && error.message.include?(' does not exist.')
|
138
|
+
raise Steem::UnknownMethodError, "#{context}: #{error.message}", build_backtrace(error)
|
115
139
|
end
|
116
140
|
|
117
141
|
if error.message.include? 'Invalid operation name'
|
118
|
-
raise Steem::UnknownOperationError, "#{context}: #{error.message}",
|
142
|
+
raise Steem::UnknownOperationError, "#{context}: #{error.message}", build_backtrace(error)
|
143
|
+
end
|
144
|
+
|
145
|
+
if error.message =~ /Invalid object name: .+_operation/
|
146
|
+
raise Steem::UnknownOperationError, "#{context}: #{error.message}", build_backtrace(error)
|
119
147
|
end
|
120
148
|
|
121
149
|
if error.message.include? 'Author not found'
|
122
|
-
raise Steem::AuthorNotFoundError, "#{context}: #{error.message}",
|
150
|
+
raise Steem::AuthorNotFoundError, "#{context}: #{error.message}", build_backtrace(error)
|
123
151
|
end
|
124
152
|
|
125
153
|
if error.message.include? ' != fc::time_point_sec::maximum()'
|
126
|
-
raise Steem::ReachedMaximumTimeError, "#{context}: #{error.message}",
|
154
|
+
raise Steem::ReachedMaximumTimeError, "#{context}: #{error.message}", build_backtrace(error)
|
127
155
|
end
|
128
156
|
|
129
157
|
if error.message.include? 'Cannot transfer a negative amount (aka: stealing)'
|
130
|
-
raise Steem::TheftError, "#{context}: #{error.message}",
|
158
|
+
raise Steem::TheftError, "#{context}: #{error.message}", build_backtrace(error)
|
131
159
|
end
|
132
160
|
|
133
161
|
if error.message.include? 'Must transfer a nonzero amount'
|
134
|
-
raise Steem::NonZeroRequiredError, "#{context}: #{error.message}",
|
162
|
+
raise Steem::NonZeroRequiredError, "#{context}: #{error.message}", build_backtrace(error)
|
135
163
|
end
|
136
164
|
|
137
165
|
if error.message.include? 'is_asset_type'
|
138
|
-
raise Steem::UnexpectedAssetError, "#{context}: #{error.message}",
|
166
|
+
raise Steem::UnexpectedAssetError, "#{context}: #{error.message}", build_backtrace(error)
|
139
167
|
end
|
140
168
|
|
141
169
|
puts JSON.pretty_generate(error) if ENV['DEBUG']
|
142
|
-
raise UnknownError, "#{context}: #{error.message}",
|
170
|
+
raise UnknownError, "#{context}: #{error.message}", build_backtrace(error)
|
171
|
+
end
|
172
|
+
private
|
173
|
+
def self.build_backtrace(error)
|
174
|
+
backtrace = Thread.current.backtrace.reject{ |line| line =~ /base_error/ }
|
175
|
+
JSON.pretty_generate(error) + "\n" + backtrace.join("\n")
|
143
176
|
end
|
144
177
|
end
|
145
178
|
|
179
|
+
class DeserializationError < BaseError; end
|
180
|
+
class SerializationMismatchError < BaseError; end
|
146
181
|
class UnsupportedChainError < BaseError; end
|
147
182
|
class ArgumentError < BaseError; end
|
148
|
-
class RemoteNodeError < BaseError; end
|
149
|
-
class RemoteDatabaseLockError < RemoteNodeError; end
|
150
|
-
class PluginNotEnabledError < RemoteNodeError; end
|
151
183
|
class TypeError < BaseError; end
|
152
184
|
class EmptyTransactionError < ArgumentError; end
|
153
185
|
class InvalidAccountError < ArgumentError; end
|
@@ -169,11 +201,18 @@ module Steem
|
|
169
201
|
class MissingOtherAuthorityError < MissingAuthorityError; end
|
170
202
|
class IncorrectRequestIdError < BaseError; end
|
171
203
|
class IncorrectResponseIdError < BaseError; end
|
204
|
+
class RemoteNodeError < BaseError; end
|
205
|
+
class UpstreamResponseError < RemoteNodeError; end
|
206
|
+
class RemoteDatabaseLockError < UpstreamResponseError; end
|
207
|
+
class PluginNotEnabledError < UpstreamResponseError; end
|
208
|
+
class BadOrMissingUpstreamResponseError < UpstreamResponseError; end
|
172
209
|
class TransactionIndexDisabledError < BaseError; end
|
173
210
|
class NotAppBaseError < BaseError; end
|
174
211
|
class UnknownApiError < BaseError; end
|
212
|
+
class UnknownMethodError < BaseError; end
|
175
213
|
class UnknownOperationError < BaseError; end
|
176
214
|
class JsonRpcBatchMaximumSizeExceededError < BaseError; end
|
177
215
|
class TooManyTimeoutsError < BaseError; end
|
216
|
+
class TooManyRetriesError < BaseError; end
|
178
217
|
class UnknownError < BaseError; end
|
179
218
|
end
|
data/lib/steem/block_api.rb
CHANGED
@@ -12,11 +12,25 @@ module Steem
|
|
12
12
|
super
|
13
13
|
end
|
14
14
|
|
15
|
+
# Uses a batched requst on a range of block headers.
|
16
|
+
#
|
17
|
+
# @param options [Hash] The attributes to get a block range with.
|
18
|
+
# @option options [Range] :block_range starting on one block number and ending on an higher block number.
|
19
|
+
def get_block_headers(options = {block_range: (0..0)}, &block)
|
20
|
+
get_block_objects(options.merge(object: :block_header), block)
|
21
|
+
end
|
22
|
+
|
15
23
|
# Uses a batched requst on a range of blocks.
|
16
24
|
#
|
17
25
|
# @param options [Hash] The attributes to get a block range with.
|
18
26
|
# @option options [Range] :block_range starting on one block number and ending on an higher block number.
|
19
27
|
def get_blocks(options = {block_range: (0..0)}, &block)
|
28
|
+
get_block_objects(options.merge(object: :block), block)
|
29
|
+
end
|
30
|
+
private
|
31
|
+
def get_block_objects(options = {block_range: (0..0)}, block = nil)
|
32
|
+
object = options[:object]
|
33
|
+
object_method = "get_#{object}".to_sym
|
20
34
|
block_range = options[:block_range] || (0..0)
|
21
35
|
|
22
36
|
if (start = block_range.first) < 1
|
@@ -33,15 +47,21 @@ module Steem
|
|
33
47
|
request_object = []
|
34
48
|
|
35
49
|
for i in sub_range do
|
36
|
-
@rpc_client.put(self.class.api_name,
|
50
|
+
@rpc_client.put(self.class.api_name, object_method, block_num: i, request_object: request_object)
|
37
51
|
end
|
38
52
|
|
39
53
|
if !!block
|
40
54
|
index = 0
|
41
55
|
@rpc_client.rpc_batch_execute(request_object: request_object) do |result, error, id|
|
42
56
|
block_num = sub_range.to_a[index]
|
43
|
-
index = index
|
44
|
-
|
57
|
+
index = index + 1
|
58
|
+
|
59
|
+
case object
|
60
|
+
when :block_header
|
61
|
+
block.call(result.nil? ? nil : result[:header], block_num)
|
62
|
+
else
|
63
|
+
block.call(result.nil? ? nil : result[object], block_num)
|
64
|
+
end
|
45
65
|
end
|
46
66
|
else
|
47
67
|
blocks = []
|
data/lib/steem/broadcast.rb
CHANGED
@@ -31,8 +31,9 @@ module Steem
|
|
31
31
|
# For details on what to pass to these methods, check out the {https://developers.steem.io/apidefinitions/broadcast-ops Steem Developer Portal Broadcast Operations} page.
|
32
32
|
class Broadcast
|
33
33
|
extend Retriable
|
34
|
+
extend Utils
|
34
35
|
|
35
|
-
DEFAULT_MAX_ACCEPTED_PAYOUT = Type::Amount.new(
|
36
|
+
DEFAULT_MAX_ACCEPTED_PAYOUT = Type::Amount.new(amount: '1000000000', precision: 3, nai: '@@000000013')
|
36
37
|
|
37
38
|
# This operation is used to cast a vote on a post/comment.
|
38
39
|
#
|
@@ -69,6 +70,58 @@ module Steem
|
|
69
70
|
process(options.merge(ops: ops), &block)
|
70
71
|
end
|
71
72
|
|
73
|
+
# This operation is used to cast a vote on a post/comment using multiple votable assets.
|
74
|
+
#
|
75
|
+
# options = {
|
76
|
+
# wif: wif,
|
77
|
+
# params: {
|
78
|
+
# voter: voter,
|
79
|
+
# author: author,
|
80
|
+
# permlink: permlink,
|
81
|
+
# TODO
|
82
|
+
# }
|
83
|
+
# }
|
84
|
+
#
|
85
|
+
# Steem::Broadcast.vote2(options) do |result|
|
86
|
+
# puts result
|
87
|
+
# end
|
88
|
+
#
|
89
|
+
# @param options [Hash] options
|
90
|
+
# @option options [String] :wif Posting wif
|
91
|
+
# @option options [Hash] :params
|
92
|
+
# * :voter (String)
|
93
|
+
# * :author (String)
|
94
|
+
# * :permlink (String)
|
95
|
+
# * :rshares (Array)
|
96
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
97
|
+
# @see https://developers.steem.io/apidefinitions/broadcast-ops#broadcast_ops_vote
|
98
|
+
def self.vote2(options, &block)
|
99
|
+
required_fields = %i(voter author permlink rshares)
|
100
|
+
params = options[:params]
|
101
|
+
check_required_fields(params, *required_fields)
|
102
|
+
|
103
|
+
ops = [[:vote2, params]]
|
104
|
+
|
105
|
+
process(options.merge(ops: ops), &block)
|
106
|
+
end
|
107
|
+
|
108
|
+
# @param options [Hash] options
|
109
|
+
# @option options [String] :wif Posting wif
|
110
|
+
# @option options [Hash] :params
|
111
|
+
# * :account (String)
|
112
|
+
# * :reward_tokens (Array)
|
113
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
114
|
+
# @see https://developers.steem.io/apidefinitions/broadcast-ops#broadcast_ops_vote
|
115
|
+
def self.claim_reward_balance2(options, &block)
|
116
|
+
required_fields = %i(account reward_tokens)
|
117
|
+
params = options[:params]
|
118
|
+
check_required_fields(params, *required_fields)
|
119
|
+
|
120
|
+
ops = [[:claim_reward_balance2, params]]
|
121
|
+
|
122
|
+
process(options.merge(ops: ops), &block)
|
123
|
+
end
|
124
|
+
|
72
125
|
# Creates a post/comment. This method simplifies content creation by
|
73
126
|
# combining `comment` and `comment_options` into one transaction.
|
74
127
|
#
|
@@ -174,9 +227,9 @@ module Steem
|
|
174
227
|
}]]
|
175
228
|
|
176
229
|
max_accepted_payout = if params.keys.include? :max_accepted_payout
|
177
|
-
|
230
|
+
normalize_amount(options.merge amount: params[:max_accepted_payout])
|
178
231
|
else
|
179
|
-
DEFAULT_MAX_ACCEPTED_PAYOUT
|
232
|
+
normalize_amount(options.merge amount: DEFAULT_MAX_ACCEPTED_PAYOUT)
|
180
233
|
end
|
181
234
|
|
182
235
|
allow_votes = if params.keys.include? :allow_votes
|
@@ -196,13 +249,17 @@ module Steem
|
|
196
249
|
permlink: params[:permlink],
|
197
250
|
max_accepted_payout: max_accepted_payout,
|
198
251
|
percent_steem_dollars: params[:percent_steem_dollars] || 10000,
|
252
|
+
# allow_replies: allow_replies,
|
199
253
|
allow_votes: allow_votes,
|
200
254
|
allow_curation_rewards: allow_curation_rewards,
|
201
255
|
extensions: []
|
202
256
|
}
|
203
257
|
|
204
258
|
if !!params[:beneficiaries]
|
205
|
-
comment_options[:extensions] << [
|
259
|
+
comment_options[:extensions] << [
|
260
|
+
comment_options[:extensions].size,
|
261
|
+
normalize_beneficiaries(options.merge(beneficiaries: params[:beneficiaries]))
|
262
|
+
]
|
206
263
|
end
|
207
264
|
|
208
265
|
ops << [:comment_options, comment_options]
|
@@ -274,7 +331,7 @@ module Steem
|
|
274
331
|
params = options[:params]
|
275
332
|
check_required_fields(params, *required_fields)
|
276
333
|
|
277
|
-
params[:amount] =
|
334
|
+
params[:amount] = normalize_amount(options.merge amount: params[:amount])
|
278
335
|
|
279
336
|
ops = [[:transfer, params]]
|
280
337
|
|
@@ -310,7 +367,7 @@ module Steem
|
|
310
367
|
params = options[:params]
|
311
368
|
check_required_fields(params, *required_fields)
|
312
369
|
|
313
|
-
params[:amount] =
|
370
|
+
params[:amount] = normalize_amount(options.merge amount: params[:amount])
|
314
371
|
|
315
372
|
ops = [[:transfer_to_vesting, params]]
|
316
373
|
|
@@ -336,7 +393,7 @@ module Steem
|
|
336
393
|
params = options[:params]
|
337
394
|
check_required_fields(params, *required_fields)
|
338
395
|
|
339
|
-
params[:vesting_shares] =
|
396
|
+
params[:vesting_shares] = normalize_amount(options.merge amount: params[:vesting_shares])
|
340
397
|
|
341
398
|
ops = [[:withdraw_vesting, params]]
|
342
399
|
|
@@ -363,8 +420,8 @@ module Steem
|
|
363
420
|
params = options[:params]
|
364
421
|
check_required_fields(params, *required_fields)
|
365
422
|
|
366
|
-
params[:amount_to_sell] =
|
367
|
-
params[:min_to_receive] =
|
423
|
+
params[:amount_to_sell] = normalize_amount(options.merge amount: params[:amount_to_sell])
|
424
|
+
params[:min_to_receive] = normalize_amount(options.merge amount: params[:min_to_receive])
|
368
425
|
|
369
426
|
if !!params[:expiration]
|
370
427
|
params[:expiration] = Time.parse(params[:expiration].to_s)
|
@@ -376,6 +433,42 @@ module Steem
|
|
376
433
|
process(options.merge(ops: ops), &block)
|
377
434
|
end
|
378
435
|
|
436
|
+
# This operation creates a limit order and matches it against existing open
|
437
|
+
# orders.
|
438
|
+
#
|
439
|
+
# @param options [Hash] options
|
440
|
+
# @option options [String] :wif Active wif
|
441
|
+
# @option options [Hash] :params
|
442
|
+
# * :owner (String)
|
443
|
+
# * :orderid (String)
|
444
|
+
# * :amount_to_sell (String)
|
445
|
+
# * :exchange_rate (Hash)
|
446
|
+
# * :fill_or_kill (Boolean)
|
447
|
+
# * :expiration (String)
|
448
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
449
|
+
# @see https://developers.steem.io/apidefinitions/broadcast-ops#broadcast_ops_limit_order_create2
|
450
|
+
def self.limit_order_create2(options, &block)
|
451
|
+
required_fields = %i(owner orderid amount_to_sell exchange_rate
|
452
|
+
fill_or_kill)
|
453
|
+
params = options[:params]
|
454
|
+
check_required_fields(params, *required_fields)
|
455
|
+
|
456
|
+
params[:amount_to_sell] = normalize_amount(options.merge amount: params[:amount_to_sell])
|
457
|
+
params[:exchange_rate] = {
|
458
|
+
base: normalize_amount(options.merge amount: params[:exchange_rate][:base]),
|
459
|
+
quote: normalize_amount(options.merge amount: params[:exchange_rate][:quote])
|
460
|
+
}
|
461
|
+
|
462
|
+
if !!params[:expiration]
|
463
|
+
params[:expiration] = Time.parse(params[:expiration].to_s)
|
464
|
+
params[:expiration] = params[:expiration].strftime('%Y-%m-%dT%H:%M:%S')
|
465
|
+
end
|
466
|
+
|
467
|
+
ops = [[:limit_order_create2, params]]
|
468
|
+
|
469
|
+
process(options.merge(ops: ops), &block)
|
470
|
+
end
|
471
|
+
|
379
472
|
# Cancels an order and returns the balance to owner.
|
380
473
|
#
|
381
474
|
# @param options [Hash] options
|
@@ -414,8 +507,8 @@ module Steem
|
|
414
507
|
exchange_rate = params[:exchange_rate] rescue nil || {}
|
415
508
|
base = exchange_rate[:base]
|
416
509
|
quote = exchange_rate[:quote]
|
417
|
-
params[:exchange_rate][:base] =
|
418
|
-
params[:exchange_rate][:quote] =
|
510
|
+
params[:exchange_rate][:base] = normalize_amount(options.merge amount: base)
|
511
|
+
params[:exchange_rate][:quote] = normalize_amount(options.merge amount: quote)
|
419
512
|
|
420
513
|
ops = [[:feed_publish, params]]
|
421
514
|
|
@@ -438,7 +531,7 @@ module Steem
|
|
438
531
|
params = options[:params]
|
439
532
|
check_required_fields(params, *required_fields)
|
440
533
|
|
441
|
-
params[:amount] =
|
534
|
+
params[:amount] = normalize_amount(options.merge amount: params[:amount])
|
442
535
|
|
443
536
|
ops = [[:convert, params]]
|
444
537
|
|
@@ -502,13 +595,75 @@ module Steem
|
|
502
595
|
|
503
596
|
check_required_fields(params, *required_fields)
|
504
597
|
|
505
|
-
params[:fee] =
|
598
|
+
params[:fee] = normalize_amount(options.merge amount: params[:fee])
|
506
599
|
|
507
600
|
ops = [[:account_create, params]]
|
508
601
|
|
509
602
|
process(options.merge(ops: ops), &block)
|
510
603
|
end
|
511
604
|
|
605
|
+
# Create a claimed account.
|
606
|
+
# options = {
|
607
|
+
# wif: wif,
|
608
|
+
# params: {
|
609
|
+
# creator: creator_account_name,
|
610
|
+
# new_account_name: new_account_name,
|
611
|
+
# owner: {
|
612
|
+
# weight_threshold: 1,
|
613
|
+
# account_auths: [],
|
614
|
+
# key_auths: [[owner_public_key, 1]],
|
615
|
+
# },
|
616
|
+
# active: {
|
617
|
+
# weight_threshold: 1,
|
618
|
+
# account_auths: [],
|
619
|
+
# key_auths: [[active_public_key, 1]],
|
620
|
+
# },
|
621
|
+
# posting: {
|
622
|
+
# weight_threshold: 1,
|
623
|
+
# account_auths: [],
|
624
|
+
# key_auths: [[posting_public_key, 1]],
|
625
|
+
# },
|
626
|
+
# memo_key: memo_public_key,
|
627
|
+
# json_metadata: '{}'
|
628
|
+
# }
|
629
|
+
# }
|
630
|
+
#
|
631
|
+
# Steem::Broadcast.create_claimed_account(options)
|
632
|
+
#
|
633
|
+
# @param options [Hash] options
|
634
|
+
# @option options [String] :wif Active wif
|
635
|
+
# @option options [Hash] :params
|
636
|
+
# * :creator (String)
|
637
|
+
# * :new_account_name (String)
|
638
|
+
# * :owner (Hash)
|
639
|
+
# * :active (Hash)
|
640
|
+
# * :posting (Hash)
|
641
|
+
# * :memo_key (String)
|
642
|
+
# * :metadata (Hash) Metadata of the account, becomes `json_metadata`.
|
643
|
+
# * :json_metadata (String) String version of `metadata` (use one or the other).
|
644
|
+
# * :extensions (Array) (optional)
|
645
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
646
|
+
# @see https://developers.steem.io/apidefinitions/broadcast-ops#broadcast_ops_create_claimed_account
|
647
|
+
def self.create_claimed_account(options, &block)
|
648
|
+
required_fields = %i(creator new_account_name owner active posting memo_key json_metadata)
|
649
|
+
params = options[:params]
|
650
|
+
|
651
|
+
if !!params[:metadata] && !!params[:json_metadata]
|
652
|
+
raise Steem::ArgumentError, 'Assign either metadata or json_metadata, not both.'
|
653
|
+
end
|
654
|
+
|
655
|
+
metadata = params.delete(:metadata) || {}
|
656
|
+
metadata ||= (JSON[params[:json_metadata]] || nil) || {}
|
657
|
+
params[:json_metadata] = metadata.to_json
|
658
|
+
|
659
|
+
check_required_fields(params, *required_fields)
|
660
|
+
|
661
|
+
params[:extensions] ||= []
|
662
|
+
ops = [[:create_claimed_account, params]]
|
663
|
+
|
664
|
+
process(options.merge(ops: ops), &block)
|
665
|
+
end
|
666
|
+
|
512
667
|
# Update an account.
|
513
668
|
# options = {
|
514
669
|
# wif: wif,
|
@@ -603,14 +758,81 @@ module Steem
|
|
603
758
|
check_required_fields(params, *required_fields)
|
604
759
|
|
605
760
|
account_creation_fee = params[:props][:account_creation_fee] rescue nil
|
606
|
-
params[:props][:account_creation_fee] =
|
607
|
-
params[:fee] =
|
761
|
+
params[:props][:account_creation_fee] = normalize_amount(options.merge amount: account_creation_fee)
|
762
|
+
params[:fee] = normalize_amount(options.merge amount: params[:fee])
|
608
763
|
|
609
764
|
ops = [[:witness_update, params]]
|
610
765
|
|
611
766
|
process(options.merge(ops: ops), &block)
|
612
767
|
end
|
613
768
|
|
769
|
+
# Extensible replacement for #witness_update that supports additional
|
770
|
+
# properties added since HF20 and beyond.
|
771
|
+
#
|
772
|
+
# options = {
|
773
|
+
# wif: wif,
|
774
|
+
# params: {
|
775
|
+
# owner: witness_account_name,
|
776
|
+
# props: {
|
777
|
+
# account_creation_fee: '0.000 STEEM',
|
778
|
+
# maximum_block_size: 131072,
|
779
|
+
# sbd_interest_rate: 1000,
|
780
|
+
# account_subsidy_budget: 50000,
|
781
|
+
# account_subsidy_decay: 330782,
|
782
|
+
# sbd_exchange_rate: '1.000 STEEM',
|
783
|
+
# url: "https://steemit.com",
|
784
|
+
# new_signing_key: 'STM8LoQjQqJHvotqBo7HjnqmUbFW9oJ2theyqonzUd9DdJ7YYHsvD'
|
785
|
+
# }
|
786
|
+
# }
|
787
|
+
# }
|
788
|
+
#
|
789
|
+
# Steem::Broadcast.witness_set_properties(options)
|
790
|
+
#
|
791
|
+
# @param options [Hash] options
|
792
|
+
# @option options [String] :wif Active wif
|
793
|
+
# @option options [Hash] :params
|
794
|
+
# * :owner (String)
|
795
|
+
# * :props (String)
|
796
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
797
|
+
# @see https://developers.steem.io/apidefinitions/broadcast-ops#broadcast_ops_witness_set_properties
|
798
|
+
# @see https://github.com/steemit/steem/blob/master/doc/witness_parameters.md
|
799
|
+
def self.witness_set_properties(options, &block)
|
800
|
+
required_fields = %i(owner props)
|
801
|
+
params = options[:params]
|
802
|
+
check_required_fields(params, *required_fields)
|
803
|
+
|
804
|
+
if !!(account_creation_fee = params[:props][:account_creation_fee] rescue nil)
|
805
|
+
params[:props][:account_creation_fee] = normalize_amount(options.merge amount: account_creation_fee, serialize: true)
|
806
|
+
end
|
807
|
+
|
808
|
+
if !!(sbd_exchange_rate = params[:props][:sbd_exchange_rate] rescue nil)
|
809
|
+
params[:props][:sbd_exchange_rate][:base] = normalize_amount(options.merge amount: sbd_exchange_rate[:base], serialize: true)
|
810
|
+
params[:props][:sbd_exchange_rate][:quote] = normalize_amount(options.merge amount: sbd_exchange_rate[:quote], serialize: true)
|
811
|
+
params[:props][:sbd_exchange_rate] = params[:props][:sbd_exchange_rate].to_json
|
812
|
+
end
|
813
|
+
|
814
|
+
%i(key new_signing_key).each do |key|
|
815
|
+
if !!params[key] && params[key].size == 53
|
816
|
+
params[key] = params[key][3..-1]
|
817
|
+
end
|
818
|
+
end
|
819
|
+
|
820
|
+
%i(account_creation_fee sbd_exchange_rate url new_signing_key).each do |key|
|
821
|
+
next unless !!params[:props][key]
|
822
|
+
|
823
|
+
val = params[:props][key].to_s
|
824
|
+
|
825
|
+
params[:props][key] = hexlify val unless val =~ /^[0-9A-F]+$/i
|
826
|
+
end
|
827
|
+
|
828
|
+
params[:props] = params[:props].to_a
|
829
|
+
|
830
|
+
params[:extensions] ||= []
|
831
|
+
ops = [[:witness_set_properties, params]]
|
832
|
+
|
833
|
+
process(options.merge(ops: ops), &block)
|
834
|
+
end
|
835
|
+
|
614
836
|
# All accounts with a VFS (Vesting Fund Shares) can vote for or against any
|
615
837
|
# witness.
|
616
838
|
#
|
@@ -844,9 +1066,9 @@ module Steem
|
|
844
1066
|
|
845
1067
|
check_required_fields(params, *required_fields)
|
846
1068
|
|
847
|
-
params[:sbd_amount] =
|
848
|
-
params[:steem_amount] =
|
849
|
-
params[:fee] =
|
1069
|
+
params[:sbd_amount] = normalize_amount(options.merge amount: params[:sbd_amount])
|
1070
|
+
params[:steem_amount] = normalize_amount(options.merge amount: params[:steem_amount])
|
1071
|
+
params[:fee] = normalize_amount(options.merge amount: params[:fee])
|
850
1072
|
|
851
1073
|
params[:ratification_deadline] = Time.parse(params[:ratification_deadline].to_s)
|
852
1074
|
params[:ratification_deadline] = params[:ratification_deadline].strftime('%Y-%m-%dT%H:%M:%S')
|
@@ -905,8 +1127,8 @@ module Steem
|
|
905
1127
|
params = options[:params]
|
906
1128
|
check_required_fields(params, *required_fields)
|
907
1129
|
|
908
|
-
params[:sbd_amount] =
|
909
|
-
params[:steem_amount] =
|
1130
|
+
params[:sbd_amount] = normalize_amount(options.merge amount: params[:sbd_amount])
|
1131
|
+
params[:steem_amount] = normalize_amount(options.merge amount: params[:steem_amount])
|
910
1132
|
|
911
1133
|
ops = [[:escrow_release, params]]
|
912
1134
|
|
@@ -954,7 +1176,7 @@ module Steem
|
|
954
1176
|
check_required_fields(params, *required_fields)
|
955
1177
|
|
956
1178
|
params[:memo] ||= ''
|
957
|
-
params[:amount] =
|
1179
|
+
params[:amount] = normalize_amount(options.merge amount: params[:amount])
|
958
1180
|
|
959
1181
|
ops = [[:transfer_to_savings, params]]
|
960
1182
|
|
@@ -977,7 +1199,7 @@ module Steem
|
|
977
1199
|
check_required_fields(params, *required_fields)
|
978
1200
|
|
979
1201
|
params[:memo] ||= ''
|
980
|
-
params[:amount] =
|
1202
|
+
params[:amount] = normalize_amount(options.merge amount: params[:amount])
|
981
1203
|
|
982
1204
|
ops = [[:transfer_from_savings, params]]
|
983
1205
|
|
@@ -1039,7 +1261,7 @@ module Steem
|
|
1039
1261
|
params = options[:params]
|
1040
1262
|
check_required_fields(params, *required_fields)
|
1041
1263
|
|
1042
|
-
params[:vesting_shares] =
|
1264
|
+
params[:vesting_shares] = normalize_amount(options.merge amount: params[:vesting_shares])
|
1043
1265
|
ops = [[:delegate_vesting_shares, params]]
|
1044
1266
|
|
1045
1267
|
process(options.merge(ops: ops), &block)
|
@@ -1075,8 +1297,8 @@ module Steem
|
|
1075
1297
|
|
1076
1298
|
check_required_fields(params, *required_fields)
|
1077
1299
|
|
1078
|
-
params[:fee] =
|
1079
|
-
params[:delegation] =
|
1300
|
+
params[:fee] = normalize_amount(options.merge amount: params[:fee])
|
1301
|
+
params[:delegation] = normalize_amount(options.merge amount: params[:delegation])
|
1080
1302
|
params[:extensions] ||= []
|
1081
1303
|
|
1082
1304
|
ops = [[:account_create_with_delegation, params]]
|
@@ -1084,6 +1306,188 @@ module Steem
|
|
1084
1306
|
process(options.merge(ops: ops), &block)
|
1085
1307
|
end
|
1086
1308
|
|
1309
|
+
# @param options [Hash] options
|
1310
|
+
# @option options [String] :wif Active wif
|
1311
|
+
# @option options [Hash] :params
|
1312
|
+
# * :creator (String)
|
1313
|
+
# * :fee (String)
|
1314
|
+
# * :extensions (Array)
|
1315
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
1316
|
+
# @see https://developers.steem.io/apidefinitions/broadcast-ops#broadcast_ops_claim_account
|
1317
|
+
def self.claim_account(options, &block)
|
1318
|
+
required_fields = %i(creator fee)
|
1319
|
+
params = options[:params]
|
1320
|
+
|
1321
|
+
check_required_fields(params, *required_fields)
|
1322
|
+
|
1323
|
+
params[:fee] = normalize_amount(options.merge amount: params[:fee])
|
1324
|
+
params[:extensions] ||= []
|
1325
|
+
|
1326
|
+
ops = [[:claim_account, params]]
|
1327
|
+
|
1328
|
+
process(options.merge(ops: ops), &block)
|
1329
|
+
end
|
1330
|
+
|
1331
|
+
# @param options [Hash] options
|
1332
|
+
# @option options [String] :wif Active wif
|
1333
|
+
# @option options [Hash] :params
|
1334
|
+
# * :control_account (String)
|
1335
|
+
# * :symbol (Hash)
|
1336
|
+
# * :smt_creation_fee (Hash)
|
1337
|
+
# * :precision (Integer)
|
1338
|
+
# * :extensions (Array)
|
1339
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
1340
|
+
# @see https://developers.steem.io/apidefinitions/broadcast-ops#broadcast_ops_smt_create
|
1341
|
+
def self.smt_create(options, &block)
|
1342
|
+
required_fields = %i(control_account symbol smt_creation_fee precision)
|
1343
|
+
params = options[:params]
|
1344
|
+
|
1345
|
+
check_required_fields(params, *required_fields)
|
1346
|
+
|
1347
|
+
params[:smt_creation_fee] = normalize_amount(options.merge amount: params[:smt_creation_fee])
|
1348
|
+
params[:extensions] ||= []
|
1349
|
+
|
1350
|
+
ops = [[:smt_create, params]]
|
1351
|
+
|
1352
|
+
process(options.merge(ops: ops), &block)
|
1353
|
+
end
|
1354
|
+
|
1355
|
+
# @param options [Hash] options
|
1356
|
+
# @option options [String] :wif Active wif
|
1357
|
+
# @option options [Hash] :params
|
1358
|
+
# * :control_account (String)
|
1359
|
+
# * :symbol (Hash)
|
1360
|
+
# * :contribution_begin_time (String)
|
1361
|
+
# * :contribution_end_time (String)
|
1362
|
+
# * :launch_time max_supply (String)
|
1363
|
+
# * :steem_units_hard_cap (Integer)
|
1364
|
+
# * :steem_units_soft_cap (Integer)
|
1365
|
+
# * :steem_units_min (Integer)
|
1366
|
+
# * initial_generation_policy (String)
|
1367
|
+
# * :extensions (Array)
|
1368
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
1369
|
+
# @see https://developers.steem.io/apidefinitions/broadcast-ops#broadcast_ops_smt_create
|
1370
|
+
def self.smt_setup(options, &block)
|
1371
|
+
required_fields = %i(control_account symbol contribution_begin_time contribution_end_time launch_time max_supply steem_units_hard_cap steem_units_soft_cap steem_units_min initial_generation_policy)
|
1372
|
+
params = options[:params]
|
1373
|
+
|
1374
|
+
check_required_fields(params, *required_fields)
|
1375
|
+
|
1376
|
+
params[:extensions] ||= []
|
1377
|
+
|
1378
|
+
ops = [[:smt_setup, params]]
|
1379
|
+
|
1380
|
+
process(options.merge(ops: ops), &block)
|
1381
|
+
end
|
1382
|
+
|
1383
|
+
# @param options [Hash] options
|
1384
|
+
# @option options [String] :wif Active wif
|
1385
|
+
# @option options [Hash] :params
|
1386
|
+
# * :control_account (String)
|
1387
|
+
# * :symbol (Hash)
|
1388
|
+
# * :setup_parameters (Array)
|
1389
|
+
# * :extensions (Array)
|
1390
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
1391
|
+
# @see https://developers.steem.io/apidefinitions/broadcast-ops#broadcast_ops_smt_create
|
1392
|
+
def self.smt_set_setup_parameters(options, &block)
|
1393
|
+
required_fields = %i(control_account symbol setup_parameters)
|
1394
|
+
params = options[:params]
|
1395
|
+
|
1396
|
+
check_required_fields(params, *required_fields)
|
1397
|
+
|
1398
|
+
params[:extensions] ||= []
|
1399
|
+
|
1400
|
+
ops = [[:smt_set_setup_parameters, params]]
|
1401
|
+
|
1402
|
+
process(options.merge(ops: ops), &block)
|
1403
|
+
end
|
1404
|
+
|
1405
|
+
# @param options [Hash] options
|
1406
|
+
# @option options [String] :wif Active wif
|
1407
|
+
# @option options [Hash] :params
|
1408
|
+
# * :control_account (String)
|
1409
|
+
# * :symbol (Hash)
|
1410
|
+
# * :runtime_parameters (Array)
|
1411
|
+
# * :extensions (Array)
|
1412
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
1413
|
+
# @see https://developers.steem.io/apidefinitions/broadcast-ops#broadcast_ops_smt_create
|
1414
|
+
def self.smt_set_runtime_parameters(options, &block)
|
1415
|
+
required_fields = %i(control_account symbol runtime_parameters)
|
1416
|
+
params = options[:params]
|
1417
|
+
|
1418
|
+
check_required_fields(params, *required_fields)
|
1419
|
+
|
1420
|
+
params[:extensions] ||= []
|
1421
|
+
|
1422
|
+
ops = [[:smt_set_runtime_parameters, params]]
|
1423
|
+
|
1424
|
+
process(options.merge(ops: ops), &block)
|
1425
|
+
end
|
1426
|
+
|
1427
|
+
# @param options [Hash] options
|
1428
|
+
# @option options [String] :wif Active wif
|
1429
|
+
# @option options [Hash] :params
|
1430
|
+
# * :control_account (String)
|
1431
|
+
# * :symbol (Hash)
|
1432
|
+
# * :extensions (Array)
|
1433
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
1434
|
+
# @see https://developers.steem.io/apidefinitions/broadcast-ops#broadcast_ops_smt_create
|
1435
|
+
def self.smt_setup_emissions(options, &block)
|
1436
|
+
required_fields = %i(control_account symbol schedule_time emissions_unit interval_seconds interval_count lep_time rep_time lep_abs_amount rep_abs_amount lep_rel_amount_numerator rep_rel_amount_numerator rel_amount_denom_bits remove floor_emissions)
|
1437
|
+
params = options[:params]
|
1438
|
+
|
1439
|
+
check_required_fields(params, *required_fields)
|
1440
|
+
|
1441
|
+
params[:extensions] ||= []
|
1442
|
+
|
1443
|
+
ops = [[:smt_setup_emissions, params]]
|
1444
|
+
|
1445
|
+
process(options.merge(ops: ops), &block)
|
1446
|
+
end
|
1447
|
+
|
1448
|
+
# @param options [Hash] options
|
1449
|
+
# @option options [String] :wif Active wif
|
1450
|
+
# @option options [Hash] :params
|
1451
|
+
# * :control_account (String)
|
1452
|
+
# * :symbol (Hash)
|
1453
|
+
# * :extensions (Array)
|
1454
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
1455
|
+
# @see https://developers.steem.io/apidefinitions/broadcast-ops#broadcast_ops_smt_create
|
1456
|
+
def self.smt_contribute(options, &block)
|
1457
|
+
required_fields = %i(contributor symbol contribution_id contribution)
|
1458
|
+
params = options[:params]
|
1459
|
+
|
1460
|
+
check_required_fields(params, *required_fields)
|
1461
|
+
|
1462
|
+
params[:extensions] ||= []
|
1463
|
+
|
1464
|
+
ops = [[:smt_contribute, params]]
|
1465
|
+
|
1466
|
+
process(options.merge(ops: ops), &block)
|
1467
|
+
end
|
1468
|
+
|
1469
|
+
# @param options [Hash] options
|
1470
|
+
# @option options [String] :wif Active wif
|
1471
|
+
# @option options [Hash] :params
|
1472
|
+
# * :from_account (String)
|
1473
|
+
# * :to_pool (String)
|
1474
|
+
# * :amount (Hash)
|
1475
|
+
# * :extensions (Array)
|
1476
|
+
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
1477
|
+
# @see https://developers.steem.io/apidefinitions/broadcast-ops#broadcast_ops_smt_create
|
1478
|
+
def self.delegate_to_pool(options, &block)
|
1479
|
+
required_fields = %i(from_account to_pool amount)
|
1480
|
+
params = options[:params]
|
1481
|
+
|
1482
|
+
check_required_fields(params, *required_fields)
|
1483
|
+
|
1484
|
+
params[:extensions] ||= []
|
1485
|
+
|
1486
|
+
ops = [[:delegate_to_pool, params]]
|
1487
|
+
|
1488
|
+
process(options.merge(ops: ops), &block)
|
1489
|
+
end
|
1490
|
+
|
1087
1491
|
# @param options [Hash] options
|
1088
1492
|
# @option options [Array<Array<Hash>] :ops Operations to process.
|
1089
1493
|
# @option options [Boolean] :pretend Just validate, do not broadcast.
|
@@ -1097,9 +1501,17 @@ module Steem
|
|
1097
1501
|
trx = tx.transaction
|
1098
1502
|
|
1099
1503
|
response = if !!options[:pretend]
|
1100
|
-
|
1504
|
+
if !!options[:app_base]
|
1505
|
+
database_api(options).verify_authority(trx: trx)
|
1506
|
+
else
|
1507
|
+
database_api(options).verify_authority(trx)
|
1508
|
+
end
|
1101
1509
|
else
|
1102
|
-
|
1510
|
+
if !!options[:app_base]
|
1511
|
+
network_broadcast_api(options).broadcast_transaction(trx: trx)
|
1512
|
+
else
|
1513
|
+
network_broadcast_api(options).broadcast_transaction_synchronous(trx)
|
1514
|
+
end
|
1103
1515
|
end
|
1104
1516
|
|
1105
1517
|
break
|
@@ -1119,14 +1531,38 @@ module Steem
|
|
1119
1531
|
end
|
1120
1532
|
end
|
1121
1533
|
private
|
1534
|
+
# @private
|
1535
|
+
def self.normalize_amount(options)
|
1536
|
+
if !!options[:app_base]
|
1537
|
+
Type::Amount.to_h(options[:amount])
|
1538
|
+
elsif !!options[:serialize]
|
1539
|
+
Type::Amount.to_s(options[:amount])
|
1540
|
+
else
|
1541
|
+
Type::Amount.to_s(options[:amount])
|
1542
|
+
end
|
1543
|
+
end
|
1544
|
+
|
1545
|
+
def self.normalize_beneficiaries(options)
|
1546
|
+
# Type::Beneficiaries.new(options[:beneficiaries])
|
1547
|
+
{beneficiaries: options[:beneficiaries]}
|
1548
|
+
end
|
1549
|
+
|
1122
1550
|
# @private
|
1123
1551
|
def self.database_api(options)
|
1124
|
-
options[:database_api] ||=
|
1552
|
+
options[:database_api] ||= if !!options[:app_base]
|
1553
|
+
Steem::DatabaseApi.new(options)
|
1554
|
+
else
|
1555
|
+
Steem::CondenserApi.new(options)
|
1556
|
+
end
|
1125
1557
|
end
|
1126
1558
|
|
1127
1559
|
# @private
|
1128
1560
|
def self.network_broadcast_api(options)
|
1129
|
-
options[:network_broadcast_api] ||=
|
1561
|
+
options[:network_broadcast_api] ||= if !!options[:app_base]
|
1562
|
+
Steem::NetworkBroadcaseApi.new(options)
|
1563
|
+
else
|
1564
|
+
Steem::CondenserApi.new(options)
|
1565
|
+
end
|
1130
1566
|
end
|
1131
1567
|
|
1132
1568
|
# @private
|