More changes to the new serialization format that don't break compatibility.

This commit is contained in:
JoelKatz
2012-09-24 16:21:40 -07:00
parent 9432d35f14
commit 173b6ce558
6 changed files with 137 additions and 206 deletions

View File

@@ -1,98 +1,13 @@
#include "FieldNames.h"
#define S_FIELD(x) sf##x, #x
#define FIELD(name, type, index) { sf##name, #name, STI_##type, index },
#define TYPE(type, index)
FieldName FieldNames[]=
{
// 8-bit integers
{ S_FIELD(CloseResolution), STI_UINT8, 1 },
// 32-bit integers (common)
{ S_FIELD(Flags), STI_UINT32, 1 },
{ S_FIELD(SourceTag), STI_UINT32, 2 },
{ S_FIELD(Sequence), STI_UINT32, 3 },
{ S_FIELD(LastTxnSeq), STI_UINT32, 4 },
{ S_FIELD(LedgerSequence), STI_UINT32, 5 },
{ S_FIELD(CloseTime), STI_UINT32, 6 },
{ S_FIELD(ParentCloseTime), STI_UINT32, 7 },
{ S_FIELD(SigningTime), STI_UINT32, 8 },
{ S_FIELD(Expiration), STI_UINT32, 9 },
{ S_FIELD(TransferRate), STI_UINT32, 10 },
{ S_FIELD(PublishSize), STI_UINT32, 11 },
// 32-bit integers (rare)
{ S_FIELD(HighQualityIn), STI_UINT32, 16 },
{ S_FIELD(HighQualityOut), STI_UINT32, 17 },
{ S_FIELD(LowQualityIn), STI_UINT32, 18 },
{ S_FIELD(LowQualityOut), STI_UINT32, 19 },
{ S_FIELD(QualityIn), STI_UINT32, 20 },
{ S_FIELD(QualityOut), STI_UINT32, 21 },
{ S_FIELD(StampEscrow), STI_UINT32, 22 },
{ S_FIELD(BondAmount), STI_UINT32, 23 },
{ S_FIELD(LoadFee), STI_UINT32, 24 },
// 64-bit integers
{ S_FIELD(IndexNext), STI_UINT64, 1 },
{ S_FIELD(IndexPrevious), STI_UINT64, 2 },
{ S_FIELD(BookNode), STI_UINT64, 3 },
{ S_FIELD(OwnerNode), STI_UINT64, 4 },
{ S_FIELD(BaseFee), STI_UINT64, 5 },
// 128-bit
{ S_FIELD(PublishSize), STI_HASH128, 1 },
{ S_FIELD(EmailHash), STI_HASH128, 2 },
// 256-bit
{ S_FIELD(LedgerHash), STI_HASH256, 1 },
{ S_FIELD(ParentHash), STI_HASH256, 2 },
{ S_FIELD(TransactionHash), STI_HASH256, 3 },
{ S_FIELD(AccountHash), STI_HASH256, 4 },
{ S_FIELD(LastTxnID), STI_HASH256, 5 },
{ S_FIELD(WalletLocator), STI_HASH256, 6 },
{ S_FIELD(PublishHash), STI_HASH256, 7 },
{ S_FIELD(Nickname), STI_HASH256, 8 },
// currency amount
{ S_FIELD(Amount), STI_AMOUNT, 1 },
{ S_FIELD(Balance), STI_AMOUNT, 2 },
{ S_FIELD(LimitAmount), STI_AMOUNT, 3 },
{ S_FIELD(TakerPays), STI_AMOUNT, 4 },
{ S_FIELD(TakerGets), STI_AMOUNT, 5 },
{ S_FIELD(LowLimit), STI_AMOUNT, 6 },
{ S_FIELD(HighLimit), STI_AMOUNT, 7 },
{ S_FIELD(MinimumOffer), STI_AMOUNT, 8 },
// variable length
{ S_FIELD(PublicKey), STI_VL, 1 },
{ S_FIELD(MessageKey), STI_VL, 2 },
{ S_FIELD(SigningKey), STI_VL, 3 },
{ S_FIELD(Signature), STI_VL, 4 },
{ S_FIELD(Generator), STI_VL, 5 },
{ S_FIELD(Domain), STI_VL, 6 },
// account
{ S_FIELD(Account), STI_ACCOUNT, 1 },
{ S_FIELD(Owner), STI_ACCOUNT, 2 },
{ S_FIELD(Destination), STI_ACCOUNT, 3 },
{ S_FIELD(Issuer), STI_ACCOUNT, 4 },
{ S_FIELD(HighID), STI_ACCOUNT, 5 },
{ S_FIELD(LowID), STI_ACCOUNT, 6 },
{ S_FIELD(Target), STI_ACCOUNT, 7 },
// path set
{ S_FIELD(Paths), STI_PATHSET, 1 },
// vector of 256-bit
{ S_FIELD(Indexes), STI_VECTOR256, 1 },
// inner object
{ S_FIELD(MiddleTransaction), STI_OBJECT, 1 },
{ S_FIELD(InnerTransaction), STI_OBJECT, 2 },
// OBJECT/15 is reserved for end of object
// array of objects
{ S_FIELD(SigningAccounts), STI_ARRAY, 1 },
// ARRAY/15 is reserved for end of array
#include "SerializeProto.h"
};
#undef FIELD
#undef TYPE

