stellar-base 0.23.0.rc1 → 0.24.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +249 -0
  3. data/README.md +0 -3
  4. data/generated/stellar-base-generated.rb +29 -1
  5. data/generated/stellar/account_entry.rb +3 -13
  6. data/generated/stellar/account_entry/ext.rb +2 -16
  7. data/generated/stellar/account_entry_extension_v1.rb +32 -0
  8. data/generated/stellar/account_entry_extension_v1/ext.rb +28 -0
  9. data/generated/stellar/account_entry_extension_v2.rb +34 -0
  10. data/generated/stellar/{account_entry/ext/v1 → account_entry_extension_v2}/ext.rb +8 -12
  11. data/generated/stellar/account_merge_result_code.rb +3 -1
  12. data/generated/stellar/begin_sponsoring_future_reserves_op.rb +18 -0
  13. data/generated/stellar/begin_sponsoring_future_reserves_result.rb +25 -0
  14. data/generated/stellar/begin_sponsoring_future_reserves_result_code.rb +29 -0
  15. data/generated/stellar/claim_claimable_balance_op.rb +18 -0
  16. data/generated/stellar/claim_claimable_balance_result.rb +25 -0
  17. data/generated/stellar/claim_claimable_balance_result_code.rb +31 -0
  18. data/generated/stellar/claim_predicate.rb +43 -0
  19. data/generated/stellar/claim_predicate_type.rb +30 -0
  20. data/generated/stellar/claimable_balance_entry.rb +44 -0
  21. data/generated/stellar/claimable_balance_entry/ext.rb +24 -0
  22. data/generated/stellar/claimable_balance_id.rb +23 -0
  23. data/generated/stellar/claimable_balance_id_type.rb +20 -0
  24. data/generated/stellar/claimant.rb +31 -0
  25. data/generated/stellar/claimant/v0.rb +22 -0
  26. data/generated/stellar/claimant_type.rb +20 -0
  27. data/generated/stellar/create_claimable_balance_op.rb +22 -0
  28. data/generated/stellar/create_claimable_balance_result.rb +27 -0
  29. data/generated/stellar/create_claimable_balance_result_code.rb +30 -0
  30. data/generated/stellar/end_sponsoring_future_reserves_result.rb +25 -0
  31. data/generated/stellar/end_sponsoring_future_reserves_result_code.rb +25 -0
  32. data/generated/stellar/envelope_type.rb +3 -1
  33. data/generated/stellar/inner_transaction_result.rb +2 -1
  34. data/generated/stellar/inner_transaction_result/result.rb +3 -1
  35. data/generated/stellar/ledger_entry.rb +4 -0
  36. data/generated/stellar/ledger_entry/data.rb +12 -8
  37. data/generated/stellar/ledger_entry/ext.rb +4 -0
  38. data/generated/stellar/ledger_entry_extension_v1.rb +30 -0
  39. data/generated/stellar/ledger_entry_extension_v1/ext.rb +24 -0
  40. data/generated/stellar/ledger_entry_type.rb +7 -5
  41. data/generated/stellar/ledger_key.rb +17 -8
  42. data/generated/stellar/ledger_key/claimable_balance.rb +20 -0
  43. data/generated/stellar/operation.rb +10 -0
  44. data/generated/stellar/operation/body.rb +45 -26
  45. data/generated/stellar/operation_id.rb +32 -0
  46. data/generated/stellar/operation_id/id.rb +24 -0
  47. data/generated/stellar/operation_result.rb +10 -0
  48. data/generated/stellar/operation_result/tr.rb +48 -28
  49. data/generated/stellar/operation_result_code.rb +3 -1
  50. data/generated/stellar/operation_type.rb +25 -15
  51. data/generated/stellar/path_payment_strict_receive_result.rb +2 -1
  52. data/generated/stellar/revoke_sponsorship_op.rb +36 -0
  53. data/generated/stellar/revoke_sponsorship_op/signer.rb +22 -0
  54. data/generated/stellar/revoke_sponsorship_result.rb +25 -0
  55. data/generated/stellar/revoke_sponsorship_result_code.rb +31 -0
  56. data/generated/stellar/revoke_sponsorship_type.rb +22 -0
  57. data/generated/stellar/transaction_result_code.rb +4 -2
  58. data/lib/stellar-base.rb +15 -5
  59. data/lib/stellar/account_flags.rb +1 -1
  60. data/lib/stellar/{version.rb → base/version.rb} +1 -1
  61. data/lib/stellar/claim_predicate.rb +198 -0
  62. data/lib/stellar/compat.rb +2 -11
  63. data/lib/stellar/dsl.rb +85 -0
  64. data/lib/stellar/ext/xdr.rb +49 -0
  65. data/lib/stellar/key_pair.rb +43 -35
  66. data/lib/stellar/ledger_key.rb +30 -0
  67. data/lib/stellar/networks.rb +12 -12
  68. data/lib/stellar/operation.rb +58 -1
  69. data/lib/stellar/price.rb +11 -2
  70. data/lib/stellar/transaction.rb +16 -166
  71. data/lib/stellar/transaction_builder.rb +35 -18
  72. data/lib/stellar/transaction_envelope.rb +3 -29
  73. data/lib/stellar/transaction_v0.rb +12 -0
  74. data/lib/stellar/util/strkey.rb +6 -6
  75. metadata +166 -35
  76. data/generated/stellar/account_entry/ext/v1.rb +0 -34
  77. data/lib/stellar/util/continued_fraction.rb +0 -96
