stellar-base 0.23.1 → 0.24.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +88 -0
  3. data/generated/stellar-base-generated.rb +29 -1
  4. data/generated/stellar/account_entry.rb +3 -13
  5. data/generated/stellar/account_entry/ext.rb +2 -16
  6. data/generated/stellar/account_entry_extension_v1.rb +32 -0
  7. data/generated/stellar/account_entry_extension_v1/ext.rb +28 -0
  8. data/generated/stellar/account_entry_extension_v2.rb +34 -0
  9. data/generated/stellar/{account_entry/ext/v1 → account_entry_extension_v2}/ext.rb +8 -12
  10. data/generated/stellar/account_merge_result_code.rb +3 -1
  11. data/generated/stellar/begin_sponsoring_future_reserves_op.rb +18 -0
  12. data/generated/stellar/begin_sponsoring_future_reserves_result.rb +25 -0
  13. data/generated/stellar/begin_sponsoring_future_reserves_result_code.rb +29 -0
  14. data/generated/stellar/claim_claimable_balance_op.rb +18 -0
  15. data/generated/stellar/claim_claimable_balance_result.rb +25 -0
  16. data/generated/stellar/claim_claimable_balance_result_code.rb +31 -0
  17. data/generated/stellar/claim_predicate.rb +43 -0
  18. data/generated/stellar/claim_predicate_type.rb +30 -0
  19. data/generated/stellar/claimable_balance_entry.rb +44 -0
  20. data/generated/stellar/claimable_balance_entry/ext.rb +24 -0
  21. data/generated/stellar/claimable_balance_id.rb +23 -0
  22. data/generated/stellar/claimable_balance_id_type.rb +20 -0
  23. data/generated/stellar/claimant.rb +31 -0
  24. data/generated/stellar/claimant/v0.rb +22 -0
  25. data/generated/stellar/claimant_type.rb +20 -0
  26. data/generated/stellar/create_claimable_balance_op.rb +22 -0
  27. data/generated/stellar/create_claimable_balance_result.rb +27 -0
  28. data/generated/stellar/create_claimable_balance_result_code.rb +30 -0
  29. data/generated/stellar/end_sponsoring_future_reserves_result.rb +25 -0
  30. data/generated/stellar/end_sponsoring_future_reserves_result_code.rb +25 -0
  31. data/generated/stellar/envelope_type.rb +3 -1
  32. data/generated/stellar/inner_transaction_result.rb +2 -1
  33. data/generated/stellar/inner_transaction_result/result.rb +3 -1
  34. data/generated/stellar/ledger_entry.rb +4 -0
  35. data/generated/stellar/ledger_entry/data.rb +12 -8
  36. data/generated/stellar/ledger_entry/ext.rb +4 -0
  37. data/generated/stellar/ledger_entry_extension_v1.rb +30 -0
  38. data/generated/stellar/ledger_entry_extension_v1/ext.rb +24 -0
  39. data/generated/stellar/ledger_entry_type.rb +7 -5
  40. data/generated/stellar/ledger_key.rb +17 -8
  41. data/generated/stellar/ledger_key/claimable_balance.rb +20 -0
  42. data/generated/stellar/operation.rb +10 -0
  43. data/generated/stellar/operation/body.rb +45 -26
  44. data/generated/stellar/operation_id.rb +32 -0
  45. data/generated/stellar/operation_id/id.rb +24 -0
  46. data/generated/stellar/operation_result.rb +10 -0
  47. data/generated/stellar/operation_result/tr.rb +48 -28
  48. data/generated/stellar/operation_result_code.rb +3 -1
  49. data/generated/stellar/operation_type.rb +25 -15
  50. data/generated/stellar/path_payment_strict_receive_result.rb +2 -1
  51. data/generated/stellar/revoke_sponsorship_op.rb +36 -0
  52. data/generated/stellar/revoke_sponsorship_op/signer.rb +22 -0
  53. data/generated/stellar/revoke_sponsorship_result.rb +25 -0
  54. data/generated/stellar/revoke_sponsorship_result_code.rb +31 -0
  55. data/generated/stellar/revoke_sponsorship_type.rb +22 -0
  56. data/generated/stellar/transaction_result_code.rb +4 -2
  57. data/lib/stellar-base.rb +15 -5
  58. data/lib/stellar/account_flags.rb +1 -1
  59. data/lib/stellar/{version.rb → base/version.rb} +1 -1
  60. data/lib/stellar/claim_predicate.rb +198 -0
  61. data/lib/stellar/compat.rb +2 -11
  62. data/lib/stellar/dsl.rb +85 -0
  63. data/lib/stellar/ext/xdr.rb +49 -0
  64. data/lib/stellar/key_pair.rb +43 -35
  65. data/lib/stellar/ledger_key.rb +30 -0
  66. data/lib/stellar/networks.rb +12 -12
  67. data/lib/stellar/operation.rb +58 -1
  68. data/lib/stellar/price.rb +11 -2
  69. data/lib/stellar/transaction.rb +0 -168
  70. data/lib/stellar/transaction_builder.rb +28 -2
  71. data/lib/stellar/transaction_envelope.rb +3 -29
  72. data/lib/stellar/util/strkey.rb +6 -6
  73. metadata +162 -32
  74. data/generated/stellar/account_entry/ext/v1.rb +0 -34
  75. data/lib/stellar/util/continued_fraction.rb +0 -96
