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,351 @@
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-types.h"
6
+
7
+ namespace stellar
8
+ {
9
+
10
+ typedef PublicKey AccountID;
11
+ typedef opaque Thresholds[4];
12
+ typedef string string32<32>;
13
+ typedef uint64 SequenceNumber;
14
+
15
+ enum AssetType
16
+ {
17
+ ASSET_TYPE_NATIVE = 0,
18
+ ASSET_TYPE_CREDIT_ALPHANUM4 = 1,
19
+ ASSET_TYPE_CREDIT_ALPHANUM12 = 2
20
+ };
21
+
22
+ union Asset switch (AssetType type)
23
+ {
24
+ case ASSET_TYPE_NATIVE: // Not credit
25
+ void;
26
+
27
+ case ASSET_TYPE_CREDIT_ALPHANUM4:
28
+ struct
29
+ {
30
+ opaque assetCode[4]; // 1 to 4 characters
31
+ AccountID issuer;
32
+ } alphaNum4;
33
+
34
+ case ASSET_TYPE_CREDIT_ALPHANUM12:
35
+ struct
36
+ {
37
+ opaque assetCode[12]; // 5 to 12 characters
38
+ AccountID issuer;
39
+ } alphaNum12;
40
+
41
+ // add other asset types here in the future
42
+ };
43
+
44
+ // price in fractional representation
45
+ struct Price
46
+ {
47
+ int32 n; // numerator
48
+ int32 d; // denominator
49
+ };
50
+
51
+ // the 'Thresholds' type is packed uint8_t values
52
+ // defined by these indexes
53
+ enum ThresholdIndexes
54
+ {
55
+ THRESHOLD_MASTER_WEIGHT = 0,
56
+ THRESHOLD_LOW = 1,
57
+ THRESHOLD_MED = 2,
58
+ THRESHOLD_HIGH = 3
59
+ };
60
+
61
+ enum LedgerEntryType
62
+ {
63
+ ACCOUNT = 0,
64
+ TRUSTLINE = 1,
65
+ OFFER = 2,
66
+ LOT = 3,
67
+ PARTICIPANT = 4,
68
+ MESSAGE = 5,
69
+ PROOF = 6
70
+ };
71
+
72
+ struct Signer
73
+ {
74
+ AccountID pubKey;
75
+ uint32 weight; // really only need 1byte
76
+ };
77
+
78
+ enum AccountFlags
79
+ { // masks for each flag
80
+
81
+ // Flags set on issuer accounts
82
+ // TrustLines are created with authorized set to "false" requiring
83
+ // the issuer to set it for each TrustLine
84
+ AUTH_REQUIRED_FLAG = 0x1,
85
+ // If set, the authorized flag in TrustLines can be cleared
86
+ // otherwise, authorization cannot be revoked
87
+ AUTH_REVOCABLE_FLAG = 0x2,
88
+ // Once set, causes all AUTH_* flags to be read-only
89
+ AUTH_IMMUTABLE_FLAG = 0x4
90
+ };
91
+
92
+ /* AccountEntry
93
+
94
+ Main entry representing a user in Stellar. All transactions are
95
+ performed using an account.
96
+
97
+ Other ledger entries created require an account.
98
+
99
+ */
100
+
101
+ struct AccountEntry
102
+ {
103
+ AccountID accountID; // master public key for this account
104
+ int64 balance; // in stroops
105
+ SequenceNumber seqNum; // last sequence number used for this account
106
+ uint32 numSubEntries; // number of sub-entries this account has
107
+ // drives the reserve
108
+ AccountID* inflationDest; // Account to vote for during inflation
109
+ uint32 flags; // see AccountFlags
110
+
111
+ string32 homeDomain; // can be used for reverse federation and memo lookup
112
+
113
+ // fields used for signatures
114
+ // thresholds stores unsigned bytes: [weight of master|low|medium|high]
115
+ Thresholds thresholds;
116
+
117
+ Signer signers<20>; // possible signers for this account
118
+
119
+ string32 codeKYC;
120
+ // reserved for future use
121
+ union switch (int v)
122
+ {
123
+ case 0:
124
+ void;
125
+ }
126
+ ext;
127
+ };
128
+
129
+ /* ProofEntry
130
+
131
+ */
132
+
133
+ struct ProofEntry
134
+ {
135
+ AccountID accountID;
136
+ uint64 lotID;
137
+ uint64 proofID;
138
+ uint64 bankID;
139
+ uint32 quantity;
140
+
141
+ string proof<1000>;
142
+
143
+ // reserved for future use
144
+ union switch (int v)
145
+ {
146
+ case 0:
147
+ void;
148
+ }
149
+ ext;
150
+ };
151
+
152
+ /* TrustLineEntry
153
+ A trust line represents a specific trust relationship with
154
+ a credit/issuer (limit, authorization)
155
+ as well as the balance.
156
+ */
157
+
158
+ enum TrustLineFlags
159
+ {
160
+ // issuer has authorized account to perform transactions with its credit
161
+ AUTHORIZED_FLAG = 1
162
+ };
163
+
164
+ struct TrustLineEntry
165
+ {
166
+ AccountID accountID; // account this trustline belongs to
167
+ Asset asset; // type of asset (with issuer)
168
+ int64 balance; // how much of this asset the user has.
169
+ // Asset defines the unit for this;
170
+
171
+ int64 limit; // balance cannot be above this
172
+ uint32 flags; // see TrustLineFlags
173
+
174
+ // reserved for future use
175
+ union switch (int v)
176
+ {
177
+ case 0:
178
+ void;
179
+ }
180
+ ext;
181
+ };
182
+
183
+ enum OfferEntryFlags
184
+ {
185
+ // issuer has authorized account to perform transactions with its credit
186
+ PASSIVE_FLAG = 1
187
+ };
188
+
189
+ /* OfferEntry
190
+ An offer is the building block of the offer book, they are automatically
191
+ claimed by payments when the price set by the owner is met.
192
+
193
+ For example an Offer is selling 10A where 1A is priced at 1.5B
194
+
195
+ */
196
+ struct OfferEntry
197
+ {
198
+ AccountID sellerID;
199
+ uint64 offerID;
200
+ Asset selling; // A
201
+ Asset buying; // B
202
+ int64 amount; // amount of A
203
+
204
+ /* price for this offer:
205
+ price of A in terms of B
206
+ price=AmountB/AmountA=priceNumerator/priceDenominator
207
+ price is after fees
208
+ */
209
+ Price price;
210
+ uint32 flags; // see OfferEntryFlags
211
+
212
+ // reserved for future use
213
+ union switch (int v)
214
+ {
215
+ case 0:
216
+ void;
217
+ }
218
+ ext;
219
+ };
220
+
221
+
222
+ /* LotEntry
223
+
224
+ */
225
+
226
+ enum LotType {
227
+ TERRITORY = 1,
228
+ FACILITY = 2
229
+ };
230
+
231
+ enum LotBranch {
232
+ AGRICULTURE = 1,
233
+ LIVESTOCK = 2
234
+ };
235
+
236
+ struct LotEntry
237
+ {
238
+ AccountID organizerID;
239
+ uint64 lotID;
240
+ string lotName<1000>;
241
+ uint32 type;
242
+ string32 lotCode;
243
+ string lotAddress<1000>;
244
+ uint32 lotBranch;
245
+ string lotLocation<1000>;
246
+ uint64 startPrice;
247
+ uint64 bestPrice;
248
+ uint32 minStep;
249
+ uint32 maxStep;
250
+ uint64 published;
251
+ uint64 aucStarted;
252
+ uint64 duration;
253
+ uint64 pledge;
254
+ AccountID publisherID;
255
+ string details<1000>;
256
+ // reserved for future use
257
+ union switch (int v)
258
+ {
259
+ case 0:
260
+ void;
261
+ }
262
+ ext;
263
+ };
264
+
265
+ enum ParticipantState {
266
+ APPROVED = 0,
267
+ PENDING = 1,
268
+ PASS = 2,
269
+ FAIL = 3
270
+ };
271
+ /* ParticipantEntry
272
+
273
+ */
274
+ struct ParticipantEntry
275
+ {
276
+ AccountID accountID;
277
+ uint64 lotID;
278
+ uint32 state;
279
+ uint64 bestBid;
280
+ uint32 bestBidSeq;
281
+
282
+ // reserved for future use
283
+ union switch (int v)
284
+ {
285
+ case 0:
286
+ void;
287
+ }
288
+ ext;
289
+ };
290
+
291
+ /* MessageEntry
292
+
293
+ */
294
+ struct MessageEntry
295
+ {
296
+ uint64 messageID;
297
+ AccountID accountID;
298
+ string text<1000>;
299
+ uint64 lotID;
300
+ uint64 refMessageID;
301
+ // reserved for future use
302
+ union switch (int v)
303
+ {
304
+ case 0:
305
+ void;
306
+ }
307
+ ext;
308
+ };
309
+
310
+ struct LedgerEntry
311
+ {
312
+ uint32 lastModifiedLedgerSeq; // ledger the LedgerEntry was last changed
313
+
314
+ union switch (LedgerEntryType type)
315
+ {
316
+ case ACCOUNT:
317
+ AccountEntry account;
318
+ case TRUSTLINE:
319
+ TrustLineEntry trustLine;
320
+ case OFFER:
321
+ OfferEntry offer;
322
+ case LOT:
323
+ LotEntry lot;
324
+ case PARTICIPANT:
325
+ ParticipantEntry participant;
326
+ case MESSAGE:
327
+ MessageEntry message;
328
+ case PROOF:
329
+ ProofEntry proof;
330
+ }
331
+ data;
332
+
333
+ // reserved for future use
334
+ union switch (int v)
335
+ {
336
+ case 0:
337
+ void;
338
+ }
339
+ ext;
340
+ };
341
+
342
+ // list of all envelope types used in the application
343
+ // those are prefixes used when building signatures for
344
+ // the respective envelopes
345
+ enum EnvelopeType
346
+ {
347
+ ENVELOPE_TYPE_SCP = 1,
348
+ ENVELOPE_TYPE_TX = 2,
349
+ ENVELOPE_TYPE_AUTH = 3
350
+ };
351
+ }
@@ -0,0 +1,288 @@
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-transaction.h"
6
+
7
+ namespace stellar
8
+ {
9
+
10
+ typedef opaque UpgradeType<128>;
11
+
12
+ /* StellarValue is the value used by SCP to reach consensus on a given ledger
13
+ */
14
+ struct StellarValue
15
+ {
16
+ Hash txSetHash; // transaction set to apply to previous ledger
17
+ uint64 closeTime; // network close time
18
+
19
+ // upgrades to apply to the previous ledger (usually empty)
20
+ // this is a vector of encoded 'LedgerUpgrade' so that nodes can drop
21
+ // unknown steps during consensus if needed.
22
+ // see notes below on 'LedgerUpgrade' for more detail
23
+ // max size is dictated by number of upgrade types (+ room for future)
24
+ UpgradeType upgrades<6>;
25
+
26
+ // reserved for future use
27
+ union switch (int v)
28
+ {
29
+ case 0:
30
+ void;
31
+ }
32
+ ext;
33
+ };
34
+
35
+ /* The LedgerHeader is the highest level structure representing the
36
+ * state of a ledger, cryptographically linked to previous ledgers.
37
+ */
38
+ struct LedgerHeader
39
+ {
40
+ uint32 ledgerVersion; // the protocol version of the ledger
41
+ Hash previousLedgerHash; // hash of the previous ledger header
42
+ StellarValue scpValue; // what consensus agreed to
43
+ Hash txSetResultHash; // the TransactionResultSet that led to this ledger
44
+ Hash bucketListHash; // hash of the ledger state
45
+
46
+ uint32 ledgerSeq; // sequence number of this ledger
47
+
48
+ int64 totalCoins; // total number of stroops in existence.
49
+ // 10,000,000 stroops in 1 XLM
50
+
51
+ int64 feePool; // fees burned since last inflation run
52
+ uint32 inflationSeq; // inflation sequence number
53
+
54
+ uint64 idPool; // last used global ID, used for generating objects
55
+
56
+ uint32 baseFee; // base fee per operation in stroops
57
+ uint32 baseReserve; // account base reserve in stroops
58
+
59
+ uint32 maxTxSetSize; // maximum size a transaction set can be
60
+
61
+ Hash skipList[4]; // hashes of ledgers in the past. allows you to jump back
62
+ // in time without walking the chain back ledger by ledger
63
+ // each slot contains the oldest ledger that is mod of
64
+ // either 50 5000 50000 or 500000 depending on index
65
+ // skipList[0] mod(50), skipList[1] mod(5000), etc
66
+
67
+ // reserved for future use
68
+ union switch (int v)
69
+ {
70
+ case 0:
71
+ void;
72
+ }
73
+ ext;
74
+ };
75
+
76
+ /* Ledger upgrades
77
+ note that the `upgrades` field from StellarValue is normalized such that
78
+ it only contains one entry per LedgerUpgradeType, and entries are sorted
79
+ in ascending order
80
+ */
81
+ enum LedgerUpgradeType
82
+ {
83
+ LEDGER_UPGRADE_VERSION = 1,
84
+ LEDGER_UPGRADE_BASE_FEE = 2,
85
+ LEDGER_UPGRADE_MAX_TX_SET_SIZE = 3
86
+ };
87
+
88
+ union LedgerUpgrade switch (LedgerUpgradeType type)
89
+ {
90
+ case LEDGER_UPGRADE_VERSION:
91
+ uint32 newLedgerVersion; // update ledgerVersion
92
+ case LEDGER_UPGRADE_BASE_FEE:
93
+ uint32 newBaseFee; // update baseFee
94
+ case LEDGER_UPGRADE_MAX_TX_SET_SIZE:
95
+ uint32 newMaxTxSetSize; // update maxTxSetSize
96
+ };
97
+
98
+ /* Entries used to define the bucket list */
99
+
100
+ union LedgerKey switch (LedgerEntryType type)
101
+ {
102
+ case ACCOUNT:
103
+ struct
104
+ {
105
+ AccountID accountID;
106
+ } account;
107
+
108
+ case TRUSTLINE:
109
+ struct
110
+ {
111
+ AccountID accountID;
112
+ Asset asset;
113
+ } trustLine;
114
+
115
+ case OFFER:
116
+ struct
117
+ {
118
+ AccountID sellerID;
119
+ uint64 offerID;
120
+ } offer;
121
+ case LOT:
122
+ struct
123
+ {
124
+ AccountID organizerID;
125
+ uint64 lotID;
126
+ } lot;
127
+ case PARTICIPANT:
128
+ struct
129
+ {
130
+ AccountID accountID;
131
+ uint64 lotID;
132
+ } participant;
133
+ case MESSAGE:
134
+ struct
135
+ {
136
+ AccountID accountID;
137
+ uint64 messageID;
138
+ } message;
139
+ case PROOF:
140
+ struct
141
+ {
142
+ AccountID accountID;
143
+ uint64 proofID;
144
+ } proof;
145
+
146
+ };
147
+
148
+ enum BucketEntryType
149
+ {
150
+ LIVEENTRY = 0,
151
+ DEADENTRY = 1
152
+ };
153
+
154
+ union BucketEntry switch (BucketEntryType type)
155
+ {
156
+ case LIVEENTRY:
157
+ LedgerEntry liveEntry;
158
+
159
+ case DEADENTRY:
160
+ LedgerKey deadEntry;
161
+ };
162
+
163
+ // Transaction sets are the unit used by SCP to decide on transitions
164
+ // between ledgers
165
+ const MAX_TX_PER_LEDGER = 5000;
166
+ struct TransactionSet
167
+ {
168
+ Hash previousLedgerHash;
169
+ TransactionEnvelope txs<MAX_TX_PER_LEDGER>;
170
+ };
171
+
172
+ struct TransactionResultPair
173
+ {
174
+ Hash transactionHash;
175
+ TransactionResult result; // result for the transaction
176
+ };
177
+
178
+ // TransactionResultSet is used to recover results between ledgers
179
+ struct TransactionResultSet
180
+ {
181
+ TransactionResultPair results<MAX_TX_PER_LEDGER>;
182
+ };
183
+
184
+ // Entries below are used in the historical subsystem
185
+
186
+ struct TransactionHistoryEntry
187
+ {
188
+ uint32 ledgerSeq;
189
+ TransactionSet txSet;
190
+
191
+ // reserved for future use
192
+ union switch (int v)
193
+ {
194
+ case 0:
195
+ void;
196
+ }
197
+ ext;
198
+ };
199
+
200
+ struct TransactionHistoryResultEntry
201
+ {
202
+ uint32 ledgerSeq;
203
+ TransactionResultSet txResultSet;
204
+
205
+ // reserved for future use
206
+ union switch (int v)
207
+ {
208
+ case 0:
209
+ void;
210
+ }
211
+ ext;
212
+ };
213
+
214
+ struct LedgerHeaderHistoryEntry
215
+ {
216
+ Hash hash;
217
+ LedgerHeader header;
218
+
219
+ // reserved for future use
220
+ union switch (int v)
221
+ {
222
+ case 0:
223
+ void;
224
+ }
225
+ ext;
226
+ };
227
+
228
+ // historical SCP messages
229
+
230
+ struct LedgerSCPMessages
231
+ {
232
+ uint32 ledgerSeq;
233
+ SCPEnvelope messages<>;
234
+ };
235
+
236
+ // note: ledgerMessages may refer to any quorumSets encountered
237
+ // in the file so far, not just the one from this entry
238
+ struct SCPHistoryEntryV0
239
+ {
240
+ SCPQuorumSet quorumSets<>; // additional quorum sets used by ledgerMessages
241
+ LedgerSCPMessages ledgerMessages;
242
+ };
243
+
244
+ // SCP history file is an array of these
245
+ union SCPHistoryEntry switch (int v)
246
+ {
247
+ case 0:
248
+ SCPHistoryEntryV0 v0;
249
+ };
250
+
251
+ // represents the meta in the transaction table history
252
+
253
+ // STATE is emitted every time a ledger entry is modified/deleted
254
+ // and the entry was not already modified in the current ledger
255
+
256
+ enum LedgerEntryChangeType
257
+ {
258
+ LEDGER_ENTRY_CREATED = 0, // entry was added to the ledger
259
+ LEDGER_ENTRY_UPDATED = 1, // entry was modified in the ledger
260
+ LEDGER_ENTRY_REMOVED = 2, // entry was removed from the ledger
261
+ LEDGER_ENTRY_STATE = 3 // value of the entry
262
+ };
263
+
264
+ union LedgerEntryChange switch (LedgerEntryChangeType type)
265
+ {
266
+ case LEDGER_ENTRY_CREATED:
267
+ LedgerEntry created;
268
+ case LEDGER_ENTRY_UPDATED:
269
+ LedgerEntry updated;
270
+ case LEDGER_ENTRY_REMOVED:
271
+ LedgerKey removed;
272
+ case LEDGER_ENTRY_STATE:
273
+ LedgerEntry state;
274
+ };
275
+
276
+ typedef LedgerEntryChange LedgerEntryChanges<>;
277
+
278
+ struct OperationMeta
279
+ {
280
+ LedgerEntryChanges changes;
281
+ };
282
+
283
+ union TransactionMeta switch (int v)
284
+ {
285
+ case 0:
286
+ OperationMeta operations<>;
287
+ };
288
+ }