steem-ruby 0.9.3 → 0.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +9 -5
  3. data/README.md +10 -10
  4. data/lib/steem.rb +48 -0
  5. data/lib/steem/api.rb +0 -21
  6. data/lib/steem/base_error.rb +5 -3
  7. data/lib/steem/broadcast.rb +21 -4
  8. data/lib/steem/marshal.rb +231 -0
  9. data/lib/steem/mixins/jsonable.rb +37 -0
  10. data/lib/steem/mixins/serializable.rb +45 -0
  11. data/lib/steem/operation.rb +141 -0
  12. data/lib/steem/operation/account_create.rb +10 -0
  13. data/lib/steem/operation/account_create_with_delegation.rb +12 -0
  14. data/lib/steem/operation/account_update.rb +8 -0
  15. data/lib/steem/operation/account_witness_proxy.rb +4 -0
  16. data/lib/steem/operation/account_witness_vote.rb +5 -0
  17. data/lib/steem/operation/cancel_transfer_from_savings.rb +4 -0
  18. data/lib/steem/operation/challenge_authority.rb +5 -0
  19. data/lib/steem/operation/change_recovery_account.rb +5 -0
  20. data/lib/steem/operation/claim_account.rb +5 -0
  21. data/lib/steem/operation/claim_reward_balance.rb +6 -0
  22. data/lib/steem/operation/comment.rb +9 -0
  23. data/lib/steem/operation/comment_options.rb +10 -0
  24. data/lib/steem/operation/convert.rb +5 -0
  25. data/lib/steem/operation/create_claimed_account.rb +10 -0
  26. data/lib/steem/operation/custom.rb +5 -0
  27. data/lib/steem/operation/custom_binary.rb +8 -0
  28. data/lib/steem/operation/custom_json.rb +6 -0
  29. data/lib/steem/operation/decline_voting_rights.rb +4 -0
  30. data/lib/steem/operation/delegate_vesting_shares.rb +5 -0
  31. data/lib/steem/operation/delete_comment.rb +4 -0
  32. data/lib/steem/operation/escrow_approve.rb +8 -0
  33. data/lib/steem/operation/escrow_dispute.rb +7 -0
  34. data/lib/steem/operation/escrow_release.rb +10 -0
  35. data/lib/steem/operation/escrow_transfer.rb +12 -0
  36. data/lib/steem/operation/feed_publish.rb +4 -0
  37. data/lib/steem/operation/limit_order_cancel.rb +4 -0
  38. data/lib/steem/operation/limit_order_create.rb +8 -0
  39. data/lib/steem/operation/limit_order_create2.rb +8 -0
  40. data/lib/steem/operation/prove_authority.rb +4 -0
  41. data/lib/steem/operation/recover_account.rb +6 -0
  42. data/lib/steem/operation/report_over_production.rb +5 -0
  43. data/lib/steem/operation/request_account_recovery.rb +6 -0
  44. data/lib/steem/operation/reset_account.rb +5 -0
  45. data/lib/steem/operation/set_reset_account.rb +5 -0
  46. data/lib/steem/operation/set_withdraw_vesting_route.rb +6 -0
  47. data/lib/steem/operation/transfer.rb +6 -0
  48. data/lib/steem/operation/transfer_from_savings.rb +7 -0
  49. data/lib/steem/operation/transfer_to_savings.rb +6 -0
  50. data/lib/steem/operation/transfer_to_vesting.rb +5 -0
  51. data/lib/steem/operation/vote.rb +6 -0
  52. data/lib/steem/operation/withdraw_vesting.rb +4 -0
  53. data/lib/steem/operation/witness_set_properties.rb +5 -0
  54. data/lib/steem/operation/witness_update.rb +7 -0
  55. data/lib/steem/rpc/base_client.rb +13 -0
  56. data/lib/steem/rpc/http_client.rb +17 -1
  57. data/lib/steem/stream.rb +12 -4
  58. data/lib/steem/transaction.rb +96 -0
  59. data/lib/steem/transaction_builder.rb +69 -69
  60. data/lib/steem/type/amount.rb +2 -0
  61. data/lib/steem/version.rb +1 -1
  62. data/steem-ruby.gemspec +2 -0
  63. metadata +90 -2