@@ -38,6 +38,16 @@ require 'xdr'
38
38
  # ManageBuyOfferResult manageBuyOfferResult;
39
39
  # case PATH_PAYMENT_STRICT_SEND:
40
40
  # PathPaymentStrictSendResult pathPaymentStrictSendResult;
41
+ # case CREATE_CLAIMABLE_BALANCE:
42
+ # CreateClaimableBalanceResult createClaimableBalanceResult;
43
+ # case CLAIM_CLAIMABLE_BALANCE:
44
+ # ClaimClaimableBalanceResult claimClaimableBalanceResult;
45
+ # case BEGIN_SPONSORING_FUTURE_RESERVES:
46
+ # BeginSponsoringFutureReservesResult beginSponsoringFutureReservesResult;
47
+ # case END_SPONSORING_FUTURE_RESERVES:
48
+ # EndSponsoringFutureReservesResult endSponsoringFutureReservesResult;
49
+ # case REVOKE_SPONSORSHIP:
50
+ # RevokeSponsorshipResult revokeSponsorshipResult;
41
51
  # }
42
52
  # tr;
43
53
  # default:
@@ -35,6 +35,16 @@ require 'xdr'
35
35
  # ManageBuyOfferResult manageBuyOfferResult;
36
36
  # case PATH_PAYMENT_STRICT_SEND:
37
37
  # PathPaymentStrictSendResult pathPaymentStrictSendResult;
38
+ # case CREATE_CLAIMABLE_BALANCE:
39
+ # CreateClaimableBalanceResult createClaimableBalanceResult;
40
+ # case CLAIM_CLAIMABLE_BALANCE:
41
+ # ClaimClaimableBalanceResult claimClaimableBalanceResult;
42
+ # case BEGIN_SPONSORING_FUTURE_RESERVES:
43
+ # BeginSponsoringFutureReservesResult beginSponsoringFutureReservesResult;
44
+ # case END_SPONSORING_FUTURE_RESERVES:
45
+ # EndSponsoringFutureReservesResult endSponsoringFutureReservesResult;
46
+ # case REVOKE_SPONSORSHIP:
47
+ # RevokeSponsorshipResult revokeSponsorshipResult;
38
48
  # }
39
49
  #
40
50
  # ===========================================================================
@@ -43,35 +53,45 @@ module Stellar
43
53
  class Tr < XDR::Union
44
54
  switch_on OperationType, :type
45
55
 
46
- switch :create_account, :create_account_result
47
- switch :payment, :payment_result
48
- switch :path_payment_strict_receive, :path_payment_strict_receive_result
49
- switch :manage_sell_offer, :manage_sell_offer_result
50
- switch :create_passive_sell_offer, :create_passive_sell_offer_result
51
- switch :set_options, :set_options_result
52
- switch :change_trust, :change_trust_result
53
- switch :allow_trust, :allow_trust_result
54
- switch :account_merge, :account_merge_result
55
- switch :inflation, :inflation_result
56
- switch :manage_data, :manage_data_result
57
- switch :bump_sequence, :bump_seq_result
58
- switch :manage_buy_offer, :manage_buy_offer_result
59
- switch :path_payment_strict_send, :path_payment_strict_send_result
56
+ switch :create_account, :create_account_result
57
+ switch :payment, :payment_result
58
+ switch :path_payment_strict_receive, :path_payment_strict_receive_result
59
+ switch :manage_sell_offer, :manage_sell_offer_result
60
+ switch :create_passive_sell_offer, :create_passive_sell_offer_result
61
+ switch :set_options, :set_options_result
62
+ switch :change_trust, :change_trust_result
63
+ switch :allow_trust, :allow_trust_result
64
+ switch :account_merge, :account_merge_result
65
+ switch :inflation, :inflation_result
66
+ switch :manage_data, :manage_data_result
67
+ switch :bump_sequence, :bump_seq_result
68
+ switch :manage_buy_offer, :manage_buy_offer_result
69
+ switch :path_payment_strict_send, :path_payment_strict_send_result
70
+ switch :create_claimable_balance, :create_claimable_balance_result
71
+ switch :claim_claimable_balance, :claim_claimable_balance_result
72
+ switch :begin_sponsoring_future_reserves, :begin_sponsoring_future_reserves_result
73
+ switch :end_sponsoring_future_reserves, :end_sponsoring_future_reserves_result
74
+ switch :revoke_sponsorship, :revoke_sponsorship_result
60
75
 
