open-core 0.3.0

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 (175) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.travis.yml +15 -0
  4. data/.yardopts +8 -0
  5. data/CONTRIBUTING.md +48 -0
  6. data/Gemfile +15 -0
  7. data/Guardfile +5 -0
  8. data/LICENSE.txt +202 -0
  9. data/README.md +83 -0
  10. data/Rakefile +4 -0
  11. data/examples/create_account.rb +26 -0
  12. data/examples/low_level_transaction_post.rb +46 -0
  13. data/examples/mid_level_transaction_post.rb +33 -0
  14. data/examples/non_native_payment.rb +60 -0
  15. data/examples/offer.rb +75 -0
  16. data/examples/transaction_merge.rb +23 -0
  17. data/generated/stellar-base-generated.rb +134 -0
  18. data/generated/stellar/account_entry.rb +53 -0
  19. data/generated/stellar/account_entry/ext.rb +24 -0
  20. data/generated/stellar/account_flags.rb +27 -0
  21. data/generated/stellar/account_merge_result.rb +26 -0
  22. data/generated/stellar/account_merge_result_code.rb +30 -0
  23. data/generated/stellar/allow_trust_op.rb +38 -0
  24. data/generated/stellar/allow_trust_op/asset.rb +33 -0
  25. data/generated/stellar/allow_trust_result.rb +25 -0
  26. data/generated/stellar/allow_trust_result_code.rb +31 -0
  27. data/generated/stellar/asset.rb +47 -0
  28. data/generated/stellar/asset/alpha_num12.rb +22 -0
  29. data/generated/stellar/asset/alpha_num4.rb +22 -0
  30. data/generated/stellar/asset_type.rb +24 -0
  31. data/generated/stellar/bucket_entry.rb +28 -0
  32. data/generated/stellar/bucket_entry_type.rb +22 -0
  33. data/generated/stellar/change_trust_op.rb +22 -0
  34. data/generated/stellar/change_trust_result.rb +25 -0
  35. data/generated/stellar/change_trust_result_code.rb +30 -0
  36. data/generated/stellar/claim_offer_atom.rb +33 -0
  37. data/generated/stellar/create_account_op.rb +20 -0
  38. data/generated/stellar/create_account_result.rb +25 -0
  39. data/generated/stellar/create_account_result_code.rb +32 -0
  40. data/generated/stellar/create_passive_offer_op.rb +24 -0
  41. data/generated/stellar/crypto_key_type.rb +20 -0
  42. data/generated/stellar/decorated_signature.rb +20 -0
  43. data/generated/stellar/dont_have.rb +20 -0
  44. data/generated/stellar/envelope_type.rb +22 -0
  45. data/generated/stellar/error.rb +20 -0
  46. data/generated/stellar/hello.rb +26 -0
  47. data/generated/stellar/inflation_payout.rb +20 -0
  48. data/generated/stellar/inflation_result.rb +26 -0
  49. data/generated/stellar/inflation_result_code.rb +24 -0
  50. data/generated/stellar/ledger_entry.rb +44 -0
  51. data/generated/stellar/ledger_entry/data.rb +33 -0
  52. data/generated/stellar/ledger_entry/ext.rb +24 -0
  53. data/generated/stellar/ledger_entry_change.rb +31 -0
  54. data/generated/stellar/ledger_entry_change_type.rb +24 -0
  55. data/generated/stellar/ledger_entry_type.rb +24 -0
  56. data/generated/stellar/ledger_header.rb +65 -0
  57. data/generated/stellar/ledger_header/ext.rb +24 -0
  58. data/generated/stellar/ledger_header_history_entry.rb +33 -0
  59. data/generated/stellar/ledger_header_history_entry/ext.rb +24 -0
  60. data/generated/stellar/ledger_key.rb +50 -0
  61. data/generated/stellar/ledger_key/account.rb +20 -0
  62. data/generated/stellar/ledger_key/offer.rb +22 -0
  63. data/generated/stellar/ledger_key/trust_line.rb +22 -0
  64. data/generated/stellar/ledger_upgrade.rb +27 -0
  65. data/generated/stellar/ledger_upgrade_type.rb +22 -0
  66. data/generated/stellar/manage_offer_effect.rb +24 -0
  67. data/generated/stellar/manage_offer_op.rb +28 -0
  68. data/generated/stellar/manage_offer_result.rb +26 -0
  69. data/generated/stellar/manage_offer_result_code.rb +48 -0
  70. data/generated/stellar/manage_offer_success_result.rb +34 -0
  71. data/generated/stellar/manage_offer_success_result/offer.rb +30 -0
  72. data/generated/stellar/memo.rb +38 -0
  73. data/generated/stellar/memo_type.rb +28 -0
  74. data/generated/stellar/message_type.rb +45 -0
  75. data/generated/stellar/offer_entry.rb +49 -0
  76. data/generated/stellar/offer_entry/ext.rb +24 -0
  77. data/generated/stellar/offer_entry_flags.rb +21 -0
  78. data/generated/stellar/operation.rb +51 -0
  79. data/generated/stellar/operation/body.rb +60 -0
  80. data/generated/stellar/operation_meta.rb +18 -0
  81. data/generated/stellar/operation_result.rb +53 -0
  82. data/generated/stellar/operation_result/tr.rb +61 -0
  83. data/generated/stellar/operation_result_code.rb +25 -0
  84. data/generated/stellar/operation_type.rb +38 -0
  85. data/generated/stellar/path_payment_op.rb +32 -0
  86. data/generated/stellar/path_payment_result.rb +34 -0
  87. data/generated/stellar/path_payment_result/success.rb +22 -0
  88. data/generated/stellar/path_payment_result_code.rb +45 -0
  89. data/generated/stellar/payment_op.rb +22 -0
  90. data/generated/stellar/payment_result.rb +25 -0
  91. data/generated/stellar/payment_result_code.rb +39 -0
  92. data/generated/stellar/peer_address.rb +22 -0
  93. data/generated/stellar/price.rb +20 -0
  94. data/generated/stellar/public_key.rb +23 -0
  95. data/generated/stellar/scp_ballot.rb +20 -0
  96. data/generated/stellar/scp_envelope.rb +20 -0
  97. data/generated/stellar/scp_nomination.rb +22 -0
  98. data/generated/stellar/scp_quorum_set.rb +22 -0
  99. data/generated/stellar/scp_statement.rb +59 -0
  100. data/generated/stellar/scp_statement/pledges.rb +64 -0
  101. data/generated/stellar/scp_statement/pledges/confirm.rb +28 -0
  102. data/generated/stellar/scp_statement/pledges/externalize.rb +28 -0
  103. data/generated/stellar/scp_statement/pledges/prepare.rb +32 -0
  104. data/generated/stellar/scp_statement_type.rb +26 -0
  105. data/generated/stellar/set_options_op.rb +41 -0
  106. data/generated/stellar/set_options_result.rb +25 -0
  107. data/generated/stellar/set_options_result_code.rb +38 -0
  108. data/generated/stellar/signer.rb +20 -0
  109. data/generated/stellar/simple_payment_result.rb +22 -0
  110. data/generated/stellar/stellar_message.rb +66 -0
  111. data/generated/stellar/stellar_value.rb +40 -0
  112. data/generated/stellar/stellar_value/ext.rb +24 -0
  113. data/generated/stellar/threshold_indexes.rb +26 -0
  114. data/generated/stellar/time_bounds.rb +20 -0
  115. data/generated/stellar/transaction.rb +50 -0
  116. data/generated/stellar/transaction/ext.rb +24 -0
  117. data/generated/stellar/transaction_envelope.rb +20 -0
  118. data/generated/stellar/transaction_history_entry.rb +33 -0
  119. data/generated/stellar/transaction_history_entry/ext.rb +24 -0
  120. data/generated/stellar/transaction_history_result_entry.rb +33 -0
  121. data/generated/stellar/transaction_history_result_entry/ext.rb +24 -0
  122. data/generated/stellar/transaction_meta.rb +31 -0
  123. data/generated/stellar/transaction_meta/v0.rb +22 -0
  124. data/generated/stellar/transaction_result.rb +43 -0
  125. data/generated/stellar/transaction_result/ext.rb +24 -0
  126. data/generated/stellar/transaction_result/result.rb +30 -0
  127. data/generated/stellar/transaction_result_code.rb +45 -0
  128. data/generated/stellar/transaction_result_pair.rb +20 -0
  129. data/generated/stellar/transaction_result_set.rb +18 -0
  130. data/generated/stellar/transaction_set.rb +20 -0
  131. data/generated/stellar/trust_line_entry.rb +41 -0
  132. data/generated/stellar/trust_line_entry/ext.rb +24 -0
  133. data/generated/stellar/trust_line_flags.rb +21 -0
  134. data/lib/stellar-base.rb +32 -0
  135. data/lib/stellar/account_flags.rb +28 -0
  136. data/lib/stellar/asset.rb +69 -0
  137. data/lib/stellar/base.rb +1 -0
  138. data/lib/stellar/base/version.rb +5 -0
  139. data/lib/stellar/convert.rb +32 -0
  140. data/lib/stellar/key_pair.rb +112 -0
  141. data/lib/stellar/networks.rb +45 -0
  142. data/lib/stellar/operation.rb +304 -0
  143. data/lib/stellar/path_payment_result.rb +17 -0
  144. data/lib/stellar/price.rb +32 -0
  145. data/lib/stellar/thresholds.rb +39 -0
  146. data/lib/stellar/transaction.rb +170 -0
  147. data/lib/stellar/transaction_envelope.rb +32 -0
  148. data/lib/stellar/util/continued_fraction.rb +96 -0
  149. data/lib/stellar/util/strkey.rb +43 -0
  150. data/open-core.gemspec +37 -0
  151. data/spec/lib/stellar/account_flags_spec.rb +19 -0
  152. data/spec/lib/stellar/asset_spec.rb +45 -0
  153. data/spec/lib/stellar/convert_spec.rb +61 -0
  154. data/spec/lib/stellar/key_pair_spec.rb +238 -0
  155. data/spec/lib/stellar/networks_spec.rb +77 -0
  156. data/spec/lib/stellar/path_payment_result_spec.rb +95 -0
  157. data/spec/lib/stellar/price_spec.rb +34 -0
  158. data/spec/lib/stellar/thresholds_spec.rb +62 -0
  159. data/spec/lib/stellar/transaction_envelope_spec.rb +93 -0
  160. data/spec/lib/stellar/transaction_spec.rb +54 -0
  161. data/spec/lib/stellar/util/strkey_spec.rb +46 -0
  162. data/spec/spec_helper.rb +16 -0
  163. data/spec/support/matchers/be_strkey.rb +9 -0
  164. data/spec/support/matchers/eq_bytes.rb +5 -0
  165. data/spec/support/matchers/have_length.rb +5 -0
  166. data/tasks/rspec.rake +6 -0
  167. data/tasks/travis.rake +1 -0
  168. data/tasks/xdr.rake +50 -0
  169. data/xdr/Stellar-SCP.x +87 -0
  170. data/xdr/Stellar-ledger-entries.x +222 -0
  171. data/xdr/Stellar-ledger.x +231 -0
  172. data/xdr/Stellar-overlay.x +87 -0
  173. data/xdr/Stellar-transaction.x +670 -0
  174. data/xdr/Stellar-types.x +34 -0
  175. metadata +444 -0
