stellar-base 0.13.0 → 0.14.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 (37) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +11 -1
  4. data/generated/stellar-base-generated.rb +5 -1
  5. data/generated/stellar/account_merge_result_code.rb +6 -4
  6. data/generated/stellar/allow_trust_result_code.rb +1 -1
  7. data/generated/stellar/bump_sequence_op.rb +18 -0
  8. data/generated/stellar/bump_sequence_result.rb +25 -0
  9. data/generated/stellar/bump_sequence_result_code.rb +24 -0
  10. data/generated/stellar/change_trust_result_code.rb +2 -1
  11. data/generated/stellar/manage_data_op.rb +2 -2
  12. data/generated/stellar/manage_data_result_code.rb +6 -4
  13. data/generated/stellar/operation.rb +2 -0
  14. data/generated/stellar/operation/body.rb +4 -0
  15. data/generated/stellar/operation_result.rb +2 -0
  16. data/generated/stellar/operation_result/tr.rb +4 -0
  17. data/generated/stellar/operation_result_code.rb +7 -5
  18. data/generated/stellar/operation_type.rb +3 -1
  19. data/generated/stellar/stellar_message.rb +2 -2
  20. data/generated/stellar/transaction_envelope.rb +1 -2
  21. data/generated/stellar/transaction_meta.rb +4 -0
  22. data/generated/stellar/transaction_meta_v1.rb +20 -0
  23. data/generated/stellar/transaction_signature_payload.rb +6 -4
  24. data/generated/stellar/transaction_signature_payload/tagged_transaction.rb +2 -2
  25. data/lib/stellar/base/version.rb +1 -1
  26. data/lib/stellar/operation.rb +18 -2
  27. data/lib/stellar/transaction.rb +6 -0
  28. data/lib/stellar/util/strkey.rb +4 -2
  29. data/ruby-stellar-base.gemspec +1 -1
  30. data/spec/lib/stellar/operation_spec.rb +27 -0
  31. data/spec/lib/stellar/util/strkey_spec.rb +11 -3
  32. data/tasks/xdr.rake +1 -1
  33. data/xdr/Stellar-ledger-entries.x +1 -1
  34. data/xdr/Stellar-ledger.x +10 -0
  35. data/xdr/Stellar-overlay.x +1 -1
  36. data/xdr/Stellar-transaction.x +63 -23
  37. metadata +8 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b2c8c890214d963a628202f239db08ba7bab26a5
4
- data.tar.gz: b13f3cd18aaf12049b639eea8b0d5387f18d87d0
3
+ metadata.gz: 6d155c06a6614979a0ea9eba7e5dcd903066c724
4
+ data.tar.gz: 0c64ccb007896ef7ce617b19aff2d542f9fe40cb
5
5
  SHA512:
6
- metadata.gz: 89caa5c6ea3b10c767a149a00f5dc87bad11f102b459d7c713107cc3ace55d1c3a638354c56f8127f943f9388b8a8984102eaf91e83913c5d3edccc6cedbab2b
7
- data.tar.gz: ecc7b38a19820743379fd2da53fcdc1fb38fdd4d6202aba4a25ffbc9b6577e2234084f2a9cddf731db1eb7ef876b7d48a576613dc4140f4ccbb4909588c63a39
6
+ metadata.gz: 00a096af9c978b25848d9a2efd572cc279e52e4860c5db26dee72a7ab954693b09b9e5178b6d63f1c0ff977de8ea0ee83cfd07c58332ce0045b67dbf86eb2706
7
+ data.tar.gz: f19a0bad6a1489411bb673ecf060a5232aa3c76ee029f6f24c901769501c709dc3058c693bb19fc4ba2defba259b24faa55b844e66b76c8ef5ce8d536b4d89d4
data/.gitignore CHANGED
@@ -14,3 +14,4 @@
14
14
  /.vscode
15
15
  mkmf.log
16
16
  .DS_Store
