stellar-base 0.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/.travis.yml +15 -0
- data/.yardopts +8 -0
- data/Gemfile +15 -0
- data/Guardfile +5 -0
- data/LICENSE.txt +202 -0
- data/README.md +79 -0
- data/Rakefile +6 -0
- data/examples/low_level_transaction_post.rb +53 -0
- data/examples/mid_level_transaction_post.rb +34 -0
- data/examples/non_native_payment.rb +60 -0
- data/generated/stellar/account_entry.rb +37 -0
- data/generated/stellar/account_flags.rb +20 -0
- data/generated/stellar/account_merge_result.rb +25 -0
- data/generated/stellar/account_merge_result_code.rb +30 -0
- data/generated/stellar/allow_trust_op/currency.rb +28 -0
- data/generated/stellar/allow_trust_op.rb +35 -0
- data/generated/stellar/allow_trust_result.rb +25 -0
- data/generated/stellar/allow_trust_result_code.rb +28 -0
- data/generated/stellar/bucket_entry.rb +28 -0
- data/generated/stellar/bucket_entry_type.rb +22 -0
- data/generated/stellar/change_trust_op.rb +22 -0
- data/generated/stellar/change_trust_result.rb +25 -0
- data/generated/stellar/change_trust_result_code.rb +28 -0
- data/generated/stellar/claim_offer_atom.rb +29 -0
- data/generated/stellar/create_offer_effect.rb +24 -0
- data/generated/stellar/create_offer_op.rb +28 -0
- data/generated/stellar/create_offer_result.rb +26 -0
- data/generated/stellar/create_offer_result_code.rb +45 -0
- data/generated/stellar/create_offer_success_result/offer.rb +30 -0
- data/generated/stellar/create_offer_success_result.rb +34 -0
- data/generated/stellar/currency.rb +29 -0
- data/generated/stellar/currency_type.rb +22 -0
- data/generated/stellar/decorated_signature.rb +20 -0
- data/generated/stellar/dont_have.rb +20 -0
- data/generated/stellar/error.rb +20 -0
- data/generated/stellar/hello.rb +24 -0
- data/generated/stellar/inflation_payout.rb +20 -0
- data/generated/stellar/inflation_result.rb +26 -0
- data/generated/stellar/inflation_result_code.rb +24 -0
- data/generated/stellar/iso_currency_issuer.rb +20 -0
- data/generated/stellar/ledger_entry.rb +33 -0
- data/generated/stellar/ledger_entry_type.rb +24 -0
- data/generated/stellar/ledger_header.rb +45 -0
- data/generated/stellar/ledger_header_history_entry.rb +20 -0
- data/generated/stellar/ledger_key/account.rb +20 -0
- data/generated/stellar/ledger_key/offer.rb +22 -0
- data/generated/stellar/ledger_key/trust_line.rb +22 -0
- data/generated/stellar/ledger_key.rb +50 -0
- data/generated/stellar/message_type.rb +45 -0
- data/generated/stellar/offer_entry.rb +34 -0
- data/generated/stellar/operation/body.rb +49 -0
- data/generated/stellar/operation.rb +45 -0
- data/generated/stellar/operation_result/tr.rb +49 -0
- data/generated/stellar/operation_result.rb +47 -0
- data/generated/stellar/operation_result_code.rb +25 -0
- data/generated/stellar/operation_type.rb +32 -0
- data/generated/stellar/payment_op.rb +35 -0
- data/generated/stellar/payment_result.rb +29 -0
- data/generated/stellar/payment_result_code.rb +41 -0
- data/generated/stellar/payment_success_multi_result.rb +20 -0
- data/generated/stellar/peer_address.rb +22 -0
- data/generated/stellar/price.rb +20 -0
- data/generated/stellar/scp_ballot.rb +20 -0
- data/generated/stellar/scp_envelope.rb +22 -0
- data/generated/stellar/scp_quorum_set.rb +20 -0
- data/generated/stellar/scp_statement/pledges/prepare.rb +24 -0
- data/generated/stellar/scp_statement/pledges.rb +40 -0
- data/generated/stellar/scp_statement.rb +42 -0
- data/generated/stellar/scp_statement_type.rb +26 -0
- data/generated/stellar/set_options_op.rb +31 -0
- data/generated/stellar/set_options_result.rb +25 -0
- data/generated/stellar/set_options_result_code.rb +28 -0
- data/generated/stellar/signer.rb +20 -0
- data/generated/stellar/simple_payment_result.rb +22 -0
- data/generated/stellar/stellar_ballot.rb +22 -0
- data/generated/stellar/stellar_ballot_value.rb +22 -0
- data/generated/stellar/stellar_message.rb +66 -0
- data/generated/stellar/transaction.rb +37 -0
- data/generated/stellar/transaction_envelope.rb +20 -0
- data/generated/stellar/transaction_history_entry.rb +20 -0
- data/generated/stellar/transaction_history_result_entry.rb +20 -0
- data/generated/stellar/transaction_meta.rb +18 -0
- data/generated/stellar/transaction_result/result.rb +30 -0
- data/generated/stellar/transaction_result.rb +33 -0
- data/generated/stellar/transaction_result_code.rb +46 -0
- data/generated/stellar/transaction_result_pair.rb +20 -0
- data/generated/stellar/transaction_result_set.rb +18 -0
- data/generated/stellar/transaction_set.rb +20 -0
- data/generated/stellar/trust_line_entry.rb +28 -0
- data/generated/stellar-base-generated.rb +160 -0
- data/lib/stellar/base/version.rb +5 -0
- data/lib/stellar/base.rb +1 -0
- data/lib/stellar/change_trust_op.rb +10 -0
- data/lib/stellar/currency.rb +28 -0
- data/lib/stellar/key_pair.rb +94 -0
- data/lib/stellar/payment_op.rb +38 -0
- data/lib/stellar/transaction.rb +72 -0
- data/lib/stellar/transaction_envelope.rb +32 -0
- data/lib/stellar/util/base58.rb +127 -0
- data/lib/stellar-base.rb +23 -0
- data/ruby-stellar-base.gemspec +34 -0
- data/spec/lib/stellar/key_pair_spec.rb +199 -0
- data/spec/lib/stellar/transaction_envelope_spec.rb +93 -0
- data/spec/lib/stellar/transaction_spec.rb +43 -0
- data/spec/lib/stellar/util/base58_spec.rb +74 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/support/matchers/be_base58_check.rb +9 -0
- data/spec/support/matchers/eq_bytes.rb +5 -0
- data/spec/support/matchers/have_length.rb +5 -0
- data/tasks/rspec.rake +6 -0
- data/tasks/travis.rake +9 -0
- data/tasks/xdr.rake +48 -0
- data/xdr/SCPXDR.x +61 -0
- data/xdr/Stellar-ledger-entries.x +105 -0
- data/xdr/Stellar-ledger.x +117 -0
- data/xdr/Stellar-overlay.x +100 -0
- data/xdr/Stellar-transaction.x +497 -0
- data/xdr/Stellar-types.x +53 -0
- data/xdr/StellarXDR.x +11 -0
- metadata +342 -0
|
@@ -0,0 +1,497 @@
|
|
|
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 "generated/Stellar-ledger-entries.h"
|
|
6
|
+
|
|
7
|
+
namespace stellar
|
|
8
|
+
{
|
|
9
|
+
|
|
10
|
+
struct DecoratedSignature
|
|
11
|
+
{
|
|
12
|
+
opaque hint[4]; // first 4 bytes of the public key, used as a hint
|
|
13
|
+
uint512 signature; // actual signature
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
enum OperationType
|
|
17
|
+
{
|
|
18
|
+
PAYMENT = 0,
|
|
19
|
+
CREATE_OFFER = 1,
|
|
20
|
+
SET_OPTIONS = 2,
|
|
21
|
+
CHANGE_TRUST = 3,
|
|
22
|
+
ALLOW_TRUST = 4,
|
|
23
|
+
ACCOUNT_MERGE = 5,
|
|
24
|
+
INFLATION = 6
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/* Payment
|
|
28
|
+
|
|
29
|
+
send an amount to a destination account, optionally through a path.
|
|
30
|
+
XLM payments create the destination account if it does not exist
|
|
31
|
+
|
|
32
|
+
Threshold: med
|
|
33
|
+
|
|
34
|
+
Result: PaymentResult
|
|
35
|
+
*/
|
|
36
|
+
struct PaymentOp
|
|
37
|
+
{
|
|
38
|
+
AccountID destination; // recipient of the payment
|
|
39
|
+
Currency currency; // what they end up with
|
|
40
|
+
int64 amount; // amount they end up with
|
|
41
|
+
|
|
42
|
+
opaque memo<32>;
|
|
43
|
+
opaque sourceMemo<32>; // used to return a payment
|
|
44
|
+
|
|
45
|
+
// payment over path
|
|
46
|
+
Currency path<5>; // what hops it must go through to get there
|
|
47
|
+
int64 sendMax; // the maximum amount of the source currency (==path[0]) to
|
|
48
|
+
// send (excluding fees).
|
|
49
|
+
// The operation will fail if can't be met
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/* Creates, updates or deletes an offer
|
|
53
|
+
|
|
54
|
+
Threshold: med
|
|
55
|
+
|
|
56
|
+
Result: CreateOfferResult
|
|
57
|
+
|
|
58
|
+
*/
|
|
59
|
+
struct CreateOfferOp
|
|
60
|
+
{
|
|
61
|
+
Currency takerGets;
|
|
62
|
+
Currency takerPays;
|
|
63
|
+
int64 amount; // amount taker gets. if set to 0, delete the offer
|
|
64
|
+
Price price; // =takerPaysAmount/takerGetsAmount
|
|
65
|
+
|
|
66
|
+
// 0=create a new offer, otherwise edit an existing offer
|
|
67
|
+
uint64 offerID;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
/* Set Account Options
|
|
71
|
+
|
|
72
|
+
updates "AccountEntry" fields.
|
|
73
|
+
note: updating thresholds or signers requires high threshold
|
|
74
|
+
|
|
75
|
+
Threshold: med or high
|
|
76
|
+
|
|
77
|
+
Result: SetOptionsResult
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
struct SetOptionsOp
|
|
81
|
+
{
|
|
82
|
+
AccountID* inflationDest; // sets the inflation destination
|
|
83
|
+
|
|
84
|
+
uint32* clearFlags; // which flags to clear
|
|
85
|
+
uint32* setFlags; // which flags to set
|
|
86
|
+
|
|
87
|
+
Thresholds* thresholds; // update the thresholds for the account
|
|
88
|
+
|
|
89
|
+
// Add, update or remove a signer for the account
|
|
90
|
+
// signer is deleted if the weight is 0
|
|
91
|
+
Signer* signer;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/* Creates, updates or deletes a trust line
|
|
95
|
+
|
|
96
|
+
Threshold: med
|
|
97
|
+
|
|
98
|
+
Result: ChangeTrustResult
|
|
99
|
+
|
|
100
|
+
*/
|
|
101
|
+
struct ChangeTrustOp
|
|
102
|
+
{
|
|
103
|
+
Currency line;
|
|
104
|
+
|
|
105
|
+
// if limit is set to 0, deletes the trust line
|
|
106
|
+
int64 limit;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
/* Updates the "authorized" flag of an existing trust line
|
|
110
|
+
this is called by the issuer of the related currency.
|
|
111
|
+
|
|
112
|
+
Threshold: low
|
|
113
|
+
|
|
114
|
+
Result: AllowTrustResult
|
|
115
|
+
*/
|
|
116
|
+
struct AllowTrustOp
|
|
117
|
+
{
|
|
118
|
+
AccountID trustor;
|
|
119
|
+
union switch (CurrencyType type)
|
|
120
|
+
{
|
|
121
|
+
// NATIVE is not allowed
|
|
122
|
+
case ISO4217:
|
|
123
|
+
opaque currencyCode[4];
|
|
124
|
+
|
|
125
|
+
// add other currency types here in the future
|
|
126
|
+
}
|
|
127
|
+
currency;
|
|
128
|
+
|
|
129
|
+
bool authorize;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
/* Inflation
|
|
133
|
+
Runs inflation
|
|
134
|
+
|
|
135
|
+
Threshold: low
|
|
136
|
+
|
|
137
|
+
Result: InflationResult
|
|
138
|
+
|
|
139
|
+
*/
|
|
140
|
+
|
|
141
|
+
/* AccountMerge
|
|
142
|
+
Transfers native balance to destination account.
|
|
143
|
+
|
|
144
|
+
Threshold: high
|
|
145
|
+
|
|
146
|
+
Result : AccountMergeResult
|
|
147
|
+
*/
|
|
148
|
+
|
|
149
|
+
/* An operation is the lowest unit of work that a transaction does */
|
|
150
|
+
struct Operation
|
|
151
|
+
{
|
|
152
|
+
// sourceAccount is the account used to run the operation
|
|
153
|
+
// if not set, the runtime defaults to "account" specified at
|
|
154
|
+
// the transaction level
|
|
155
|
+
AccountID* sourceAccount;
|
|
156
|
+
|
|
157
|
+
union switch (OperationType type)
|
|
158
|
+
{
|
|
159
|
+
case PAYMENT:
|
|
160
|
+
PaymentOp paymentOp;
|
|
161
|
+
case CREATE_OFFER:
|
|
162
|
+
CreateOfferOp createOfferOp;
|
|
163
|
+
case SET_OPTIONS:
|
|
164
|
+
SetOptionsOp setOptionsOp;
|
|
165
|
+
case CHANGE_TRUST:
|
|
166
|
+
ChangeTrustOp changeTrustOp;
|
|
167
|
+
case ALLOW_TRUST:
|
|
168
|
+
AllowTrustOp allowTrustOp;
|
|
169
|
+
case ACCOUNT_MERGE:
|
|
170
|
+
uint256 destination;
|
|
171
|
+
case INFLATION:
|
|
172
|
+
uint32 inflationSeq;
|
|
173
|
+
}
|
|
174
|
+
body;
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
/* a transaction is a container for a set of operations
|
|
178
|
+
- is executed by an account
|
|
179
|
+
- fees are collected from the account
|
|
180
|
+
- operations are executed in order as one ACID transaction
|
|
181
|
+
either all operations are applied or none are
|
|
182
|
+
if any returns a failing code
|
|
183
|
+
*/
|
|
184
|
+
|
|
185
|
+
struct Transaction
|
|
186
|
+
{
|
|
187
|
+
// account used to run the transaction
|
|
188
|
+
AccountID sourceAccount;
|
|
189
|
+
|
|
190
|
+
// maximum fee this transaction can collect
|
|
191
|
+
// the transaction is aborted if the fee is higher
|
|
192
|
+
int32 maxFee;
|
|
193
|
+
|
|
194
|
+
// sequence number to consume in the account
|
|
195
|
+
SequenceNumber seqNum;
|
|
196
|
+
|
|
197
|
+
// validity range (inclusive) for the ledger sequence number
|
|
198
|
+
uint32 minLedger;
|
|
199
|
+
uint32 maxLedger;
|
|
200
|
+
|
|
201
|
+
Operation operations<100>;
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
/* A TransactionEnvelope wraps a transaction with signatures. */
|
|
205
|
+
struct TransactionEnvelope
|
|
206
|
+
{
|
|
207
|
+
Transaction tx;
|
|
208
|
+
DecoratedSignature signatures<20>;
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
/* Operation Results section */
|
|
212
|
+
|
|
213
|
+
/* This result is used when offers are taken during an operation */
|
|
214
|
+
struct ClaimOfferAtom
|
|
215
|
+
{
|
|
216
|
+
// emited to identify the offer
|
|
217
|
+
AccountID offerOwner; // Account that owns the offer
|
|
218
|
+
uint64 offerID;
|
|
219
|
+
|
|
220
|
+
// amount and currency taken from the owner
|
|
221
|
+
Currency currencyClaimed;
|
|
222
|
+
int64 amountClaimed;
|
|
223
|
+
|
|
224
|
+
// should we also include the amount that the owner gets in return?
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
/******* Payment Result ********/
|
|
228
|
+
|
|
229
|
+
enum PaymentResultCode
|
|
230
|
+
{
|
|
231
|
+
// codes considered as "success" for the operation
|
|
232
|
+
PAYMENT_SUCCESS = 0, // simple payment success
|
|
233
|
+
PAYMENT_SUCCESS_MULTI = 1, // multi-path payment success
|
|
234
|
+
|
|
235
|
+
// codes considered as "failure" for the operation
|
|
236
|
+
PAYMENT_UNDERFUNDED = 2, // not enough funds in source account
|
|
237
|
+
PAYMENT_NO_DESTINATION = 3, // destination account does not exist
|
|
238
|
+
PAYMENT_NO_TRUST = 4, // destination missing a trust line for currency
|
|
239
|
+
PAYMENT_NOT_AUTHORIZED = 5, // destination not authorized to hold currency
|
|
240
|
+
PAYMENT_LINE_FULL = 6, // destination would go above their limit
|
|
241
|
+
PAYMENT_TOO_FEW_OFFERS = 7, // not enough offers to satisfy path payment
|
|
242
|
+
PAYMENT_OVER_SENDMAX = 8, // multi-path payment could not satisfy sendmax
|
|
243
|
+
PAYMENT_LOW_RESERVE = 9 // would create an account below the min reserve
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
struct SimplePaymentResult
|
|
247
|
+
{
|
|
248
|
+
AccountID destination;
|
|
249
|
+
Currency currency;
|
|
250
|
+
int64 amount;
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
struct PaymentSuccessMultiResult
|
|
254
|
+
{
|
|
255
|
+
ClaimOfferAtom offers<>;
|
|
256
|
+
SimplePaymentResult last;
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
union PaymentResult switch (PaymentResultCode code)
|
|
260
|
+
{
|
|
261
|
+
case PAYMENT_SUCCESS:
|
|
262
|
+
void;
|
|
263
|
+
case PAYMENT_SUCCESS_MULTI:
|
|
264
|
+
PaymentSuccessMultiResult multi;
|
|
265
|
+
default:
|
|
266
|
+
void;
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
/******* CreateOffer Result ********/
|
|
270
|
+
|
|
271
|
+
enum CreateOfferResultCode
|
|
272
|
+
{
|
|
273
|
+
// codes considered as "success" for the operation
|
|
274
|
+
CREATE_OFFER_SUCCESS = 0,
|
|
275
|
+
|
|
276
|
+
// codes considered as "failure" for the operation
|
|
277
|
+
CREATE_OFFER_NO_TRUST = 1, // can't hold what it's buying
|
|
278
|
+
CREATE_OFFER_NOT_AUTHORIZED = 2, // not authorized to hold what it's buying
|
|
279
|
+
CREATE_OFFER_LINE_FULL = 3, // can't receive more of what it's buying
|
|
280
|
+
CREATE_OFFER_MALFORMED = 4, // generated offer would be invalid
|
|
281
|
+
CREATE_OFFER_UNDERFUNDED = 5, // doesn't hold what it's trying to sell
|
|
282
|
+
CREATE_OFFER_CROSS_SELF = 6, // would cross an offer from the same user
|
|
283
|
+
|
|
284
|
+
// update errors
|
|
285
|
+
CREATE_OFFER_NOT_FOUND = 7, // offerID does not match an existing offer
|
|
286
|
+
CREATE_OFFER_MISMATCH = 8, // currencies don't match offer
|
|
287
|
+
|
|
288
|
+
CREATE_OFFER_LOW_RESERVE = 9 // not enough funds to create a new Offer
|
|
289
|
+
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
enum CreateOfferEffect
|
|
293
|
+
{
|
|
294
|
+
CREATE_OFFER_CREATED = 0,
|
|
295
|
+
CREATE_OFFER_UPDATED = 1,
|
|
296
|
+
CREATE_OFFER_DELETED = 2
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
struct CreateOfferSuccessResult
|
|
300
|
+
{
|
|
301
|
+
// offers that got claimed while creating this offer
|
|
302
|
+
ClaimOfferAtom offersClaimed<>;
|
|
303
|
+
|
|
304
|
+
union switch (CreateOfferEffect effect)
|
|
305
|
+
{
|
|
306
|
+
case CREATE_OFFER_CREATED:
|
|
307
|
+
case CREATE_OFFER_UPDATED:
|
|
308
|
+
OfferEntry offer;
|
|
309
|
+
default:
|
|
310
|
+
void;
|
|
311
|
+
}
|
|
312
|
+
offer;
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
union CreateOfferResult switch (CreateOfferResultCode code)
|
|
316
|
+
{
|
|
317
|
+
case CREATE_OFFER_SUCCESS:
|
|
318
|
+
CreateOfferSuccessResult success;
|
|
319
|
+
default:
|
|
320
|
+
void;
|
|
321
|
+
};
|
|
322
|
+
|
|
323
|
+
/******* SetOptions Result ********/
|
|
324
|
+
|
|
325
|
+
enum SetOptionsResultCode
|
|
326
|
+
{
|
|
327
|
+
// codes considered as "success" for the operation
|
|
328
|
+
SET_OPTIONS_SUCCESS = 0,
|
|
329
|
+
// codes considered as "failure" for the operation
|
|
330
|
+
SET_OPTIONS_LOW_RESERVE = 1, // not enough funds to add a signer
|
|
331
|
+
SET_OPTIONS_TOO_MANY_SIGNERS = 2, // max number of signers already reached
|
|
332
|
+
SET_OPTIONS_BAD_FLAGS = 3 // invalid combination of clear/set flags
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
union SetOptionsResult switch (SetOptionsResultCode code)
|
|
336
|
+
{
|
|
337
|
+
case SET_OPTIONS_SUCCESS:
|
|
338
|
+
void;
|
|
339
|
+
default:
|
|
340
|
+
void;
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
/******* ChangeTrust Result ********/
|
|
344
|
+
|
|
345
|
+
enum ChangeTrustResultCode
|
|
346
|
+
{
|
|
347
|
+
// codes considered as "success" for the operation
|
|
348
|
+
CHANGE_TRUST_SUCCESS = 0,
|
|
349
|
+
// codes considered as "failure" for the operation
|
|
350
|
+
CHANGE_TRUST_NO_ISSUER = 1, // could not find issuer
|
|
351
|
+
CHANGE_TRUST_INVALID_LIMIT = 2, // cannot drop limit below balance
|
|
352
|
+
CHANGE_TRUST_LOW_RESERVE = 3 // not enough funds to create a new trust line
|
|
353
|
+
};
|
|
354
|
+
|
|
355
|
+
union ChangeTrustResult switch (ChangeTrustResultCode code)
|
|
356
|
+
{
|
|
357
|
+
case CHANGE_TRUST_SUCCESS:
|
|
358
|
+
void;
|
|
359
|
+
default:
|
|
360
|
+
void;
|
|
361
|
+
};
|
|
362
|
+
|
|
363
|
+
/******* AllowTrust Result ********/
|
|
364
|
+
|
|
365
|
+
enum AllowTrustResultCode
|
|
366
|
+
{
|
|
367
|
+
// codes considered as "success" for the operation
|
|
368
|
+
ALLOW_TRUST_SUCCESS = 0,
|
|
369
|
+
// codes considered as "failure" for the operation
|
|
370
|
+
ALLOW_TRUST_MALFORMED = 1, // currency is not ISO4217
|
|
371
|
+
ALLOW_TRUST_NO_TRUST_LINE = 2, // trustor does not have a trustline
|
|
372
|
+
ALLOW_TRUST_TRUST_NOT_REQUIRED = 3 // source account does not require trust
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
union AllowTrustResult switch (AllowTrustResultCode code)
|
|
376
|
+
{
|
|
377
|
+
case ALLOW_TRUST_SUCCESS:
|
|
378
|
+
void;
|
|
379
|
+
default:
|
|
380
|
+
void;
|
|
381
|
+
};
|
|
382
|
+
|
|
383
|
+
/******* AccountMerge Result ********/
|
|
384
|
+
|
|
385
|
+
enum AccountMergeResultCode
|
|
386
|
+
{
|
|
387
|
+
// codes considered as "success" for the operation
|
|
388
|
+
ACCOUNT_MERGE_SUCCESS = 0,
|
|
389
|
+
// codes considered as "failure" for the operation
|
|
390
|
+
ACCOUNT_MERGE_MALFORMED = 1, // can't merge onto itself
|
|
391
|
+
ACCOUNT_MERGE_NO_ACCOUNT = 2, // destination does not exist
|
|
392
|
+
ACCOUNT_MERGE_HAS_CREDIT = 3, // account has active trust lines
|
|
393
|
+
ACCOUNT_MERGE_CREDIT_HELD = 4 // an issuer cannot be merged if used
|
|
394
|
+
};
|
|
395
|
+
|
|
396
|
+
union AccountMergeResult switch (AccountMergeResultCode code)
|
|
397
|
+
{
|
|
398
|
+
case ACCOUNT_MERGE_SUCCESS:
|
|
399
|
+
void;
|
|
400
|
+
default:
|
|
401
|
+
void;
|
|
402
|
+
};
|
|
403
|
+
|
|
404
|
+
/******* Inflation Result ********/
|
|
405
|
+
|
|
406
|
+
enum InflationResultCode
|
|
407
|
+
{
|
|
408
|
+
// codes considered as "success" for the operation
|
|
409
|
+
INFLATION_SUCCESS = 0,
|
|
410
|
+
// codes considered as "failure" for the operation
|
|
411
|
+
INFLATION_NOT_TIME = 1
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
struct inflationPayout // or use PaymentResultAtom to limit types?
|
|
415
|
+
{
|
|
416
|
+
AccountID destination;
|
|
417
|
+
int64 amount;
|
|
418
|
+
};
|
|
419
|
+
|
|
420
|
+
union InflationResult switch (InflationResultCode code)
|
|
421
|
+
{
|
|
422
|
+
case INFLATION_SUCCESS:
|
|
423
|
+
inflationPayout payouts<>;
|
|
424
|
+
default:
|
|
425
|
+
void;
|
|
426
|
+
};
|
|
427
|
+
|
|
428
|
+
/* High level Operation Result */
|
|
429
|
+
|
|
430
|
+
enum OperationResultCode
|
|
431
|
+
{
|
|
432
|
+
opINNER = 0, // inner object result is valid
|
|
433
|
+
|
|
434
|
+
opBAD_AUTH = 1, // not enough signatures to perform operation
|
|
435
|
+
opNO_ACCOUNT = 2 // source account was not found
|
|
436
|
+
};
|
|
437
|
+
|
|
438
|
+
union OperationResult switch (OperationResultCode code)
|
|
439
|
+
{
|
|
440
|
+
case opINNER:
|
|
441
|
+
union switch (OperationType type)
|
|
442
|
+
{
|
|
443
|
+
case PAYMENT:
|
|
444
|
+
PaymentResult paymentResult;
|
|
445
|
+
case CREATE_OFFER:
|
|
446
|
+
CreateOfferResult createOfferResult;
|
|
447
|
+
case SET_OPTIONS:
|
|
448
|
+
SetOptionsResult setOptionsResult;
|
|
449
|
+
case CHANGE_TRUST:
|
|
450
|
+
ChangeTrustResult changeTrustResult;
|
|
451
|
+
case ALLOW_TRUST:
|
|
452
|
+
AllowTrustResult allowTrustResult;
|
|
453
|
+
case ACCOUNT_MERGE:
|
|
454
|
+
AccountMergeResult accountMergeResult;
|
|
455
|
+
case INFLATION:
|
|
456
|
+
InflationResult inflationResult;
|
|
457
|
+
}
|
|
458
|
+
tr;
|
|
459
|
+
default:
|
|
460
|
+
void;
|
|
461
|
+
};
|
|
462
|
+
|
|
463
|
+
enum TransactionResultCode
|
|
464
|
+
{
|
|
465
|
+
txSUCCESS = 0, // all operations succeeded
|
|
466
|
+
|
|
467
|
+
txDUPLICATE = 1, // transaction was already submited
|
|
468
|
+
|
|
469
|
+
txFAILED = 2, // one of the operations failed (but none were applied)
|
|
470
|
+
|
|
471
|
+
txBAD_LEDGER = 3, // ledger is not in range [minLeder; maxLedger]
|
|
472
|
+
txMISSING_OPERATION = 4, // no operation was specified
|
|
473
|
+
txBAD_SEQ = 5, // sequence number does not match source account
|
|
474
|
+
|
|
475
|
+
txBAD_AUTH = 6, // not enough signatures to perform transaction
|
|
476
|
+
txINSUFFICIENT_BALANCE = 7, // fee would bring account below reserve
|
|
477
|
+
txNO_ACCOUNT = 8, // source account not found
|
|
478
|
+
txINSUFFICIENT_FEE = 9, // max fee is too small
|
|
479
|
+
txBAD_AUTH_EXTRA = 10, // too many signatures on transaction
|
|
480
|
+
txINTERNAL_ERROR = 0xFFFFFFFF // an unknown error occured
|
|
481
|
+
};
|
|
482
|
+
|
|
483
|
+
struct TransactionResult
|
|
484
|
+
{
|
|
485
|
+
int64 feeCharged; // actual fee charged for the transaction
|
|
486
|
+
|
|
487
|
+
union switch (TransactionResultCode code)
|
|
488
|
+
{
|
|
489
|
+
case txSUCCESS:
|
|
490
|
+
case txFAILED:
|
|
491
|
+
OperationResult results<>;
|
|
492
|
+
default:
|
|
493
|
+
void;
|
|
494
|
+
}
|
|
495
|
+
result;
|
|
496
|
+
};
|
|
497
|
+
}
|
data/xdr/Stellar-types.x
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
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 "generated/SCPXDR.h"
|
|
6
|
+
|
|
7
|
+
namespace stellar
|
|
8
|
+
{
|
|
9
|
+
|
|
10
|
+
// messages
|
|
11
|
+
typedef opaque uint512[64];
|
|
12
|
+
typedef opaque uint256[32];
|
|
13
|
+
typedef unsigned hyper uint64;
|
|
14
|
+
typedef hyper int64;
|
|
15
|
+
typedef unsigned int uint32;
|
|
16
|
+
typedef int int32;
|
|
17
|
+
typedef opaque AccountID[32];
|
|
18
|
+
typedef opaque Signature[64];
|
|
19
|
+
typedef opaque Hash[32];
|
|
20
|
+
typedef opaque Thresholds[4];
|
|
21
|
+
|
|
22
|
+
typedef uint64 SequenceNumber;
|
|
23
|
+
|
|
24
|
+
enum CurrencyType
|
|
25
|
+
{
|
|
26
|
+
NATIVE = 0,
|
|
27
|
+
ISO4217 = 1
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
struct ISOCurrencyIssuer
|
|
31
|
+
{
|
|
32
|
+
opaque currencyCode[4];
|
|
33
|
+
AccountID issuer;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
union Currency switch (CurrencyType type)
|
|
37
|
+
{
|
|
38
|
+
case NATIVE:
|
|
39
|
+
void;
|
|
40
|
+
|
|
41
|
+
case ISO4217:
|
|
42
|
+
ISOCurrencyIssuer isoCI;
|
|
43
|
+
|
|
44
|
+
// add other currency types here in the future
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
// price in fractional representation
|
|
48
|
+
struct Price
|
|
49
|
+
{
|
|
50
|
+
int32 n; // numerator
|
|
51
|
+
int32 d; // denominator
|
|
52
|
+
};
|
|
53
|
+
}
|
data/xdr/StellarXDR.x
ADDED