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,87 @@
1
+ // Copyright 2015 Stellar Development Foundation and contributors. Licensed
2
+ // under the Apache License, Version 2.0. See the COPYING file at the root
3
+ // of this distribution or at http://www.apache.org/licenses/LICENSE-2.0
4
+
5
+ %#include "xdr/Stellar-ledger.h"
6
+
7
+ namespace stellar
8
+ {
9
+
10
+ struct Error
11
+ {
12
+ int code;
13
+ string msg<100>;
14
+ };
15
+
16
+ struct Hello
17
+ {
18
+ uint32 ledgerVersion;
19
+ uint32 overlayVersion;
20
+ string versionStr<100>;
21
+ int listeningPort;
22
+ NodeID peerID;
23
+ };
24
+
25
+ struct PeerAddress
26
+ {
27
+ opaque ip[4];
28
+ uint32 port;
29
+ uint32 numFailures;
30
+ };
31
+
32
+ enum MessageType
33
+ {
34
+ ERROR_MSG = 0,
35
+ HELLO = 1,
36
+ DONT_HAVE = 2,
37
+
38
+ GET_PEERS = 3, // gets a list of peers this guy knows about
39
+ PEERS = 4,
40
+
41
+ GET_TX_SET = 5, // gets a particular txset by hash
42
+ TX_SET = 6,
43
+
44
+ TRANSACTION = 7, // pass on a tx you have heard about
45
+
46
+ // SCP
47
+ GET_SCP_QUORUMSET = 8,
48
+ SCP_QUORUMSET = 9,
49
+ SCP_MESSAGE = 10
50
+ };
51
+
52
+ struct DontHave
53
+ {
54
+ MessageType type;
55
+ uint256 reqHash;
56
+ };
57
+
58
+ union StellarMessage switch (MessageType type)
59
+ {
60
+ case ERROR_MSG:
61
+ Error error;
62
+ case HELLO:
63
+ Hello hello;
64
+ case DONT_HAVE:
65
+ DontHave dontHave;
66
+ case GET_PEERS:
67
+ void;
68
+ case PEERS:
69
+ PeerAddress peers<>;
70
+
71
+ case GET_TX_SET:
72
+ uint256 txSetHash;
73
+ case TX_SET:
74
+ TransactionSet txSet;
75
+
76
+ case TRANSACTION:
77
+ TransactionEnvelope transaction;
78
+
79
+ // SCP
80
+ case GET_SCP_QUORUMSET:
81
+ uint256 qSetHash;
82
+ case SCP_QUORUMSET:
83
+ SCPQuorumSet qSet;
84
+ case SCP_MESSAGE:
85
+ SCPEnvelope envelope;
86
+ };
87
+ }
@@ -0,0 +1,670 @@
1
+ // Copyright 2015 Stellar Development Foundation and contributors. Licensed
2
+ // under the Apache License, Version 2.0. See the COPYING file at the root
3
+ // of this distribution or at http://www.apache.org/licenses/LICENSE-2.0
4
+
5
+ %#include "xdr/Stellar-ledger-entries.h"
6
+
7
+ namespace stellar
8
+ {
9
+
10
+ struct DecoratedSignature
11
+ {
12
+ SignatureHint hint; // first 4 bytes of the public key, used as a hint
13
+ Signature signature; // actual signature
14
+ };
15
+
16
+ enum OperationType
17
+ {
18
+ CREATE_ACCOUNT = 0,
19
+ PAYMENT = 1,
20
+ PATH_PAYMENT = 2,
21
+ MANAGE_OFFER = 3,
22
+ CREATE_PASSIVE_OFFER = 4,
23
+ SET_OPTIONS = 5,
24
+ CHANGE_TRUST = 6,
25
+ ALLOW_TRUST = 7,
26
+ ACCOUNT_MERGE = 8,
27
+ INFLATION = 9
28
+ };
29
+
30
+ /* CreateAccount
31
+ Creates and funds a new account with the specified starting balance.
32
+
33
+ Threshold: med
34
+
35
+ Result: CreateAccountResult
36
+
37
+ */
38
+
39
+ struct CreateAccountOp
40
+ {
41
+ AccountID destination; // account to create
42
+ int64 startingBalance; // amount they end up with
43
+ };
44
+
45
+ /* Payment
46
+
47
+ Send an amount in specified asset to a destination account.
48
+
49
+ Threshold: med
50
+
51
+ Result: PaymentResult
52
+ */
53
+ struct PaymentOp
54
+ {
55
+ AccountID destination; // recipient of the payment
56
+ Asset asset; // what they end up with
57
+ int64 amount; // amount they end up with
58
+ };
59
+
60
+ /* PathPayment
61
+
62
+ send an amount to a destination account through a path.
63
+ (up to sendMax, sendAsset)
64
+ (X0, Path[0]) .. (Xn, Path[n])
65
+ (destAmount, destAsset)
66
+
67
+ Threshold: med
68
+
69
+ Result: PathPaymentResult
70
+ */
71
+ struct PathPaymentOp
72
+ {
73
+ Asset sendAsset; // asset we pay with
74
+ int64 sendMax; // the maximum amount of sendAsset to
75
+ // send (excluding fees).
76
+ // The operation will fail if can't be met
77
+
78
+ AccountID destination; // recipient of the payment
79
+ Asset destAsset; // what they end up with
80
+ int64 destAmount; // amount they end up with
81
+
82
+ Asset path<5>; // additional hops it must go through to get there
83
+ };
84
+
85
+ /* Creates, updates or deletes an offer
86
+
87
+ Threshold: med
88
+
89
+ Result: ManageOfferResult
90
+
91
+ */
92
+ struct ManageOfferOp
93
+ {
94
+ Asset selling;
95
+ Asset buying;
96
+ int64 amount; // amount being sold. if set to 0, delete the offer
97
+ Price price; // price of thing being sold in terms of what you are buying
98
+
99
+ // 0=create a new offer, otherwise edit an existing offer
100
+ uint64 offerID;
101
+ };
102
+
103
+ /* Creates an offer that doesn't take offers of the same price
104
+
105
+ Threshold: med
106
+
107
+ Result: CreatePassiveOfferResult
108
+
109
+ */
110
+ struct CreatePassiveOfferOp
111
+ {
112
+ Asset selling; // A
113
+ Asset buying; // B
114
+ int64 amount; // amount taker gets. if set to 0, delete the offer
115
+ Price price; // cost of A in terms of B
116
+ };
117
+
118
+ /* Set Account Options
119
+
120
+ updates "AccountEntry" fields.
121
+ note: updating thresholds or signers requires high threshold
122
+
123
+ Threshold: med or high
124
+
125
+ Result: SetOptionsResult
126
+ */
127
+
128
+ struct SetOptionsOp
129
+ {
130
+ AccountID* inflationDest; // sets the inflation destination
131
+
132
+ uint32* clearFlags; // which flags to clear
133
+ uint32* setFlags; // which flags to set
134
+
135
+ // account threshold manipulation
136
+ uint32* masterWeight; // weight of the master account
137
+ uint32* lowThreshold;
138
+ uint32* medThreshold;
139
+ uint32* highThreshold;
140
+
141
+ string32* homeDomain; // sets the home domain
142
+
143
+ // Add, update or remove a signer for the account
144
+ // signer is deleted if the weight is 0
145
+ Signer* signer;
146
+ };
147
+
148
+ /* Creates, updates or deletes a trust line
149
+
150
+ Threshold: med
151
+
152
+ Result: ChangeTrustResult
153
+
154
+ */
155
+ struct ChangeTrustOp
156
+ {
157
+ Asset line;
158
+
159
+ // if limit is set to 0, deletes the trust line
160
+ int64 limit;
161
+ };
162
+
163
+ /* Updates the "authorized" flag of an existing trust line
164
+ this is called by the issuer of the related asset.
165
+
166
+ note that authorize can only be set (and not cleared) if
167
+ the issuer account does not have the AUTH_REVOCABLE_FLAG set
168
+ Threshold: low
169
+
170
+ Result: AllowTrustResult
171
+ */
172
+ struct AllowTrustOp
173
+ {
174
+ AccountID trustor;
175
+ union switch (AssetType type)
176
+ {
177
+ // ASSET_TYPE_NATIVE is not allowed
178
+ case ASSET_TYPE_CREDIT_ALPHANUM4:
179
+ opaque assetCode4[4];
180
+
181
+ case ASSET_TYPE_CREDIT_ALPHANUM12:
182
+ opaque assetCode12[12];
183
+
184
+ // add other asset types here in the future
185
+ }
186
+ asset;
187
+
188
+ bool authorize;
189
+ };
190
+
191
+ /* Inflation
192
+ Runs inflation
193
+
194
+ Threshold: low
195
+
196
+ Result: InflationResult
197
+
198
+ */
199
+
200
+ /* AccountMerge
201
+ Transfers native balance to destination account.
202
+
203
+ Threshold: high
204
+
205
+ Result : AccountMergeResult
206
+ */
207
+
208
+ /* An operation is the lowest unit of work that a transaction does */
209
+ struct Operation
210
+ {
211
+ // sourceAccount is the account used to run the operation
212
+ // if not set, the runtime defaults to "sourceAccount" specified at
213
+ // the transaction level
214
+ AccountID* sourceAccount;
215
+
216
+ union switch (OperationType type)
217
+ {
218
+ case CREATE_ACCOUNT:
219
+ CreateAccountOp createAccountOp;
220
+ case PAYMENT:
221
+ PaymentOp paymentOp;
222
+ case PATH_PAYMENT:
223
+ PathPaymentOp pathPaymentOp;
224
+ case MANAGE_OFFER:
225
+ ManageOfferOp manageOfferOp;
226
+ case CREATE_PASSIVE_OFFER:
227
+ CreatePassiveOfferOp createPassiveOfferOp;
228
+ case SET_OPTIONS:
229
+ SetOptionsOp setOptionsOp;
230
+ case CHANGE_TRUST:
231
+ ChangeTrustOp changeTrustOp;
232
+ case ALLOW_TRUST:
233
+ AllowTrustOp allowTrustOp;
234
+ case ACCOUNT_MERGE:
235
+ AccountID destination;
236
+ case INFLATION:
237
+ void;
238
+ }
239
+ body;
240
+ };
241
+
242
+ enum MemoType
243
+ {
244
+ MEMO_NONE = 0,
245
+ MEMO_TEXT = 1,
246
+ MEMO_ID = 2,
247
+ MEMO_HASH = 3,
248
+ MEMO_RETURN = 4
249
+ };
250
+
251
+ union Memo switch (MemoType type)
252
+ {
253
+ case MEMO_NONE:
254
+ void;
255
+ case MEMO_TEXT:
256
+ string text<28>;
257
+ case MEMO_ID:
258
+ uint64 id;
259
+ case MEMO_HASH:
260
+ Hash hash; // the hash of what to pull from the content server
261
+ case MEMO_RETURN:
262
+ Hash retHash; // the hash of the tx you are rejecting
263
+ };
264
+
265
+ struct TimeBounds
266
+ {
267
+ uint64 minTime;
268
+ uint64 maxTime;
269
+ };
270
+
271
+ /* a transaction is a container for a set of operations
272
+ - is executed by an account
273
+ - fees are collected from the account
274
+ - operations are executed in order as one ACID transaction
275
+ either all operations are applied or none are
276
+ if any returns a failing code
277
+ */
278
+
279
+ struct Transaction
280
+ {
281
+ // account used to run the transaction
282
+ AccountID sourceAccount;
283
+
284
+ // the fee the sourceAccount will pay
285
+ uint32 fee;
286
+
287
+ // sequence number to consume in the account
288
+ SequenceNumber seqNum;
289
+
290
+ // validity range (inclusive) for the last ledger close time
291
+ TimeBounds* timeBounds;
292
+
293
+ Memo memo;
294
+
295
+ Operation operations<100>;
296
+
297
+ // reserved for future use
298
+ union switch (int v)
299
+ {
300
+ case 0:
301
+ void;
302
+ }
303
+ ext;
304
+ };
305
+
306
+ /* A TransactionEnvelope wraps a transaction with signatures. */
307
+ struct TransactionEnvelope
308
+ {
309
+ Transaction tx;
310
+ DecoratedSignature signatures<20>;
311
+ };
312
+
313
+ /* Operation Results section */
314
+
315
+ /* This result is used when offers are taken during an operation */
316
+ struct ClaimOfferAtom
317
+ {
318
+ // emited to identify the offer
319
+ AccountID sellerID; // Account that owns the offer
320
+ uint64 offerID;
321
+
322
+ // amount and asset taken from the owner
323
+ Asset assetSold;
324
+ int64 amountSold;
325
+
326
+ // amount and asset sent to the owner
327
+ Asset assetBought;
328
+ int64 amountBought;
329
+ };
330
+
331
+ /******* CreateAccount Result ********/
332
+
333
+ enum CreateAccountResultCode
334
+ {
335
+ // codes considered as "success" for the operation
336
+ CREATE_ACCOUNT_SUCCESS = 0, // account was created
337
+
338
+ // codes considered as "failure" for the operation
339
+ CREATE_ACCOUNT_MALFORMED = -1, // invalid destination
340
+ CREATE_ACCOUNT_UNDERFUNDED = -2, // not enough funds in source account
341
+ CREATE_ACCOUNT_LOW_RESERVE =
342
+ -3, // would create an account below the min reserve
343
+ CREATE_ACCOUNT_ALREADY_EXIST = -4 // account already exists
344
+ };
345
+
346
+ union CreateAccountResult switch (CreateAccountResultCode code)
347
+ {
348
+ case CREATE_ACCOUNT_SUCCESS:
349
+ void;
350
+ default:
351
+ void;
352
+ };
353
+
354
+ /******* Payment Result ********/
355
+
356
+ enum PaymentResultCode
357
+ {
358
+ // codes considered as "success" for the operation
359
+ PAYMENT_SUCCESS = 0, // payment successfuly completed
360
+
361
+ // codes considered as "failure" for the operation
362
+ PAYMENT_MALFORMED = -1, // bad input
363
+ PAYMENT_UNDERFUNDED = -2, // not enough funds in source account
364
+ PAYMENT_SRC_NO_TRUST = -3, // no trust line on source account
365
+ PAYMENT_SRC_NOT_AUTHORIZED = -4, // source not authorized to transfer
366
+ PAYMENT_NO_DESTINATION = -5, // destination account does not exist
367
+ PAYMENT_NO_TRUST = -6, // destination missing a trust line for asset
368
+ PAYMENT_NOT_AUTHORIZED = -7, // destination not authorized to hold asset
369
+ PAYMENT_LINE_FULL = -8 // destination would go above their limit
370
+ };
371
+
372
+ union PaymentResult switch (PaymentResultCode code)
373
+ {
374
+ case PAYMENT_SUCCESS:
375
+ void;
376
+ default:
377
+ void;
378
+ };
379
+
380
+ /******* Payment Result ********/
381
+
382
+ enum PathPaymentResultCode
383
+ {
384
+ // codes considered as "success" for the operation
385
+ PATH_PAYMENT_SUCCESS = 0, // success
386
+
387
+ // codes considered as "failure" for the operation
388
+ PATH_PAYMENT_MALFORMED = -1, // bad input
389
+ PATH_PAYMENT_UNDERFUNDED = -2, // not enough funds in source account
390
+ PATH_PAYMENT_SRC_NO_TRUST = -3, // no trust line on source account
391
+ PATH_PAYMENT_SRC_NOT_AUTHORIZED = -4, // source not authorized to transfer
392
+ PATH_PAYMENT_NO_DESTINATION = -5, // destination account does not exist
393
+ PATH_PAYMENT_NO_TRUST = -6, // dest missing a trust line for asset
394
+ PATH_PAYMENT_NOT_AUTHORIZED = -7, // dest not authorized to hold asset
395
+ PATH_PAYMENT_LINE_FULL = -8, // dest would go above their limit
396
+ PATH_PAYMENT_TOO_FEW_OFFERS = -9, // not enough offers to satisfy path
397
+ PATH_PAYMENT_OFFER_CROSS_SELF = -10, // would cross one of its own offers
398
+ PATH_PAYMENT_OVER_SENDMAX = -11 // could not satisfy sendmax
399
+ };
400
+
401
+ struct SimplePaymentResult
402
+ {
403
+ AccountID destination;
404
+ Asset asset;
405
+ int64 amount;
406
+ };
407
+
408
+ union PathPaymentResult switch (PathPaymentResultCode code)
409
+ {
410
+ case PATH_PAYMENT_SUCCESS:
411
+ struct
412
+ {
413
+ ClaimOfferAtom offers<>;
414
+ SimplePaymentResult last;
415
+ } success;
416
+ default:
417
+ void;
418
+ };
419
+
420
+ /******* ManageOffer Result ********/
421
+
422
+ enum ManageOfferResultCode
423
+ {
424
+ // codes considered as "success" for the operation
425
+ MANAGE_OFFER_SUCCESS = 0,
426
+
427
+ // codes considered as "failure" for the operation
428
+ MANAGE_OFFER_MALFORMED = -1, // generated offer would be invalid
429
+ MANAGE_OFFER_SELL_NO_TRUST = -2, // no trust line for what we're selling
430
+ MANAGE_OFFER_BUY_NO_TRUST = -3, // no trust line for what we're buying
431
+ MANAGE_OFFER_SELL_NOT_AUTHORIZED = -4, // not authorized to sell
432
+ MANAGE_OFFER_BUY_NOT_AUTHORIZED = -5, // not authorized to buy
433
+ MANAGE_OFFER_LINE_FULL = -6, // can't receive more of what it's buying
434
+ MANAGE_OFFER_UNDERFUNDED = -7, // doesn't hold what it's trying to sell
435
+ MANAGE_OFFER_CROSS_SELF = -8, // would cross an offer from the same user
436
+
437
+ // update errors
438
+ MANAGE_OFFER_NOT_FOUND = -9, // offerID does not match an existing offer
439
+ MANAGE_OFFER_MISMATCH = -10, // currencies don't match offer
440
+
441
+ MANAGE_OFFER_LOW_RESERVE = -11 // not enough funds to create a new Offer
442
+ };
443
+
444
+ enum ManageOfferEffect
445
+ {
446
+ MANAGE_OFFER_CREATED = 0,
447
+ MANAGE_OFFER_UPDATED = 1,
448
+ MANAGE_OFFER_DELETED = 2
449
+ };
450
+
451
+ struct ManageOfferSuccessResult
452
+ {
453
+ // offers that got claimed while creating this offer
454
+ ClaimOfferAtom offersClaimed<>;
455
+
456
+ union switch (ManageOfferEffect effect)
457
+ {
458
+ case MANAGE_OFFER_CREATED:
459
+ case MANAGE_OFFER_UPDATED:
460
+ OfferEntry offer;
461
+ default:
462
+ void;
463
+ }
464
+ offer;
465
+ };
466
+
467
+ union ManageOfferResult switch (ManageOfferResultCode code)
468
+ {
469
+ case MANAGE_OFFER_SUCCESS:
470
+ ManageOfferSuccessResult success;
471
+ default:
472
+ void;
473
+ };
474
+
475
+ /******* SetOptions Result ********/
476
+
477
+ enum SetOptionsResultCode
478
+ {
479
+ // codes considered as "success" for the operation
480
+ SET_OPTIONS_SUCCESS = 0,
481
+ // codes considered as "failure" for the operation
482
+ SET_OPTIONS_LOW_RESERVE = -1, // not enough funds to add a signer
483
+ SET_OPTIONS_TOO_MANY_SIGNERS = -2, // max number of signers already reached
484
+ SET_OPTIONS_BAD_FLAGS = -3, // invalid combination of clear/set flags
485
+ SET_OPTIONS_INVALID_INFLATION = -4, // inflation account does not exist
486
+ SET_OPTIONS_CANT_CHANGE = -5, // can no longer change this option
487
+ SET_OPTIONS_UNKNOWN_FLAG = -6, // can't set an unknown flag
488
+ SET_OPTIONS_THRESHOLD_OUT_OF_RANGE = -7, // bad value for weight/threshold
489
+ SET_OPTIONS_BAD_SIGNER = -8 // signer cannot be masterkey
490
+ };
491
+
492
+ union SetOptionsResult switch (SetOptionsResultCode code)
493
+ {
494
+ case SET_OPTIONS_SUCCESS:
495
+ void;
496
+ default:
497
+ void;
498
+ };
499
+
500
+ /******* ChangeTrust Result ********/
501
+
502
+ enum ChangeTrustResultCode
503
+ {
504
+ // codes considered as "success" for the operation
505
+ CHANGE_TRUST_SUCCESS = 0,
506
+ // codes considered as "failure" for the operation
507
+ CHANGE_TRUST_MALFORMED = -1, // bad input
508
+ CHANGE_TRUST_NO_ISSUER = -2, // could not find issuer
509
+ CHANGE_TRUST_INVALID_LIMIT = -3, // cannot drop limit below balance
510
+ CHANGE_TRUST_LOW_RESERVE = -4 // not enough funds to create a new trust line
511
+ };
512
+
513
+ union ChangeTrustResult switch (ChangeTrustResultCode code)
514
+ {
515
+ case CHANGE_TRUST_SUCCESS:
516
+ void;
517
+ default:
518
+ void;
519
+ };
520
+
521
+ /******* AllowTrust Result ********/
522
+
523
+ enum AllowTrustResultCode
524
+ {
525
+ // codes considered as "success" for the operation
526
+ ALLOW_TRUST_SUCCESS = 0,
527
+ // codes considered as "failure" for the operation
528
+ ALLOW_TRUST_MALFORMED = -1, // asset is not ASSET_TYPE_ALPHANUM
529
+ ALLOW_TRUST_NO_TRUST_LINE = -2, // trustor does not have a trustline
530
+ // source account does not require trust
531
+ ALLOW_TRUST_TRUST_NOT_REQUIRED = -3,
532
+ ALLOW_TRUST_CANT_REVOKE = -4 // source account can't revoke trust
533
+ };
534
+
535
+ union AllowTrustResult switch (AllowTrustResultCode code)
536
+ {
537
+ case ALLOW_TRUST_SUCCESS:
538
+ void;
539
+ default:
540
+ void;
541
+ };
542
+
543
+ /******* AccountMerge Result ********/
544
+
545
+ enum AccountMergeResultCode
546
+ {
547
+ // codes considered as "success" for the operation
548
+ ACCOUNT_MERGE_SUCCESS = 0,
549
+ // codes considered as "failure" for the operation
550
+ ACCOUNT_MERGE_MALFORMED = -1, // can't merge onto itself
551
+ ACCOUNT_MERGE_NO_ACCOUNT = -2, // destination does not exist
552
+ ACCOUNT_MERGE_HAS_CREDIT = -3, // account has active trust lines
553
+ ACCOUNT_MERGE_CREDIT_HELD = -4 // an issuer cannot be merged if used
554
+ };
555
+
556
+ union AccountMergeResult switch (AccountMergeResultCode code)
557
+ {
558
+ case ACCOUNT_MERGE_SUCCESS:
559
+ int64 sourceAccountBalance; // how much got transfered from source account
560
+ default:
561
+ void;
562
+ };
563
+
564
+ /******* Inflation Result ********/
565
+
566
+ enum InflationResultCode
567
+ {
568
+ // codes considered as "success" for the operation
569
+ INFLATION_SUCCESS = 0,
570
+ // codes considered as "failure" for the operation
571
+ INFLATION_NOT_TIME = -1
572
+ };
573
+
574
+ struct InflationPayout // or use PaymentResultAtom to limit types?
575
+ {
576
+ AccountID destination;
577
+ int64 amount;
578
+ };
579
+
580
+ union InflationResult switch (InflationResultCode code)
581
+ {
582
+ case INFLATION_SUCCESS:
583
+ InflationPayout payouts<>;
584
+ default:
585
+ void;
586
+ };
587
+
588
+ /* High level Operation Result */
589
+
590
+ enum OperationResultCode
591
+ {
592
+ opINNER = 0, // inner object result is valid
593
+
594
+ opBAD_AUTH = -1, // not enough signatures to perform operation
595
+ opNO_ACCOUNT = -2 // source account was not found
596
+ };
597
+
598
+ union OperationResult switch (OperationResultCode code)
599
+ {
600
+ case opINNER:
601
+ union switch (OperationType type)
602
+ {
603
+ case CREATE_ACCOUNT:
604
+ CreateAccountResult createAccountResult;
605
+ case PAYMENT:
606
+ PaymentResult paymentResult;
607
+ case PATH_PAYMENT:
608
+ PathPaymentResult pathPaymentResult;
609
+ case MANAGE_OFFER:
610
+ ManageOfferResult manageOfferResult;
611
+ case CREATE_PASSIVE_OFFER:
612
+ ManageOfferResult createPassiveOfferResult;
613
+ case SET_OPTIONS:
614
+ SetOptionsResult setOptionsResult;
615
+ case CHANGE_TRUST:
616
+ ChangeTrustResult changeTrustResult;
617
+ case ALLOW_TRUST:
618
+ AllowTrustResult allowTrustResult;
619
+ case ACCOUNT_MERGE:
620
+ AccountMergeResult accountMergeResult;
621
+ case INFLATION:
622
+ InflationResult inflationResult;
623
+ }
624
+ tr;
625
+ default:
626
+ void;
627
+ };
628
+
629
+ enum TransactionResultCode
630
+ {
631
+ txSUCCESS = 0, // all operations succeeded
632
+
633
+ txFAILED = -1, // one of the operations failed (none were applied)
634
+
635
+ txTOO_EARLY = -2, // ledger closeTime before minTime
636
+ txTOO_LATE = -3, // ledger closeTime after maxTime
637
+ txMISSING_OPERATION = -4, // no operation was specified
638
+ txBAD_SEQ = -5, // sequence number does not match source account
639
+
640
+ txBAD_AUTH = -6, // not enough signatures to perform transaction
641
+ txINSUFFICIENT_BALANCE = -7, // fee would bring account below reserve
642
+ txNO_ACCOUNT = -8, // source account not found
643
+ txINSUFFICIENT_FEE = -9, // fee is too small
644
+ txBAD_AUTH_EXTRA = -10, // too many signatures on transaction
645
+ txINTERNAL_ERROR = -11 // an unknown error occured
646
+ };
647
+
648
+ struct TransactionResult
649
+ {
650
+ int64 feeCharged; // actual fee charged for the transaction
651
+
652
+ union switch (TransactionResultCode code)
653
+ {
654
+ case txSUCCESS:
655
+ case txFAILED:
656
+ OperationResult results<>;
657
+ default:
658
+ void;
659
+ }
660
+ result;
661
+
662
+ // reserved for future use
663
+ union switch (int v)
664
+ {
665
+ case 0:
666
+ void;
667
+ }
668
+ ext;
669
+ };
670
+ }