17
+ .idea
@@ -6,7 +6,17 @@ file. This project adheres to [Semantic Versioning](http://semver.org/).
6
6
  As this project is pre 1.0, breaking changes may happen for minor version
7
7
  bumps. A breaking change will get clearly notified in this log.
8
8
 
9
- ## [unreleased](https://github.com/stellar/ruby-stellar-base/compare/v0.13.0...master)
9
+ ## [unreleased](https://github.com/stellar/ruby-stellar-base/compare/v0.14.0...master)
10
+
11
+ ## [0.14.0](https://github.com/stellar/ruby-stellar-base/compare/v0.13.0...v0.14.0)
12
+
13
+ ### Added
14
+ - We now support the bump sequence operation with `Operation.bump_sequence`.
15
+
16
+ ### Changed
17
+ - Update XDR definitions for stellar-core 0.10.0 support
18
+ - `Operation.change_trust` learned how to use a default for the `:limit` parameter
19
+ - `StrKey` learned about new version bytes `pre_auth_tx` and `hash_x`
10
20
 
11
21
  ## [0.13.0](https://github.com/stellar/ruby-stellar-base/compare/v0.12.0...v0.13.0)
12
22
 
@@ -32,7 +32,7 @@ module Stellar
32
32
  Thresholds = XDR::Opaque[4]
33
33
  String32 = XDR::String[32]
34
34
  String64 = XDR::String[64]
35
- SequenceNumber = Uint64
35
+ SequenceNumber = Int64
36
36
  DataValue = XDR::VarOpaque[64]
37
37
  autoload :AssetType
38
38
  autoload :Asset
@@ -67,6 +67,7 @@ module Stellar
67
67
  autoload :ChangeTrustOp
68
68
  autoload :AllowTrustOp
69
69
  autoload :ManageDataOp
70
+ autoload :BumpSequenceOp
70
71
  autoload :Operation
71
72
  autoload :MemoType
72
73
  autoload :Memo
@@ -99,6 +100,8 @@ module Stellar
99
100
  autoload :InflationResult
100
101
  autoload :ManageDataResultCode
101
102
  autoload :ManageDataResult
103
+ autoload :BumpSequenceResultCode
104
+ autoload :BumpSequenceResult
102
105
  autoload :OperationResultCode
103
106
  autoload :OperationResult
104
107
  autoload :TransactionResultCode
@@ -128,6 +131,7 @@ module Stellar
128
131
  autoload :LedgerEntryChange
129
132
  LedgerEntryChanges = XDR::VarArray[LedgerEntryChange]
130
133
  autoload :OperationMeta
134
+ autoload :TransactionMetaV1
131
135
  autoload :TransactionMeta
132
136
  end
133
137
  module Stellar
@@ -10,10 +10,11 @@ require 'xdr'
10
10
  # // codes considered as "success" for the operation
11
11
  # ACCOUNT_MERGE_SUCCESS = 0,
12
12
  # // codes considered as "failure" for the operation
13
- # ACCOUNT_MERGE_MALFORMED = -1, // can't merge onto itself
14
- # ACCOUNT_MERGE_NO_ACCOUNT = -2, // destination does not exist
15
- # ACCOUNT_MERGE_IMMUTABLE_SET = -3, // source account has AUTH_IMMUTABLE set
16
- # ACCOUNT_MERGE_HAS_SUB_ENTRIES = -4 // account has trust lines/offers
13
+ # ACCOUNT_MERGE_MALFORMED = -1, // can't merge onto itself
14
+ # ACCOUNT_MERGE_NO_ACCOUNT = -2, // destination does not exist
15
+ # ACCOUNT_MERGE_IMMUTABLE_SET = -3, // source account has AUTH_IMMUTABLE set
16
+ # ACCOUNT_MERGE_HAS_SUB_ENTRIES = -4, // account has trust lines/offers
17
+ # ACCOUNT_MERGE_SEQNUM_TOO_FAR = -5 // sequence number is over max allowed
17
18
  # };
18
19
  #
19
20
  # ===========================================================================
@@ -24,6 +25,7 @@ module Stellar
24
25
  member :account_merge_no_account, -2
25
26
  member :account_merge_immutable_set, -3
26
27
  member :account_merge_has_sub_entries, -4
28
+ member :account_merge_seqnum_too_far, -5
27
29
 
28
30
  seal
29
31
  end
@@ -14,7 +14,7 @@ require 'xdr'
14
14
  # ALLOW_TRUST_NO_TRUST_LINE = -2, // trustor does not have a trustline
15
15
  # // source account does not require trust
16
16
  # ALLOW_TRUST_TRUST_NOT_REQUIRED = -3,
17
- # ALLOW_TRUST_CANT_REVOKE = -4, // source account can't revoke trust,
17
+ # ALLOW_TRUST_CANT_REVOKE = -4, // source account can't revoke trust,
18
18
  # ALLOW_TRUST_SELF_NOT_ALLOWED = -5 // trusting self is not allowed
19
19
  # };
20
20
  #
@@ -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 BumpSequenceOp
9
+ # {
10
+ # SequenceNumber bumpTo;
11
+ # };
12
+ #
13
+ # ===========================================================================
14
+ module Stellar
15
+ class BumpSequenceOp < XDR::Struct
16
+ attribute :bump_to, SequenceNumber
17
+ end
18
+ end
@@ -0,0 +1,25 @@
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 BumpSequenceResult switch (BumpSequenceResultCode code)
9
+ # {
10
+ # case BUMP_SEQUENCE_SUCCESS:
11
+ # void;
12
+ # default:
13
+ # void;
14
+ # };
15
+ #
16
+ # ===========================================================================
17
+ module Stellar
18
+ class BumpSequenceResult < XDR::Union
19
+ switch_on BumpSequenceResultCode, :code
20
+
21
+ switch :bump_sequence_success
22
+ switch :default
23
+
24
+ end
25
+ 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
+ # enum BumpSequenceResultCode
9
+ # {
10
+ # // codes considered as "success" for the operation
11
+ # BUMP_SEQUENCE_SUCCESS = 0,
12
+ # // codes considered as "failure" for the operation
13
+ # BUMP_SEQUENCE_BAD_SEQ = -1 // `bumpTo` is not within bounds
14
+ # };
15
+ #
16
+ # ===========================================================================
17
+ module Stellar
18
+ class BumpSequenceResultCode < XDR::Enum
19
+ member :bump_sequence_success, 0
20
+ member :bump_sequence_bad_seq, -1
21
+
22
+ seal
23
+ end
24
+ end
@@ -14,7 +14,8 @@ require 'xdr'
14
14
  # CHANGE_TRUST_NO_ISSUER = -2, // could not find issuer
15
15
  # CHANGE_TRUST_INVALID_LIMIT = -3, // cannot drop limit below balance
16
16
  # // cannot create with a limit of 0
17
- # CHANGE_TRUST_LOW_RESERVE = -4, // not enough funds to create a new trust line,
17
+ # CHANGE_TRUST_LOW_RESERVE =
18
+ # -4, // not enough funds to create a new trust line,
18
19
  # CHANGE_TRUST_SELF_NOT_ALLOWED = -5 // trusting self is not allowed
19
20
  # };
20
21
  #
@@ -7,8 +7,8 @@ require 'xdr'
7
7
  #
8
8
  # struct ManageDataOp
9
9
  # {
10
- # string64 dataName;
11
- # DataValue* dataValue; // set to null to clear
10
+ # string64 dataName;
11
+ # DataValue* dataValue; // set to null to clear
12
12
  # };
13
13
  #
14
14
  # ===========================================================================
@@ -10,10 +10,12 @@ require 'xdr'
10
10
  # // codes considered as "success" for the operation
11
11
  # MANAGE_DATA_SUCCESS = 0,
12
12
  # // codes considered as "failure" for the operation
13
- # MANAGE_DATA_NOT_SUPPORTED_YET = -1, // The network hasn't moved to this protocol change yet
14
- # MANAGE_DATA_NAME_NOT_FOUND = -2, // Trying to remove a Data Entry that isn't there
15
- # MANAGE_DATA_LOW_RESERVE = -3, // not enough funds to create a new Data Entry
16
- # MANAGE_DATA_INVALID_NAME = -4 // Name not a valid string
13
+ # MANAGE_DATA_NOT_SUPPORTED_YET =
14
+ # -1, // The network hasn't moved to this protocol change yet
15
+ # MANAGE_DATA_NAME_NOT_FOUND =
16
+ # -2, // Trying to remove a Data Entry that isn't there
17
+ # MANAGE_DATA_LOW_RESERVE = -3, // not enough funds to create a new Data Entry
18
+ # MANAGE_DATA_INVALID_NAME = -4 // Name not a valid string
17
19
  # };
18
20
  #
19
21
  # ===========================================================================
@@ -36,6 +36,8 @@ require 'xdr'
36
36
  # void;
37
37
  # case MANAGE_DATA:
38
38
  # ManageDataOp manageDataOp;
39
+ # case BUMP_SEQUENCE:
40
+ # BumpSequenceOp bumpSequenceOp;
39
41
  # }
40
42
  # body;
41
43
  # };
@@ -29,6 +29,8 @@ require 'xdr'
29
29
  # void;
30
30
  # case MANAGE_DATA:
31
31
  # ManageDataOp manageDataOp;
32
+ # case BUMP_SEQUENCE:
33
+ # BumpSequenceOp bumpSequenceOp;
32
34
  # }
33
35
  #
34
36
  # ===========================================================================
@@ -48,6 +50,7 @@ module Stellar
48
50
  switch :account_merge, :destination
49
51
  switch :inflation
50
52
  switch :manage_data, :manage_data_op
53
+ switch :bump_sequence, :bump_sequence_op
51
54
 
52
55
  attribute :create_account_op, CreateAccountOp
53
56
  attribute :payment_op, PaymentOp
@@ -59,6 +62,7 @@ module Stellar
59
62
  attribute :allow_trust_op, AllowTrustOp
60
63
  attribute :destination, AccountID
61
64
  attribute :manage_data_op, ManageDataOp
65
+ attribute :bump_sequence_op, BumpSequenceOp
62
66
  end
63
67
  end
64
68
  end
@@ -32,6 +32,8 @@ require 'xdr'
32
32
  # InflationResult inflationResult;
33
33
  # case MANAGE_DATA:
34
34
  # ManageDataResult manageDataResult;
35
+ # case BUMP_SEQUENCE:
36
+ # BumpSequenceResult bumpSeqResult;
35
37
  # }
36
38
  # tr;
37
39
  # default:
@@ -29,6 +29,8 @@ require 'xdr'
29
29
  # InflationResult inflationResult;
30
30
  # case MANAGE_DATA:
31
31
  # ManageDataResult manageDataResult;
32
+ # case BUMP_SEQUENCE:
33
+ # BumpSequenceResult bumpSeqResult;
32
34
  # }
33
35
  #
34
36
  # ===========================================================================
@@ -48,6 +50,7 @@ module Stellar
48
50
  switch :account_merge, :account_merge_result
49
51
  switch :inflation, :inflation_result
50
52
  switch :manage_data, :manage_data_result
53
+ switch :bump_sequence, :bump_seq_result
51
54
 
52
55
  attribute :create_account_result, CreateAccountResult
53
56
  attribute :payment_result, PaymentResult
@@ -60,6 +63,7 @@ module Stellar
60
63
  attribute :account_merge_result, AccountMergeResult
61
64
  attribute :inflation_result, InflationResult
62
65
  attribute :manage_data_result, ManageDataResult
66
+ attribute :bump_seq_result, BumpSequenceResult
63
67
  end
64
68
  end
65
69
  end
@@ -9,16 +9,18 @@ require 'xdr'
9
9
  # {
10
10
  # opINNER = 0, // inner object result is valid
11
11
  #
12
- # opBAD_AUTH = -1, // too few valid signatures / wrong network
13
- # opNO_ACCOUNT = -2 // source account was not found
12
+ # opBAD_AUTH = -1, // too few valid signatures / wrong network
13
+ # opNO_ACCOUNT = -2, // source account was not found
14
+ # opNOT_SUPPORTED = -3 // operation not supported at this time
14
15
  # };
15
16
  #
16
17
  # ===========================================================================
17
18
  module Stellar
18
19
  class OperationResultCode < XDR::Enum
19
- member :op_inner, 0
20
- member :op_bad_auth, -1
21
- member :op_no_account, -2
20
+ member :op_inner, 0
21
+ member :op_bad_auth, -1
22
+ member :op_no_account, -2
23
+ member :op_not_supported, -3
22
24
 
23
25
  seal
24
26
  end
@@ -17,7 +17,8 @@ require 'xdr'
17
17
  # ALLOW_TRUST = 7,
18
18
  # ACCOUNT_MERGE = 8,
19
19
  # INFLATION = 9,
20
- # MANAGE_DATA = 10
20
+ # MANAGE_DATA = 10,
21
+ # BUMP_SEQUENCE = 11
21
22
  # };
22
23
  #
23
24
  # ===========================================================================
@@ -34,6 +35,7 @@ module Stellar
34
35
  member :account_merge, 8
35
36
  member :inflation, 9
36
37
  member :manage_data, 10
38
+ member :bump_sequence, 11
37
39
 
38
40
  seal
39
41
  end
@@ -18,7 +18,7 @@ require 'xdr'
18
18
  # case GET_PEERS:
19
19
  # void;
20
20
  # case PEERS:
21
- # PeerAddress peers<>;
21
+ # PeerAddress peers<100>;
22
22
  #
23
23
  # case GET_TX_SET:
24
24
  # uint256 txSetHash;
@@ -62,7 +62,7 @@ module Stellar
62
62
  attribute :hello, Hello
63
63
  attribute :auth, Auth
64
64
  attribute :dont_have, DontHave
65
- attribute :peers, XDR::VarArray[PeerAddress]
65
+ attribute :peers, XDR::VarArray[PeerAddress, 100]
66
66
  attribute :tx_set_hash, Uint256
67
67
  attribute :tx_set, TransactionSet
68
68
  attribute :transaction, TransactionEnvelope
@@ -10,8 +10,7 @@ require 'xdr'
10
10
  # Transaction tx;
11
11
  # /* Each decorated signature is a signature over the SHA256 hash of
12
12
  # * a TransactionSignaturePayload */
13
- # DecoratedSignature
14
- # signatures<20>;
13
+ # DecoratedSignature signatures<20>;
15
14
  # };
16
15
  #
17
16
  # ===========================================================================
@@ -9,6 +9,8 @@ require 'xdr'
9
9
  # {
10
10
  # case 0:
11
11
  # OperationMeta operations<>;
12
+ # case 1:
13
+ # TransactionMetaV1 v1;
12
14
  # };
13
15
  #
14
16
  # ===========================================================================
@@ -17,7 +19,9 @@ module Stellar
17
19
  switch_on XDR::Int, :v
18
20
 
19
21
  switch 0, :operations
22
+ switch 1, :v1
20
23
 
21
24
  attribute :operations, XDR::VarArray[OperationMeta]
25
+ attribute :v1, TransactionMetaV1
22
26
  end
23
27
  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 TransactionMetaV1
9
+ # {
10
+ # LedgerEntryChanges txChanges; // tx level changes if any
11
+ # OperationMeta operations<>; // meta for each operation
12
+ # };
13
+ #
14
+ # ===========================================================================
15
+ module Stellar
16
+ class TransactionMetaV1 < XDR::Struct
17
+ attribute :tx_changes, LedgerEntryChanges
18
+ attribute :operations, XDR::VarArray[OperationMeta]
19
+ end
20
+ end
@@ -5,14 +5,16 @@ require 'xdr'
5
5
 
6
6
  # === xdr source ============================================================
7
7
  #
8
- # struct TransactionSignaturePayload {
8
+ # struct TransactionSignaturePayload
9
+ # {
9
10
  # Hash networkId;
10
11
  # union switch (EnvelopeType type)
11
12
  # {
12
13
  # case ENVELOPE_TYPE_TX:
13
- # Transaction tx;
14
- # /* All other values of type are invalid */
15
- # } taggedTransaction;
14
+ # Transaction tx;
15
+ # /* All other values of type are invalid */
16
+ # }
17
+ # taggedTransaction;
16
18
  # };
17
19
  #
18
20
  # ===========================================================================
@@ -8,8 +8,8 @@ require 'xdr'
8
8
  # union switch (EnvelopeType type)
9
9
  # {
10
10
  # case ENVELOPE_TYPE_TX:
11
- # Transaction tx;
12
- # /* All other values of type are invalid */
11
+ # Transaction tx;
12
+ # /* All other values of type are invalid */
13
13
  # }
14
14
  #
15
15
  # ===========================================================================
@@ -1,5 +1,5 @@
1
1
  module Stellar
2
2
  module Base
3
- VERSION = "0.13.0"
3
+ VERSION = "0.14.0"
4
4
  end
5
5
  end
@@ -3,6 +3,7 @@ require 'bigdecimal'
3
3
  module Stellar
4
4
  class Operation
5
5
 
6
+ MAX_INT64 = 2**63 - 1
6
7
 
7
8
  #
8
9
  # Construct a new Stellar::Operation from the provided
@@ -115,13 +116,14 @@ module Stellar
115
116
  #
116
117
  # @param [Hash] attributes the attributes to create the operation with
117
118
  # @option attributes [Stellar::Currrency] :line the asset to trust
118
- # @option attributes [Fixnum] :limit the maximum amount to trust
119
+ # @option attributes [Fixnum] :limit the maximum amount to trust, defaults to max int64,
120
+ # if the limit is set to 0 it deletes the trustline.
119
121
  #
120
122
  # @return [Stellar::Operation] the built operation, containing a
121
123
  # Stellar::ChangeTrustOp body
122
124
  def self.change_trust(attributes={})
123
125
  line = Asset.send(*attributes[:line])
124
- limit =interpret_amount(attributes[:limit])
126
+ limit = attributes.key?(:limit) ? interpret_amount(attributes[:limit]) : MAX_INT64
125
127
 
126
128
  raise ArgumentError, "Bad :limit #{limit}" unless limit.is_a?(Integer)
127
129
 
@@ -306,6 +308,20 @@ module Stellar
306
308
  }))