61
- attribute :create_account_result, CreateAccountResult
62
- attribute :payment_result, PaymentResult
63
- attribute :path_payment_strict_receive_result, PathPaymentStrictReceiveResult
64
- attribute :manage_sell_offer_result, ManageSellOfferResult
65
- attribute :create_passive_sell_offer_result, ManageSellOfferResult
66
- attribute :set_options_result, SetOptionsResult
67
- attribute :change_trust_result, ChangeTrustResult
68
- attribute :allow_trust_result, AllowTrustResult
69
- attribute :account_merge_result, AccountMergeResult
70
- attribute :inflation_result, InflationResult
71
- attribute :manage_data_result, ManageDataResult
72
- attribute :bump_seq_result, BumpSequenceResult
73
- attribute :manage_buy_offer_result, ManageBuyOfferResult
74
- attribute :path_payment_strict_send_result, PathPaymentStrictSendResult
76
+ attribute :create_account_result, CreateAccountResult
77
+ attribute :payment_result, PaymentResult
78
+ attribute :path_payment_strict_receive_result, PathPaymentStrictReceiveResult
79
+ attribute :manage_sell_offer_result, ManageSellOfferResult
80
+ attribute :create_passive_sell_offer_result, ManageSellOfferResult
81
+ attribute :set_options_result, SetOptionsResult
82
+ attribute :change_trust_result, ChangeTrustResult
83
+ attribute :allow_trust_result, AllowTrustResult
84
+ attribute :account_merge_result, AccountMergeResult
85
+ attribute :inflation_result, InflationResult
86
+ attribute :manage_data_result, ManageDataResult
87
+ attribute :bump_seq_result, BumpSequenceResult
88
+ attribute :manage_buy_offer_result, ManageBuyOfferResult
89
+ attribute :path_payment_strict_send_result, PathPaymentStrictSendResult
90
+ attribute :create_claimable_balance_result, CreateClaimableBalanceResult
91
+ attribute :claim_claimable_balance_result, ClaimClaimableBalanceResult
92
+ attribute :begin_sponsoring_future_reserves_result, BeginSponsoringFutureReservesResult
93
+ attribute :end_sponsoring_future_reserves_result, EndSponsoringFutureReservesResult
94
+ attribute :revoke_sponsorship_result, RevokeSponsorshipResult
75
95
  end
76
96
  end
77
97
  end
@@ -13,7 +13,8 @@ require 'xdr'
13
13
  # opNO_ACCOUNT = -2, // source account was not found
14
14
  # opNOT_SUPPORTED = -3, // operation not supported at this time
15
15
  # opTOO_MANY_SUBENTRIES = -4, // max number of subentries already reached
16
- # opEXCEEDED_WORK_LIMIT = -5 // operation did too much work
16
+ # opEXCEEDED_WORK_LIMIT = -5, // operation did too much work
17
+ # opTOO_MANY_SPONSORING = -6 // account is sponsoring too many entries
17
18
  # };
18
19
  #
19
20
  # ===========================================================================
@@ -25,6 +26,7 @@ module Stellar
25
26
  member :op_not_supported, -3
26
27
  member :op_too_many_subentries, -4
27
28
  member :op_exceeded_work_limit, -5
29
+ member :op_too_many_sponsoring, -6
28
30
 
29
31
  seal
30
32
  end
@@ -20,26 +20,36 @@ require 'xdr'
20
20
  # MANAGE_DATA = 10,
21
21
  # BUMP_SEQUENCE = 11,
22
22
  # MANAGE_BUY_OFFER = 12,