@@ -0,0 +1,31 @@
1
+ # This code was automatically generated using xdrgen
2
+ # DO NOT EDIT or your changes may be overwritten
3
+
4
+ require 'xdr'
5
+
6
+ # === xdr source ============================================================
7
+ #
8
+ # enum RevokeSponsorshipResultCode
9
+ # {
10
+ # // codes considered as "success" for the operation
11
+ # REVOKE_SPONSORSHIP_SUCCESS = 0,
12
+ #
13
+ # // codes considered as "failure" for the operation
14
+ # REVOKE_SPONSORSHIP_DOES_NOT_EXIST = -1,
15
+ # REVOKE_SPONSORSHIP_NOT_SPONSOR = -2,
16
+ # REVOKE_SPONSORSHIP_LOW_RESERVE = -3,
17
+ # REVOKE_SPONSORSHIP_ONLY_TRANSFERABLE = -4
18
+ # };
19
+ #
20
+ # ===========================================================================
21
+ module Stellar
22
+ class RevokeSponsorshipResultCode < XDR::Enum
23
+ member :revoke_sponsorship_success, 0
24
+ member :revoke_sponsorship_does_not_exist, -1
25
+ member :revoke_sponsorship_not_sponsor, -2
26
+ member :revoke_sponsorship_low_reserve, -3
27
+ member :revoke_sponsorship_only_transferable, -4
28
+
29
+ seal
30
+ end
31
+ end
@@ -0,0 +1,22 @@
1
+ # This code was automatically generated using xdrgen
2
+ # DO NOT EDIT or your changes may be overwritten
3
+
4
+ require 'xdr'
5
+
6
+ # === xdr source ============================================================
7
+ #
8
+ # enum RevokeSponsorshipType
9
+ # {
10
+ # REVOKE_SPONSORSHIP_LEDGER_ENTRY = 0,
11
+ # REVOKE_SPONSORSHIP_SIGNER = 1
12
+ # };
13
+ #
14
+ # ===========================================================================
15
+ module Stellar
16
+ class RevokeSponsorshipType < XDR::Enum
17
+ member :revoke_sponsorship_ledger_entry, 0
18
+ member :revoke_sponsorship_signer, 1
19
+
20
+ seal
21
+ end
22
+ end
@@ -24,8 +24,9 @@ require 'xdr'
24
24
  # txBAD_AUTH_EXTRA = -10, // unused signatures attached to transaction
25
25
  # txINTERNAL_ERROR = -11, // an unknown error occured
26
26
  #
27
- # txNOT_SUPPORTED = -12, // transaction type not supported
28
- # txFEE_BUMP_INNER_FAILED = -13 // fee bump inner transaction failed
27
+ # txNOT_SUPPORTED = -12, // transaction type not supported
28
+ # txFEE_BUMP_INNER_FAILED = -13, // fee bump inner transaction failed
29
+ # txBAD_SPONSORSHIP = -14 // sponsorship not confirmed
29
30
  # };
30
31
  #
31
32
  # ===========================================================================
@@ -46,6 +47,7 @@ module Stellar
46
47
  member :tx_internal_error, -11
47
48
  member :tx_not_supported, -12
48
49
  member :tx_fee_bump_inner_failed, -13