307
309
  end
308
310
 
311
+ def self.bump_sequence(attributes={})
312
+ op = BumpSequenceOp.new()
313
+
314
+ bump_to = attributes[:bump_to]
315
+
316
+ raise ArgumentError, ":bump_to too big" unless bump_to <= MAX_INT64
317
+
318
+ op.bump_to = bump_to
319
+
320
+ return make(attributes.merge({
321
+ body:[:bump_sequence, op]
322
+ }))
323
+ end
324
+
309
325
  private
310
326
  def self.extract_amount(a)
311
327
  amount = interpret_amount(a.last)
@@ -67,6 +67,12 @@ module Stellar
67
67
  make :manage_data, attributes
68
68
  end
69
69
 
70
+ #
71
+ # @see Stellar::Operation.manage_data
72
+ def self.bump_sequence(attributes={})
73
+ make :bump_sequence, attributes
74
+ end
75
+
70
76
  #
71
77
  # Helper method to create a transaction with a single
72
78
  # operation of the provided type. See class methods
@@ -7,8 +7,10 @@ module Stellar
7
7
  class StrKey
8
8
 
9
9
  VERSION_BYTES = {
10
- account_id: [ 6 << 3].pack("C"), # Base32-encodes to 'G...'
11
- seed: [18 << 3].pack("C"), # Base32-encodes to 'S...'
10
+ account_id: [ 6 << 3].pack("C"), # Base32-encodes to 'G...'
11
+ seed: [18 << 3].pack("C"), # Base32-encodes to 'S...'
12
+ pre_auth_tx: [19 << 3].pack("C"), # Base32-encodes to 'T...'
13
+ hash_x: [23 << 3].pack("C") # Base32-encodes to 'X...'
12
14
  }
