stellar-base 0.13.0 → 0.14.0

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