50
+ member :tx_bad_sponsorship, -14
49
51
 
50
52
  seal
51
53
  end
@@ -4,6 +4,9 @@ require "digest/sha2"
4
4
  require "active_support/core_ext/object/blank"
5
5
  require "active_support/core_ext/enumerable"
6
6
  require "active_support/core_ext/kernel/reporting"
7
+ require "active_support/core_ext/module/attribute_accessors_per_thread"
8
+
9
+ require_relative "stellar/ext/xdr"
7
10
 
8
11
  # See ../generated for code-gen'ed files
9
12
  silence_warnings do
@@ -11,28 +14,35 @@ silence_warnings do
11
14
  end
12
15
  Stellar.load_all!
13
16
 
17
+ require_relative "stellar/base/version"
18
+ Stellar::VERSION = Stellar::Base::VERSION
19
+
14
20
  Stellar::ONE = 1_0000000
15
21
 
16
22
  # extensions onto the generated files must be loaded manually, below
17
23
 
18
24
  require_relative "./stellar/account_flags"
19
25
  require_relative "./stellar/asset"
26
+ require_relative "./stellar/claim_predicate"
20
27
  require_relative "./stellar/key_pair"
28
+ require_relative "./stellar/ledger_key"
29
+ require_relative "./stellar/networks"
21
30
  require_relative "./stellar/operation"
22
31
  require_relative "./stellar/path_payment_strict_receive_result"
23
32
  require_relative "./stellar/price"
24
33
  require_relative "./stellar/signer_key"
25
34
  require_relative "./stellar/thresholds"
35
+
26
36
  require_relative "./stellar/concerns/transaction"
27
- require_relative "./stellar/transaction"
28
- require_relative "./stellar/transaction_v0"
29
37
  require_relative "./stellar/fee_bump_transaction"
38
+ require_relative "./stellar/transaction"
30
39
  require_relative "./stellar/transaction_builder"
31
40
  require_relative "./stellar/transaction_envelope"
41
+ require_relative "./stellar/transaction_v0"
42
+
32
43
  require_relative "./stellar/util/strkey"
33
- require_relative "./stellar/util/continued_fraction"
34
44
  require_relative "./stellar/convert"
35
- require_relative "./stellar/networks"
36
- require_relative "./stellar/version"
45
+
46
+ require_relative "./stellar/dsl"
37
47
 
38
48
  require_relative "./stellar/compat"
@@ -4,7 +4,7 @@ module Stellar
4
4
  # Converts an array of Stellar::AccountFlags members into
5
5
  # an Integer suitable for use in a SetOptionsOp.
6
6
  #
7
- # @param flags=nil [Array<Stellar::AccountFlags>] the flags to combine
7
+ # @param flags [Array<Stellar::AccountFlags>] the flags to combine
8
8
  #
9
9
  # @return [Fixnum] the combined result
10
10
  def self.make_mask(flags = nil)
@@ -1,5 +1,5 @@
1
1
  module Stellar
2
2
  module Base
3
- VERSION = "0.23.0.rc1"
3
+ VERSION = "0.24.0"
4
4
  end
5
5
  end