13
15
 
14
16
  def self.check_encode(version, byte_str)
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_dependency "activesupport", ">= 4.2.7"
24
24
 
25
25
  spec.add_development_dependency "bundler", "~> 1.7"
26
- spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "rake", "~> 12.0"
27
27
  spec.add_development_dependency "xdrgen"
28
28
  spec.add_development_dependency "rspec", "~> 3.1"
29
29
  spec.add_development_dependency "guard-rspec"
@@ -28,3 +28,30 @@ describe Stellar::Operation, ".manage_data" do
28
28
  end
29
29
 
30
30
  end
31
+
32
+ describe Stellar::Operation, ".change_trust" do
33
+
34
+ let(:issuer) { Stellar::KeyPair.from_address("GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7") }
35
+ let(:asset) { Stellar::Asset.alphanum4("USD", issuer) }
36
+
37
+ it "creates a ChangeTrustOp" do
38
+ op = Stellar::Operation.change_trust(line: [:alphanum4, "USD", issuer])
39
+ expect(op.body.value).to be_an_instance_of(Stellar::ChangeTrustOp)
40
+ expect(op.body.value.line).to eq(Stellar::Asset.alphanum4("USD", issuer))
41
+ expect(op.body.value.limit).to eq(9223372036854775807)
42
+ end
43
+
44
+ it "creates a ChangeTrustOp with limit" do
45
+ op = Stellar::Operation.change_trust(line: [:alphanum4, "USD", issuer], limit: 1234.75)
46
+ expect(op.body.value).to be_an_instance_of(Stellar::ChangeTrustOp)
47
+ expect(op.body.value.line).to eq(Stellar::Asset.alphanum4("USD", issuer))
48
+ expect(op.body.value.limit).to eq(12347500000)
49
+ end
50
+
51
+ it "throws ArgumentError for incorrect limit argument" do
52
+ expect {
53
+ Stellar::Operation.change_trust(line: [:alphanum4, "USD", issuer], limit: true)
54
+ }.to raise_error(ArgumentError)
55
+ end
56
+
57
+ end
@@ -2,13 +2,19 @@ require 'spec_helper'
2
2
 
