stellar-base 0.23.1 → 0.24.0.pre.1

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 (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