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.
Files changed (252) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +202 -0
  3. data/README.md +84 -0
  4. data/generated/digitalbits-base-generated.rb +228 -0
  5. data/generated/digitalbits/account_entry.rb +55 -0
  6. data/generated/digitalbits/account_entry/ext.rb +28 -0
  7. data/generated/digitalbits/account_entry_extension_v1.rb +32 -0
  8. data/generated/digitalbits/account_entry_extension_v1/ext.rb +28 -0
  9. data/generated/digitalbits/account_entry_extension_v2.rb +34 -0
  10. data/generated/digitalbits/account_entry_extension_v2/ext.rb +24 -0
  11. data/generated/digitalbits/account_flags.rb +31 -0
  12. data/generated/digitalbits/account_merge_result.rb +26 -0
  13. data/generated/digitalbits/account_merge_result_code.rb +37 -0
  14. data/generated/digitalbits/allow_trust_op.rb +39 -0
  15. data/generated/digitalbits/allow_trust_op/asset.rb +33 -0
  16. data/generated/digitalbits/allow_trust_result.rb +25 -0
  17. data/generated/digitalbits/allow_trust_result_code.rb +33 -0
  18. data/generated/digitalbits/asset.rb +47 -0
  19. data/generated/digitalbits/asset/alpha_num12.rb +22 -0
  20. data/generated/digitalbits/asset/alpha_num4.rb +22 -0
  21. data/generated/digitalbits/asset_type.rb +24 -0
  22. data/generated/digitalbits/auth.rb +20 -0
  23. data/generated/digitalbits/auth_cert.rb +22 -0
  24. data/generated/digitalbits/authenticated_message.rb +32 -0
  25. data/generated/digitalbits/authenticated_message/v0.rb +24 -0
  26. data/generated/digitalbits/begin_sponsoring_future_reserves_op.rb +18 -0
  27. data/generated/digitalbits/begin_sponsoring_future_reserves_result.rb +25 -0
  28. data/generated/digitalbits/begin_sponsoring_future_reserves_result_code.rb +29 -0
  29. data/generated/digitalbits/bucket_entry.rb +34 -0
  30. data/generated/digitalbits/bucket_entry_type.rb +28 -0
  31. data/generated/digitalbits/bucket_metadata.rb +32 -0
  32. data/generated/digitalbits/bucket_metadata/ext.rb +24 -0
  33. data/generated/digitalbits/bump_sequence_op.rb +18 -0
  34. data/generated/digitalbits/bump_sequence_result.rb +25 -0
  35. data/generated/digitalbits/bump_sequence_result_code.rb +24 -0
  36. data/generated/digitalbits/change_trust_op.rb +22 -0
  37. data/generated/digitalbits/change_trust_result.rb +25 -0
  38. data/generated/digitalbits/change_trust_result_code.rb +34 -0
  39. data/generated/digitalbits/claim_claimable_balance_op.rb +18 -0
  40. data/generated/digitalbits/claim_claimable_balance_result.rb +25 -0
  41. data/generated/digitalbits/claim_claimable_balance_result_code.rb +31 -0
  42. data/generated/digitalbits/claim_offer_atom.rb +33 -0
  43. data/generated/digitalbits/claim_predicate.rb +43 -0
  44. data/generated/digitalbits/claim_predicate_type.rb +30 -0
  45. data/generated/digitalbits/claimable_balance_entry.rb +44 -0
  46. data/generated/digitalbits/claimable_balance_entry/ext.rb +24 -0
  47. data/generated/digitalbits/claimable_balance_id.rb +23 -0
  48. data/generated/digitalbits/claimable_balance_id_type.rb +20 -0
  49. data/generated/digitalbits/claimant.rb +31 -0
  50. data/generated/digitalbits/claimant/v0.rb +22 -0
  51. data/generated/digitalbits/claimant_type.rb +20 -0
  52. data/generated/digitalbits/create_account_op.rb +20 -0
  53. data/generated/digitalbits/create_account_result.rb +25 -0
  54. data/generated/digitalbits/create_account_result_code.rb +32 -0
  55. data/generated/digitalbits/create_claimable_balance_op.rb +22 -0
  56. data/generated/digitalbits/create_claimable_balance_result.rb +27 -0
  57. data/generated/digitalbits/create_claimable_balance_result_code.rb +30 -0
  58. data/generated/digitalbits/create_passive_sell_offer_op.rb +24 -0
  59. data/generated/digitalbits/crypto_key_type.rb +28 -0
  60. data/generated/digitalbits/curve25519_public.rb +18 -0
  61. data/generated/digitalbits/curve25519_secret.rb +18 -0
  62. data/generated/digitalbits/data_entry.rb +35 -0
  63. data/generated/digitalbits/data_entry/ext.rb +24 -0
  64. data/generated/digitalbits/decorated_signature.rb +20 -0
  65. data/generated/digitalbits/digital_bits_message.rb +84 -0
  66. data/generated/digitalbits/digital_bits_value.rb +43 -0
  67. data/generated/digitalbits/digital_bits_value/ext.rb +28 -0
  68. data/generated/digitalbits/digital_bits_value_type.rb +22 -0
  69. data/generated/digitalbits/dont_have.rb +20 -0
  70. data/generated/digitalbits/end_sponsoring_future_reserves_result.rb +25 -0
  71. data/generated/digitalbits/end_sponsoring_future_reserves_result_code.rb +25 -0
  72. data/generated/digitalbits/envelope_type.rb +32 -0
  73. data/generated/digitalbits/error.rb +20 -0
  74. data/generated/digitalbits/error_code.rb +28 -0
  75. data/generated/digitalbits/fee_bump_transaction.rb +39 -0
  76. data/generated/digitalbits/fee_bump_transaction/ext.rb +24 -0
  77. data/generated/digitalbits/fee_bump_transaction/inner_tx.rb +25 -0
  78. data/generated/digitalbits/fee_bump_transaction_envelope.rb +22 -0
  79. data/generated/digitalbits/hello.rb +34 -0
  80. data/generated/digitalbits/hmac_sha256_key.rb +18 -0
  81. data/generated/digitalbits/hmac_sha256_mac.rb +18 -0
  82. data/generated/digitalbits/inflation_payout.rb +20 -0
  83. data/generated/digitalbits/inflation_result.rb +26 -0
  84. data/generated/digitalbits/inflation_result_code.rb +24 -0
  85. data/generated/digitalbits/inner_transaction_result.rb +57 -0
  86. data/generated/digitalbits/inner_transaction_result/ext.rb +24 -0
  87. data/generated/digitalbits/inner_transaction_result/result.rb +54 -0
  88. data/generated/digitalbits/inner_transaction_result_pair.rb +20 -0
  89. data/generated/digitalbits/ip_addr_type.rb +22 -0
  90. data/generated/digitalbits/ledger_close_meta.rb +23 -0
  91. data/generated/digitalbits/ledger_close_meta_v0.rb +35 -0
  92. data/generated/digitalbits/ledger_close_value_signature.rb +20 -0
  93. data/generated/digitalbits/ledger_entry.rb +50 -0
  94. data/generated/digitalbits/ledger_entry/data.rb +41 -0
  95. data/generated/digitalbits/ledger_entry/ext.rb +28 -0
  96. data/generated/digitalbits/ledger_entry_change.rb +35 -0
  97. data/generated/digitalbits/ledger_entry_change_type.rb +26 -0
  98. data/generated/digitalbits/ledger_entry_extension_v1.rb +30 -0
  99. data/generated/digitalbits/ledger_entry_extension_v1/ext.rb +24 -0
  100. data/generated/digitalbits/ledger_entry_type.rb +28 -0
  101. data/generated/digitalbits/ledger_header.rb +69 -0
  102. data/generated/digitalbits/ledger_header/ext.rb +24 -0
  103. data/generated/digitalbits/ledger_header_history_entry.rb +33 -0
  104. data/generated/digitalbits/ledger_header_history_entry/ext.rb +24 -0
  105. data/generated/digitalbits/ledger_key.rb +69 -0
  106. data/generated/digitalbits/ledger_key/account.rb +20 -0
  107. data/generated/digitalbits/ledger_key/claimable_balance.rb +20 -0
  108. data/generated/digitalbits/ledger_key/data.rb +22 -0
  109. data/generated/digitalbits/ledger_key/offer.rb +22 -0
  110. data/generated/digitalbits/ledger_key/trust_line.rb +22 -0
  111. data/generated/digitalbits/ledger_scp_messages.rb +20 -0
  112. data/generated/digitalbits/ledger_upgrade.rb +35 -0
  113. data/generated/digitalbits/ledger_upgrade_type.rb +26 -0
  114. data/generated/digitalbits/liabilities.rb +20 -0
  115. data/generated/digitalbits/manage_buy_offer_op.rb +29 -0
  116. data/generated/digitalbits/manage_buy_offer_result.rb +26 -0
  117. data/generated/digitalbits/manage_buy_offer_result_code.rb +51 -0
  118. data/generated/digitalbits/manage_data_op.rb +20 -0
  119. data/generated/digitalbits/manage_data_result.rb +25 -0
  120. data/generated/digitalbits/manage_data_result_code.rb +32 -0
  121. data/generated/digitalbits/manage_offer_effect.rb +24 -0
  122. data/generated/digitalbits/manage_offer_success_result.rb +34 -0
  123. data/generated/digitalbits/manage_offer_success_result/offer.rb +30 -0
  124. data/generated/digitalbits/manage_sell_offer_op.rb +28 -0
  125. data/generated/digitalbits/manage_sell_offer_result.rb +26 -0
  126. data/generated/digitalbits/manage_sell_offer_result_code.rb +54 -0
  127. data/generated/digitalbits/memo.rb +38 -0
  128. data/generated/digitalbits/memo_type.rb +28 -0
  129. data/generated/digitalbits/message_type.rb +56 -0
  130. data/generated/digitalbits/muxed_account.rb +35 -0
  131. data/generated/digitalbits/muxed_account/med25519.rb +22 -0
  132. data/generated/digitalbits/offer_entry.rb +49 -0
  133. data/generated/digitalbits/offer_entry/ext.rb +24 -0
  134. data/generated/digitalbits/offer_entry_flags.rb +21 -0
  135. data/generated/digitalbits/operation.rb +69 -0
  136. data/generated/digitalbits/operation/body.rb +95 -0
  137. data/generated/digitalbits/operation_id.rb +32 -0
  138. data/generated/digitalbits/operation_id/id.rb +24 -0
  139. data/generated/digitalbits/operation_meta.rb +18 -0
  140. data/generated/digitalbits/operation_result.rb +71 -0
  141. data/generated/digitalbits/operation_result/tr.rb +97 -0
  142. data/generated/digitalbits/operation_result_code.rb +33 -0
  143. data/generated/digitalbits/operation_type.rb +56 -0
  144. data/generated/digitalbits/path_payment_strict_receive_op.rb +32 -0
  145. data/generated/digitalbits/path_payment_strict_receive_result.rb +39 -0
  146. data/generated/digitalbits/path_payment_strict_receive_result/success.rb +22 -0
  147. data/generated/digitalbits/path_payment_strict_receive_result_code.rb +56 -0
  148. data/generated/digitalbits/path_payment_strict_send_op.rb +32 -0
  149. data/generated/digitalbits/path_payment_strict_send_result.rb +38 -0
  150. data/generated/digitalbits/path_payment_strict_send_result/success.rb +22 -0
  151. data/generated/digitalbits/path_payment_strict_send_result_code.rb +55 -0
  152. data/generated/digitalbits/payment_op.rb +22 -0
  153. data/generated/digitalbits/payment_result.rb +25 -0
  154. data/generated/digitalbits/payment_result_code.rb +41 -0
  155. data/generated/digitalbits/peer_address.rb +33 -0
  156. data/generated/digitalbits/peer_address/ip.rb +29 -0
  157. data/generated/digitalbits/peer_stats.rb +48 -0
  158. data/generated/digitalbits/price.rb +20 -0
  159. data/generated/digitalbits/public_key.rb +23 -0
  160. data/generated/digitalbits/public_key_type.rb +20 -0
  161. data/generated/digitalbits/revoke_sponsorship_op.rb +36 -0
  162. data/generated/digitalbits/revoke_sponsorship_op/signer.rb +22 -0
  163. data/generated/digitalbits/revoke_sponsorship_result.rb +25 -0
  164. data/generated/digitalbits/revoke_sponsorship_result_code.rb +31 -0
  165. data/generated/digitalbits/revoke_sponsorship_type.rb +22 -0
  166. data/generated/digitalbits/scp_ballot.rb +20 -0
  167. data/generated/digitalbits/scp_envelope.rb +20 -0
  168. data/generated/digitalbits/scp_history_entry.rb +23 -0
  169. data/generated/digitalbits/scp_history_entry_v0.rb +20 -0
  170. data/generated/digitalbits/scp_nomination.rb +22 -0
  171. data/generated/digitalbits/scp_quorum_set.rb +22 -0
  172. data/generated/digitalbits/scp_statement.rb +58 -0
  173. data/generated/digitalbits/scp_statement/pledges.rb +63 -0
  174. data/generated/digitalbits/scp_statement/pledges/confirm.rb +30 -0
  175. data/generated/digitalbits/scp_statement/pledges/externalize.rb +26 -0
  176. data/generated/digitalbits/scp_statement/pledges/prepare.rb +32 -0
  177. data/generated/digitalbits/scp_statement_type.rb +26 -0
  178. data/generated/digitalbits/set_options_op.rb +41 -0
  179. data/generated/digitalbits/set_options_result.rb +25 -0
  180. data/generated/digitalbits/set_options_result_code.rb +40 -0
  181. data/generated/digitalbits/signed_survey_request_message.rb +20 -0
  182. data/generated/digitalbits/signed_survey_response_message.rb +20 -0
  183. data/generated/digitalbits/signer.rb +20 -0
  184. data/generated/digitalbits/signer_key.rb +33 -0
  185. data/generated/digitalbits/signer_key_type.rb +24 -0
  186. data/generated/digitalbits/simple_payment_result.rb +22 -0
  187. data/generated/digitalbits/survey_message_command_type.rb +20 -0
  188. data/generated/digitalbits/survey_request_message.rb +26 -0
  189. data/generated/digitalbits/survey_response_body.rb +23 -0
  190. data/generated/digitalbits/survey_response_message.rb +26 -0
  191. data/generated/digitalbits/threshold_indexes.rb +26 -0
  192. data/generated/digitalbits/time_bounds.rb +20 -0
  193. data/generated/digitalbits/topology_response_body.rb +25 -0
  194. data/generated/digitalbits/transaction.rb +50 -0
  195. data/generated/digitalbits/transaction/ext.rb +24 -0
  196. data/generated/digitalbits/transaction_envelope.rb +31 -0
  197. data/generated/digitalbits/transaction_history_entry.rb +33 -0
  198. data/generated/digitalbits/transaction_history_entry/ext.rb +24 -0
  199. data/generated/digitalbits/transaction_history_result_entry.rb +33 -0
  200. data/generated/digitalbits/transaction_history_result_entry/ext.rb +24 -0
  201. data/generated/digitalbits/transaction_meta.rb +31 -0
  202. data/generated/digitalbits/transaction_meta_v1.rb +20 -0
  203. data/generated/digitalbits/transaction_meta_v2.rb +24 -0
  204. data/generated/digitalbits/transaction_result.rb +46 -0
  205. data/generated/digitalbits/transaction_result/ext.rb +24 -0
  206. data/generated/digitalbits/transaction_result/result.rb +36 -0
  207. data/generated/digitalbits/transaction_result_code.rb +54 -0
  208. data/generated/digitalbits/transaction_result_meta.rb +22 -0
  209. data/generated/digitalbits/transaction_result_pair.rb +20 -0
  210. data/generated/digitalbits/transaction_result_set.rb +18 -0
  211. data/generated/digitalbits/transaction_set.rb +20 -0
  212. data/generated/digitalbits/transaction_signature_payload.rb +32 -0
  213. data/generated/digitalbits/transaction_signature_payload/tagged_transaction.rb +30 -0
  214. data/generated/digitalbits/transaction_v0.rb +39 -0
  215. data/generated/digitalbits/transaction_v0/ext.rb +24 -0
  216. data/generated/digitalbits/transaction_v0_envelope.rb +22 -0
  217. data/generated/digitalbits/transaction_v1_envelope.rb +22 -0
  218. data/generated/digitalbits/trust_line_entry.rb +53 -0
  219. data/generated/digitalbits/trust_line_entry/ext.rb +42 -0
  220. data/generated/digitalbits/trust_line_entry/ext/v1.rb +34 -0
  221. data/generated/digitalbits/trust_line_entry/ext/v1/ext.rb +28 -0
  222. data/generated/digitalbits/trust_line_flags.rb +25 -0
  223. data/generated/digitalbits/upgrade_entry_meta.rb +20 -0
  224. data/lib/digitalbits-base.rb +51 -0
  225. data/lib/digitalbits/account_flags.rb +26 -0
  226. data/lib/digitalbits/asset.rb +81 -0
  227. data/lib/digitalbits/base.rb +1 -0
  228. data/lib/digitalbits/claim_predicate.rb +197 -0
  229. data/lib/digitalbits/compat.rb +9 -0
  230. data/lib/digitalbits/concerns/transaction.rb +50 -0
  231. data/lib/digitalbits/convert.rb +32 -0
  232. data/lib/digitalbits/dsl.rb +93 -0
  233. data/lib/digitalbits/ext/xdr.rb +50 -0
  234. data/lib/digitalbits/factories.rb +59 -0
  235. data/lib/digitalbits/fee_bump_transaction.rb +21 -0
  236. data/lib/digitalbits/key_pair.rb +126 -0
  237. data/lib/digitalbits/ledger_key.rb +32 -0
  238. data/lib/digitalbits/muxed_account.rb +16 -0
  239. data/lib/digitalbits/networks.rb +43 -0
  240. data/lib/digitalbits/operation.rb +603 -0
  241. data/lib/digitalbits/path_payment_strict_receive_result.rb +16 -0
  242. data/lib/digitalbits/price.rb +39 -0
  243. data/lib/digitalbits/signer_key.rb +46 -0
  244. data/lib/digitalbits/thresholds.rb +37 -0
  245. data/lib/digitalbits/transaction.rb +37 -0
  246. data/lib/digitalbits/transaction_builder.rb +166 -0
  247. data/lib/digitalbits/transaction_envelope.rb +35 -0
  248. data/lib/digitalbits/transaction_v0.rb +43 -0
  249. data/lib/digitalbits/trust_line_flags.rb +53 -0
  250. data/lib/digitalbits/util/strkey.rb +70 -0
  251. data/lib/digitalbits/version.rb +3 -0
  252. 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