3
3
  describe Stellar::Util::StrKey do
4
4
 
5
- subject{ Stellar::Util::StrKey }
5
+ subject{ Stellar::Util::StrKey }
6
6
 
7
7
  describe "#check_decode" do
8
8
  it "properly decodes" do
9
9
  expect(decode :seed, "SAAAAAAAAAADST3H").to eq_bytes("\x00\x00\x00\x00\x00\x00\x39")
10
10
  expect(decode :account_id, "GD777777777764TU").to eq_bytes("\xFF\xFF\xFF\xFF\xFF\xFF\xFF")
11
11
  expect(decode :account_id, "GBQWWBFLRP3BXZD5").to eq_bytes("\x61\x6b\x04\xab\x8b\xf6\x1b")
12
+ expect(decode :pre_auth_tx, "TBU2RRGLXH3E4VON").to eq_bytes("\x69\xa8\xc4\xcb\xb9\xf6\x4e")
13
+ expect(decode :hash_x, "XBU2RRGLXH3E4PNW").to eq_bytes("\x69\xa8\xc4\xcb\xb9\xf6\x4e")
14
+ end
15
+
16
+ it "raises an ArgumentError when an invalid version is provided" do
17
+ expect{ decode :floob, "SAAAAAAAAAADST3M" }.to raise_error(ArgumentError)
12
18
  end