View File

@@ -10,6 +10,7 @@ struct FieldName
const char *fieldName;
SerializedTypeID fieldType;
int fieldValue;
int fieldID;
};
#endif

View File

@@ -20,7 +20,6 @@ LedgerEntryFormat LedgerFormats[]=
{ S_FIELD(Domain), STI_VL, SOE_IFFLAG, 32 },
{ S_FIELD(PublishHash), STI_HASH256, SOE_IFFLAG, 64 },
{ S_FIELD(PublishSize), STI_UINT32, SOE_IFFLAG, 128 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x01000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ "Contract", ltCONTRACT, {
@@ -37,7 +36,6 @@ LedgerEntryFormat LedgerFormats[]=
{ S_FIELD(FundCode), STI_VL, SOE_REQUIRED, 0 },
{ S_FIELD(RemoveCode), STI_VL, SOE_REQUIRED, 0 },
{ S_FIELD(ExpireCode), STI_VL, SOE_REQUIRED, 0 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x01000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ "DirectoryNode", ltDIR_NODE, {
@@ -45,20 +43,17 @@ LedgerEntryFormat LedgerFormats[]=
{ S_FIELD(Indexes), STI_VECTOR256, SOE_REQUIRED, 0 },
{ S_FIELD(IndexNext), STI_UINT64, SOE_IFFLAG, 1 },
{ S_FIELD(IndexPrevious), STI_UINT64, SOE_IFFLAG, 2 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x01000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ "GeneratorMap", ltGENERATOR_MAP, {
{ S_FIELD(Flags), STI_UINT32, SOE_FLAGS, 0 },
{ S_FIELD(Generator), STI_VL, SOE_REQUIRED, 0 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x01000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ "Nickname", ltNICKNAME, {
{ S_FIELD(Flags), STI_UINT32, SOE_FLAGS, 0 },
{ S_FIELD(Account), STI_ACCOUNT, SOE_REQUIRED, 0 },
{ S_FIELD(MinimumOffer), STI_AMOUNT, SOE_IFFLAG, 1 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x01000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ "Offer", ltOFFER, {
@@ -73,7 +68,6 @@ LedgerEntryFormat LedgerFormats[]=
{ S_FIELD(LastTxnID), STI_HASH256, SOE_REQUIRED, 0 },
{ S_FIELD(LastTxnSeq), STI_UINT32, SOE_REQUIRED, 0 },
{ S_FIELD(Expiration), STI_UINT32, SOE_IFFLAG, 1 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x01000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ "RippleState", ltRIPPLE_STATE, {
@@ -89,7 +83,6 @@ LedgerEntryFormat LedgerFormats[]=
{ S_FIELD(LowQualityOut), STI_UINT32, SOE_IFFLAG, 2 },
{ S_FIELD(HighQualityIn), STI_UINT32, SOE_IFFLAG, 4 },
{ S_FIELD(HighQualityOut), STI_UINT32, SOE_IFFLAG, 8 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x01000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ NULL, ltINVALID }

125
src/SerializeProto.h Normal file
View File

@@ -0,0 +1,125 @@
// This is not really a header file, but it can be used as one with
// appropriate #define statements.
// types (common)
TYPE(UINT32, 1)
TYPE(UINT64, 2)
TYPE(HASH128, 3)
TYPE(HASH256, 4)
// 5 is reserved
TYPE(AMOUNT, 6)
TYPE(VL, 7)
TYPE(ACCOUNT, 8)
// 9-13 are reserved
TYPE(OBJECT, 14)
TYPE(ARRAY, 15)
// types (uncommon)
TYPE(UINT8, 16)
TYPE(UINT16, 17)
TYPE(HASH160, 18)
TYPE(PATHSET, 19)
TYPE(VECTOR256, 20)
// 8-bit integers
FIELD(CloseResolution, UINT8, 1)
// 32-bit integers (common)
FIELD(Flags, UINT32, 1)
FIELD(SourceTag, UINT32, 2)
FIELD(Sequence, UINT32, 3)
FIELD(LastTxnSeq, UINT32, 4)
FIELD(LedgerSequence, UINT32, 5)
FIELD(CloseTime, UINT32, 6)
FIELD(ParentCloseTime, UINT32, 7)
FIELD(SigningTime, UINT32, 8)
FIELD(Expiration, UINT32, 9)
FIELD(TransferRate, UINT32, 10)
FIELD(PublishSize, UINT32, 11)
// 32-bit integers (uncommon)
FIELD(HighQualityIn, UINT32, 16)
FIELD(HighQualityOut, UINT32, 17)
FIELD(LowQualityIn, UINT32, 18)
FIELD(LowQualityOut, UINT32, 19)
FIELD(QualityIn, UINT32, 20)
FIELD(QualityOut, UINT32, 21)
FIELD(StampEscrow, UINT32, 22)
FIELD(BondAmount, UINT32, 23)
FIELD(LoadFee, UINT32, 24)
FIELD(OfferSequence, UINT32, 25)
// 64-bit integers
FIELD(IndexNext, UINT64, 1)
FIELD(IndexPrevious, UINT64, 2)
FIELD(BookNode, UINT64, 3)
FIELD(OwnerNode, UINT64, 4)
FIELD(BaseFee, UINT64, 5)
// 128-bit
FIELD(EmailHash, HASH128, 2)
// 256-bit (common)
FIELD(LedgerHash, HASH256, 1)
FIELD(ParentHash, HASH256, 2)
FIELD(TransactionHash, HASH256, 3)
FIELD(AccountHash, HASH256, 4)
FIELD(LastTxnID, HASH256, 5)
FIELD(WalletLocator, HASH256, 6)
FIELD(PublishHash, HASH256, 7)
// 256-bit (uncommon)
FIELD(BookDirectory, HASH256, 16)
FIELD(InvoiceID, HASH256, 17)
FIELD(Nickname, HASH256, 18)
// currency amount (common)
FIELD(Amount, AMOUNT, 1)
FIELD(Balance, AMOUNT, 2)
FIELD(LimitAmount, AMOUNT, 3)
FIELD(TakerPays, AMOUNT, 4)
FIELD(TakerGets, AMOUNT, 5)
FIELD(LowLimit, AMOUNT, 6)
FIELD(HighLimit, AMOUNT, 7)
FIELD(SendMax, AMOUNT, 9)
// current amount (uncommon)
FIELD(MinimumOffer, AMOUNT, 16)
FIELD(RippleEscrow, AMOUNT, 17)
// variable length
FIELD(PublicKey, VL, 1)
FIELD(MessageKey, VL, 2)
FIELD(SigningKey, VL, 3)
FIELD(Signature, VL, 4)
FIELD(Generator, VL, 5)
FIELD(Domain, VL, 6)
FIELD(FundCode, VL, 7)
FIELD(RemoveCode, VL, 8)
FIELD(ExpireCode, VL, 9)
FIELD(CreateCode, VL, 10)
// account
FIELD(Account, ACCOUNT, 1)
FIELD(Owner, ACCOUNT, 2)
FIELD(Destination, ACCOUNT, 3)
FIELD(Issuer, ACCOUNT, 4)
FIELD(HighID, ACCOUNT, 5)
FIELD(LowID, ACCOUNT, 6)
FIELD(Target, ACCOUNT, 7)
FIELD(AuthorizedKey, ACCOUNT, 8)
// path set
FIELD(Paths, PATHSET, 1)
// vector of 256-bit
FIELD(Indexes, VECTOR256, 1)
// inner object
// OBJECT/1 is reserved for end of object
FIELD(MiddleTransaction, OBJECT, 2)
FIELD(InnerTransaction, OBJECT, 3)
// array of objects
// ARRAY/1 is reserved for end of array
FIELD(SigningAccounts, ARRAY, 2)

View File

@@ -25,101 +25,11 @@ enum SOE_Field
sfInvalid = -1,
sfGeneric = 0,
// common fields
sfAcceptExpire,
sfAcceptRate,
sfAcceptStart,
sfAccount,
sfAccountHash,
sfAmount,
sfAuthorizedKey,
sfBalance,
sfBaseFee,
sfBondAmount,
sfBookDirectory,
sfBookNode,
sfBorrowExpire,
sfBorrowRate,
sfBorrowStart,
sfBorrower,
sfCreateCode,
sfCloseTime,
sfCloseResolution,
sfCurrency,
sfCurrencyIn,
sfCurrencyOut,
sfDestination,
sfDomain,
sfEmailHash,
sfExpiration,
sfExpireCode,
sfExtensions,
sfFirstNode,
sfFlags,
sfFundCode,
sfGenerator,
sfGeneratorID,
sfHash,
sfHighID,
sfHighLimit,
sfHighQualityIn,
sfHighQualityOut,
sfIdentifier,
sfIndexes,
sfIndexNext,
sfIndexPrevious,
sfInnerTransaction,
sfInvoiceID,
sfIssuer,
sfLastNode,
sfLastTxnID,
sfLastTxnSeq,
sfLedgerHash,
sfLedgerSequence,
sfLimitAmount,
sfLoadFee,
sfLowID,
sfLowLimit,
sfLowQualityIn,
sfLowQualityOut,
sfMessageKey,
sfMiddleTransaction,
sfMinimumOffer,
sfNextAcceptExpire,
sfNextAcceptRate,
sfNextAcceptStart,
sfNextTransitExpire,
sfNextTransitRate,
sfNextTransitStart,
sfNickname,
sfOfferSequence,
sfOwner,
sfOwnerNode,
sfParentCloseTime,
sfParentHash,
sfPaths,
sfPublicKey,
sfPublishHash,
sfPublishSize,
sfQualityIn,
sfQualityOut,
sfRemoveCode,
sfRippleEscrow,
sfSendMax,
sfSequence,
sfSignature,
sfSigningAccounts,
sfSigningKey,
sfSigningTime,
sfSourceTag,
sfStampEscrow,
sfTakerGets,
sfTakerPays,
sfTarget,
sfTransferRate,
sfTransactionHash,
sfVersion,
sfWalletLocator,
#define FIELD(name, type, index) sf##name,
#define TYPE(name, index)
#include "SerializeProto.h"
#undef FIELD
#undef TYPE
// test fields
sfTest1, sfTest2, sfTest3, sfTest4

View File

@@ -15,7 +15,6 @@ TransactionFormat InnerTxnFormats[]=
{ S_FIELD(TransferRate), STI_UINT32, SOE_IFFLAG, 32 },
{ S_FIELD(PublishHash), STI_HASH256, SOE_IFFLAG, 64 },
{ S_FIELD(PublishSize), STI_UINT32, SOE_IFFLAG, 128 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x02000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ "Claim", ttCLAIM, {
@@ -24,7 +23,6 @@ TransactionFormat InnerTxnFormats[]=
{ S_FIELD(PublicKey), STI_VL, SOE_REQUIRED, 0 },
{ S_FIELD(Signature), STI_VL, SOE_REQUIRED, 0 },
{ S_FIELD(SourceTag), STI_UINT32, SOE_IFFLAG, 1 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x02000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ "CreditSet", ttCREDIT_SET, {
@@ -34,7 +32,6 @@ TransactionFormat InnerTxnFormats[]=
{ S_FIELD(LimitAmount), STI_AMOUNT, SOE_IFFLAG, 2 },
{ S_FIELD(QualityIn), STI_UINT32, SOE_IFFLAG, 4 },
{ S_FIELD(QualityOut), STI_UINT32, SOE_IFFLAG, 8 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x02000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
/*
@@ -45,7 +42,6 @@ TransactionFormat InnerTxnFormats[]=
{ S_FIELD(SourceTag), STI_UINT32, SOE_IFFLAG, 1 },
{ S_FIELD(Destination), STI_ACCOUNT, SOE_IFFLAG, 2 },
{ S_FIELD(Identifier), STI_VL, SOE_IFFLAG, 4 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x02000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
*/
@@ -55,7 +51,6 @@ TransactionFormat InnerTxnFormats[]=
{ S_FIELD(MinimumOffer), STI_AMOUNT, SOE_IFFLAG, 1 },
{ S_FIELD(Signature), STI_VL, SOE_IFFLAG, 2 },
{ S_FIELD(SourceTag), STI_UINT32, SOE_IFFLAG, 4 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x02000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ "OfferCreate", ttOFFER_CREATE, {
@@ -64,21 +59,18 @@ TransactionFormat InnerTxnFormats[]=
{ S_FIELD(TakerGets), STI_AMOUNT, SOE_REQUIRED, 0 },
{ S_FIELD(SourceTag), STI_UINT32, SOE_IFFLAG, 1 },
{ S_FIELD(Expiration), STI_UINT32, SOE_IFFLAG, 2 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x02000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ "OfferCancel", ttOFFER_CANCEL, {
{ S_FIELD(Flags), STI_UINT32, SOE_FLAGS, 0 },
{ S_FIELD(OfferSequence), STI_UINT32, SOE_REQUIRED, 0 },
{ S_FIELD(SourceTag), STI_UINT32, SOE_IFFLAG, 1 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x02000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ "PasswordFund", ttPASSWORD_FUND, {
{ S_FIELD(Flags), STI_UINT32, SOE_FLAGS, 0 },
{ S_FIELD(Destination), STI_ACCOUNT, SOE_REQUIRED, 0 },
{ S_FIELD(SourceTag), STI_UINT32, SOE_IFFLAG, 1 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x02000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ "PasswordSet", ttPASSWORD_SET, {
@@ -88,7 +80,6 @@ TransactionFormat InnerTxnFormats[]=
{ S_FIELD(PublicKey), STI_VL, SOE_REQUIRED, 0 },
{ S_FIELD(Signature), STI_VL, SOE_REQUIRED, 0 },
{ S_FIELD(SourceTag), STI_UINT32, SOE_IFFLAG, 1 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x02000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ "Payment", ttPAYMENT, {
@@ -99,7 +90,6 @@ TransactionFormat InnerTxnFormats[]=
{ S_FIELD(Paths), STI_PATHSET, SOE_IFFLAG, 2 },
{ S_FIELD(SourceTag), STI_UINT32, SOE_IFFLAG, 4 },
{ S_FIELD(InvoiceID), STI_HASH256, SOE_IFFLAG, 8 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x02000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ "WalletAdd", ttWALLET_ADD, {
@@ -109,7 +99,6 @@ TransactionFormat InnerTxnFormats[]=
{ S_FIELD(PublicKey), STI_VL, SOE_REQUIRED, 0 },
{ S_FIELD(Signature), STI_VL, SOE_REQUIRED, 0 },
{ S_FIELD(SourceTag), STI_UINT32, SOE_IFFLAG, 1 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x02000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ "Contract", ttCONTRACT, {
@@ -122,13 +111,11 @@ TransactionFormat InnerTxnFormats[]=
{ S_FIELD(FundCode), STI_VL, SOE_REQUIRED, 0 },
{ S_FIELD(RemoveCode), STI_VL, SOE_REQUIRED, 0 },
{ S_FIELD(ExpireCode), STI_VL, SOE_REQUIRED, 0 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x02000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ "Contract", ttCONTRACT_REMOVE, {
{ S_FIELD(Flags), STI_UINT32, SOE_FLAGS, 0 },
{ S_FIELD(Target), STI_ACCOUNT, SOE_REQUIRED, 0 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x02000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
},
{ NULL, ttINVALID }