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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +88 -0
- 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 +0 -168
- data/lib/stellar/transaction_builder.rb +28 -2
- data/lib/stellar/transaction_envelope.rb +3 -29
- data/lib/stellar/util/strkey.rb +6 -6
- metadata +162 -32
- data/generated/stellar/account_entry/ext/v1.rb +0 -34
- 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,
|
47
|
-
switch :payment,
|
48
|
-
switch :path_payment_strict_receive,
|
49
|
-
switch :manage_sell_offer,
|
50
|
-
switch :create_passive_sell_offer,
|
51
|
-
switch :set_options,
|
52
|
-
switch :change_trust,
|
53
|
-
switch :allow_trust,
|
54
|
-
switch :account_merge,
|
55
|
-
switch :inflation,
|
56
|
-
switch :manage_data,
|
57
|
-
switch :bump_sequence,
|
58
|
-
switch :manage_buy_offer,
|
59
|
-
switch :path_payment_strict_send,
|
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,
|
62
|
-
attribute :payment_result,
|
63
|
-
attribute :path_payment_strict_receive_result,
|
64
|
-
attribute :manage_sell_offer_result,
|
65
|
-
attribute :create_passive_sell_offer_result,
|
66
|
-
attribute :set_options_result,
|
67
|
-
attribute :change_trust_result,
|
68
|
-
attribute :allow_trust_result,
|
69
|
-
attribute :account_merge_result,
|
70
|
-
attribute :inflation_result,
|
71
|
-
attribute :manage_data_result,
|
72
|
-
attribute :bump_seq_result,
|
73
|
-
attribute :manage_buy_offer_result,
|
74
|
-
attribute :path_payment_strict_send_result,
|
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
|
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,
|
30
|
-
member :payment,
|
31
|
-
member :path_payment_strict_receive,
|
32
|
-
member :manage_sell_offer,
|
33
|
-
member :create_passive_sell_offer,
|
34
|
-
member :set_options,
|
35
|
-
member :change_trust,
|
36
|
-
member :allow_trust,
|
37
|
-
member :account_merge,
|
38
|
-
member :inflation,
|
39
|
-
member :manage_data,
|
40
|
-
member :bump_sequence,
|
41
|
-
member :manage_buy_offer,
|
42
|
-
member :path_payment_strict_send,
|
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 (
|
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,
|
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
|