xdr/Stellar-ledger.x in stellar-base-0.0.18 vs xdr/Stellar-ledger.x in stellar-base-0.0.19
- old
+ new
@@ -5,37 +5,91 @@
%#include "generated/Stellar-transaction.h"
namespace stellar
{
+typedef opaque UpgradeType<128>;
+
+/* StellarValue is the value used by SCP to reach consensus on a given ledger
+*/
+struct StellarValue
+{
+ Hash txSetHash; // transaction set to apply to previous ledger
+ uint64 closeTime; // network close time
+
+ // upgrades to apply to the previous ledger (usually empty)
+ // this is a vector of encoded 'LedgerUpgrade' so that nodes can drop
+ // unknown steps during consensus if needed.
+ // see notes below on 'LedgerUpgrade' for more detail
+ UpgradeType upgrades<4>;
+
+ // reserved for future use
+ union switch (int v)
+ {
+ case 0:
+ void;
+ }
+ ext;
+};
+
/* The LedgerHeader is the highest level structure representing the
* state of a ledger, cryptographically linked to previous ledgers.
*/
struct LedgerHeader
{
+ uint32 ledgerVersion; // the protocol version of the ledger
Hash previousLedgerHash; // hash of the previous ledger header
- Hash txSetHash; // the tx set that was SCP confirmed
+ StellarValue scpValue; // what consensus agreed to
Hash txSetResultHash; // the TransactionResultSet that led to this ledger
Hash bucketListHash; // hash of the ledger state
uint32 ledgerSeq; // sequence number of this ledger
- uint64 closeTime; // network close time
int64 totalCoins; // total number of stroops in existence
int64 feePool; // fees burned since last inflation run
uint32 inflationSeq; // inflation sequence number
uint64 idPool; // last used global ID, used for generating objects
- int32 baseFee; // base fee per operation in stroops
- int32 baseReserve; // account base reserve in stroops
+ uint32 baseFee; // base fee per operation in stroops
+ uint32 baseReserve; // account base reserve in stroops
- Hash skipList[4]; // hashes of ledgers in the past. allows you to jump back
- // in time without walking the chain back ledger by ledger
+ Hash skipList[4]; // hashes of ledgers in the past. allows you to jump back
+ // in time without walking the chain back ledger by ledger
+ // each slot contains the oldest ledger that is mod of
+ // either 50 5000 50000 or 500000 depending on index
+ // skipList[0] mod(50), skipList[1] mod(5000), etc
+
+ // reserved for future use
+ union switch (int v)
+ {
+ case 0:
+ void;
+ }
+ ext;
};
+/* Ledger upgrades
+note that the `upgrades` field from StellarValue is normalized such that
+it only contains one entry per LedgerUpgradeType, and entries are sorted
+in ascending order
+*/
+enum LedgerUpgradeType
+{
+ LEDGER_UPGRADE_VERSION = 1,
+ LEDGER_UPGRADE_BASE_FEE = 2
+};
+
+union LedgerUpgrade switch (LedgerUpgradeType type)
+{
+case LEDGER_UPGRADE_VERSION:
+ uint32 newLedgerVersion; // update ledgerVersion
+case LEDGER_UPGRADE_BASE_FEE:
+ uint32 newBaseFee; // update baseFee
+};
+
/* Entries used to define the bucket list */
union LedgerKey switch (LedgerEntryType type)
{
case ACCOUNT:
@@ -74,14 +128,15 @@
LedgerKey deadEntry;
};
// Transaction sets are the unit used by SCP to decide on transitions
// between ledgers
+const MAX_TX_PER_LEDGER = 5000;
struct TransactionSet
{
Hash previousLedgerHash;
- TransactionEnvelope txs<5000>;
+ TransactionEnvelope txs<MAX_TX_PER_LEDGER>;
};
struct TransactionResultPair
{
Hash transactionHash;
@@ -89,30 +144,54 @@
};
// TransactionResultSet is used to recover results between ledgers
struct TransactionResultSet
{
- TransactionResultPair results<5000>;
+ TransactionResultPair results<MAX_TX_PER_LEDGER>;
};
// Entries below are used in the historical subsystem
struct TransactionHistoryEntry
{
uint32 ledgerSeq;
TransactionSet txSet;
+
+ // reserved for future use
+ union switch (int v)
+ {
+ case 0:
+ void;
+ }
+ ext;
};
struct TransactionHistoryResultEntry
{
uint32 ledgerSeq;
TransactionResultSet txResultSet;
+
+ // reserved for future use
+ union switch (int v)
+ {
+ case 0:
+ void;
+ }
+ ext;
};
struct LedgerHeaderHistoryEntry
{
Hash hash;
LedgerHeader header;
+
+ // reserved for future use
+ union switch (int v)
+ {
+ case 0:
+ void;
+ }
+ ext;
};
// represents the meta in the transaction table history
enum LedgerEntryChangeType