digitalbits-base 0.27.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|