digitalbits-base 0.27.1

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