@@ -0,0 +1,198 @@
1
+ # frozen_string_literals: true
2
+ require "active_support/core_ext/integer/time"
3
+ require "active_support/core_ext/string/conversions"
4
+
5
+ module Stellar
6
+ # Represents claim predicate on Stellar network.
7
+ #
8
+ # @see https://developers.stellar.org/docs/glossary/claimable-balance/
9
+ class ClaimPredicate
10
+ module FactoryMethods
11
+ # Constructs an `unconditional` claim predicate.
12
+ #
13
+ # This predicate will be always fulfilled.
14
+ #
15
+ # @return [ClaimPredicate] `unconditional` claim predicate
16
+ def unconditional
17
+ ClaimPredicate.new(ClaimPredicateType::UNCONDITIONAL)
18
+ end
19
+
20
+ # Constructs a `before_relative_time` claim predicate.
21
+ #
22
+ # This predicate will be fulfilled if the closing time of the ledger that includes
23
+ # the Stellar::CreateClaimableBalance operation plus this relative time delta (in seconds)
24
+ # is less than the current time.
25
+ #
26
+ # @param seconds [#to_int|#to_i] seconds since `closeTime` of the ledger in which
27
+ # the ClaimableBalanceEntry was created.
28
+ # @return [ClaimPredicate] `before_relative_time` claim predicate
29
+ def before_relative_time(seconds)
30
+ ClaimPredicate.new(ClaimPredicateType::BEFORE_RELATIVE_TIME, Integer(seconds))
31
+ end
32
+
33
+ # Constructs an `before_absolute_time` claim predicate.
34
+ #
35
+ # This predicate will be fulfilled if the closing time of the ledger that includes
36
+ # the Stellar::CreateClaimableBalance operation is less than provided timestamp.
37
+ #
38
+ # @param timestamp [#to_time|#to_int|#to_i] time value or timestamp
39
+ #
40
+ # @return [ClaimPredicate] `before_absolute_time` claim predicate.
41
+ def before_absolute_time(timestamp)
42
+ timestamp = timestamp.to_time if timestamp.respond_to?(:to_time)
43
+
44
+ ClaimPredicate.new(ClaimPredicateType::BEFORE_ABSOLUTE_TIME, Integer(timestamp))
45
+ end
46
+
47
+ # Constructs either relative or absolute time predicate based on the type of the input.
48
+ #
49
+ # If input is an instance of `ActiveSupport::Duration` class it will be handled as a relative time
50
+ # (seconds since close time of the ledger), otherwise it will be treated as an absolute time.
51
+ #
52
+ # It is intended to work with time helpers provided by ActiveSupport, like `1.day` (relative)
53
+ # or `2.weeks.from_now` (absolute).
54
+ #
55
+ # @example relative time
56
+ # ClaimPredicate.before(2.days + 15.seconds)
57
+ #
58
+ # @example absolute time
59
+ # ClaimPredicate.before(5.hours.from_now)
60
+ #
61
+ # @param time [ActiveSupport::Duration|#to_time|#to_i] duration since ledger close time or absolute time value
62
+ #
63
+ # @return [ClaimPredicate] `before_relative_time` or `before_absolute_time` claim predicate.
64
+ def before(time)
65
+ ActiveSupport::Duration === time ? before_relative_time(time.to_i) : before_absolute_time(time)
66
+ end
67
+
68
+ # Constructs a negated predicate from either relative or absolute time based on the type of the input.
69
+ #
70
+ # @see #before
71
+ # @param (see #before)
72
+ # @return (see #before)
73
+ def after(time)
74
+ ~before(time)
75
+ end
76
+
77
+ # Compose a complex predicate by calling DSL methods from the block.
78
+ #
79
+ # @example
80
+ # ClaimPredicate.compose {
81
+ # after(15.minutes) & before(1.day) | after(1.week.from_now) & before(1.week.from_now + 1.day)
82
+ # }
83
+ #
84
+ # @yieldreturn [ClaimPredicate|nil]
85
+ # @return [ClaimPredicate] `not(before_relative_time)` or `not(before_absolute_time)` claim predicate.
86
+ def compose(&block)
87
+ result = instance_eval(&block)
88
+ result.nil? ? unconditional : result
89
+ end
90
+ end
91
+
92
+ extend FactoryMethods
93
+
94
+ # Constructs an `and` claim predicate.
95
+ #
96
+ # This predicate will be fulfilled if both `self` and `other` predicates are fulfilled.
97
+ #
98
+ # @param other [ClaimPredicate] another predicate
99
+ #
100
+ # @return [ClaimPredicate] `and` claim predicate
101
+ def and(other)
102
+ raise TypeError, "no conversion from #{other.class.name} to ClaimPredicate" unless ClaimPredicate === other
103
+ ClaimPredicate.new(ClaimPredicateType::AND, [self, other])
104
+ end
105
+ alias_method :&, :and
106
+
107
+ # Constructs an `or` claim predicate.
108
+ #
109
+ # This predicate will be fulfilled if either of `self` or `other` predicates is fulfilled.
110
+ #
111
+ # @param other [ClaimPredicate] another predicate.
112
+ #
113
+ # @return [ClaimPredicate] `or` claim predicate
114
+ def or(other)
115
+ raise TypeError, "no conversion from #{other.class.name} to ClaimPredicate" unless ClaimPredicate === other
116
+ ClaimPredicate.new(ClaimPredicateType::OR, [self, other])
117
+ end
118
+ alias_method :|, :or
119
+
120
+ # Constructs a `not` claim predicate.
121
+ #
122
+ # This predicate will be fulfilled if `self` is not fulfilled.
123
+ #
124
+ # @return [ClaimPredicate] `not` claim predicate
125
+ def not
126
+ ClaimPredicate.new(ClaimPredicateType::NOT, self)
127
+ end
128
+ alias_method :~@, :not
129
+
130
+ # Evaluates the predicate value for provided inputs.
131
+ #
132
+ # @param created_at [#to_time|#to_int] closing time of the ledger containing CreateClaimableBalance operation
133
+ # @param claiming_at [#to_time|#to_int|ActiveSupport::Duration] time point to evaluate predicate at, either
134
+ # absolute time or duration relative to `created_at`. In reality predicate will be evaluated by stellar-core
135
+ # using the closing time of a ledger containing ClaimClaimableBalance operation, in either successful
136
+ # or failed state.
137
+ #
138
+ # @return [Boolean] `true` if this predicate would allow claiming the balance, `false` otherwise
139
+ def evaluate(created_at, claiming_at)
140
+ created_at = created_at.to_time if created_at.respond_to?(:to_time)
141
+ claiming_at = created_at + claiming_at if claiming_at.is_a?(ActiveSupport::Duration)
142
+ claiming_at = claiming_at.to_time if claiming_at.respond_to?(:to_time)
143
+
144
+ return false if claiming_at < created_at
145
+
146
+ case switch
147
+ when ClaimPredicateType::UNCONDITIONAL
148
+ true
149
+ when ClaimPredicateType::BEFORE_RELATIVE_TIME
150
+ Integer(claiming_at) < Integer(created_at) + value
151
+ when ClaimPredicateType::BEFORE_ABSOLUTE_TIME
152
+ Integer(claiming_at).to_i < value
153
+ when ClaimPredicateType::AND
154
+ value[0].evaluate(created_at, claiming_at) && value[1].evaluate(created_at, claiming_at)
155
+ when ClaimPredicateType::OR
156
+ value[0].evaluate(created_at, claiming_at) || value[1].evaluate(created_at, claiming_at)
157
+ when ClaimPredicateType::NOT
158
+ !value.evaluate(created_at, claiming_at)
159
+ else
160
+ raise ArgumentError, "evaluation is not implemented for #{switch.name} predicate"
161
+ end
162
+ end
163
+
164
+ def describe
165
+ case switch
166
+ when ClaimPredicateType::UNCONDITIONAL
167
+ "always"
168
+ when ClaimPredicateType::BEFORE_RELATIVE_TIME
169
+ dur = ActiveSupport::Duration.build(value)
170
+ "less than #{dur.inspect} since creation"
171
+ when ClaimPredicateType::BEFORE_ABSOLUTE_TIME
172
+ "before #{Time.at(value).to_formatted_s(:db)}"
173
+ when ClaimPredicateType::AND
174
+ value.map(&:describe).join(" and ")
175
+ when ClaimPredicateType::OR
176
+ "(" << value.map(&:describe).join(" or ") << ")"
177
+ when ClaimPredicateType::NOT
178
+ case value.switch
179
+ when ClaimPredicateType::UNCONDITIONAL
180
+ "never"
181
+ when ClaimPredicateType::BEFORE_RELATIVE_TIME
182
+ dur = ActiveSupport::Duration.build(value.value)
183
+ "#{dur.inspect} or more since creation"
184
+ when ClaimPredicateType::BEFORE_ABSOLUTE_TIME
185
+ "after #{Time.at(value.value).to_formatted_s(:db)}"
186
+ else
187
+ "not (#{value.describe})"
188
+ end
189
+ else
190
+ raise ArgumentError, "evaluation is not implemented for #{switch.name} predicate"
191
+ end
192
+ end
193
+
194
+ def inspect
195
+ "#<ClaimPredicate: #{describe}>"
196
+ end
197
+ end
198
+ end
@@ -3,17 +3,8 @@ require "active_support/deprecation"
3
3
  Stellar::Deprecation ||= ActiveSupport::Deprecation.new("next release", "stellar-base")
