stellar-base 0.23.0.rc1 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +249 -0
- data/README.md +0 -3
- data/generated/stellar-base-generated.rb +29 -1
- data/generated/stellar/account_entry.rb +3 -13
- data/generated/stellar/account_entry/ext.rb +2 -16
- data/generated/stellar/account_entry_extension_v1.rb +32 -0
- data/generated/stellar/account_entry_extension_v1/ext.rb +28 -0
- data/generated/stellar/account_entry_extension_v2.rb +34 -0
- data/generated/stellar/{account_entry/ext/v1 → account_entry_extension_v2}/ext.rb +8 -12
- data/generated/stellar/account_merge_result_code.rb +3 -1
- data/generated/stellar/begin_sponsoring_future_reserves_op.rb +18 -0
- data/generated/stellar/begin_sponsoring_future_reserves_result.rb +25 -0
- data/generated/stellar/begin_sponsoring_future_reserves_result_code.rb +29 -0
- data/generated/stellar/claim_claimable_balance_op.rb +18 -0
- data/generated/stellar/claim_claimable_balance_result.rb +25 -0
- data/generated/stellar/claim_claimable_balance_result_code.rb +31 -0
- data/generated/stellar/claim_predicate.rb +43 -0
- data/generated/stellar/claim_predicate_type.rb +30 -0
- data/generated/stellar/claimable_balance_entry.rb +44 -0
- data/generated/stellar/claimable_balance_entry/ext.rb +24 -0
- data/generated/stellar/claimable_balance_id.rb +23 -0
- data/generated/stellar/claimable_balance_id_type.rb +20 -0
- data/generated/stellar/claimant.rb +31 -0
- data/generated/stellar/claimant/v0.rb +22 -0
- data/generated/stellar/claimant_type.rb +20 -0
- data/generated/stellar/create_claimable_balance_op.rb +22 -0
- data/generated/stellar/create_claimable_balance_result.rb +27 -0
- data/generated/stellar/create_claimable_balance_result_code.rb +30 -0
- data/generated/stellar/end_sponsoring_future_reserves_result.rb +25 -0
- data/generated/stellar/end_sponsoring_future_reserves_result_code.rb +25 -0
- data/generated/stellar/envelope_type.rb +3 -1
- data/generated/stellar/inner_transaction_result.rb +2 -1
- data/generated/stellar/inner_transaction_result/result.rb +3 -1
- data/generated/stellar/ledger_entry.rb +4 -0
- data/generated/stellar/ledger_entry/data.rb +12 -8
- data/generated/stellar/ledger_entry/ext.rb +4 -0
- data/generated/stellar/ledger_entry_extension_v1.rb +30 -0
- data/generated/stellar/ledger_entry_extension_v1/ext.rb +24 -0
- data/generated/stellar/ledger_entry_type.rb +7 -5
- data/generated/stellar/ledger_key.rb +17 -8
- data/generated/stellar/ledger_key/claimable_balance.rb +20 -0
- data/generated/stellar/operation.rb +10 -0
- data/generated/stellar/operation/body.rb +45 -26
- data/generated/stellar/operation_id.rb +32 -0
- data/generated/stellar/operation_id/id.rb +24 -0
- data/generated/stellar/operation_result.rb +10 -0
- data/generated/stellar/operation_result/tr.rb +48 -28
- data/generated/stellar/operation_result_code.rb +3 -1
- data/generated/stellar/operation_type.rb +25 -15
- data/generated/stellar/path_payment_strict_receive_result.rb +2 -1
- data/generated/stellar/revoke_sponsorship_op.rb +36 -0
- data/generated/stellar/revoke_sponsorship_op/signer.rb +22 -0
- data/generated/stellar/revoke_sponsorship_result.rb +25 -0
- data/generated/stellar/revoke_sponsorship_result_code.rb +31 -0
- data/generated/stellar/revoke_sponsorship_type.rb +22 -0
- data/generated/stellar/transaction_result_code.rb +4 -2
- data/lib/stellar-base.rb +15 -5
- data/lib/stellar/account_flags.rb +1 -1
- data/lib/stellar/{version.rb → base/version.rb} +1 -1
- data/lib/stellar/claim_predicate.rb +198 -0
- data/lib/stellar/compat.rb +2 -11
- data/lib/stellar/dsl.rb +85 -0
- data/lib/stellar/ext/xdr.rb +49 -0
- data/lib/stellar/key_pair.rb +43 -35
- data/lib/stellar/ledger_key.rb +30 -0
- data/lib/stellar/networks.rb +12 -12
- data/lib/stellar/operation.rb +58 -1
- data/lib/stellar/price.rb +11 -2
- data/lib/stellar/transaction.rb +16 -166
- data/lib/stellar/transaction_builder.rb +35 -18
- data/lib/stellar/transaction_envelope.rb +3 -29
- data/lib/stellar/transaction_v0.rb +12 -0
- data/lib/stellar/util/strkey.rb +6 -6
- metadata +166 -35
- data/generated/stellar/account_entry/ext/v1.rb +0 -34
- 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,
|
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
|
data/lib/stellar-base.rb
CHANGED
@@ -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
|
-
|
36
|
-
require_relative "./stellar/
|
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
|
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)
|
@@ -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
|
data/lib/stellar/compat.rb
CHANGED
@@ -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
|
-
|
7
|
-
|
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,
|
data/lib/stellar/dsl.rb
ADDED
@@ -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
|