13
19
 
14
20
  it "raises an ArgumentError if the decoded version byte does not match the expected value" do
@@ -17,7 +23,7 @@ subject{ Stellar::Util::StrKey }
17
23
  end
18
24
 
19
25
  it "raises an ArgumentError if the decoded value cannot be validated by the checksum" do
20
- expect{decode :seed, "SAAAAAAAAAADST3M"}.to raise_error(ArgumentError)
26
+ expect{ decode :seed, "SAAAAAAAAAADST3M" }.to raise_error(ArgumentError)
21
27
  end
22
28
 
23
29
  def decode(version, bytes)
@@ -25,11 +31,13 @@ subject{ Stellar::Util::StrKey }
25
31
  end
26
32
  end
27
33
 
28
- describe"#check_encode" do
34
+ describe "#check_encode" do
29
35
  it "properly encodes" do
30
36
  expect(encode :seed, "\x00\x00\x00\x00\x00\x00\x39").to eq("SAAAAAAAAAADST3H")
31
37
  expect(encode :account_id, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF").to eq("GD777777777764TU")
32
38
  expect(encode :account_id, "\x61\x6b\x04\xab\x8b\xf6\x1b").to eq("GBQWWBFLRP3BXZD5")
39
+ expect(encode :pre_auth_tx, "\x69\xa8\xc4\xcb\xb9\xf6\x4e").to eq_bytes("TBU2RRGLXH3E4VON")
40
+ expect(encode :hash_x, "\x69\xa8\xc4\xcb\xb9\xf6\x4e").to eq_bytes("XBU2RRGLXH3E4PNW")
33
41
  end
34
42
 
35
43
  it "raises an ArgumentError when an invalid version is provided" do
@@ -26,7 +26,7 @@ namespace :xdr do
26
26
 
27
27
  HAYASHI_XDR.each do |src|
28
28
  local_path = "xdr/" + File.basename(src)
29
- encoded = client.contents("stellar/stellar-core", path: src, ref: "prod").content
29
+ encoded = client.contents("stellar/stellar-core", path: src).content
30
30
  decoded = Base64.decode64 encoded
31
31
 
32
32
  IO.write(local_path, decoded)
@@ -11,7 +11,7 @@ typedef PublicKey AccountID;
11
11
  typedef opaque Thresholds[4];
12
12
  typedef string string32<32>;
13
13
  typedef string string64<64>;
14
- typedef uint64 SequenceNumber;
14
+ typedef int64 SequenceNumber;
15
15
  typedef opaque DataValue<64>;
16
16
 
17
17
  enum AssetType
@@ -265,9 +265,19 @@ struct OperationMeta
265
265
  LedgerEntryChanges changes;
266
266
  };
267
267
 
268
+ struct TransactionMetaV1
269
+ {
270
+ LedgerEntryChanges txChanges; // tx level changes if any
271
+ OperationMeta operations<>; // meta for each operation
272
+ };
273
+
274
+ // this is the meta produced when applying transactions
275
+ // it does not include pre-apply updates such as fees
268
276
  union TransactionMeta switch (int v)
