auction-ruby-base 0.1.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.
Files changed (226) 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/CHANGELOG.md +58 -0
  6. data/CONTRIBUTING.md +48 -0
  7. data/Gemfile +15 -0
  8. data/Guardfile +5 -0
  9. data/LICENSE.txt +202 -0
  10. data/README.md +83 -0
  11. data/Rakefile +4 -0
  12. data/auction-ruby-base.gemspec +35 -0
  13. data/examples/create_account.rb +26 -0
  14. data/examples/low_level_transaction_post.rb +46 -0
  15. data/examples/mid_level_transaction_post.rb +33 -0
  16. data/examples/non_native_payment.rb +60 -0
  17. data/examples/offer.rb +75 -0
  18. data/examples/transaction_merge.rb +23 -0
  19. data/generated/stellar-base-generated.rb +174 -0
  20. data/generated/stellar/account_entry.rb +55 -0
  21. data/generated/stellar/account_entry/ext.rb +24 -0
  22. data/generated/stellar/account_flags.rb +31 -0
  23. data/generated/stellar/account_merge_result.rb +26 -0
  24. data/generated/stellar/account_merge_result_code.rb +30 -0
  25. data/generated/stellar/affirm_fail_op.rb +22 -0
  26. data/generated/stellar/affirm_fail_result.rb +25 -0
  27. data/generated/stellar/affirm_fail_result_code.rb +22 -0
  28. data/generated/stellar/affirm_pass_op.rb +24 -0
  29. data/generated/stellar/affirm_pass_result.rb +25 -0
  30. data/generated/stellar/affirm_pass_result_code.rb +22 -0
  31. data/generated/stellar/allow_trust_op.rb +38 -0
  32. data/generated/stellar/allow_trust_op/asset.rb +33 -0
  33. data/generated/stellar/allow_trust_result.rb +25 -0
  34. data/generated/stellar/allow_trust_result_code.rb +31 -0
  35. data/generated/stellar/asset.rb +47 -0
  36. data/generated/stellar/asset/alpha_num12.rb +22 -0
  37. data/generated/stellar/asset/alpha_num4.rb +22 -0
  38. data/generated/stellar/asset_type.rb +24 -0
  39. data/generated/stellar/auth.rb +20 -0
  40. data/generated/stellar/auth_cert.rb +22 -0
  41. data/generated/stellar/authenticated_message.rb +32 -0
  42. data/generated/stellar/authenticated_message/v0.rb +24 -0
  43. data/generated/stellar/bucket_entry.rb +28 -0
  44. data/generated/stellar/bucket_entry_type.rb +22 -0
  45. data/generated/stellar/change_trust_op.rb +22 -0
  46. data/generated/stellar/change_trust_result.rb +25 -0
  47. data/generated/stellar/change_trust_result_code.rb +31 -0
  48. data/generated/stellar/claim_offer_atom.rb +33 -0
  49. data/generated/stellar/create_account_op.rb +20 -0
  50. data/generated/stellar/create_account_result.rb +25 -0
  51. data/generated/stellar/create_account_result_code.rb +32 -0
  52. data/generated/stellar/create_bid_op.rb +20 -0
  53. data/generated/stellar/create_bid_result.rb +25 -0
  54. data/generated/stellar/create_bid_result_code.rb +22 -0
  55. data/generated/stellar/create_lot_op.rb +46 -0
  56. data/generated/stellar/create_lot_result.rb +25 -0
  57. data/generated/stellar/create_lot_result_code.rb +22 -0
  58. data/generated/stellar/create_passive_offer_op.rb +24 -0
  59. data/generated/stellar/crypto_key_type.rb +20 -0
  60. data/generated/stellar/curve25519_public.rb +18 -0
  61. data/generated/stellar/curve25519_secret.rb +18 -0
  62. data/generated/stellar/decorated_signature.rb +20 -0
  63. data/generated/stellar/dont_have.rb +20 -0
  64. data/generated/stellar/envelope_type.rb +24 -0
  65. data/generated/stellar/error.rb +20 -0
  66. data/generated/stellar/error_code.rb +28 -0
  67. data/generated/stellar/hello.rb +34 -0
  68. data/generated/stellar/hmac_sha256_key.rb +18 -0
  69. data/generated/stellar/hmac_sha256_mac.rb +18 -0
  70. data/generated/stellar/inflation_payout.rb +20 -0
  71. data/generated/stellar/inflation_result.rb +26 -0
  72. data/generated/stellar/inflation_result_code.rb +24 -0
  73. data/generated/stellar/ip_addr_type.rb +22 -0
  74. data/generated/stellar/ledger_entry.rb +52 -0
  75. data/generated/stellar/ledger_entry/data.rb +49 -0
  76. data/generated/stellar/ledger_entry/ext.rb +24 -0
  77. data/generated/stellar/ledger_entry_change.rb +35 -0
  78. data/generated/stellar/ledger_entry_change_type.rb +26 -0
  79. data/generated/stellar/ledger_entry_type.rb +32 -0
  80. data/generated/stellar/ledger_header.rb +69 -0
  81. data/generated/stellar/ledger_header/ext.rb +24 -0
  82. data/generated/stellar/ledger_header_history_entry.rb +33 -0
  83. data/generated/stellar/ledger_header_history_entry/ext.rb +24 -0
  84. data/generated/stellar/ledger_key.rb +87 -0
  85. data/generated/stellar/ledger_key/account.rb +20 -0
  86. data/generated/stellar/ledger_key/lot.rb +22 -0
  87. data/generated/stellar/ledger_key/message.rb +22 -0
  88. data/generated/stellar/ledger_key/offer.rb +22 -0
  89. data/generated/stellar/ledger_key/participant.rb +22 -0
  90. data/generated/stellar/ledger_key/proof.rb +22 -0
  91. data/generated/stellar/ledger_key/trust_line.rb +22 -0
  92. data/generated/stellar/ledger_scp_messages.rb +20 -0
  93. data/generated/stellar/ledger_upgrade.rb +31 -0
  94. data/generated/stellar/ledger_upgrade_type.rb +24 -0
  95. data/generated/stellar/lot_branch.rb +21 -0
  96. data/generated/stellar/lot_entry.rb +64 -0
  97. data/generated/stellar/lot_entry/ext.rb +24 -0
  98. data/generated/stellar/lot_type.rb +21 -0
  99. data/generated/stellar/manage_offer_effect.rb +24 -0
  100. data/generated/stellar/manage_offer_op.rb +28 -0
  101. data/generated/stellar/manage_offer_result.rb +26 -0
  102. data/generated/stellar/manage_offer_result_code.rb +50 -0
  103. data/generated/stellar/manage_offer_success_result.rb +34 -0
  104. data/generated/stellar/manage_offer_success_result/offer.rb +30 -0
  105. data/generated/stellar/memo.rb +38 -0
  106. data/generated/stellar/memo_type.rb +28 -0
  107. data/generated/stellar/message_entry.rb +38 -0
  108. data/generated/stellar/message_entry/ext.rb +24 -0
  109. data/generated/stellar/message_type.rb +51 -0
  110. data/generated/stellar/offer_entry.rb +49 -0
  111. data/generated/stellar/offer_entry/ext.rb +24 -0
  112. data/generated/stellar/offer_entry_flags.rb +21 -0
  113. data/generated/stellar/operation.rb +65 -0
  114. data/generated/stellar/operation/body.rb +88 -0
  115. data/generated/stellar/operation_meta.rb +18 -0
  116. data/generated/stellar/operation_result.rb +67 -0
  117. data/generated/stellar/operation_result/tr.rb +89 -0
  118. data/generated/stellar/operation_result_code.rb +25 -0
  119. data/generated/stellar/operation_type.rb +52 -0
  120. data/generated/stellar/participant_entry.rb +39 -0
  121. data/generated/stellar/participant_entry/ext.rb +24 -0
  122. data/generated/stellar/participant_state.rb +25 -0
  123. data/generated/stellar/path_payment_op.rb +32 -0
  124. data/generated/stellar/path_payment_result.rb +38 -0
  125. data/generated/stellar/path_payment_result/success.rb +22 -0
  126. data/generated/stellar/path_payment_result_code.rb +47 -0
  127. data/generated/stellar/payment_op.rb +22 -0
  128. data/generated/stellar/payment_result.rb +25 -0
  129. data/generated/stellar/payment_result_code.rb +41 -0
  130. data/generated/stellar/peer_address.rb +33 -0
  131. data/generated/stellar/peer_address/ip.rb +29 -0
  132. data/generated/stellar/price.rb +20 -0
  133. data/generated/stellar/proof_entry.rb +42 -0
  134. data/generated/stellar/proof_entry/ext.rb +24 -0
  135. data/generated/stellar/provide_proof_op.rb +24 -0
  136. data/generated/stellar/provide_proof_result.rb +25 -0
  137. data/generated/stellar/provide_proof_result_code.rb +22 -0
  138. data/generated/stellar/public_key.rb +23 -0
  139. data/generated/stellar/register_participant_op.rb +22 -0
  140. data/generated/stellar/register_participant_result.rb +25 -0
  141. data/generated/stellar/register_participant_result_code.rb +22 -0
  142. data/generated/stellar/scp_ballot.rb +20 -0
  143. data/generated/stellar/scp_envelope.rb +20 -0
  144. data/generated/stellar/scp_history_entry.rb +23 -0
  145. data/generated/stellar/scp_history_entry_v0.rb +20 -0
  146. data/generated/stellar/scp_nomination.rb +22 -0
  147. data/generated/stellar/scp_quorum_set.rb +22 -0
  148. data/generated/stellar/scp_statement.rb +58 -0
  149. data/generated/stellar/scp_statement/pledges.rb +63 -0
  150. data/generated/stellar/scp_statement/pledges/confirm.rb +30 -0
  151. data/generated/stellar/scp_statement/pledges/externalize.rb +26 -0
  152. data/generated/stellar/scp_statement/pledges/prepare.rb +32 -0
  153. data/generated/stellar/scp_statement_type.rb +26 -0
  154. data/generated/stellar/send_message_op.rb +22 -0
  155. data/generated/stellar/send_message_result.rb +25 -0
  156. data/generated/stellar/send_message_result_code.rb +22 -0
  157. data/generated/stellar/set_options_op.rb +41 -0
  158. data/generated/stellar/set_options_result.rb +25 -0
  159. data/generated/stellar/set_options_result_code.rb +40 -0
  160. data/generated/stellar/signer.rb +20 -0
  161. data/generated/stellar/simple_payment_result.rb +22 -0
  162. data/generated/stellar/stellar_message.rb +74 -0
  163. data/generated/stellar/stellar_value.rb +41 -0
  164. data/generated/stellar/stellar_value/ext.rb +24 -0
  165. data/generated/stellar/threshold_indexes.rb +26 -0
  166. data/generated/stellar/time_bounds.rb +20 -0
  167. data/generated/stellar/transaction.rb +50 -0
  168. data/generated/stellar/transaction/ext.rb +24 -0
  169. data/generated/stellar/transaction_envelope.rb +20 -0
  170. data/generated/stellar/transaction_history_entry.rb +33 -0
  171. data/generated/stellar/transaction_history_entry/ext.rb +24 -0
  172. data/generated/stellar/transaction_history_result_entry.rb +33 -0
  173. data/generated/stellar/transaction_history_result_entry/ext.rb +24 -0
  174. data/generated/stellar/transaction_meta.rb +23 -0
  175. data/generated/stellar/transaction_result.rb +43 -0
  176. data/generated/stellar/transaction_result/ext.rb +24 -0
  177. data/generated/stellar/transaction_result/result.rb +30 -0
  178. data/generated/stellar/transaction_result_code.rb +45 -0
  179. data/generated/stellar/transaction_result_pair.rb +20 -0
  180. data/generated/stellar/transaction_result_set.rb +18 -0
  181. data/generated/stellar/transaction_set.rb +20 -0
  182. data/generated/stellar/trust_line_entry.rb +41 -0
  183. data/generated/stellar/trust_line_entry/ext.rb +24 -0
  184. data/generated/stellar/trust_line_flags.rb +21 -0
  185. data/lib/stellar-base.rb +33 -0
  186. data/lib/stellar/account_flags.rb +28 -0
  187. data/lib/stellar/asset.rb +69 -0
  188. data/lib/stellar/base.rb +1 -0
  189. data/lib/stellar/base/version.rb +5 -0
  190. data/lib/stellar/convert.rb +32 -0
  191. data/lib/stellar/key_pair.rb +112 -0
  192. data/lib/stellar/networks.rb +45 -0
  193. data/lib/stellar/operation.rb +384 -0
  194. data/lib/stellar/path_payment_result.rb +17 -0
  195. data/lib/stellar/price.rb +32 -0
  196. data/lib/stellar/thresholds.rb +39 -0
  197. data/lib/stellar/transaction.rb +205 -0
  198. data/lib/stellar/transaction_envelope.rb +32 -0
  199. data/lib/stellar/util/continued_fraction.rb +96 -0
  200. data/lib/stellar/util/strkey.rb +43 -0
  201. data/spec/lib/stellar/account_flags_spec.rb +19 -0
  202. data/spec/lib/stellar/asset_spec.rb +45 -0
  203. data/spec/lib/stellar/convert_spec.rb +61 -0
  204. data/spec/lib/stellar/key_pair_spec.rb +238 -0
  205. data/spec/lib/stellar/networks_spec.rb +77 -0
  206. data/spec/lib/stellar/operation_spec.rb +13 -0
  207. data/spec/lib/stellar/path_payment_result_spec.rb +95 -0
  208. data/spec/lib/stellar/price_spec.rb +34 -0
  209. data/spec/lib/stellar/thresholds_spec.rb +62 -0
  210. data/spec/lib/stellar/transaction_envelope_spec.rb +93 -0
  211. data/spec/lib/stellar/transaction_spec.rb +83 -0
  212. data/spec/lib/stellar/util/strkey_spec.rb +46 -0
  213. data/spec/spec_helper.rb +16 -0
  214. data/spec/support/matchers/be_strkey.rb +9 -0
  215. data/spec/support/matchers/eq_bytes.rb +5 -0
  216. data/spec/support/matchers/have_length.rb +5 -0
  217. data/tasks/rspec.rake +6 -0
  218. data/tasks/travis.rake +1 -0
  219. data/tasks/xdr.rake +50 -0
  220. data/xdr/Stellar-SCP.x +86 -0
  221. data/xdr/Stellar-ledger-entries.x +351 -0
  222. data/xdr/Stellar-ledger.x +288 -0
  223. data/xdr/Stellar-overlay.x +146 -0
  224. data/xdr/Stellar-transaction.x +936 -0
  225. data/xdr/Stellar-types.x +55 -0
  226. metadata +495 -0
