Some work on the new binary formats that doesn't break current code.

This commit is contained in:
JoelKatz
2012-09-24 13:04:24 -07:00
parent 02b3bcb089
commit a4070de73e
8 changed files with 156 additions and 26 deletions

98
src/FieldNames.cpp Normal file
View File

@@ -0,0 +1,98 @@
#include "FieldNames.h"
#define S_FIELD(x) sf##x, #x
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
};

15
src/FieldNames.h Normal file
View File

@@ -0,0 +1,15 @@
#ifndef __FIELDNAMES__
#define __FIELDNAMES__
#include "SerializedTypes.h"
#include "SerializedObject.h"
struct FieldName
{
SOE_Field field;
const char *fieldName;
SerializedTypeID fieldType;
int fieldValue;
};
#endif

View File

@@ -349,14 +349,17 @@ void LedgerEntrySet::calcRawMeta(Serializer& s)
switch (it->second.mAction)
{
case taaMODIFY:
Log(lsTRACE) << "Modified Node " << it->first;
nType = TMNModifiedNode;
break;
case taaDELETE:
Log(lsTRACE) << "Deleted Node " << it->first;
nType = TMNDeletedNode;
break;
case taaCREATE:
Log(lsTRACE) << "Created Node " << it->first;
nType = TMNCreatedNode;
break;

View File

@@ -30,9 +30,11 @@ enum SOE_Field
sfAcceptRate,
sfAcceptStart,
sfAccount,
sfAccountHash,
sfAmount,
sfAuthorizedKey,
sfBalance,
sfBaseFee,
sfBondAmount,
sfBookDirectory,
sfBookNode,
@@ -42,6 +44,7 @@ enum SOE_Field
sfBorrower,
sfCreateCode,
sfCloseTime,
sfCloseResolution,
sfCurrency,
sfCurrencyIn,
sfCurrencyOut,
@@ -65,18 +68,22 @@ enum SOE_Field
sfIndexes,
sfIndexNext,
sfIndexPrevious,
sfInnerTransaction,
sfInvoiceID,
sfIssuer,
sfLastNode,
sfLastTxnID,
sfLastTxnSeq,
sfLedgerHash,
sfLedgerSequence,
sfLimitAmount,
sfLoadFee,
sfLowID,
sfLowLimit,
sfLowQualityIn,
sfLowQualityOut,
sfMessageKey,
sfMiddleTransaction,
sfMinimumOffer,
sfNextAcceptExpire,
sfNextAcceptRate,
@@ -88,8 +95,10 @@ enum SOE_Field
sfOfferSequence,
sfOwner,
sfOwnerNode,
sfParentCloseTime,
sfParentHash,
sfPaths,
sfPubKey,
sfPublicKey,
sfPublishHash,
sfPublishSize,
sfQualityIn,
@@ -99,6 +108,7 @@ enum SOE_Field
sfSendMax,
sfSequence,
sfSignature,
sfSigningAccounts,
sfSigningKey,
sfSigningTime,
sfSourceTag,
@@ -107,6 +117,7 @@ enum SOE_Field
sfTakerPays,
sfTarget,
sfTransferRate,
sfTransactionHash,
sfVersion,
sfWalletLocator,

View File

@@ -15,25 +15,28 @@ enum SerializedTypeID
STI_DONE = -1,
STI_NOTPRESENT = 0,
// standard types
STI_OBJECT = 1,
STI_UINT8 = 2,
STI_UINT16 = 3,
STI_UINT32 = 4,
STI_UINT64 = 5,
STI_HASH128 = 6,
STI_HASH160 = 7,
STI_HASH256 = 8,
STI_VL = 9,
STI_TL = 10,
STI_AMOUNT = 11,
STI_PATHSET = 12,
STI_VECTOR256 = 13,
// common types
STI_UINT32 = 1,
STI_UINT64 = 2,
STI_HASH128 = 3,
STI_HASH256 = 4,
STI_TL = 5,
STI_AMOUNT = 6,
STI_VL = 7,
STI_ACCOUNT = 8,
STI_OBJECT = 14,
STI_ARRAY = 15,
// uncommon types
STI_UINT8 = 16,
STI_UINT16 = 17,
STI_HASH160 = 18,
STI_PATHSET = 19,
STI_VECTOR256 = 20,
// high level types
STI_ACCOUNT = 100,
STI_TRANSACTION = 101,
STI_LEDGERENTRY = 102
STI_TRANSACTION = 100001,
STI_LEDGERENTRY = 100002
};
enum PathFlags