23
- # PATH_PAYMENT_STRICT_SEND = 13
23
+ # PATH_PAYMENT_STRICT_SEND = 13,
24
+ # CREATE_CLAIMABLE_BALANCE = 14,
25
+ # CLAIM_CLAIMABLE_BALANCE = 15,
26
+ # BEGIN_SPONSORING_FUTURE_RESERVES = 16,
27
+ # END_SPONSORING_FUTURE_RESERVES = 17,
28
+ # REVOKE_SPONSORSHIP = 18
24
29
  # };
25
30
  #
26
31
  # ===========================================================================
27
32
  module Stellar
28
33
  class OperationType < XDR::Enum
29
- member :create_account, 0
30
- member :payment, 1
31
- member :path_payment_strict_receive, 2
32
- member :manage_sell_offer, 3
33
- member :create_passive_sell_offer, 4
34
- member :set_options, 5
35
- member :change_trust, 6
36
- member :allow_trust, 7
37
- member :account_merge, 8
38
- member :inflation, 9
39
- member :manage_data, 10
40
- member :bump_sequence, 11
41
- member :manage_buy_offer, 12
42
- member :path_payment_strict_send, 13
34
+ member :create_account, 0
35
+ member :payment, 1
36
+ member :path_payment_strict_receive, 2
37
+ member :manage_sell_offer, 3
38
+ member :create_passive_sell_offer, 4
39
+ member :set_options, 5
40
+ member :change_trust, 6
41
+ member :allow_trust, 7
42
+ member :account_merge, 8
43
+ member :inflation, 9
44
+ member :manage_data, 10
45
+ member :bump_sequence, 11
46
+ member :manage_buy_offer, 12
47
+ member :path_payment_strict_send, 13
48
+ member :create_claimable_balance, 14
49
+ member :claim_claimable_balance, 15
50
+ member :begin_sponsoring_future_reserves, 16
51
+ member :end_sponsoring_future_reserves, 17
52
+ member :revoke_sponsorship, 18
43
53
 
44
54
  seal
45
55
  end
@@ -5,7 +5,8 @@ require 'xdr'
5
5
 
6
6
  # === xdr source ============================================================
7
7
  #
8
- # union PathPaymentStrictReceiveResult switch (PathPaymentStrictReceiveResultCode code)
8
+ # union PathPaymentStrictReceiveResult switch (
9
+ # PathPaymentStrictReceiveResultCode code)
9
10
  # {
10
11
  # case PATH_PAYMENT_STRICT_RECEIVE_SUCCESS:
11
12
  # struct
@@ -0,0 +1,36 @@
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
+ # union RevokeSponsorshipOp switch (RevokeSponsorshipType type)
9
+ # {
10
+ # case REVOKE_SPONSORSHIP_LEDGER_ENTRY:
11
+ # LedgerKey ledgerKey;
12
+ # case REVOKE_SPONSORSHIP_SIGNER:
13
+ # struct
14
+ # {
15
+ # AccountID accountID;
16
+ # SignerKey signerKey;
17
+ # }
18
+ # signer;
19
+ # };
20
+ #
21
+ # ===========================================================================
22
+ module Stellar
23
+ class RevokeSponsorshipOp < XDR::Union
24
+ include XDR::Namespace
25
+
26
+ autoload :Signer
27
+
28
+ switch_on RevokeSponsorshipType, :type
29
+
30
+ switch :revoke_sponsorship_ledger_entry, :ledger_key
31
+ switch :revoke_sponsorship_signer, :signer
32
+
33
+ attribute :ledger_key, LedgerKey
34
+ attribute :signer, Signer
35
+ end
36
+ 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
+ # struct
9
+ # {
10
+ # AccountID accountID;
11
+ # SignerKey signerKey;
12
+ # }
13
+ #
14
+ # ===========================================================================
15
+ module Stellar
16
+ class RevokeSponsorshipOp
17
+ class Signer < XDR::Struct
18
+ attribute :account_id, AccountID
19
+ attribute :signer_key, SignerKey
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,25 @@
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
+ # union RevokeSponsorshipResult switch (RevokeSponsorshipResultCode code)
9
+ # {
10
+ # case REVOKE_SPONSORSHIP_SUCCESS:
11
+ # void;
12
+ # default:
13
+ # void;
14
+ # };
15
+ #
16
+ # ===========================================================================
17
+ module Stellar
18
+ class RevokeSponsorshipResult < XDR::Union
19
+ switch_on RevokeSponsorshipResultCode, :code
20
+
21
+ switch :revoke_sponsorship_success
22
+ switch :default
23
+
24
+ end
25
+ end
@@ -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.1"
3
+ VERSION = "0.24.0.pre.1"
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