4
4
 
5
5
  class << Stellar::Operation
6
- alias manage_offer manage_sell_offer
7
- alias create_passive_offer create_passive_sell_offer
8
-
9
- deprecate deprecator: Stellar::Deprecation,
10
- manage_offer: :manage_sell_offer,
11
- create_passive_offer: :create_passive_sell_offer
12
- end
13
-
14
- class << Stellar::Transaction
15
- alias manage_offer manage_sell_offer
16
- alias create_passive_offer create_passive_sell_offer
6
+ alias_method :manage_offer, :manage_sell_offer
7
+ alias_method :create_passive_offer, :create_passive_sell_offer
17
8
 
18
9
  deprecate deprecator: Stellar::Deprecation,
19
10
  manage_offer: :manage_sell_offer,
@@ -0,0 +1,85 @@
1
+ module Stellar
2
+ module DSL
3
+ # Constructs a new ClaimPredicate using DSL
4
+ #
5
+ # @example fulfilled during [T+5min, T+60min] period, where T refers to claimable balance entry creation time
6
+ # Stellar::ClaimPredicate { before_relative_time(1.hour) & ~before_relative_time(5.minutes) }
7
+ #
8
+ # @example not fulfilled starting from today midnight until tomorrow midnight,
9
+ # Stellar::ClaimPredicate { before_absolute_time(Date.today.end_of_day) | ~before_absolute_time(Date.tomorrow.end_of_day) }
10
+ #
11
+ # @example always fulfilled
12
+ # Stellar::ClaimPredicate { }
13
+ def ClaimPredicate(&block)
14
+ return ClaimPredicate.unconditional unless block
15
+ ClaimPredicate.compose(&block)
16
+ end
17
+
18
+ def Claimant(destination, &block)
19
+ Claimant.new(
20
+ ClaimantType.claimant_type_v0,
21
+ Claimant::V0.new(
22
+ destination: KeyPair(destination).account_id,
23
+ predicate: ClaimPredicate(&block)
24
+ )
25
+ )
26
+ end
27
+
28
+ def Asset(subject = nil)
29
+ case subject
30
+ when Asset
31
+ subject
32
+ when nil, /^(XLM[-:])?native$/
33
+ Asset.native
34
+ when /^([0-9A-Z]{1,4})[-:](G[A-Z0-9]{55})$/
35
+ Asset.alphanum4($1, KeyPair($2))
36
+ when /^([0-9A-Z]{5,12})[-:](G[A-Z0-9]{55})$/
37
+ Asset.alphanum12($1, KeyPair($2))
38
+ else
39
+ raise TypeError, "Cannot convert #{subject.inspect} to Stellar::Asset"
40
+ end
41
+ end
42
+
43
+ # Generates Stellar::Keypair from subject, use Stellar::Client.to_keypair as shortcut.
44
+ # @param subject [String|Stellar::Account|Stellar::PublicKey|Stellar::SignerKey|Stellar::Keypair] subject.
45
+ # @return [Stellar::Keypair] Stellar::Keypair instance.
46
+ def KeyPair(subject = nil)
47
+ case subject
48
+ when ->(subj) { subj.respond_to?(:to_keypair) }
49
+ subject.to_keypair
50
+ when /G[A-Z0-9]{55}/
51
+ KeyPair.from_address(subject)
52
+ when /S[A-Z0-9]{55}/
53
+ KeyPair.from_seed(subject)
54
+ when PublicKey
55
+ KeyPair.from_public_key(subject.value)
56
+ when SignerKey
57
+ KeyPair.from_raw_seed(subject.value)
58
+ when nil
59
+ KeyPair.random
60
+ else
61
+ raise TypeError, "cannot convert #{subject.inspect} to Stellar::KeyPair"
62
+ end
63
+ end
64
+
65
+ # Provides conversion from different input types into the SignerKey to use in ManageData operation.
66
+ # @param input [String|zStellar::Account|Stellar::PublicKey|Stellar::SignerKey|Stellar::Keypair] subject.
67
+ # @return [Stellar::SignerKey] Stellar::Keypair instance.
68
+ def SignerKey(input = nil)
69
+ case input
70
+ when Transaction
71
+ SignerKey.pre_auth_tx(input.hash)
72
+ when /^[0-9A-Za-z+\/=]{44}$/
73
+ SignerKey.hash_x(Stellar::Convert.from_base64(input))
74
+ when /^[0-9a-f]{64}$/
75
+ SignerKey.hash_x(Stellar::Convert.from_hex(input))
76
+ when /^.{32}$/
77
+ SignerKey.hash_x(input)
78
+ else
79
+ SignerKey.ed25519(KeyPair(input))
80
+ end
81
+ end
82
+ end
83
+
84
+ extend DSL
85
+ end