View File

@@ -194,7 +194,7 @@ Transaction::pointer Transaction::setClaim(
const std::vector<unsigned char>& vucSignature)
{
mTransaction->setITFieldVL(sfGenerator, vucGenerator);
mTransaction->setITFieldVL(sfPubKey, vucPubKey);
mTransaction->setITFieldVL(sfPublicKey, vucPubKey);
mTransaction->setITFieldVL(sfSignature, vucSignature);
sign(naPrivateKey);
@@ -455,7 +455,7 @@ Transaction::pointer Transaction::setPasswordSet(
{
mTransaction->setITFieldAccount(sfAuthorizedKey, naAuthKeyID);
mTransaction->setITFieldVL(sfGenerator, vucGenerator);
mTransaction->setITFieldVL(sfPubKey, vucPubKey);
mTransaction->setITFieldVL(sfPublicKey, vucPubKey);
mTransaction->setITFieldVL(sfSignature, vucSignature);
sign(naPrivateKey);
@@ -542,7 +542,7 @@ Transaction::pointer Transaction::setWalletAdd(
{
mTransaction->setITFieldAmount(sfAmount, saAmount);
mTransaction->setITFieldAccount(sfAuthorizedKey, naAuthKeyID);
mTransaction->setITFieldVL(sfPubKey, naNewPubKey.getAccountPublic());
mTransaction->setITFieldVL(sfPublicKey, naNewPubKey.getAccountPublic());
mTransaction->setITFieldVL(sfSignature, vucSignature);
sign(naPrivateKey);

View File

@@ -30,7 +30,7 @@ TER TransactionEngine::setAuthorized(const SerializedTransaction& txn, bool bMus
//
std::vector<unsigned char> vucCipher = txn.getITFieldVL(sfGenerator);
std::vector<unsigned char> vucPubKey = txn.getITFieldVL(sfPubKey);
std::vector<unsigned char> vucPubKey = txn.getITFieldVL(sfPublicKey);
std::vector<unsigned char> vucSignature = txn.getITFieldVL(sfSignature);
NewcoinAddress naAccountPublic = NewcoinAddress::createAccountPublic(vucPubKey);
@@ -620,7 +620,7 @@ TER TransactionEngine::doWalletAdd(const SerializedTransaction& txn)
{
std::cerr << "WalletAdd>" << std::endl;
const std::vector<unsigned char> vucPubKey = txn.getITFieldVL(sfPubKey);
const std::vector<unsigned char> vucPubKey = txn.getITFieldVL(sfPublicKey);
const std::vector<unsigned char> vucSignature = txn.getITFieldVL(sfSignature);
const uint160 uAuthKeyID = txn.getITFieldAccount(sfAuthorizedKey);
const NewcoinAddress naMasterPubKey = NewcoinAddress::createAccountPublic(vucPubKey);

View File

@@ -21,7 +21,7 @@ TransactionFormat InnerTxnFormats[]=
{ "Claim", ttCLAIM, {
{ S_FIELD(Flags), STI_UINT32, SOE_FLAGS, 0 },
{ S_FIELD(Generator), STI_VL, SOE_REQUIRED, 0 },
{ S_FIELD(PubKey), STI_VL, SOE_REQUIRED, 0 },
{ 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 },
@@ -85,7 +85,7 @@ TransactionFormat InnerTxnFormats[]=
{ S_FIELD(Flags), STI_UINT32, SOE_FLAGS, 0 },
{ S_FIELD(AuthorizedKey), STI_ACCOUNT, SOE_REQUIRED, 0 },
{ S_FIELD(Generator), STI_VL, SOE_REQUIRED, 0 },
{ S_FIELD(PubKey), STI_VL, SOE_REQUIRED, 0 },
{ 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 },
@@ -106,7 +106,7 @@ TransactionFormat InnerTxnFormats[]=
{ S_FIELD(Flags), STI_UINT32, SOE_FLAGS, 0 },
{ S_FIELD(Amount), STI_AMOUNT, SOE_REQUIRED, 0 },
{ S_FIELD(AuthorizedKey), STI_ACCOUNT, SOE_REQUIRED, 0 },
{ S_FIELD(PubKey), STI_VL, SOE_REQUIRED, 0 },
{ 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 },