Update to 32-bit flags. A few serialized transaction fixes.

This commit is contained in:
JoelKatz
2012-04-12 16:02:20 -07:00
parent 519a1c9a1d
commit 9fa335af63
5 changed files with 27 additions and 28 deletions

View File

@@ -6,7 +6,7 @@
LedgerEntryFormat LedgerFormats[]= LedgerEntryFormat LedgerFormats[]=
{ {
{ "AccountRoot", ltACCOUNT_ROOT, { { "AccountRoot", ltACCOUNT_ROOT, {
{ S_FIELD(Flags), STI_UINT16, SOE_FLAGS, 0 }, { S_FIELD(Flags), STI_UINT32, SOE_FLAGS, 0 },
{ S_FIELD(Account), STI_ACCOUNT, SOE_REQUIRED, 0 }, { S_FIELD(Account), STI_ACCOUNT, SOE_REQUIRED, 0 },
{ S_FIELD(Sequence), STI_UINT32, SOE_REQUIRED, 0 }, { S_FIELD(Sequence), STI_UINT32, SOE_REQUIRED, 0 },
{ S_FIELD(Balance), STI_AMOUNT, SOE_REQUIRED, 0 }, { S_FIELD(Balance), STI_AMOUNT, SOE_REQUIRED, 0 },
@@ -15,11 +15,11 @@ LedgerEntryFormat LedgerFormats[]=
{ S_FIELD(EmailHash), STI_HASH128, SOE_IFFLAG, 1 }, { S_FIELD(EmailHash), STI_HASH128, SOE_IFFLAG, 1 },
{ S_FIELD(WalletLocator),STI_HASH256, SOE_IFFLAG, 2 }, { S_FIELD(WalletLocator),STI_HASH256, SOE_IFFLAG, 2 },
{ S_FIELD(MessageKey), STI_VL, SOE_IFFLAG, 4 }, { S_FIELD(MessageKey), STI_VL, SOE_IFFLAG, 4 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 32768 }, { S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x01000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } } { sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
}, },
{ "RippleState", ltRIPPLE_STATE, { { "RippleState", ltRIPPLE_STATE, {
{ S_FIELD(Flags), STI_UINT16, SOE_FLAGS, 0 }, { S_FIELD(Flags), STI_UINT32, SOE_FLAGS, 0 },
{ S_FIELD(Borrower), STI_ACCOUNT, SOE_REQUIRED, 0 }, { S_FIELD(Borrower), STI_ACCOUNT, SOE_REQUIRED, 0 },
{ S_FIELD(Lender), STI_ACCOUNT, SOE_REQUIRED, 0 }, { S_FIELD(Lender), STI_ACCOUNT, SOE_REQUIRED, 0 },
{ S_FIELD(Currency), STI_HASH160, SOE_IFFLAG, 1 }, { S_FIELD(Currency), STI_HASH160, SOE_IFFLAG, 1 },
@@ -30,16 +30,16 @@ LedgerEntryFormat LedgerFormats[]=
{ S_FIELD(NextRate), STI_UINT32, SOE_IFFLAG, 8 }, { S_FIELD(NextRate), STI_UINT32, SOE_IFFLAG, 8 },
{ S_FIELD(NextRateLgr), STI_UINT32, SOE_IFFLAG, 8 }, { S_FIELD(NextRateLgr), STI_UINT32, SOE_IFFLAG, 8 },
{ S_FIELD(NextRateExp), STI_UINT32, SOE_IFFLAG, 16 }, { S_FIELD(NextRateExp), STI_UINT32, SOE_IFFLAG, 16 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 32768 }, { S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x01000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } } { sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
}, },
{ "Nickname", ltNICKNAME, { { "Nickname", ltNICKNAME, {
{ S_FIELD(Flags), STI_UINT16, SOE_FLAGS, 0 }, { S_FIELD(Flags), STI_UINT32, SOE_FLAGS, 0 },
{ S_FIELD(Nickname), STI_HASH256, SOE_REQUIRED, 0 }, { S_FIELD(Nickname), STI_HASH256, SOE_REQUIRED, 0 },
{ S_FIELD(Account), STI_ACCOUNT, SOE_REQUIRED, 0 }, { S_FIELD(Account), STI_ACCOUNT, SOE_REQUIRED, 0 },
{ S_FIELD(MinimumOffer), STI_AMOUNT, SOE_IFFLAG, 1 }, { S_FIELD(MinimumOffer), STI_AMOUNT, SOE_IFFLAG, 1 },
{ S_FIELD(OfferCurrency),STI_HASH160, SOE_IFFLAG, 2 }, { S_FIELD(OfferCurrency),STI_HASH160, SOE_IFFLAG, 2 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 32768 }, { S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x01000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } } { sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
}, },
{ NULL, ltINVALID } { NULL, ltINVALID }

View File

@@ -112,9 +112,9 @@ STObject::STObject(SOElement* elem, SerializerIterator& sit, const char *name) :
} }
else if(elem->e_type==SOE_FLAGS) else if(elem->e_type==SOE_FLAGS)
{ {
assert(elem->e_id==STI_UINT16); assert(elem->e_id==STI_UINT32);
flags=sit.get16(); flags=sit.get32();
mFlagIdx=giveObject(new STUInt16(elem->e_name, flags)); mFlagIdx=giveObject(new STUInt32(elem->e_name, flags));
done=true; done=true;
} }
if(!done) if(!done)
@@ -232,28 +232,28 @@ bool STObject::isFieldPresent(SOE_Field field) const
return peekAtIndex(field).getSType()==STI_OBJECT; return peekAtIndex(field).getSType()==STI_OBJECT;
} }
bool STObject::setFlag(int f) bool STObject::setFlag(uint32 f)
{ {
if(mFlagIdx<0) return false; if(mFlagIdx<0) return false;
STUInt16* t=dynamic_cast<STUInt16*>(getPIndex(mFlagIdx)); STUInt32* t=dynamic_cast<STUInt32*>(getPIndex(mFlagIdx));
assert(t); assert(t);
t->setValue(t->getValue() | f); t->setValue(t->getValue() | f);
return true; return true;
} }
bool STObject::clearFlag(int f) bool STObject::clearFlag(uint32 f)
{ {
if(mFlagIdx<0) return false; if(mFlagIdx<0) return false;
STUInt16* t=dynamic_cast<STUInt16*>(getPIndex(mFlagIdx)); STUInt32* t=dynamic_cast<STUInt32*>(getPIndex(mFlagIdx));
assert(t); assert(t);
t->setValue(t->getValue() & ~f); t->setValue(t->getValue() & ~f);
return true; return true;
} }
int STObject::getFlag(void) const uint32 STObject::getFlags(void) const
{ {
if(mFlagIdx<0) return 0; if(mFlagIdx<0) return 0;
const STUInt16* t=dynamic_cast<const STUInt16*>(peekAtPIndex(mFlagIdx)); const STUInt32* t=dynamic_cast<const STUInt32*>(peekAtPIndex(mFlagIdx));
assert(t); assert(t);
return t->getValue(); return t->getValue();
} }

View File

@@ -72,9 +72,9 @@ public:
int getCount() const { return mData.size(); } int getCount() const { return mData.size(); }
bool setFlag(int); bool setFlag(uint32);
bool clearFlag(int); bool clearFlag(uint32);
int getFlag() const; uint32 getFlags() const;
const SerializedType& peekAtIndex(int offset) const { return mData[offset]; } const SerializedType& peekAtIndex(int offset) const { return mData[offset]; }
SerializedType& getIndex(int offset) { return mData[offset]; } SerializedType& getIndex(int offset) { return mData[offset]; }

View File

@@ -52,10 +52,9 @@ public:
std::string getTransactionType() const { return mFormat->t_name; } std::string getTransactionType() const { return mFormat->t_name; }
// inner transaction functions // inner transaction functions
uint16 getFlags() const; uint32 getFlags() const { return mInnerTxn.getFlags(); }
void setFlag(int v); void setFlag(uint32 v) { mInnerTxn.setFlag(v); }
void clearFlag(int v); void clearFlag(uint32 v) { mInnerTxn.clearFlag(v); }
bool isFlag(int v);
uint32 getSequence() const; uint32 getSequence() const;
void setSequence(uint32); void setSequence(uint32);

View File

@@ -6,18 +6,18 @@
TransactionFormat InnerTxnFormats[]= TransactionFormat InnerTxnFormats[]=
{ {
{ "MakePayment", ttMAKE_PAYMENT, { { "MakePayment", ttMAKE_PAYMENT, {
{ S_FIELD(Flags), STI_UINT16, SOE_FLAGS, 0 }, { S_FIELD(Flags), STI_UINT32, SOE_FLAGS, 0 },
{ S_FIELD(Destination), STI_ACCOUNT, SOE_REQUIRED, 0 }, { S_FIELD(Destination), STI_ACCOUNT, SOE_REQUIRED, 0 },
{ S_FIELD(Amount), STI_AMOUNT, SOE_REQUIRED, 0 }, { S_FIELD(Amount), STI_AMOUNT, SOE_REQUIRED, 0 },
{ S_FIELD(Currency), STI_HASH160, SOE_IFFLAG, 1 }, { S_FIELD(Currency), STI_HASH160, SOE_IFFLAG, 1 },
{ S_FIELD(SourceTag), STI_UINT32, SOE_IFFLAG, 2 }, { S_FIELD(SourceTag), STI_UINT32, SOE_IFFLAG, 2 },
{ S_FIELD(TargetLedger), STI_UINT32, SOE_IFFLAG, 4 }, { S_FIELD(TargetLedger), STI_UINT32, SOE_IFFLAG, 4 },
{ S_FIELD(InvoiceID), STI_HASH256, SOE_IFFLAG, 8 }, { S_FIELD(InvoiceID), STI_HASH256, SOE_IFFLAG, 8 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 32768 }, { S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x01000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } } { sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
}, },
{ "Invoice", ttINVOICE, { { "Invoice", ttINVOICE, {
{ S_FIELD(Flags), STI_UINT16, SOE_FLAGS, 0 }, { S_FIELD(Flags), STI_UINT32, SOE_FLAGS, 0 },
{ S_FIELD(Target), STI_ACCOUNT, SOE_REQUIRED, 0 }, { S_FIELD(Target), STI_ACCOUNT, SOE_REQUIRED, 0 },
{ S_FIELD(Amount), STI_AMOUNT, SOE_REQUIRED, 0 }, { S_FIELD(Amount), STI_AMOUNT, SOE_REQUIRED, 0 },
{ S_FIELD(Currency), STI_HASH160, SOE_IFFLAG, 1 }, { S_FIELD(Currency), STI_HASH160, SOE_IFFLAG, 1 },
@@ -25,11 +25,11 @@ TransactionFormat InnerTxnFormats[]=
{ S_FIELD(Destination), STI_ACCOUNT, SOE_IFFLAG, 4 }, { S_FIELD(Destination), STI_ACCOUNT, SOE_IFFLAG, 4 },
{ S_FIELD(TargetLedger), STI_UINT32, SOE_IFFLAG, 8 }, { S_FIELD(TargetLedger), STI_UINT32, SOE_IFFLAG, 8 },
{ S_FIELD(Identifier), STI_VL, SOE_IFFLAG, 16 }, { S_FIELD(Identifier), STI_VL, SOE_IFFLAG, 16 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 32768 }, { S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x01000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } } { sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
}, },
{ "Offer", ttEXCHANGE_OFFER, { { "Offer", ttEXCHANGE_OFFER, {
{ S_FIELD(Flags), STI_UINT16, SOE_FLAGS, 0 }, { S_FIELD(Flags), STI_UINT32, SOE_FLAGS, 0 },
{ S_FIELD(AmountIn), STI_AMOUNT, SOE_REQUIRED, 0 }, { S_FIELD(AmountIn), STI_AMOUNT, SOE_REQUIRED, 0 },
{ S_FIELD(CurrencyIn), STI_HASH160, SOE_IFFLAG, 2 }, { S_FIELD(CurrencyIn), STI_HASH160, SOE_IFFLAG, 2 },
{ S_FIELD(AmountOut), STI_AMOUNT, SOE_REQUIRED, 0 }, { S_FIELD(AmountOut), STI_AMOUNT, SOE_REQUIRED, 0 },
@@ -39,7 +39,7 @@ TransactionFormat InnerTxnFormats[]=
{ S_FIELD(TargetLedger), STI_UINT32, SOE_IFFLAG, 32 }, { S_FIELD(TargetLedger), STI_UINT32, SOE_IFFLAG, 32 },
{ S_FIELD(ExpireLedger), STI_UINT32, SOE_IFFLAG, 64 }, { S_FIELD(ExpireLedger), STI_UINT32, SOE_IFFLAG, 64 },
{ S_FIELD(Identifier), STI_VL, SOE_IFFLAG, 128 }, { S_FIELD(Identifier), STI_VL, SOE_IFFLAG, 128 },
{ S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 32768 }, { S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x01000000 },
{ sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } } { sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }
}, },
{ NULL, ttINVALID } { NULL, ttINVALID }