@@ -0,0 +1,31 @@
1
+ # This code was automatically generated using xdrgen
2
+ # DO NOT EDIT or your changes may be overwritten
3
+
4
+ require 'xdr'
5
+
6
+ # === xdr source ============================================================
7
+ #
8
+ # union TransactionMeta switch (int v)
9
+ # {
10
+ # case 0:
11
+ # struct
12
+ # {
13
+ # LedgerEntryChanges changes;
14
+ # OperationMeta operations<>;
15
+ # } v0;
16
+ # };
17
+ #
18
+ # ===========================================================================
19
+ module Stellar
20
+ class TransactionMeta < XDR::Union
21
+ include XDR::Namespace
22
+
23
+ autoload :V0
24
+
25
+ switch_on XDR::Int, :v
26
+
27
+ switch 0, :v0
28
+
29
+ attribute :v0, V0
30
+ end
31
+ end
@@ -0,0 +1,22 @@
1
+ # This code was automatically generated using xdrgen
2
+ # DO NOT EDIT or your changes may be overwritten
3
+
4
+ require 'xdr'
5
+
6
+ # === xdr source ============================================================
7
+ #
8
+ # struct
9
+ # {
10
+ # LedgerEntryChanges changes;
11
+ # OperationMeta operations<>;
12
+ # }
13
+ #
14
+ # ===========================================================================
15
+ module Stellar
16
+ class TransactionMeta
17
+ class V0 < XDR::Struct
18
+ attribute :changes, LedgerEntryChanges
19
+ attribute :operations, XDR::VarArray[OperationMeta]
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,43 @@
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 TransactionResult
9
+ # {
10
+ # int64 feeCharged; // actual fee charged for the transaction
11
+ #
12
+ # union switch (TransactionResultCode code)
13
+ # {
14
+ # case txSUCCESS:
15
+ # case txFAILED:
16
+ # OperationResult results<>;
17
+ # default:
18
+ # void;
19
+ # }
20
+ # result;
21
+ #
22
+ # // reserved for future use
23
+ # union switch (int v)
24
+ # {
25
+ # case 0:
26
+ # void;
27
+ # }
28
+ # ext;
29
+ # };
30
+ #
31
+ # ===========================================================================
32
+ module Stellar
33
+ class TransactionResult < XDR::Struct
34
+ include XDR::Namespace
35
+
36
+ autoload :Result
37
+ autoload :Ext
38
+
39
+ attribute :fee_charged, Int64
40
+ attribute :result, Result
41
+ attribute :ext, Ext
42
+ end
43
+ end
@@ -0,0 +1,24 @@
1
+ # This code was automatically generated using xdrgen
2
+ # DO NOT EDIT or your changes may be overwritten
3
+
4
+ require 'xdr'
5
+
6
+ # === xdr source ============================================================
7
+ #
8
+ # union switch (int v)
9
+ # {
10
+ # case 0:
11
+ # void;
12
+ # }
13
+ #
14
+ # ===========================================================================
15
+ module Stellar
16
+ class TransactionResult
17
+ class Ext < XDR::Union
18
+ switch_on XDR::Int, :v
19
+
20
+ switch 0
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,30 @@
1
+ # This code was automatically generated using xdrgen
2
+ # DO NOT EDIT or your changes may be overwritten
3
+
4
+ require 'xdr'
5
+
6
+ # === xdr source ============================================================
7
+ #
8
+ # union switch (TransactionResultCode code)
9
+ # {
10
+ # case txSUCCESS:
11
+ # case txFAILED:
12
+ # OperationResult results<>;
13
+ # default:
14
+ # void;
15
+ # }
16
+ #
17
+ # ===========================================================================
18
+ module Stellar
19
+ class TransactionResult
20
+ class Result < XDR::Union
21
+ switch_on TransactionResultCode, :code
22
+
23
+ switch :tx_success, :results
24
+ switch :tx_failed, :results
25
+ switch :default
26
+
27
+ attribute :results, XDR::VarArray[OperationResult]
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,45 @@
1
+ # This code was automatically generated using xdrgen
2
+ # DO NOT EDIT or your changes may be overwritten
3
+
4
+ require 'xdr'
5
+
6
+ # === xdr source ============================================================
7
+ #
8
+ # enum TransactionResultCode
9
+ # {
10
+ # txSUCCESS = 0, // all operations succeeded
11
+ #
12
+ # txFAILED = -1, // one of the operations failed (none were applied)
13
+ #
14
+ # txTOO_EARLY = -2, // ledger closeTime before minTime
15
+ # txTOO_LATE = -3, // ledger closeTime after maxTime
16
+ # txMISSING_OPERATION = -4, // no operation was specified
17
+ # txBAD_SEQ = -5, // sequence number does not match source account
18
+ #
19
+ # txBAD_AUTH = -6, // not enough signatures to perform transaction
20
+ # txINSUFFICIENT_BALANCE = -7, // fee would bring account below reserve
21
+ # txNO_ACCOUNT = -8, // source account not found
22
+ # txINSUFFICIENT_FEE = -9, // fee is too small
23
+ # txBAD_AUTH_EXTRA = -10, // too many signatures on transaction
24
+ # txINTERNAL_ERROR = -11 // an unknown error occured
25
+ # };
26
+ #
27
+ # ===========================================================================
28
+ module Stellar
29
+ class TransactionResultCode < XDR::Enum
30
+ member :tx_success, 0
31
+ member :tx_failed, -1
32
+ member :tx_too_early, -2
33
+ member :tx_too_late, -3
34
+ member :tx_missing_operation, -4
35
+ member :tx_bad_seq, -5
36
+ member :tx_bad_auth, -6
37
+ member :tx_insufficient_balance, -7
38
+ member :tx_no_account, -8
39
+ member :tx_insufficient_fee, -9
40
+ member :tx_bad_auth_extra, -10
41
+ member :tx_internal_error, -11
42
+
43
+ seal
44
+ end
45
+ end
@@ -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 TransactionResultPair
9
+ # {
10
+ # Hash transactionHash;
11
+ # TransactionResult result; // result for the transaction
12
+ # };
13
+ #
14
+ # ===========================================================================
15
+ module Stellar
16
+ class TransactionResultPair < XDR::Struct
17
+ attribute :transaction_hash, Hash
18
+ attribute :result, TransactionResult
19
+ end
20
+ end
@@ -0,0 +1,18 @@
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 TransactionResultSet
9
+ # {
10
+ # TransactionResultPair results<MAX_TX_PER_LEDGER>;
11
+ # };
12
+ #
13
+ # ===========================================================================
14
+ module Stellar
15
+ class TransactionResultSet < XDR::Struct
16
+ attribute :results, XDR::VarArray[TransactionResultPair, MAX_TX_PER_LEDGER]
17
+ end
18
+ end
@@ -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 TransactionSet
9
+ # {
10
+ # Hash previousLedgerHash;
11
+ # TransactionEnvelope txs<MAX_TX_PER_LEDGER>;
12
+ # };
13
+ #
14
+ # ===========================================================================
15
+ module Stellar
16
+ class TransactionSet < XDR::Struct
17
+ attribute :previous_ledger_hash, Hash
18
+ attribute :txs, XDR::VarArray[TransactionEnvelope, MAX_TX_PER_LEDGER]
19
+ end
20
+ end
@@ -0,0 +1,41 @@
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 TrustLineEntry
9
+ # {
10
+ # AccountID accountID; // account this trustline belongs to
11
+ # Asset asset; // type of asset (with issuer)
12
+ # int64 balance; // how much of this asset the user has.
13
+ # // Asset defines the unit for this;
14
+ #
15
+ # int64 limit; // balance cannot be above this
16
+ # uint32 flags; // see TrustLineFlags
17
+ #
18
+ # // reserved for future use
19
+ # union switch (int v)
20
+ # {
21
+ # case 0:
22
+ # void;
23
+ # }
24
+ # ext;
25
+ # };
26
+ #
27
+ # ===========================================================================
28
+ module Stellar
29
+ class TrustLineEntry < XDR::Struct
30
+ include XDR::Namespace
31
+
32
+ autoload :Ext
33
+
34
+ attribute :account_id, AccountID
35
+ attribute :asset, Asset
36
+ attribute :balance, Int64
37
+ attribute :limit, Int64
38
+ attribute :flags, Uint32
39
+ attribute :ext, Ext
40
+ end
41
+ end
@@ -0,0 +1,24 @@
1
+ # This code was automatically generated using xdrgen
2
+ # DO NOT EDIT or your changes may be overwritten
3
+
4
+ require 'xdr'
5
+
6
+ # === xdr source ============================================================
7
+ #
8
+ # union switch (int v)
9
+ # {
10
+ # case 0:
11
+ # void;
12
+ # }
13
+ #
14
+ # ===========================================================================
15
+ module Stellar
16
+ class TrustLineEntry
17
+ class Ext < XDR::Union
18
+ switch_on XDR::Int, :v
19
+
20
+ switch 0
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,21 @@
1
+ # This code was automatically generated using xdrgen
2
+ # DO NOT EDIT or your changes may be overwritten
3
+
4
+ require 'xdr'
5
+
6
+ # === xdr source ============================================================
7
+ #
8
+ # enum TrustLineFlags
9
+ # {
10
+ # // issuer has authorized account to perform transactions with its credit
11
+ # AUTHORIZED_FLAG = 1
12
+ # };
13
+ #
14
+ # ===========================================================================
15
+ module Stellar
16
+ class TrustLineFlags < XDR::Enum
17
+ member :authorized_flag, 1
18
+
19
+ seal
20
+ end
21
+ end
@@ -0,0 +1,32 @@
1
+ require 'xdr'
2
+ require 'rbnacl/libsodium'
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
+
8
+ # See ../generated for code-gen'ed files
9
+
10
+ silence_warnings do
11
+ require 'stellar-base-generated'
12
+ end
13
+ Stellar.load_all!
14
+
15
+ Stellar::ONE = 1_0000000
16
+
17
+
18
+ # extensions onto the generated files must be loaded manually, below
19
+
20
+ require_relative './stellar/account_flags'
21
+ require_relative './stellar/asset'
22
+ require_relative './stellar/key_pair'
23
+ require_relative './stellar/operation'
24
+ require_relative './stellar/path_payment_result'
25
+ require_relative './stellar/price'
26
+ require_relative './stellar/thresholds'
27
+ require_relative './stellar/transaction'
28
+ require_relative './stellar/transaction_envelope'
29
+ require_relative './stellar/util/strkey'
30
+ require_relative './stellar/util/continued_fraction'
31
+ require_relative './stellar/convert'
32
+ require_relative './stellar/networks'
@@ -0,0 +1,28 @@
1
+ module Stellar
2
+ class AccountFlags
3
+
4
+
5
+ #
6
+ # Converts an array of Stellar::AccountFlags members into
7
+ # an Integer suitable for use in a SetOptionsOp.
8
+ #
9
+ # @param flags=nil [Array<Stellar::AccountFlags>] the flags to combine
10
+ #
11
+ # @return [Fixnum] the combined result
12
+ def self.make_mask(flags=nil)
13
+ flags ||= []
14
+
15
+ flags.map(&:value).inject(&:|) || 0
16
+ end
17
+
18
+ #
19
+ # Converts an integer used in SetOptionsOp on the set/clear flag options
20
+ # into an array of Stellar::AccountFlags members
21
+ #
22
+ # @param combined [Fixnum]
23
+ # @return [Array<Stellar::AccountFlags>]
24
+ def self.parse_mask(combined)
25
+ members.values.select{|m| (m.value & combined) != 0}
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,69 @@
1
+ module Stellar
2
+ class Asset
3
+ def self.native
4
+ new(:asset_type_native)
5
+ end
6
+
7
+ def self.alphanum4(code, issuer)
8
+ raise ArgumentError, "Bad :issuer" unless issuer.is_a?(KeyPair)
9
+ code = normalize_code(code, 4)
10
+ an = AlphaNum4.new({asset_code:code, issuer:issuer.account_id})
11
+ new(:asset_type_credit_alphanum4, an)
12
+ end
13
+
14
+ def self.alphanum12(code, issuer)
15
+ raise ArgumentError, "Bad :issuer" unless issuer.is_a?(KeyPair)
16
+ code = normalize_code(code, 12)
17
+ an = AlphaNum12.new({asset_code:code, issuer:issuer.account_id})
18
+ new(:asset_type_credit_alphanum12, an)
19
+ end
20
+
21
+ def to_s
22
+ case switch
23
+ when AssetType.asset_type_native
24
+ "native"
25
+ when AssetType.asset_type_credit_alphanum4
26
+ anum = alpha_num4!
27
+ issuer_address = Stellar::Convert.pk_to_address(anum.issuer)
28
+ "#{anum.asset_code}/#{issuer_address}"
29
+ when AssetType.asset_type_credit_alphanum12
30
+ anum = alpha_num12!
31
+ issuer_address = Stellar::Convert.pk_to_address(anum.issuer)
32
+ "#{anum.asset_code}/#{issuer_address}"
33
+ end
34
+ end
35
+
36
+ def inspect
37
+ label = switch.to_s
38
+ "#<Stellar::Asset #{to_s}>"
39
+ end
40
+
41
+ def code
42
+ case switch
43
+ when AssetType.asset_type_credit_alphanum4
44
+ alpha_num4!.asset_code
45
+ when AssetType.asset_type_credit_alphanum12
46
+ alpha_num12!.asset_code
47
+ else
48
+ raise "#{switch} assets do not have a code"
49
+ end
50
+ end
51
+
52
+ def issuer
53
+ case switch
54
+ when AssetType.asset_type_credit_alphanum4
55
+ alpha_num4!.issuer
56
+ when AssetType.asset_type_credit_alphanum12
57
+ alpha_num12!.issuer
58
+ else
59
+ raise "#{switch} assets do not have a isuuer"
60
+ end
61
+ end
62
+
63
+ def self.normalize_code(code, length)
64
+ raise ArgumentError, "Invalid asset code: #{code}, must be <= #{length} bytes" if code.length > length
65
+
66
+ code.ljust(length, "\x00")
67
+ end
68
+ end
69
+ end