digitalbits-base 0.27.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 +7 -0
- data/LICENSE +202 -0
- data/README.md +84 -0
- data/generated/digitalbits-base-generated.rb +228 -0
- data/generated/digitalbits/account_entry.rb +55 -0
- data/generated/digitalbits/account_entry/ext.rb +28 -0
- data/generated/digitalbits/account_entry_extension_v1.rb +32 -0
- data/generated/digitalbits/account_entry_extension_v1/ext.rb +28 -0
- data/generated/digitalbits/account_entry_extension_v2.rb +34 -0
- data/generated/digitalbits/account_entry_extension_v2/ext.rb +24 -0
- data/generated/digitalbits/account_flags.rb +31 -0
- data/generated/digitalbits/account_merge_result.rb +26 -0
- data/generated/digitalbits/account_merge_result_code.rb +37 -0
- data/generated/digitalbits/allow_trust_op.rb +39 -0
- data/generated/digitalbits/allow_trust_op/asset.rb +33 -0
- data/generated/digitalbits/allow_trust_result.rb +25 -0
- data/generated/digitalbits/allow_trust_result_code.rb +33 -0
- data/generated/digitalbits/asset.rb +47 -0
- data/generated/digitalbits/asset/alpha_num12.rb +22 -0
- data/generated/digitalbits/asset/alpha_num4.rb +22 -0
- data/generated/digitalbits/asset_type.rb +24 -0
- data/generated/digitalbits/auth.rb +20 -0
- data/generated/digitalbits/auth_cert.rb +22 -0
- data/generated/digitalbits/authenticated_message.rb +32 -0
- data/generated/digitalbits/authenticated_message/v0.rb +24 -0
- data/generated/digitalbits/begin_sponsoring_future_reserves_op.rb +18 -0
- data/generated/digitalbits/begin_sponsoring_future_reserves_result.rb +25 -0
- data/generated/digitalbits/begin_sponsoring_future_reserves_result_code.rb +29 -0
- data/generated/digitalbits/bucket_entry.rb +34 -0
- data/generated/digitalbits/bucket_entry_type.rb +28 -0
- data/generated/digitalbits/bucket_metadata.rb +32 -0
- data/generated/digitalbits/bucket_metadata/ext.rb +24 -0
- data/generated/digitalbits/bump_sequence_op.rb +18 -0
- data/generated/digitalbits/bump_sequence_result.rb +25 -0
- data/generated/digitalbits/bump_sequence_result_code.rb +24 -0
- data/generated/digitalbits/change_trust_op.rb +22 -0
- data/generated/digitalbits/change_trust_result.rb +25 -0
- data/generated/digitalbits/change_trust_result_code.rb +34 -0
- data/generated/digitalbits/claim_claimable_balance_op.rb +18 -0
- data/generated/digitalbits/claim_claimable_balance_result.rb +25 -0
- data/generated/digitalbits/claim_claimable_balance_result_code.rb +31 -0
- data/generated/digitalbits/claim_offer_atom.rb +33 -0
- data/generated/digitalbits/claim_predicate.rb +43 -0
- data/generated/digitalbits/claim_predicate_type.rb +30 -0
- data/generated/digitalbits/claimable_balance_entry.rb +44 -0
- data/generated/digitalbits/claimable_balance_entry/ext.rb +24 -0
- data/generated/digitalbits/claimable_balance_id.rb +23 -0
- data/generated/digitalbits/claimable_balance_id_type.rb +20 -0
- data/generated/digitalbits/claimant.rb +31 -0
- data/generated/digitalbits/claimant/v0.rb +22 -0
- data/generated/digitalbits/claimant_type.rb +20 -0
- data/generated/digitalbits/create_account_op.rb +20 -0
- data/generated/digitalbits/create_account_result.rb +25 -0
- data/generated/digitalbits/create_account_result_code.rb +32 -0
- data/generated/digitalbits/create_claimable_balance_op.rb +22 -0
- data/generated/digitalbits/create_claimable_balance_result.rb +27 -0
- data/generated/digitalbits/create_claimable_balance_result_code.rb +30 -0
- data/generated/digitalbits/create_passive_sell_offer_op.rb +24 -0
- data/generated/digitalbits/crypto_key_type.rb +28 -0
- data/generated/digitalbits/curve25519_public.rb +18 -0
- data/generated/digitalbits/curve25519_secret.rb +18 -0
- data/generated/digitalbits/data_entry.rb +35 -0
- data/generated/digitalbits/data_entry/ext.rb +24 -0
- data/generated/digitalbits/decorated_signature.rb +20 -0
- data/generated/digitalbits/digital_bits_message.rb +84 -0
- data/generated/digitalbits/digital_bits_value.rb +43 -0
- data/generated/digitalbits/digital_bits_value/ext.rb +28 -0
- data/generated/digitalbits/digital_bits_value_type.rb +22 -0
- data/generated/digitalbits/dont_have.rb +20 -0
- data/generated/digitalbits/end_sponsoring_future_reserves_result.rb +25 -0
- data/generated/digitalbits/end_sponsoring_future_reserves_result_code.rb +25 -0
- data/generated/digitalbits/envelope_type.rb +32 -0
- data/generated/digitalbits/error.rb +20 -0
- data/generated/digitalbits/error_code.rb +28 -0
- data/generated/digitalbits/fee_bump_transaction.rb +39 -0
- data/generated/digitalbits/fee_bump_transaction/ext.rb +24 -0
- data/generated/digitalbits/fee_bump_transaction/inner_tx.rb +25 -0
- data/generated/digitalbits/fee_bump_transaction_envelope.rb +22 -0
- data/generated/digitalbits/hello.rb +34 -0
- data/generated/digitalbits/hmac_sha256_key.rb +18 -0
- data/generated/digitalbits/hmac_sha256_mac.rb +18 -0
- data/generated/digitalbits/inflation_payout.rb +20 -0
- data/generated/digitalbits/inflation_result.rb +26 -0
- data/generated/digitalbits/inflation_result_code.rb +24 -0
- data/generated/digitalbits/inner_transaction_result.rb +57 -0
- data/generated/digitalbits/inner_transaction_result/ext.rb +24 -0
- data/generated/digitalbits/inner_transaction_result/result.rb +54 -0
- data/generated/digitalbits/inner_transaction_result_pair.rb +20 -0
- data/generated/digitalbits/ip_addr_type.rb +22 -0
- data/generated/digitalbits/ledger_close_meta.rb +23 -0
- data/generated/digitalbits/ledger_close_meta_v0.rb +35 -0
- data/generated/digitalbits/ledger_close_value_signature.rb +20 -0
- data/generated/digitalbits/ledger_entry.rb +50 -0
- data/generated/digitalbits/ledger_entry/data.rb +41 -0
- data/generated/digitalbits/ledger_entry/ext.rb +28 -0
- data/generated/digitalbits/ledger_entry_change.rb +35 -0
- data/generated/digitalbits/ledger_entry_change_type.rb +26 -0
- data/generated/digitalbits/ledger_entry_extension_v1.rb +30 -0
- data/generated/digitalbits/ledger_entry_extension_v1/ext.rb +24 -0
- data/generated/digitalbits/ledger_entry_type.rb +28 -0
- data/generated/digitalbits/ledger_header.rb +69 -0
- data/generated/digitalbits/ledger_header/ext.rb +24 -0
- data/generated/digitalbits/ledger_header_history_entry.rb +33 -0
- data/generated/digitalbits/ledger_header_history_entry/ext.rb +24 -0
- data/generated/digitalbits/ledger_key.rb +69 -0
- data/generated/digitalbits/ledger_key/account.rb +20 -0
- data/generated/digitalbits/ledger_key/claimable_balance.rb +20 -0
- data/generated/digitalbits/ledger_key/data.rb +22 -0
- data/generated/digitalbits/ledger_key/offer.rb +22 -0
- data/generated/digitalbits/ledger_key/trust_line.rb +22 -0
- data/generated/digitalbits/ledger_scp_messages.rb +20 -0
- data/generated/digitalbits/ledger_upgrade.rb +35 -0
- data/generated/digitalbits/ledger_upgrade_type.rb +26 -0
- data/generated/digitalbits/liabilities.rb +20 -0
- data/generated/digitalbits/manage_buy_offer_op.rb +29 -0
- data/generated/digitalbits/manage_buy_offer_result.rb +26 -0
- data/generated/digitalbits/manage_buy_offer_result_code.rb +51 -0
- data/generated/digitalbits/manage_data_op.rb +20 -0
- data/generated/digitalbits/manage_data_result.rb +25 -0
- data/generated/digitalbits/manage_data_result_code.rb +32 -0
- data/generated/digitalbits/manage_offer_effect.rb +24 -0
- data/generated/digitalbits/manage_offer_success_result.rb +34 -0
- data/generated/digitalbits/manage_offer_success_result/offer.rb +30 -0
- data/generated/digitalbits/manage_sell_offer_op.rb +28 -0
- data/generated/digitalbits/manage_sell_offer_result.rb +26 -0
- data/generated/digitalbits/manage_sell_offer_result_code.rb +54 -0
- data/generated/digitalbits/memo.rb +38 -0
- data/generated/digitalbits/memo_type.rb +28 -0
- data/generated/digitalbits/message_type.rb +56 -0
- data/generated/digitalbits/muxed_account.rb +35 -0
- data/generated/digitalbits/muxed_account/med25519.rb +22 -0
- data/generated/digitalbits/offer_entry.rb +49 -0
- data/generated/digitalbits/offer_entry/ext.rb +24 -0
- data/generated/digitalbits/offer_entry_flags.rb +21 -0
- data/generated/digitalbits/operation.rb +69 -0
- data/generated/digitalbits/operation/body.rb +95 -0
- data/generated/digitalbits/operation_id.rb +32 -0
- data/generated/digitalbits/operation_id/id.rb +24 -0
- data/generated/digitalbits/operation_meta.rb +18 -0
- data/generated/digitalbits/operation_result.rb +71 -0
- data/generated/digitalbits/operation_result/tr.rb +97 -0
- data/generated/digitalbits/operation_result_code.rb +33 -0
- data/generated/digitalbits/operation_type.rb +56 -0
- data/generated/digitalbits/path_payment_strict_receive_op.rb +32 -0
- data/generated/digitalbits/path_payment_strict_receive_result.rb +39 -0
- data/generated/digitalbits/path_payment_strict_receive_result/success.rb +22 -0
- data/generated/digitalbits/path_payment_strict_receive_result_code.rb +56 -0
- data/generated/digitalbits/path_payment_strict_send_op.rb +32 -0
- data/generated/digitalbits/path_payment_strict_send_result.rb +38 -0
- data/generated/digitalbits/path_payment_strict_send_result/success.rb +22 -0
- data/generated/digitalbits/path_payment_strict_send_result_code.rb +55 -0
- data/generated/digitalbits/payment_op.rb +22 -0
- data/generated/digitalbits/payment_result.rb +25 -0
- data/generated/digitalbits/payment_result_code.rb +41 -0
- data/generated/digitalbits/peer_address.rb +33 -0
- data/generated/digitalbits/peer_address/ip.rb +29 -0
- data/generated/digitalbits/peer_stats.rb +48 -0
- data/generated/digitalbits/price.rb +20 -0
- data/generated/digitalbits/public_key.rb +23 -0
- data/generated/digitalbits/public_key_type.rb +20 -0
- data/generated/digitalbits/revoke_sponsorship_op.rb +36 -0
- data/generated/digitalbits/revoke_sponsorship_op/signer.rb +22 -0
- data/generated/digitalbits/revoke_sponsorship_result.rb +25 -0
- data/generated/digitalbits/revoke_sponsorship_result_code.rb +31 -0
- data/generated/digitalbits/revoke_sponsorship_type.rb +22 -0
- data/generated/digitalbits/scp_ballot.rb +20 -0
- data/generated/digitalbits/scp_envelope.rb +20 -0
- data/generated/digitalbits/scp_history_entry.rb +23 -0
- data/generated/digitalbits/scp_history_entry_v0.rb +20 -0
- data/generated/digitalbits/scp_nomination.rb +22 -0
- data/generated/digitalbits/scp_quorum_set.rb +22 -0
- data/generated/digitalbits/scp_statement.rb +58 -0
- data/generated/digitalbits/scp_statement/pledges.rb +63 -0
- data/generated/digitalbits/scp_statement/pledges/confirm.rb +30 -0
- data/generated/digitalbits/scp_statement/pledges/externalize.rb +26 -0
- data/generated/digitalbits/scp_statement/pledges/prepare.rb +32 -0
- data/generated/digitalbits/scp_statement_type.rb +26 -0
- data/generated/digitalbits/set_options_op.rb +41 -0
- data/generated/digitalbits/set_options_result.rb +25 -0
- data/generated/digitalbits/set_options_result_code.rb +40 -0
- data/generated/digitalbits/signed_survey_request_message.rb +20 -0
- data/generated/digitalbits/signed_survey_response_message.rb +20 -0
- data/generated/digitalbits/signer.rb +20 -0
- data/generated/digitalbits/signer_key.rb +33 -0
- data/generated/digitalbits/signer_key_type.rb +24 -0
- data/generated/digitalbits/simple_payment_result.rb +22 -0
- data/generated/digitalbits/survey_message_command_type.rb +20 -0
- data/generated/digitalbits/survey_request_message.rb +26 -0
- data/generated/digitalbits/survey_response_body.rb +23 -0
- data/generated/digitalbits/survey_response_message.rb +26 -0
- data/generated/digitalbits/threshold_indexes.rb +26 -0
- data/generated/digitalbits/time_bounds.rb +20 -0
- data/generated/digitalbits/topology_response_body.rb +25 -0
- data/generated/digitalbits/transaction.rb +50 -0
- data/generated/digitalbits/transaction/ext.rb +24 -0
- data/generated/digitalbits/transaction_envelope.rb +31 -0
- data/generated/digitalbits/transaction_history_entry.rb +33 -0
- data/generated/digitalbits/transaction_history_entry/ext.rb +24 -0
- data/generated/digitalbits/transaction_history_result_entry.rb +33 -0
- data/generated/digitalbits/transaction_history_result_entry/ext.rb +24 -0
- data/generated/digitalbits/transaction_meta.rb +31 -0
- data/generated/digitalbits/transaction_meta_v1.rb +20 -0
- data/generated/digitalbits/transaction_meta_v2.rb +24 -0
- data/generated/digitalbits/transaction_result.rb +46 -0
- data/generated/digitalbits/transaction_result/ext.rb +24 -0
- data/generated/digitalbits/transaction_result/result.rb +36 -0
- data/generated/digitalbits/transaction_result_code.rb +54 -0
- data/generated/digitalbits/transaction_result_meta.rb +22 -0
- data/generated/digitalbits/transaction_result_pair.rb +20 -0
- data/generated/digitalbits/transaction_result_set.rb +18 -0
- data/generated/digitalbits/transaction_set.rb +20 -0
- data/generated/digitalbits/transaction_signature_payload.rb +32 -0
- data/generated/digitalbits/transaction_signature_payload/tagged_transaction.rb +30 -0
- data/generated/digitalbits/transaction_v0.rb +39 -0
- data/generated/digitalbits/transaction_v0/ext.rb +24 -0
- data/generated/digitalbits/transaction_v0_envelope.rb +22 -0
- data/generated/digitalbits/transaction_v1_envelope.rb +22 -0
- data/generated/digitalbits/trust_line_entry.rb +53 -0
- data/generated/digitalbits/trust_line_entry/ext.rb +42 -0
- data/generated/digitalbits/trust_line_entry/ext/v1.rb +34 -0
- data/generated/digitalbits/trust_line_entry/ext/v1/ext.rb +28 -0
- data/generated/digitalbits/trust_line_flags.rb +25 -0
- data/generated/digitalbits/upgrade_entry_meta.rb +20 -0
- data/lib/digitalbits-base.rb +51 -0
- data/lib/digitalbits/account_flags.rb +26 -0
- data/lib/digitalbits/asset.rb +81 -0
- data/lib/digitalbits/base.rb +1 -0
- data/lib/digitalbits/claim_predicate.rb +197 -0
- data/lib/digitalbits/compat.rb +9 -0
- data/lib/digitalbits/concerns/transaction.rb +50 -0
- data/lib/digitalbits/convert.rb +32 -0
- data/lib/digitalbits/dsl.rb +93 -0
- data/lib/digitalbits/ext/xdr.rb +50 -0
- data/lib/digitalbits/factories.rb +59 -0
- data/lib/digitalbits/fee_bump_transaction.rb +21 -0
- data/lib/digitalbits/key_pair.rb +126 -0
- data/lib/digitalbits/ledger_key.rb +32 -0
- data/lib/digitalbits/muxed_account.rb +16 -0
- data/lib/digitalbits/networks.rb +43 -0
- data/lib/digitalbits/operation.rb +603 -0
- data/lib/digitalbits/path_payment_strict_receive_result.rb +16 -0
- data/lib/digitalbits/price.rb +39 -0
- data/lib/digitalbits/signer_key.rb +46 -0
- data/lib/digitalbits/thresholds.rb +37 -0
- data/lib/digitalbits/transaction.rb +37 -0
- data/lib/digitalbits/transaction_builder.rb +166 -0
- data/lib/digitalbits/transaction_envelope.rb +35 -0
- data/lib/digitalbits/transaction_v0.rb +43 -0
- data/lib/digitalbits/trust_line_flags.rb +53 -0
- data/lib/digitalbits/util/strkey.rb +70 -0
- data/lib/digitalbits/version.rb +3 -0
- metadata +459 -0
|
@@ -0,0 +1,20 @@
|
|
|
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 UpgradeEntryMeta
|
|
9
|
+
# {
|
|
10
|
+
# LedgerUpgrade upgrade;
|
|
11
|
+
# LedgerEntryChanges changes;
|
|
12
|
+
# };
|
|
13
|
+
#
|
|
14
|
+
# ===========================================================================
|
|
15
|
+
module Digitalbits
|
|
16
|
+
class UpgradeEntryMeta < XDR::Struct
|
|
17
|
+
attribute :upgrade, LedgerUpgrade
|
|
18
|
+
attribute :changes, LedgerEntryChanges
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require "xdr"
|
|
2
|
+
require "rbnacl"
|
|
3
|
+
require "digest/sha2"
|
|
4
|
+
require "active_support/core_ext/object/blank"
|
|
5
|
+
require "active_support/core_ext/enumerable"
|
|
6
|
+
require "active_support/core_ext/kernel/reporting"
|
|
7
|
+
require "active_support/core_ext/module/attribute_accessors_per_thread"
|
|
8
|
+
require "active_support/core_ext/module/delegation"
|
|
9
|
+
require "active_support/deprecation"
|
|
10
|
+
|
|
11
|
+
require_relative "digitalbits/ext/xdr"
|
|
12
|
+
|
|
13
|
+
# See ../generated for code-gen'ed files
|
|
14
|
+
silence_warnings do
|
|
15
|
+
require "digitalbits-base-generated"
|
|
16
|
+
end
|
|
17
|
+
DigitalBits.load_all!
|
|
18
|
+
|
|
19
|
+
require_relative "digitalbits/version"
|
|
20
|
+
|
|
21
|
+
DigitalBits::ONE = 1_0000000
|
|
22
|
+
DigitalBits::Deprecation = ActiveSupport::Deprecation.new("next release", "digitalbits-base")
|
|
23
|
+
|
|
24
|
+
# extensions onto the generated files must be loaded manually, below
|
|
25
|
+
|
|
26
|
+
require_relative "./digitalbits/account_flags"
|
|
27
|
+
require_relative "./digitalbits/asset"
|
|
28
|
+
require_relative "./digitalbits/claim_predicate"
|
|
29
|
+
require_relative "./digitalbits/key_pair"
|
|
30
|
+
require_relative "./digitalbits/ledger_key"
|
|
31
|
+
require_relative "./digitalbits/networks"
|
|
32
|
+
require_relative "./digitalbits/operation"
|
|
33
|
+
require_relative "./digitalbits/path_payment_strict_receive_result"
|
|
34
|
+
require_relative "./digitalbits/price"
|
|
35
|
+
require_relative "./digitalbits/signer_key"
|
|
36
|
+
require_relative "./digitalbits/thresholds"
|
|
37
|
+
require_relative "./digitalbits/trust_line_flags"
|
|
38
|
+
|
|
39
|
+
require_relative "./digitalbits/concerns/transaction"
|
|
40
|
+
require_relative "./digitalbits/fee_bump_transaction"
|
|
41
|
+
require_relative "./digitalbits/transaction"
|
|
42
|
+
require_relative "./digitalbits/transaction_builder"
|
|
43
|
+
require_relative "./digitalbits/transaction_envelope"
|
|
44
|
+
require_relative "./digitalbits/transaction_v0"
|
|
45
|
+
|
|
46
|
+
require_relative "./digitalbits/util/strkey"
|
|
47
|
+
require_relative "./digitalbits/convert"
|
|
48
|
+
|
|
49
|
+
require_relative "./digitalbits/dsl"
|
|
50
|
+
|
|
51
|
+
require_relative "./digitalbits/compat"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module DigitalBits
|
|
2
|
+
class AccountFlags
|
|
3
|
+
#
|
|
4
|
+
# Converts an array of DigitalBits::AccountFlags members into
|
|
5
|
+
# an Integer suitable for use in a SetOptionsOp.
|
|
6
|
+
#
|
|
7
|
+
# @param flags [Array<DigitalBits::AccountFlags>] the flags to combine
|
|
8
|
+
#
|
|
9
|
+
# @return [Fixnum] the combined result
|
|
10
|
+
def self.make_mask(flags = nil)
|
|
11
|
+
flags ||= []
|
|
12
|
+
|
|
13
|
+
flags.map(&:value).inject(&:|) || 0
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
#
|
|
17
|
+
# Converts an integer used in SetOptionsOp on the set/clear flag options
|
|
18
|
+
# into an array of DigitalBits::AccountFlags members
|
|
19
|
+
#
|
|
20
|
+
# @param combined [Fixnum]
|
|
21
|
+
# @return [Array<DigitalBits::AccountFlags>]
|
|
22
|
+
def self.parse_mask(combined)
|
|
23
|
+
members.values.select { |m| (m.value & combined) != 0 }
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
module DigitalBits
|
|
2
|
+
class Asset
|
|
3
|
+
TYPES = %i[native alphanum4 alphanum12]
|
|
4
|
+
|
|
5
|
+
def self.native
|
|
6
|
+
new(:asset_type_native)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# @param code [String] asset code
|
|
10
|
+
# @param issuer [#to_keypair] asset issuer
|
|
11
|
+
#
|
|
12
|
+
# @return [DigitalBits::Asset::AlphaNum4] asset4 representation
|
|
13
|
+
def self.alphanum4(code, issuer)
|
|
14
|
+
issuer = issuer.to_keypair if issuer.respond_to?(:to_keypair)
|
|
15
|
+
raise ArgumentError, "Bad :issuer" unless issuer.is_a?(KeyPair)
|
|
16
|
+
code = normalize_code(code, 4)
|
|
17
|
+
an = AlphaNum4.new({asset_code: code, issuer: issuer.account_id})
|
|
18
|
+
new(:asset_type_credit_alphanum4, an)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# @param code [String] asset code
|
|
22
|
+
# @param issuer [#to_keypair] asset issuer
|
|
23
|
+
#
|
|
24
|
+
# @return [DigitalBits::Asset::AlphaNum4] asset4 representation
|
|
25
|
+
def self.alphanum12(code, issuer)
|
|
26
|
+
issuer = issuer.to_keypair if issuer.respond_to?(:to_keypair)
|
|
27
|
+
raise ArgumentError, "Bad :issuer" unless issuer.is_a?(KeyPair)
|
|
28
|
+
code = normalize_code(code, 12)
|
|
29
|
+
an = AlphaNum12.new({asset_code: code, issuer: issuer.account_id})
|
|
30
|
+
new(:asset_type_credit_alphanum12, an)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def to_s
|
|
34
|
+
case switch
|
|
35
|
+
when AssetType.asset_type_native
|
|
36
|
+
"native"
|
|
37
|
+
when AssetType.asset_type_credit_alphanum4
|
|
38
|
+
anum = alpha_num4!
|
|
39
|
+
issuer_address = DigitalBits::Convert.pk_to_address(anum.issuer)
|
|
40
|
+
"#{anum.asset_code}/#{issuer_address}"
|
|
41
|
+
when AssetType.asset_type_credit_alphanum12
|
|
42
|
+
anum = alpha_num12!
|
|
43
|
+
issuer_address = DigitalBits::Convert.pk_to_address(anum.issuer)
|
|
44
|
+
"#{anum.asset_code}/#{issuer_address}"
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def inspect
|
|
49
|
+
# label = switch.to_s
|
|
50
|
+
"#<DigitalBits::Asset #{self}>"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def code
|
|
54
|
+
case switch
|
|
55
|
+
when AssetType.asset_type_credit_alphanum4
|
|
56
|
+
alpha_num4!.asset_code
|
|
57
|
+
when AssetType.asset_type_credit_alphanum12
|
|
58
|
+
alpha_num12!.asset_code
|
|
59
|
+
else
|
|
60
|
+
raise "#{switch} assets do not have a code"
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def issuer
|
|
65
|
+
case switch
|
|
66
|
+
when AssetType.asset_type_credit_alphanum4
|
|
67
|
+
alpha_num4!.issuer
|
|
68
|
+
when AssetType.asset_type_credit_alphanum12
|
|
69
|
+
alpha_num12!.issuer
|
|
70
|
+
else
|
|
71
|
+
raise "#{switch} assets do not have a isuuer"
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def self.normalize_code(code, length)
|
|
76
|
+
raise ArgumentError, "Invalid asset code: #{code}, must be <= #{length} bytes" if code.length > length
|
|
77
|
+
|
|
78
|
+
code.ljust(length, "\x00")
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "digitalbits-base"
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# frozen_string_literals: true
|
|
2
|
+
require "active_support/core_ext/integer/time"
|
|
3
|
+
require "active_support/core_ext/string/conversions"
|
|
4
|
+
|
|
5
|
+
module DigitalBits
|
|
6
|
+
# Represents claim predicate on DigitalBits network.
|
|
7
|
+
#
|
|
8
|
+
class ClaimPredicate
|
|
9
|
+
module FactoryMethods
|
|
10
|
+
# Constructs an `unconditional` claim predicate.
|
|
11
|
+
#
|
|
12
|
+
# This predicate will be always fulfilled.
|
|
13
|
+
#
|
|
14
|
+
# @return [ClaimPredicate] `unconditional` claim predicate
|
|
15
|
+
def unconditional
|
|
16
|
+
ClaimPredicate.new(ClaimPredicateType::UNCONDITIONAL)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Constructs a `before_relative_time` claim predicate.
|
|
20
|
+
#
|
|
21
|
+
# This predicate will be fulfilled if the closing time of the ledger that includes
|
|
22
|
+
# the DigitalBits::CreateClaimableBalance operation plus this relative time delta (in seconds)
|
|
23
|
+
# is less than the current time.
|
|
24
|
+
#
|
|
25
|
+
# @param seconds [#to_int|#to_i] seconds since `closeTime` of the ledger in which
|
|
26
|
+
# the ClaimableBalanceEntry was created.
|
|
27
|
+
# @return [ClaimPredicate] `before_relative_time` claim predicate
|
|
28
|
+
def before_relative_time(seconds)
|
|
29
|
+
ClaimPredicate.new(ClaimPredicateType::BEFORE_RELATIVE_TIME, Integer(seconds))
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Constructs an `before_absolute_time` claim predicate.
|
|
33
|
+
#
|
|
34
|
+
# This predicate will be fulfilled if the closing time of the ledger that includes
|
|
35
|
+
# the DigitalBits::CreateClaimableBalance operation is less than provided timestamp.
|
|
36
|
+
#
|
|
37
|
+
# @param timestamp [#to_time|#to_int|#to_i] time value or timestamp
|
|
38
|
+
#
|
|
39
|
+
# @return [ClaimPredicate] `before_absolute_time` claim predicate.
|
|
40
|
+
def before_absolute_time(timestamp)
|
|
41
|
+
timestamp = timestamp.to_time if timestamp.respond_to?(:to_time)
|
|
42
|
+
|
|
43
|
+
ClaimPredicate.new(ClaimPredicateType::BEFORE_ABSOLUTE_TIME, Integer(timestamp))
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Constructs either relative or absolute time predicate based on the type of the input.
|
|
47
|
+
#
|
|
48
|
+
# If input is an instance of `ActiveSupport::Duration` class it will be handled as a relative time
|
|
49
|
+
# (seconds since close time of the ledger), otherwise it will be treated as an absolute time.
|
|
50
|
+
#
|
|
51
|
+
# It is intended to work with time helpers provided by ActiveSupport, like `1.day` (relative)
|
|
52
|
+
# or `2.weeks.from_now` (absolute).
|
|
53
|
+
#
|
|
54
|
+
# @example relative time
|
|
55
|
+
# ClaimPredicate.before(2.days + 15.seconds)
|
|
56
|
+
#
|
|
57
|
+
# @example absolute time
|
|
58
|
+
# ClaimPredicate.before(5.hours.from_now)
|
|
59
|
+
#
|
|
60
|
+
# @param time [ActiveSupport::Duration|#to_time|#to_i] duration since ledger close time or absolute time value
|
|
61
|
+
#
|
|
62
|
+
# @return [ClaimPredicate] `before_relative_time` or `before_absolute_time` claim predicate.
|
|
63
|
+
def before(time)
|
|
64
|
+
ActiveSupport::Duration === time ? before_relative_time(time.to_i) : before_absolute_time(time)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Constructs a negated predicate from either relative or absolute time based on the type of the input.
|
|
68
|
+
#
|
|
69
|
+
# @see #before
|
|
70
|
+
# @param (see #before)
|
|
71
|
+
# @return (see #before)
|
|
72
|
+
def after(time)
|
|
73
|
+
~before(time)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Compose a complex predicate by calling DSL methods from the block.
|
|
77
|
+
#
|
|
78
|
+
# @example
|
|
79
|
+
# ClaimPredicate.compose {
|
|
80
|
+
# after(15.minutes) & before(1.day) | after(1.week.from_now) & before(1.week.from_now + 1.day)
|
|
81
|
+
# }
|
|
82
|
+
#
|
|
83
|
+
# @yieldreturn [ClaimPredicate|nil]
|
|
84
|
+
# @return [ClaimPredicate] `not(before_relative_time)` or `not(before_absolute_time)` claim predicate.
|
|
85
|
+
def compose(&block)
|
|
86
|
+
result = instance_eval(&block)
|
|
87
|
+
result.nil? ? unconditional : result
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
extend FactoryMethods
|
|
92
|
+
|
|
93
|
+
# Constructs an `and` claim predicate.
|
|
94
|
+
#
|
|
95
|
+
# This predicate will be fulfilled if both `self` and `other` predicates are fulfilled.
|
|
96
|
+
#
|
|
97
|
+
# @param other [ClaimPredicate] another predicate
|
|
98
|
+
#
|
|
99
|
+
# @return [ClaimPredicate] `and` claim predicate
|
|
100
|
+
def and(other)
|
|
101
|
+
raise TypeError, "no conversion from #{other.class.name} to ClaimPredicate" unless ClaimPredicate === other
|
|
102
|
+
ClaimPredicate.new(ClaimPredicateType::AND, [self, other])
|
|
103
|
+
end
|
|
104
|
+
alias_method :&, :and
|
|
105
|
+
|
|
106
|
+
# Constructs an `or` claim predicate.
|
|
107
|
+
#
|
|
108
|
+
# This predicate will be fulfilled if either of `self` or `other` predicates is fulfilled.
|
|
109
|
+
#
|
|
110
|
+
# @param other [ClaimPredicate] another predicate.
|
|
111
|
+
#
|
|
112
|
+
# @return [ClaimPredicate] `or` claim predicate
|
|
113
|
+
def or(other)
|
|
114
|
+
raise TypeError, "no conversion from #{other.class.name} to ClaimPredicate" unless ClaimPredicate === other
|
|
115
|
+
ClaimPredicate.new(ClaimPredicateType::OR, [self, other])
|
|
116
|
+
end
|
|
117
|
+
alias_method :|, :or
|
|
118
|
+
|
|
119
|
+
# Constructs a `not` claim predicate.
|
|
120
|
+
#
|
|
121
|
+
# This predicate will be fulfilled if `self` is not fulfilled.
|
|
122
|
+
#
|
|
123
|
+
# @return [ClaimPredicate] `not` claim predicate
|
|
124
|
+
def not
|
|
125
|
+
ClaimPredicate.new(ClaimPredicateType::NOT, self)
|
|
126
|
+
end
|
|
127
|
+
alias_method :~@, :not
|
|
128
|
+
|
|
129
|
+
# Evaluates the predicate value for provided inputs.
|
|
130
|
+
#
|
|
131
|
+
# @param created_at [#to_time|#to_int] closing time of the ledger containing CreateClaimableBalance operation
|
|
132
|
+
# @param claiming_at [#to_time|#to_int|ActiveSupport::Duration] time point to evaluate predicate at, either
|
|
133
|
+
# absolute time or duration relative to `created_at`. In reality predicate will be evaluated by digitalbits-core
|
|
134
|
+
# using the closing time of a ledger containing ClaimClaimableBalance operation, in either successful
|
|
135
|
+
# or failed state.
|
|
136
|
+
#
|
|
137
|
+
# @return [Boolean] `true` if this predicate would allow claiming the balance, `false` otherwise
|
|
138
|
+
def evaluate(created_at, claiming_at)
|
|
139
|
+
created_at = created_at.to_time if created_at.respond_to?(:to_time)
|
|
140
|
+
claiming_at = created_at + claiming_at if claiming_at.is_a?(ActiveSupport::Duration)
|
|
141
|
+
claiming_at = claiming_at.to_time if claiming_at.respond_to?(:to_time)
|
|
142
|
+
|
|
143
|
+
return false if claiming_at < created_at
|
|
144
|
+
|
|
145
|
+
case switch
|
|
146
|
+
when ClaimPredicateType::UNCONDITIONAL
|
|
147
|
+
true
|
|
148
|
+
when ClaimPredicateType::BEFORE_RELATIVE_TIME
|
|
149
|
+
Integer(claiming_at) < Integer(created_at) + value
|
|
150
|
+
when ClaimPredicateType::BEFORE_ABSOLUTE_TIME
|
|
151
|
+
Integer(claiming_at).to_i < value
|
|
152
|
+
when ClaimPredicateType::AND
|
|
153
|
+
value[0].evaluate(created_at, claiming_at) && value[1].evaluate(created_at, claiming_at)
|
|
154
|
+
when ClaimPredicateType::OR
|
|
155
|
+
value[0].evaluate(created_at, claiming_at) || value[1].evaluate(created_at, claiming_at)
|
|
156
|
+
when ClaimPredicateType::NOT
|
|
157
|
+
!value.evaluate(created_at, claiming_at)
|
|
158
|
+
else
|
|
159
|
+
raise ArgumentError, "evaluation is not implemented for #{switch.name} predicate"
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def describe
|
|
164
|
+
case switch
|
|
165
|
+
when ClaimPredicateType::UNCONDITIONAL
|
|
166
|
+
"always"
|
|
167
|
+
when ClaimPredicateType::BEFORE_RELATIVE_TIME
|
|
168
|
+
dur = ActiveSupport::Duration.build(value)
|
|
169
|
+
"less than #{dur.inspect} since creation"
|
|
170
|
+
when ClaimPredicateType::BEFORE_ABSOLUTE_TIME
|
|
171
|
+
"before #{Time.at(value).to_formatted_s(:db)}"
|
|
172
|
+
when ClaimPredicateType::AND
|
|
173
|
+
value.map(&:describe).join(" and ")
|
|
174
|
+
when ClaimPredicateType::OR
|
|
175
|
+
"(" << value.map(&:describe).join(" or ") << ")"
|
|
176
|
+
when ClaimPredicateType::NOT
|
|
177
|
+
case value.switch
|
|
178
|
+
when ClaimPredicateType::UNCONDITIONAL
|
|
179
|
+
"never"
|
|
180
|
+
when ClaimPredicateType::BEFORE_RELATIVE_TIME
|
|
181
|
+
dur = ActiveSupport::Duration.build(value.value)
|
|
182
|
+
"#{dur.inspect} or more since creation"
|
|
183
|
+
when ClaimPredicateType::BEFORE_ABSOLUTE_TIME
|
|
184
|
+
"after #{Time.at(value.value).to_formatted_s(:db)}"
|
|
185
|
+
else
|
|
186
|
+
"not (#{value.describe})"
|
|
187
|
+
end
|
|
188
|
+
else
|
|
189
|
+
raise ArgumentError, "evaluation is not implemented for #{switch.name} predicate"
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def inspect
|
|
194
|
+
"#<ClaimPredicate: #{describe}>"
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
class << DigitalBits::Operation
|
|
2
|
+
alias_method :manage_offer, :manage_sell_offer
|
|
3
|
+
alias_method :create_passive_offer, :create_passive_sell_offer
|
|
4
|
+
|
|
5
|
+
deprecate deprecator: DigitalBits::Deprecation,
|
|
6
|
+
manage_offer: :manage_sell_offer,
|
|
7
|
+
create_passive_offer: :create_passive_sell_offer,
|
|
8
|
+
allow_trust: :set_trust_line_flags
|
|
9
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module DigitalBits::Concerns
|
|
2
|
+
module Transaction
|
|
3
|
+
# Returns the string of bytes that, when hashed, provide the value which
|
|
4
|
+
# should be signed to create a valid digitalbits transaction signature
|
|
5
|
+
def signature_base
|
|
6
|
+
signature_base_prefix + to_xdr
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def sign(key_pair)
|
|
10
|
+
key_pair.sign(hash)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def sign_decorated(key_pair)
|
|
14
|
+
key_pair.sign_decorated(hash)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def hash
|
|
18
|
+
Digest::SHA256.digest(signature_base)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def merge(other)
|
|
22
|
+
cloned = from_xdr(to_xdr)
|
|
23
|
+
cloned.operations += other.to_operations
|
|
24
|
+
cloned
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
#
|
|
28
|
+
# Extracts the operations from this single transaction,
|
|
29
|
+
# setting the source account on the extracted operations.
|
|
30
|
+
#
|
|
31
|
+
# Useful for merging transactions.
|
|
32
|
+
#
|
|
33
|
+
# @return [Array<Operation>] the operations
|
|
34
|
+
def to_operations
|
|
35
|
+
codec = XDR::VarArray[DigitalBits::Operation]
|
|
36
|
+
ops = respond_to?(:operations) ? operations : inner_tx.value.tx.operations
|
|
37
|
+
cloned = codec.from_xdr(codec.to_xdr(ops))
|
|
38
|
+
cloned.each do |op|
|
|
39
|
+
op.source_account ||= source_account
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def apply_defaults
|
|
44
|
+
self.operations ||= []
|
|
45
|
+
self.fee ||= 100
|
|
46
|
+
self.memo ||= DigitalBits::Memo.new(:memo_none)
|
|
47
|
+
self.ext ||= DigitalBits::Transaction::Ext.new 0
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|