@@ -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
@@ -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,4 @@
1
+ class Steem::Operation::AccountWitnessProxy < Steem::Operation
2
+ def_attr account: :string
3
+ def_attr proxy: :string
4
+ end
@@ -0,0 +1,5 @@
1
+ class Steem::Operation::AccountWitnessVote < Steem::Operation
2
+ def_attr account: :string
3
+ def_attr witness: :string
4
+ def_attr approve: :boolean
5
+ end
@@ -0,0 +1,4 @@
1
+ class Steem::Operation::CancelTransferFromSavings < Steem::Operation
2
+ def_attr from: :string
3
+ def_attr request_id: :uint32
4
+ end
@@ -0,0 +1,5 @@
1
+ class Steem::Operation::ChallengeAuthority < Steem::Operation
2
+ def_attr challenger: :string
3
+ def_attr challenged: :string
4
+ def_attr require_owner: :boolean
5
+ end
@@ -0,0 +1,5 @@
1
+ class Steem::Operation::ChangeRecoveryAccount < Steem::Operation
2
+ def_attr account_to_recover: :string
3
+ def_attr new_recovery_account: :string
4
+ def_attr extensions: :empty_array
5
+ end
@@ -0,0 +1,5 @@
1
+ class Steem::Operation::ClaimAccount < Steem::Operation
2
+ def_attr creator: :string
3
+ def_attr fee: :amount
4
+ def_attr extensions: :empty_array
5
+ end
@@ -0,0 +1,6 @@
1
+ class Steem::Operation::ClaimRewardBalance < Steem::Operation
2
+ def_attr account: :string
3
+ def_attr reward_steem: :amount
4
+ def_attr reward_sbd: :amount
5
+ def_attr reward_vests: :amount
6
+ 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,5 @@
1
+ class Steem::Operation::Convert < Steem::Operation
2
+ def_attr owner: :string
3
+ def_attr requestid: :uint32
4
+ def_attr amount: :amount
5
+ 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,5 @@
1
+ class Steem::Operation::Custom < Steem::Operation
2
+ def_attr required_auths: :required_auths
3
+ def_attr id: :uint32
4
+ def_attr data: :raw_bytes
5
+ 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
@@ -0,0 +1,6 @@
1
+ class Steem::Operation::CustomJson < Steem::Operation
2
+ def_attr required_auths: :required_auths
3
+ def_attr required_posting_auths: :required_auths
4
+ def_attr id: :string
5
+ def_attr json: :string
6
+ end
@@ -0,0 +1,4 @@
1
+ class Steem::Operation::DeclineVotingRights < Steem::Operation
2
+ def_attr account: :string
3
+ def_attr decline: :boolean
4
+ end
@@ -0,0 +1,5 @@
1
+ class Steem::Operation::DelegateVestingShares < Steem::Operation
2
+ def_attr delegator: :string
3
+ def_attr delegatee: :string
4
+ def_attr vesting_shares: :amount
5
+ end
@@ -0,0 +1,4 @@
1
+ class Steem::Operation::DeleteComment < Steem::Operation
2
+ def_attr author: :string
3
+ def_attr permlink: :string
4
+ end
@@ -0,0 +1,8 @@
1
+ class Steem::Operation::EscrowApprove < Steem::Operation
2
+ def_attr from: :string
3
+ def_attr to: :string
4
+ def_attr agent: :string
5
+ def_attr who: :string
6
+ def_attr escrow_id: :uint32
7
+ def_attr approve: :boolean
8
+ end
@@ -0,0 +1,7 @@
1
+ class Steem::Operation::EscrowDispute < Steem::Operation
2
+ def_attr from: :string
3
+ def_attr to: :string
4
+ def_attr agent: :string
5
+ def_attr who: :string
6
+ def_attr escrow_id: :uint32
7
+ end
@@ -0,0 +1,10 @@
1
+ class Steem::Operation::EscrowRelease < Steem::Operation
2
+ def_attr from: :string
3
+ def_attr to: :string
4
+ def_attr agent: :string
5
+ def_attr who: :string
6
+ def_attr receiver: :string
7
+ def_attr escrow_id: :uint32
8
+ def_attr sbd_amount: :amount
9
+ def_attr steem_amount: :amount
10
+ end
@@ -0,0 +1,12 @@
1
+ class Steem::Operation::EscrowTransfer < Steem::Operation
2
+ def_attr from: :string
3
+ def_attr to: :string
4
+ def_attr sbd_amount: :amount
5
+ def_attr steem_amount: :amount
6
+ def_attr escrow_id: :uint32
7
+ def_attr agent: :string
8
+ def_attr fee: :amount
9
+ def_attr json_metadata: :string
10
+ def_attr ratification_deadline: :point_in_time
11
+ def_attr escrow_expiration: :point_in_time
12
+ end
@@ -0,0 +1,4 @@
1
+ class Steem::Operation::FeedPublish < Steem::Operation
2
+ def_attr publisher: :string
3
+ def_attr exchange_rate: :price
4
+ end
@@ -0,0 +1,4 @@
1
+ class Steem::Operation::LimitOrderCancel < Steem::Operation
2
+ def_attr owner: :string
3
+ def_attr orderid: :uint32
4
+ end