@@ -0,0 +1,146 @@
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
+ enum ErrorCode
11
+ {
12
+ ERR_MISC = 0, // Unspecific error
13
+ ERR_DATA = 1, // Malformed data
14
+ ERR_CONF = 2, // Misconfiguration error
15
+ ERR_AUTH = 3, // Authentication failure
16
+ ERR_LOAD = 4 // System overloaded
17
+ };
18
+
19
+ struct Error
20
+ {
21
+ ErrorCode code;
22
+ string msg<100>;
23
+ };
24
+
25
+ struct AuthCert
26
+ {
27
+ Curve25519Public pubkey;
28
+ uint64 expiration;
29
+ Signature sig;
30
+ };
31
+
32
+ struct Hello
33
+ {
34
+ uint32 ledgerVersion;
35
+ uint32 overlayVersion;
36
+ uint32 overlayMinVersion;
37
+ Hash networkID;
38
+ string versionStr<100>;
39
+ int listeningPort;
40
+ NodeID peerID;
41
+ AuthCert cert;
42
+ uint256 nonce;
43
+ };
44
+
45
+ struct Auth
46
+ {
47
+ // Empty message, just to confirm
48
+ // establishment of MAC keys.
49
+ int unused;
50
+ };
51
+
52
+ enum IPAddrType
53
+ {
54
+ IPv4 = 0,
55
+ IPv6 = 1
56
+ };
57
+
58
+ struct PeerAddress
59
+ {
60
+ union switch (IPAddrType type)
61
+ {
62
+ case IPv4:
63
+ opaque ipv4[4];
64
+ case IPv6:
65
+ opaque ipv6[16];
66
+ }
67
+ ip;
68
+ uint32 port;
69
+ uint32 numFailures;
70
+ };
71
+
72
+ enum MessageType
73
+ {
74
+ ERROR_MSG = 0,
75
+ AUTH = 2,
76
+ DONT_HAVE = 3,
77
+
78
+ GET_PEERS = 4, // gets a list of peers this guy knows about
79
+ PEERS = 5,
80
+
81
+ GET_TX_SET = 6, // gets a particular txset by hash
82
+ TX_SET = 7,
83
+
84
+ TRANSACTION = 8, // pass on a tx you have heard about
85
+
86
+ // SCP
87
+ GET_SCP_QUORUMSET = 9,
88
+ SCP_QUORUMSET = 10,
89
+ SCP_MESSAGE = 11,
90
+ GET_SCP_STATE = 12,
91
+
92
+ // new messages
93
+ HELLO = 13
94
+ };
95
+
96
+ struct DontHave
97
+ {
98
+ MessageType type;
99
+ uint256 reqHash;
100
+ };
101
+
102
+ union StellarMessage switch (MessageType type)
103
+ {
104
+ case ERROR_MSG:
105
+ Error error;
106
+ case HELLO:
107
+ Hello hello;
108
+ case AUTH:
109
+ Auth auth;
110
+ case DONT_HAVE:
111
+ DontHave dontHave;
112
+ case GET_PEERS:
113
+ void;
114
+ case PEERS:
115
+ PeerAddress peers<>;
116
+
117
+ case GET_TX_SET:
118
+ uint256 txSetHash;
119
+ case TX_SET:
120
+ TransactionSet txSet;
121
+
122
+ case TRANSACTION:
123
+ TransactionEnvelope transaction;
124
+
125
+ // SCP
126
+ case GET_SCP_QUORUMSET:
127
+ uint256 qSetHash;
128
+ case SCP_QUORUMSET:
129
+ SCPQuorumSet qSet;
130
+ case SCP_MESSAGE:
131
+ SCPEnvelope envelope;
132
+ case GET_SCP_STATE:
133
+ uint32 getSCPLedgerSeq; // ledger seq requested ; if 0, requests the latest
134
+ };
135
+
136
+ union AuthenticatedMessage switch (uint32 v)
137
+ {
138
+ case 0:
139
+ struct
140
+ {
141
+ uint64 sequence;
142
+ StellarMessage message;
143
+ HmacSha256Mac mac;
144
+ } v0;
145
+ };
146
+ }
@@ -0,0 +1,936 @@
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; // last 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
+ CREATE_LOT = 10,
29
+ REGISTER_PARTICIPANT = 11,
30
+ PROVIDE_PROOF = 12,
31
+ SEND_MESSAGE = 13,
32
+ CREATE_BID = 14,
33
+ AFFIRM_FAIL = 15,
34
+ AFFIRM_PASS = 16
35
+ };
36
+
37
+ /* CreateAccount
38
+ Creates and funds a new account with the specified starting balance.
39
+
40
+ Threshold: med
41
+
42
+ Result: CreateAccountResult
43
+
44
+ */
45
+
46
+ struct CreateAccountOp
47
+ {
48
+ AccountID destination; // account to create
49
+ string32 codeKYC;
50
+ };
51
+
52
+ /* CreateLot
53
+ Creates a new lot
54
+
55
+ Threshold: med
56
+
57
+ Result: CreateLotResult
58
+ */
59
+
60
+ struct CreateLotOp
61
+ {
62
+ string lotName<1000>; // name of the lot
63
+ uint32 type;
64
+ string32 lotCode;
65
+ string lotAddress<1000>;
66
+ uint32 lotBranch;
67
+ string lotLocation<1000>;
68
+ uint64 startPrice;
69
+ uint32 minStep;
70
+ uint32 maxStep;
71
+ uint64 published;
72
+ uint64 aucStarted;
73
+ uint64 duration;
74
+ uint64 pledge;
75
+ string details<1000>;
76
+ AccountID publisherID;
77
+ };
78
+
79
+ /* CreateBid
80
+ Creates a new bid
81
+
82
+ Threshold: med
83
+
84
+ Result: CreateBidResult
85
+ */
86
+
87
+ struct CreateBidOp
88
+ {
89
+ uint64 lotID; // name of the lot
90
+ uint64 amount;
91
+ };
92
+
93
+ /* AffirmFail
94
+
95
+ Threshold: med
96
+
97
+ Result: AffirmFailResult
98
+ */
99
+
100
+ struct AffirmFailOp
101
+ {
102
+ uint64 lotID;
103
+ string purpose<1000>;
104
+ AccountID accountID;
105
+ };
106
+ /* AffirmPass
107
+
108
+ Threshold: med
109
+
110
+ Result: AffirmPassResult
111
+ */
112
+
113
+ struct AffirmPassOp
114
+ {
115
+ uint64 lotID; // name of the lot
116
+ string paperHash<1000>;
117
+ string paperLink<1000>;
118
+ AccountID accountID;
119
+ };
120
+
121
+ /* Register participant
122
+
123
+ Threshold: med
124
+
125
+ Result: RegisterParticipantResult
126
+ */
127
+
128
+ struct RegisterParticipantOp
129
+ {
130
+ uint64 lotID; // name of the lot
131
+ AccountID accountID;
132
+ uint64 bestBid;
133
+ };
134
+
135
+ /* ProvideProof
136
+
137
+ Threshold: med
138
+
139
+ Result: ProvideProofResult
140
+ */
141
+
142
+ struct ProvideProofOp
143
+ {
144
+ uint64 lotID; // name of the lot
145
+ uint32 quantity;
146
+ string proof<1000>;
147
+ uint64 bankID;
148
+ };
149
+
150
+ /* SendMessage
151
+
152
+ Threshold: med
153
+
154
+ Result: SendMessageResult
155
+ */
156
+
157
+ struct SendMessageOp
158
+ {
159
+ uint64 lotID; // name of the lot
160
+ string text<1000>;
161
+ uint64 refMessage;
162
+ };
163
+
164
+ /* Payment
165
+
166
+ Send an amount in specified asset to a destination account.
167
+
168
+ Threshold: med
169
+
170
+ Result: PaymentResult
171
+ */
172
+ struct PaymentOp
173
+ {
174
+ AccountID destination; // recipient of the payment
175
+ Asset asset; // what they end up with
176
+ int64 amount; // amount they end up with
177
+ };
178
+
179
+ /* PathPayment
180
+
181
+ send an amount to a destination account through a path.
182
+ (up to sendMax, sendAsset)
183
+ (X0, Path[0]) .. (Xn, Path[n])
184
+ (destAmount, destAsset)
185
+
186
+ Threshold: med
187
+
188
+ Result: PathPaymentResult
189
+ */
190
+ struct PathPaymentOp
191
+ {
192
+ Asset sendAsset; // asset we pay with
193
+ int64 sendMax; // the maximum amount of sendAsset to
194
+ // send (excluding fees).
195
+ // The operation will fail if can't be met
196
+
197
+ AccountID destination; // recipient of the payment
198
+ Asset destAsset; // what they end up with
199
+ int64 destAmount; // amount they end up with
200
+
201
+ Asset path<5>; // additional hops it must go through to get there
202
+ };
203
+
204
+ /* Creates, updates or deletes an offer
205
+
206
+ Threshold: med
207
+
208
+ Result: ManageOfferResult
209
+
210
+ */
211
+ struct ManageOfferOp
212
+ {
213
+ Asset selling;
214
+ Asset buying;
215
+ int64 amount; // amount being sold. if set to 0, delete the offer
216
+ Price price; // price of thing being sold in terms of what you are buying
217
+
218
+ // 0=create a new offer, otherwise edit an existing offer
219
+ uint64 offerID;
220
+ };
221
+
222
+ /* Creates an offer that doesn't take offers of the same price
223
+
224
+ Threshold: med
225
+
226
+ Result: CreatePassiveOfferResult
227
+
228
+ */
229
+ struct CreatePassiveOfferOp
230
+ {
231
+ Asset selling; // A
232
+ Asset buying; // B
233
+ int64 amount; // amount taker gets. if set to 0, delete the offer
234
+ Price price; // cost of A in terms of B
235
+ };
236
+
237
+ /* Set Account Options
238
+
239
+ updates "AccountEntry" fields.
240
+ note: updating thresholds or signers requires high threshold
241
+
242
+ Threshold: med or high
243
+
244
+ Result: SetOptionsResult
245
+ */
246
+
247
+ struct SetOptionsOp
248
+ {
249
+ AccountID* inflationDest; // sets the inflation destination
250
+
251
+ uint32* clearFlags; // which flags to clear
252
+ uint32* setFlags; // which flags to set
253
+
254
+ // account threshold manipulation
255
+ uint32* masterWeight; // weight of the master account
256
+ uint32* lowThreshold;
257
+ uint32* medThreshold;
258
+ uint32* highThreshold;
259
+
260
+ string32* homeDomain; // sets the home domain
261
+
262
+ // Add, update or remove a signer for the account
263
+ // signer is deleted if the weight is 0
264
+ Signer* signer;
265
+ };
266
+
267
+ /* Creates, updates or deletes a trust line
268
+
269
+ Threshold: med
270
+
271
+ Result: ChangeTrustResult
272
+
273
+ */
274
+ struct ChangeTrustOp
275
+ {
276
+ Asset line;
277
+
278
+ // if limit is set to 0, deletes the trust line
279
+ int64 limit;
280
+ };
281
+
282
+ /* Updates the "authorized" flag of an existing trust line
283
+ this is called by the issuer of the related asset.
284
+
285
+ note that authorize can only be set (and not cleared) if
286
+ the issuer account does not have the AUTH_REVOCABLE_FLAG set
287
+ Threshold: low
288
+
289
+ Result: AllowTrustResult
290
+ */
291
+ struct AllowTrustOp
292
+ {
293
+ AccountID trustor;
294
+ union switch (AssetType type)
295
+ {
296
+ // ASSET_TYPE_NATIVE is not allowed
297
+ case ASSET_TYPE_CREDIT_ALPHANUM4:
298
+ opaque assetCode4[4];
299
+
300
+ case ASSET_TYPE_CREDIT_ALPHANUM12:
301
+ opaque assetCode12[12];
302
+
303
+ // add other asset types here in the future
304
+ }
305
+ asset;
306
+
307
+ bool authorize;
308
+ };
309
+
310
+ /* Inflation
311
+ Runs inflation
312
+
313
+ Threshold: low
314
+
315
+ Result: InflationResult
316
+
317
+ */
318
+
319
+ /* AccountMerge
320
+ Transfers native balance to destination account.
321
+
322
+ Threshold: high
323
+
324
+ Result : AccountMergeResult
325
+ */
326
+
327
+ /* An operation is the lowest unit of work that a transaction does */
328
+ struct Operation
329
+ {
330
+ // sourceAccount is the account used to run the operation
331
+ // if not set, the runtime defaults to "sourceAccount" specified at
332
+ // the transaction level
333
+ AccountID* sourceAccount;
334
+
335
+ union switch (OperationType type)
336
+ {
337
+ case CREATE_ACCOUNT:
338
+ CreateAccountOp createAccountOp;
339
+ case PAYMENT:
340
+ PaymentOp paymentOp;
341
+ case PATH_PAYMENT:
342
+ PathPaymentOp pathPaymentOp;
343
+ case MANAGE_OFFER:
344
+ ManageOfferOp manageOfferOp;
345
+ case CREATE_PASSIVE_OFFER:
346
+ CreatePassiveOfferOp createPassiveOfferOp;
347
+ case SET_OPTIONS:
348
+ SetOptionsOp setOptionsOp;
349
+ case CHANGE_TRUST:
350
+ ChangeTrustOp changeTrustOp;
351
+ case ALLOW_TRUST:
352
+ AllowTrustOp allowTrustOp;
353
+ case ACCOUNT_MERGE:
354
+ AccountID destination;
355
+ case INFLATION:
356
+ void;
357
+ case CREATE_LOT:
358
+ CreateLotOp createLotOp;
359
+ case REGISTER_PARTICIPANT:
360
+ RegisterParticipantOp registerParticipantOp;
361
+ case PROVIDE_PROOF:
362
+ ProvideProofOp provideProofOp;
363
+ case SEND_MESSAGE:
364
+ SendMessageOp sendMessageOp;
365
+ case CREATE_BID:
366
+ CreateBidOp createBidOp;
367
+ case AFFIRM_FAIL:
368
+ AffirmFailOp affirmFailOp;
369
+ case AFFIRM_PASS:
370
+ AffirmPassOp affirmPassOp;
371
+ }
372
+ body;
373
+ };
374
+
375
+ enum MemoType
376
+ {
377
+ MEMO_NONE = 0,
378
+ MEMO_TEXT = 1,
379
+ MEMO_ID = 2,
380
+ MEMO_HASH = 3,
381
+ MEMO_RETURN = 4
382
+ };
383
+
384
+ union Memo switch (MemoType type)
385
+ {
386
+ case MEMO_NONE:
387
+ void;
388
+ case MEMO_TEXT:
389
+ string text<28>;
390
+ case MEMO_ID:
391
+ uint64 id;
392
+ case MEMO_HASH:
393
+ Hash hash; // the hash of what to pull from the content server
394
+ case MEMO_RETURN:
395
+ Hash retHash; // the hash of the tx you are rejecting
396
+ };
397
+
398
+ struct TimeBounds
399
+ {
400
+ uint64 minTime;
401
+ uint64 maxTime;
402
+ };
403
+
404
+ /* a transaction is a container for a set of operations
405
+ - is executed by an account
406
+ - fees are collected from the account
407
+ - operations are executed in order as one ACID transaction
408
+ either all operations are applied or none are
409
+ if any returns a failing code
410
+ */
411
+
412
+ struct Transaction
413
+ {
414
+ // account used to run the transaction
415
+ AccountID sourceAccount;
416
+
417
+ // the fee the sourceAccount will pay
418
+ uint32 fee;
419
+
420
+ // sequence number to consume in the account
421
+ SequenceNumber seqNum;
422
+
423
+ // validity range (inclusive) for the last ledger close time
424
+ TimeBounds* timeBounds;
425
+
426
+ Memo memo;
427
+
428
+ Operation operations<100>;
429
+
430
+ // reserved for future use
431
+ union switch (int v)
432
+ {
433
+ case 0:
434
+ void;
435
+ }
436
+ ext;
437
+ };
438
+
439
+ /* A TransactionEnvelope wraps a transaction with signatures. */
440
+ struct TransactionEnvelope
441
+ {
442
+ Transaction tx;
443
+ DecoratedSignature signatures<20>;
444
+ };
445
+
446
+ /* Operation Results section */
447
+
448
+ /* This result is used when offers are taken during an operation */
449
+ struct ClaimOfferAtom
450
+ {
451
+ // emitted to identify the offer
452
+ AccountID sellerID; // Account that owns the offer
453
+ uint64 offerID;
454
+
455
+ // amount and asset taken from the owner
456
+ Asset assetSold;
457
+ int64 amountSold;
458
+
459
+ // amount and asset sent to the owner
460
+ Asset assetBought;
461
+ int64 amountBought;
462
+ };
463
+
464
+ /******* CreateAccount Result ********/
465
+
466
+ enum CreateAccountResultCode
467
+ {
468
+ // codes considered as "success" for the operation
469
+ CREATE_ACCOUNT_SUCCESS = 0, // account was created
470
+
471
+ // codes considered as "failure" for the operation
472
+ CREATE_ACCOUNT_MALFORMED = -1, // invalid destination
473
+ CREATE_ACCOUNT_UNDERFUNDED = -2, // not enough funds in source account
474
+ CREATE_ACCOUNT_LOW_RESERVE =
475
+ -3, // would create an account below the min reserve
476
+ CREATE_ACCOUNT_ALREADY_EXIST = -4 // account already exists
477
+ };
478
+
479
+ union CreateAccountResult switch (CreateAccountResultCode code)
480
+ {
481
+ case CREATE_ACCOUNT_SUCCESS:
482
+ void;
483
+ default:
484
+ void;
485
+ };
486
+
487
+ /******* CreateLot Result ********/
488
+
489
+ enum CreateLotResultCode
490
+ {
491
+ CREATE_LOT_SUCCESS = 0, // lot was created
492
+ CREATE_LOT_ERROR = 1 // lot was created
493
+ };
494
+
495
+ union CreateLotResult switch (CreateLotResultCode code)
496
+ {
497
+ case CREATE_LOT_SUCCESS:
498
+ void;
499
+ default:
500
+ void;
501
+ };
502
+
503
+ /******* CreateBid Result ********/
504
+
505
+ enum CreateBidResultCode
506
+ {
507
+ CREATE_BID_SUCCESS = 0,
508
+ CREATE_BID_ERROR = 1
509
+ };
510
+
511
+ union CreateBidResult switch (CreateBidResultCode code)
512
+ {
513
+ case CREATE_BID_SUCCESS:
514
+ void;
515
+ default:
516
+ void;
517
+ };
518
+
519
+ /******* AffirmFail Result ********/
520
+
521
+ enum AffirmFailResultCode
522
+ {
523
+ AFFIRM_FAIL_SUCCESS = 0,
524
+ AFFIRM_FAIL_ERROR = 1
525
+ };
526
+
527
+ union AffirmFailResult switch (AffirmFailResultCode code)
528
+ {
529
+ case AFFIRM_FAIL_SUCCESS:
530
+ void;
531
+ default:
532
+ void;
533
+ };
534
+
535
+ /******* AffirmPass Result ********/
536
+
537
+ enum AffirmPassResultCode
538
+ {
539
+ AFFIRM_PASS_SUCCESS = 0,
540
+ AFFIRM_PASS_ERROR = 1
541
+ };
542
+
543
+ union AffirmPassResult switch (AffirmPassResultCode code)
544
+ {
545
+ case AFFIRM_PASS_SUCCESS:
546
+ void;
547
+ default:
548
+ void;
549
+ };
550
+
551
+ /******* RegisterParticipant Result ********/
552
+
553
+ enum RegisterParticipantResultCode
554
+ {
555
+ REGISTER_PARTICIPANT_SUCCESS = 0, // lot was created
556
+ REGISTER_PARTICIPANT_ERROR = 1 // lot was created
557
+ };
558
+
559
+ union RegisterParticipantResult switch (RegisterParticipantResultCode code)
560
+ {
561
+ case REGISTER_PARTICIPANT_SUCCESS:
562
+ void;
563
+ default:
564
+ void;
565
+ };
566
+
567
+ /******* ProvideProof Result ********/
568
+
569
+ enum ProvideProofResultCode
570
+ {
571
+ PROVIDE_PROOF_SUCCESS = 0,
572
+ PROVIDE_PROOF_ERROR = 1
573
+ };
574
+
575
+ union ProvideProofResult switch (ProvideProofResultCode code)
576
+ {
577
+ case PROVIDE_PROOF_SUCCESS:
578
+ void;
579
+ default:
580
+ void;
581
+ };
582
+
583
+ /******* SendMessage Result ********/
584
+
585
+ enum SendMessageResultCode
586
+ {
587
+ SEND_MESSAGE_SUCCESS = 0, // lot was created
588
+ SEND_MESSAGE_ERROR = 1 // lot was created
589
+ };
590
+
591
+ union SendMessageResult switch (SendMessageResultCode code)
592
+ {
593
+ case SEND_MESSAGE_SUCCESS:
594
+ void;
595
+ default:
596
+ void;
597
+ };
598
+
599
+ /******* Payment Result ********/
600
+
601
+ enum PaymentResultCode
602
+ {
603
+ // codes considered as "success" for the operation
604
+ PAYMENT_SUCCESS = 0, // payment successfuly completed
605
+
606
+ // codes considered as "failure" for the operation
607
+ PAYMENT_MALFORMED = -1, // bad input
608
+ PAYMENT_UNDERFUNDED = -2, // not enough funds in source account
609
+ PAYMENT_SRC_NO_TRUST = -3, // no trust line on source account
610
+ PAYMENT_SRC_NOT_AUTHORIZED = -4, // source not authorized to transfer
611
+ PAYMENT_NO_DESTINATION = -5, // destination account does not exist
612
+ PAYMENT_NO_TRUST = -6, // destination missing a trust line for asset
613
+ PAYMENT_NOT_AUTHORIZED = -7, // destination not authorized to hold asset
614
+ PAYMENT_LINE_FULL = -8, // destination would go above their limit
615
+ PAYMENT_NO_ISSUER = -9 // missing issuer on asset
616
+ };
617
+
618
+ union PaymentResult switch (PaymentResultCode code)
619
+ {
620
+ case PAYMENT_SUCCESS:
621
+ void;
622
+ default:
623
+ void;
624
+ };
625
+
626
+ /******* Payment Result ********/
627
+
628
+ enum PathPaymentResultCode
629
+ {
630
+ // codes considered as "success" for the operation
631
+ PATH_PAYMENT_SUCCESS = 0, // success
632
+
633
+ // codes considered as "failure" for the operation
634
+ PATH_PAYMENT_MALFORMED = -1, // bad input
635
+ PATH_PAYMENT_UNDERFUNDED = -2, // not enough funds in source account
636
+ PATH_PAYMENT_SRC_NO_TRUST = -3, // no trust line on source account
637
+ PATH_PAYMENT_SRC_NOT_AUTHORIZED = -4, // source not authorized to transfer
638
+ PATH_PAYMENT_NO_DESTINATION = -5, // destination account does not exist
639
+ PATH_PAYMENT_NO_TRUST = -6, // dest missing a trust line for asset
640
+ PATH_PAYMENT_NOT_AUTHORIZED = -7, // dest not authorized to hold asset
641
+ PATH_PAYMENT_LINE_FULL = -8, // dest would go above their limit
642
+ PATH_PAYMENT_NO_ISSUER = -9, // missing issuer on one asset
643
+ PATH_PAYMENT_TOO_FEW_OFFERS = -10, // not enough offers to satisfy path
644
+ PATH_PAYMENT_OFFER_CROSS_SELF = -11, // would cross one of its own offers
645
+ PATH_PAYMENT_OVER_SENDMAX = -12 // could not satisfy sendmax
646
+ };
647
+
648
+ struct SimplePaymentResult
649
+ {
650
+ AccountID destination;
651
+ Asset asset;
652
+ int64 amount;
653
+ };
654
+
655
+ union PathPaymentResult switch (PathPaymentResultCode code)
656
+ {
657
+ case PATH_PAYMENT_SUCCESS:
658
+ struct
659
+ {
660
+ ClaimOfferAtom offers<>;
661
+ SimplePaymentResult last;
662
+ } success;
663
+ case PATH_PAYMENT_NO_ISSUER:
664
+ Asset noIssuer; // the asset that caused the error
665
+ default:
666
+ void;
667
+ };
668
+
669
+ /******* ManageOffer Result ********/
670
+
671
+ enum ManageOfferResultCode
672
+ {
673
+ // codes considered as "success" for the operation
674
+ MANAGE_OFFER_SUCCESS = 0,
675
+
676
+ // codes considered as "failure" for the operation
677
+ MANAGE_OFFER_MALFORMED = -1, // generated offer would be invalid
678
+ MANAGE_OFFER_SELL_NO_TRUST = -2, // no trust line for what we're selling
679
+ MANAGE_OFFER_BUY_NO_TRUST = -3, // no trust line for what we're buying
680
+ MANAGE_OFFER_SELL_NOT_AUTHORIZED = -4, // not authorized to sell
681
+ MANAGE_OFFER_BUY_NOT_AUTHORIZED = -5, // not authorized to buy
682
+ MANAGE_OFFER_LINE_FULL = -6, // can't receive more of what it's buying
683
+ MANAGE_OFFER_UNDERFUNDED = -7, // doesn't hold what it's trying to sell
684
+ MANAGE_OFFER_CROSS_SELF = -8, // would cross an offer from the same user
685
+ MANAGE_OFFER_SELL_NO_ISSUER = -9, // no issuer for what we're selling
686
+ MANAGE_OFFER_BUY_NO_ISSUER = -10, // no issuer for what we're buying
687
+
688
+ // update errors
689
+ MANAGE_OFFER_NOT_FOUND = -11, // offerID does not match an existing offer
690
+
691
+ MANAGE_OFFER_LOW_RESERVE = -12 // not enough funds to create a new Offer
692
+ };
693
+
694
+ enum ManageOfferEffect
695
+ {
696
+ MANAGE_OFFER_CREATED = 0,
697
+ MANAGE_OFFER_UPDATED = 1,
698
+ MANAGE_OFFER_DELETED = 2
699
+ };
700
+
701
+ struct ManageOfferSuccessResult
702
+ {
703
+ // offers that got claimed while creating this offer
704
+ ClaimOfferAtom offersClaimed<>;
705
+
706
+ union switch (ManageOfferEffect effect)
707
+ {
708
+ case MANAGE_OFFER_CREATED:
709
+ case MANAGE_OFFER_UPDATED:
710
+ OfferEntry offer;
711
+ default:
712
+ void;
713
+ }
714
+ offer;
715
+ };
716
+
717
+ union ManageOfferResult switch (ManageOfferResultCode code)
718
+ {
719
+ case MANAGE_OFFER_SUCCESS:
720
+ ManageOfferSuccessResult success;
721
+ default:
722
+ void;
723
+ };
724
+
725
+ /******* SetOptions Result ********/
726
+
727
+ enum SetOptionsResultCode
728
+ {
729
+ // codes considered as "success" for the operation
730
+ SET_OPTIONS_SUCCESS = 0,
731
+ // codes considered as "failure" for the operation
732
+ SET_OPTIONS_LOW_RESERVE = -1, // not enough funds to add a signer
733
+ SET_OPTIONS_TOO_MANY_SIGNERS = -2, // max number of signers already reached
734
+ SET_OPTIONS_BAD_FLAGS = -3, // invalid combination of clear/set flags
735
+ SET_OPTIONS_INVALID_INFLATION = -4, // inflation account does not exist
736
+ SET_OPTIONS_CANT_CHANGE = -5, // can no longer change this option
737
+ SET_OPTIONS_UNKNOWN_FLAG = -6, // can't set an unknown flag
738
+ SET_OPTIONS_THRESHOLD_OUT_OF_RANGE = -7, // bad value for weight/threshold
739
+ SET_OPTIONS_BAD_SIGNER = -8, // signer cannot be masterkey
740
+ SET_OPTIONS_INVALID_HOME_DOMAIN = -9 // malformed home domain
741
+ };
742
+
743
+ union SetOptionsResult switch (SetOptionsResultCode code)
744
+ {
745
+ case SET_OPTIONS_SUCCESS:
746
+ void;
747
+ default:
748
+ void;
749
+ };
750
+
751
+ /******* ChangeTrust Result ********/
752
+
753
+ enum ChangeTrustResultCode
754
+ {
755
+ // codes considered as "success" for the operation
756
+ CHANGE_TRUST_SUCCESS = 0,
757
+ // codes considered as "failure" for the operation
758
+ CHANGE_TRUST_MALFORMED = -1, // bad input
759
+ CHANGE_TRUST_NO_ISSUER = -2, // could not find issuer
760
+ CHANGE_TRUST_INVALID_LIMIT = -3, // cannot drop limit below balance
761
+ // cannot create with a limit of 0
762
+ CHANGE_TRUST_LOW_RESERVE = -4 // not enough funds to create a new trust line
763
+ };
764
+
765
+ union ChangeTrustResult switch (ChangeTrustResultCode code)
766
+ {
767
+ case CHANGE_TRUST_SUCCESS:
768
+ void;
769
+ default:
770
+ void;
771
+ };
772
+
773
+ /******* AllowTrust Result ********/
774
+
775
+ enum AllowTrustResultCode
776
+ {
777
+ // codes considered as "success" for the operation
778
+ ALLOW_TRUST_SUCCESS = 0,
779
+ // codes considered as "failure" for the operation
780
+ ALLOW_TRUST_MALFORMED = -1, // asset is not ASSET_TYPE_ALPHANUM
781
+ ALLOW_TRUST_NO_TRUST_LINE = -2, // trustor does not have a trustline
782
+ // source account does not require trust
783
+ ALLOW_TRUST_TRUST_NOT_REQUIRED = -3,
784
+ ALLOW_TRUST_CANT_REVOKE = -4 // source account can't revoke trust
785
+ };
786
+
787
+ union AllowTrustResult switch (AllowTrustResultCode code)
788
+ {
789
+ case ALLOW_TRUST_SUCCESS:
790
+ void;
791
+ default:
792
+ void;
793
+ };
794
+
795
+ /******* AccountMerge Result ********/
796
+
797
+ enum AccountMergeResultCode
798
+ {
799
+ // codes considered as "success" for the operation
800
+ ACCOUNT_MERGE_SUCCESS = 0,
801
+ // codes considered as "failure" for the operation
802
+ ACCOUNT_MERGE_MALFORMED = -1, // can't merge onto itself
803
+ ACCOUNT_MERGE_NO_ACCOUNT = -2, // destination does not exist
804
+ ACCOUNT_MERGE_IMMUTABLE_SET = -3, // source account has AUTH_IMMUTABLE set
805
+ ACCOUNT_MERGE_HAS_SUB_ENTRIES = -4 // account has trust lines/offers
806
+ };
807
+
808
+ union AccountMergeResult switch (AccountMergeResultCode code)
809
+ {
810
+ case ACCOUNT_MERGE_SUCCESS:
811
+ int64 sourceAccountBalance; // how much got transfered from source account
812
+ default:
813
+ void;
814
+ };
815
+
816
+ /******* Inflation Result ********/
817
+
818
+ enum InflationResultCode
819
+ {
820
+ // codes considered as "success" for the operation
821
+ INFLATION_SUCCESS = 0,
822
+ // codes considered as "failure" for the operation
823
+ INFLATION_NOT_TIME = -1
824
+ };
825
+
826
+ struct InflationPayout // or use PaymentResultAtom to limit types?
827
+ {
828
+ AccountID destination;
829
+ int64 amount;
830
+ };
831
+
832
+ union InflationResult switch (InflationResultCode code)
833
+ {
834
+ case INFLATION_SUCCESS:
835
+ InflationPayout payouts<>;
836
+ default:
837
+ void;
838
+ };
839
+
840
+ /* High level Operation Result */
841
+
842
+ enum OperationResultCode
843
+ {
844
+ opINNER = 0, // inner object result is valid
845
+
846
+ opBAD_AUTH = -1, // too few valid signatures / wrong network
847
+ opNO_ACCOUNT = -2 // source account was not found
848
+ };
849
+
850
+ union OperationResult switch (OperationResultCode code)
851
+ {
852
+ case opINNER:
853
+ union switch (OperationType type)
854
+ {
855
+ case CREATE_ACCOUNT:
856
+ CreateAccountResult createAccountResult;
857
+ case PAYMENT:
858
+ PaymentResult paymentResult;
859
+ case PATH_PAYMENT:
860
+ PathPaymentResult pathPaymentResult;
861
+ case MANAGE_OFFER:
862
+ ManageOfferResult manageOfferResult;
863
+ case CREATE_PASSIVE_OFFER:
864
+ ManageOfferResult createPassiveOfferResult;
865
+ case SET_OPTIONS:
866
+ SetOptionsResult setOptionsResult;
867
+ case CHANGE_TRUST:
868
+ ChangeTrustResult changeTrustResult;
869
+ case ALLOW_TRUST:
870
+ AllowTrustResult allowTrustResult;
871
+ case ACCOUNT_MERGE:
872
+ AccountMergeResult accountMergeResult;
873
+ case INFLATION:
874
+ InflationResult inflationResult;
875
+ case CREATE_LOT:
876
+ CreateLotResult createLotResult;
877
+ case REGISTER_PARTICIPANT:
878
+ RegisterParticipantResult registerParticipantResult;
879
+ case PROVIDE_PROOF:
880
+ ProvideProofResult provideProofResult;
881
+ case SEND_MESSAGE:
882
+ SendMessageResult sendMessageResult;
883
+ case CREATE_BID:
884
+ CreateBidResult createBidResult;
885
+ case AFFIRM_FAIL:
886
+ AffirmFailResult affirmFailResult;
887
+ case AFFIRM_PASS:
888
+ AffirmPassResult affirmPassResult;
889
+ }
890
+ tr;
891
+ default:
892
+ void;
893
+ };
894
+
895
+ enum TransactionResultCode
896
+ {
897
+ txSUCCESS = 0, // all operations succeeded
898
+
899
+ txFAILED = -1, // one of the operations failed (none were applied)
900
+
901
+ txTOO_EARLY = -2, // ledger closeTime before minTime
902
+ txTOO_LATE = -3, // ledger closeTime after maxTime
903
+ txMISSING_OPERATION = -4, // no operation was specified
904
+ txBAD_SEQ = -5, // sequence number does not match source account
905
+
906
+ txBAD_AUTH = -6, // too few valid signatures / wrong network
907
+ txINSUFFICIENT_BALANCE = -7, // fee would bring account below reserve
908
+ txNO_ACCOUNT = -8, // source account not found
909
+ txINSUFFICIENT_FEE = -9, // fee is too small
910
+ txBAD_AUTH_EXTRA = -10, // unused signatures attached to transaction
911
+ txINTERNAL_ERROR = -11 // an unknown error occured
912
+ };
913
+
914
+ struct TransactionResult
915
+ {
916
+ int64 feeCharged; // actual fee charged for the transaction
917
+
918
+ union switch (TransactionResultCode code)
919
+ {
920
+ case txSUCCESS:
921
+ case txFAILED:
922
+ OperationResult results<>;
923
+ default:
924
+ void;
925
+ }
926
+ result;
927
+
928
+ // reserved for future use
929
+ union switch (int v)
930
+ {
931
+ case 0:
932
+ void;
933
+ }
934
+ ext;
935
+ };
936
+ }