269
277
  {
270
278
  case 0:
271
279
  OperationMeta operations<>;
280
+ case 1:
281
+ TransactionMetaV1 v1;
272
282
  };
273
283
  }
@@ -112,7 +112,7 @@ case DONT_HAVE:
112
112
  case GET_PEERS:
113
113
  void;
114
114
  case PEERS:
115
- PeerAddress peers<>;
115
+ PeerAddress peers<100>;
116
116
 
117
117
  case GET_TX_SET:
118
118
  uint256 txSetHash;
@@ -25,7 +25,8 @@ enum OperationType
25
25
  ALLOW_TRUST = 7,
26
26
  ACCOUNT_MERGE = 8,
27
27
  INFLATION = 9,
28
- MANAGE_DATA = 10
28
+ MANAGE_DATA = 10,
29
+ BUMP_SEQUENCE = 11
29
30
  };
30
31
 
31
32
  /* CreateAccount
@@ -207,8 +208,8 @@ Result: InflationResult
207
208
  */
208
209
 
209
210
  /* ManageData
210
- Adds, Updates, or Deletes a key value pair associated with a particular
211
- account.
211
+ Adds, Updates, or Deletes a key value pair associated with a particular
212
+ account.
212
213
 
213
214
  Threshold: med
214
215
 
@@ -217,8 +218,20 @@ Result: InflationResult
217
218
 
218
219
  struct ManageDataOp
219
220
  {
220
- string64 dataName;
221
- DataValue* dataValue; // set to null to clear
221
+ string64 dataName;
222
+ DataValue* dataValue; // set to null to clear
223
+ };
224
+
225
+ /* Bump Sequence
226
+
227
+ increases the sequence to a given level
228
+
229
+ Result: BumpSequenceResult
230
+ */
231
+
232
+ struct BumpSequenceOp
233
+ {
234
+ SequenceNumber bumpTo;
222
235
  };
223
236
 
224
237
  /* An operation is the lowest unit of work that a transaction does */
@@ -253,6 +266,8 @@ struct Operation
253
266
  void;
254
267
  case MANAGE_DATA:
255
268
  ManageDataOp manageDataOp;
269
+ case BUMP_SEQUENCE:
270
+ BumpSequenceOp bumpSequenceOp;
256
271
  }
257
272
  body;
258
273
  };
@@ -321,14 +336,16 @@ struct Transaction
321
336
  ext;
322
337
  };
323
338
 
324
- struct TransactionSignaturePayload {
339
+ struct TransactionSignaturePayload
340
+ {
325
341
  Hash networkId;
326
342
  union switch (EnvelopeType type)
327
343
  {
328
344
  case ENVELOPE_TYPE_TX:
329
- Transaction tx;
330
- /* All other values of type are invalid */
331
- } taggedTransaction;
345
+ Transaction tx;
346
+ /* All other values of type are invalid */
347
+ }
348
+ taggedTransaction;
332
349
  };
333
350
 
334
351
  /* A TransactionEnvelope wraps a transaction with signatures. */
@@ -337,8 +354,7 @@ struct TransactionEnvelope
337
354
  Transaction tx;
338
355
  /* Each decorated signature is a signature over the SHA256 hash of
339
356
  * a TransactionSignaturePayload */
340
- DecoratedSignature
341
- signatures<20>;
357
+ DecoratedSignature signatures<20>;
342
358
  };
343
359
 
344
360
  /* Operation Results section */
@@ -545,7 +561,8 @@ enum ChangeTrustResultCode
545
561
  CHANGE_TRUST_NO_ISSUER = -2, // could not find issuer
546
562
  CHANGE_TRUST_INVALID_LIMIT = -3, // cannot drop limit below balance
547
563
  // cannot create with a limit of 0
548
- CHANGE_TRUST_LOW_RESERVE = -4, // not enough funds to create a new trust line,
564
+ CHANGE_TRUST_LOW_RESERVE =
565
+ -4, // not enough funds to create a new trust line,
549
566
  CHANGE_TRUST_SELF_NOT_ALLOWED = -5 // trusting self is not allowed
550
567
  };
551
568
 
@@ -568,7 +585,7 @@ enum AllowTrustResultCode
568
585
  ALLOW_TRUST_NO_TRUST_LINE = -2, // trustor does not have a trustline
569
586
  // source account does not require trust
570
587
  ALLOW_TRUST_TRUST_NOT_REQUIRED = -3,
571
- ALLOW_TRUST_CANT_REVOKE = -4, // source account can't revoke trust,
588
+ ALLOW_TRUST_CANT_REVOKE = -4, // source account can't revoke trust,
572
589
  ALLOW_TRUST_SELF_NOT_ALLOWED = -5 // trusting self is not allowed
573
590
  };
574
591
 
@@ -587,10 +604,11 @@ enum AccountMergeResultCode
587
604
  // codes considered as "success" for the operation
588
605
  ACCOUNT_MERGE_SUCCESS = 0,
589
606
  // codes considered as "failure" for the operation
590
- ACCOUNT_MERGE_MALFORMED = -1, // can't merge onto itself
591
- ACCOUNT_MERGE_NO_ACCOUNT = -2, // destination does not exist
592
- ACCOUNT_MERGE_IMMUTABLE_SET = -3, // source account has AUTH_IMMUTABLE set
593
- ACCOUNT_MERGE_HAS_SUB_ENTRIES = -4 // account has trust lines/offers
607
+ ACCOUNT_MERGE_MALFORMED = -1, // can't merge onto itself
608
+ ACCOUNT_MERGE_NO_ACCOUNT = -2, // destination does not exist
609
+ ACCOUNT_MERGE_IMMUTABLE_SET = -3, // source account has AUTH_IMMUTABLE set
610
+ ACCOUNT_MERGE_HAS_SUB_ENTRIES = -4, // account has trust lines/offers
611
+ ACCOUNT_MERGE_SEQNUM_TOO_FAR = -5 // sequence number is over max allowed
594
612
  };
595
613
 
596
614
  union AccountMergeResult switch (AccountMergeResultCode code)
@@ -632,10 +650,12 @@ enum ManageDataResultCode
632
650
  // codes considered as "success" for the operation
633
651
  MANAGE_DATA_SUCCESS = 0,
634
652
  // codes considered as "failure" for the operation
635
- MANAGE_DATA_NOT_SUPPORTED_YET = -1, // The network hasn't moved to this protocol change yet
636
- MANAGE_DATA_NAME_NOT_FOUND = -2, // Trying to remove a Data Entry that isn't there
637
- MANAGE_DATA_LOW_RESERVE = -3, // not enough funds to create a new Data Entry
638
- MANAGE_DATA_INVALID_NAME = -4 // Name not a valid string
653
+ MANAGE_DATA_NOT_SUPPORTED_YET =
654
+ -1, // The network hasn't moved to this protocol change yet
655
+ MANAGE_DATA_NAME_NOT_FOUND =
656
+ -2, // Trying to remove a Data Entry that isn't there
657
+ MANAGE_DATA_LOW_RESERVE = -3, // not enough funds to create a new Data Entry
658
+ MANAGE_DATA_INVALID_NAME = -4 // Name not a valid string
639
659
  };
640
660
 
641
661
  union ManageDataResult switch (ManageDataResultCode code)
@@ -646,14 +666,32 @@ default:
646
666
  void;
647
667
  };
648
668
 
669
+ /******* BumpSequence Result ********/
670
+
671
+ enum BumpSequenceResultCode
672
+ {
673
+ // codes considered as "success" for the operation
674
+ BUMP_SEQUENCE_SUCCESS = 0,
675
+ // codes considered as "failure" for the operation
676
+ BUMP_SEQUENCE_BAD_SEQ = -1 // `bumpTo` is not within bounds
677
+ };
678
+
679
+ union BumpSequenceResult switch (BumpSequenceResultCode code)
680
+ {
681
+ case BUMP_SEQUENCE_SUCCESS:
682
+ void;
683
+ default:
684
+ void;
685
+ };
649
686
  /* High level Operation Result */
650
687
 
651
688
  enum OperationResultCode
652
689
  {
653
690
  opINNER = 0, // inner object result is valid
654
691
 
655
- opBAD_AUTH = -1, // too few valid signatures / wrong network
656
- opNO_ACCOUNT = -2 // source account was not found
692
+ opBAD_AUTH = -1, // too few valid signatures / wrong network
693
+ opNO_ACCOUNT = -2, // source account was not found
694
+ opNOT_SUPPORTED = -3 // operation not supported at this time
657
695
  };
658
696
 
659
697
  union OperationResult switch (OperationResultCode code)
@@ -683,6 +721,8 @@ case opINNER:
683
721
  InflationResult inflationResult;
684
722
  case MANAGE_DATA:
685
723
  ManageDataResult manageDataResult;
724
+ case BUMP_SEQUENCE:
725
+ BumpSequenceResult bumpSeqResult;
686
726
  }
687
727
  tr;
688
728
  default:
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stellar-base
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Fleckenstein
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-02 00:00:00.000000000 Z
11
+ date: 2018-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xdr
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '10.0'
117
+ version: '12.0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '10.0'
124
+ version: '12.0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: xdrgen
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -263,6 +263,9 @@ files:
263
263
  - generated/stellar/authenticated_message/v0.rb
264
264
  - generated/stellar/bucket_entry.rb
265
265
  - generated/stellar/bucket_entry_type.rb
266
+ - generated/stellar/bump_sequence_op.rb
267
+ - generated/stellar/bump_sequence_result.rb
268
+ - generated/stellar/bump_sequence_result_code.rb
266
269
  - generated/stellar/change_trust_op.rb
267
270
  - generated/stellar/change_trust_result.rb
268
271
  - generated/stellar/change_trust_result_code.rb
@@ -372,6 +375,7 @@ files:
372
375
  - generated/stellar/transaction_history_result_entry.rb
373
376
  - generated/stellar/transaction_history_result_entry/ext.rb
374
377
  - generated/stellar/transaction_meta.rb
378
+ - generated/stellar/transaction_meta_v1.rb
375
379
  - generated/stellar/transaction_result.rb
376
380
  - generated/stellar/transaction_result/ext.rb
377
381
  - generated/stellar/transaction_result/result.rb