From 664c77489dbfdae7ffa0e8a755e7544cbf094f73 Mon Sep 17 00:00:00 2001 From: Richard Holland Date: Mon, 31 Jan 2022 10:23:21 +0000 Subject: [PATCH] sfcodes for xls20 and hooks --- src/ripple/protocol/SField.h | 62 ++++++++++++++++++----------- src/ripple/protocol/impl/SField.cpp | 53 ++++++++++++++---------- 2 files changed, 71 insertions(+), 44 deletions(-) diff --git a/src/ripple/protocol/SField.h b/src/ripple/protocol/SField.h index 8c519aff2..6397990fb 100644 --- a/src/ripple/protocol/SField.h +++ b/src/ripple/protocol/SField.h @@ -52,7 +52,6 @@ class STVector256; enum SerializedTypeID { // special types STI_UNKNOWN = -2, - STI_DONE = -1, STI_NOTPRESENT = 0, // // types (common) @@ -73,6 +72,10 @@ enum SerializedTypeID { STI_HASH160 = 17, STI_PATHSET = 18, STI_VECTOR256 = 19, + STI_UINT96 = 20, + STI_UINT192 = 21, + STI_UINT384 = 22, + STI_UINT512 = 23, // high level types // cannot be serialized inside other types @@ -150,7 +153,8 @@ public: const char* fn, int meta = sMD_Default, IsSigning signing = IsSigning::yes); - explicit SField(private_access_tag_t, int fc); + explicit SField(private_access_tag_t, int fc) = delete; + explicit SField(private_access_tag_t, int fc, bool); static const SField& getField(int fieldCode); @@ -186,26 +190,18 @@ public: return jsonName; } - bool - isGeneric() const - { - return fieldCode == 0; - } bool isInvalid() const { return fieldCode == -1; } + bool isUseful() const { return fieldCode > 0; } - bool - isKnown() const - { - return fieldType != STI_UNKNOWN; - } + bool isBinary() const { @@ -238,11 +234,6 @@ public: return num; } - bool - isSigningField() const - { - return signingField == IsSigning::yes; - } bool shouldMeta(int c) const { @@ -318,9 +309,14 @@ using SF_UINT8 = TypedField>; using SF_UINT16 = TypedField>; using SF_UINT32 = TypedField>; using SF_UINT64 = TypedField>; +using SF_UINT96 = TypedField>; using SF_HASH128 = TypedField>; using SF_HASH160 = TypedField>; +using SF_UINT192 = TypedField>; using SF_HASH256 = TypedField>; +using SF_UINT384 = TypedField>; +using SF_UINT512 = TypedField>; + using SF_ACCOUNT = TypedField; using SF_AMOUNT = TypedField; using SF_VL = TypedField; @@ -341,12 +337,13 @@ extern SF_UINT8 const sfMethod; extern SF_UINT8 const sfTransactionResult; extern SF_UINT8 const sfTickSize; extern SF_UINT8 const sfUNLModifyDisabling; -extern SF_UINT8 const sfHookResult; // code indicating what happened accept/rollback/error, NOT return code. +extern SF_UINT8 const sfHookResult; // 16-bit integers extern SF_UINT16 const sfLedgerEntryType; extern SF_UINT16 const sfTransactionType; extern SF_UINT16 const sfSignerWeight; +extern SF_UINT16 const sfTransferFee; // 16-bit integers (uncommon) extern SF_UINT16 const sfVersion; @@ -398,7 +395,10 @@ extern SF_UINT32 const sfSettleDelay; extern SF_UINT32 const sfTicketCount; extern SF_UINT32 const sfTicketSequence; extern SF_UINT32 const sfHookStateCount; -extern SF_UINT32 const sfEmitGeneration; +extern SF_UINT32 const sfEmitGeneration; +extern SF_UINT32 const sfTokenTaxon; +extern SF_UINT32 const sfMintedTokens; +extern SF_UINT32 const sfBurnedTokens; // 64-bit integers extern SF_UINT64 const sfIndexNext; @@ -412,11 +412,12 @@ extern SF_UINT64 const sfHighNode; extern SF_UINT64 const sfDestinationNode; extern SF_UINT64 const sfCookie; extern SF_UINT64 const sfServerVersion; -extern SF_UINT64 const sfHookOn; +extern SF_UINT64 const sfHookOn; extern SF_UINT64 const sfHookInstructionCount; -extern SF_UINT64 const sfEmitBurden; -extern SF_UINT64 const sfHookReturnCode; // the code returned by hook dev (rollback or accept) NOT exe. result +extern SF_UINT64 const sfEmitBurden; +extern SF_UINT64 const sfHookReturnCode; extern SF_UINT64 const sfReferenceCount; +extern SF_UINT64 const sfOfferNode; // 128-bit extern SF_HASH128 const sfEmailHash; @@ -437,6 +438,7 @@ extern SF_HASH256 const sfLedgerIndex; extern SF_HASH256 const sfWalletLocator; extern SF_HASH256 const sfRootIndex; extern SF_HASH256 const sfAccountTxnID; +extern SF_HASH256 const sfTokenID; extern SF_HASH256 const sfEmitParentTxnID; extern SF_HASH256 const sfEmitNonce; extern SF_HASH256 const sfEmitHookHash; @@ -451,6 +453,10 @@ extern SF_HASH256 const sfChannel; extern SF_HASH256 const sfConsensusHash; extern SF_HASH256 const sfCheckID; extern SF_HASH256 const sfValidatedHash; +extern SF_HASH256 const sfPreviousPageMin; +extern SF_HASH256 const sfNextPageMin; +extern SF_HASH256 const sfBuyOffer; +extern SF_HASH256 const sfSellOffer; extern SF_HASH256 const sfHookStateKey; extern SF_HASH256 const sfHookHash; extern SF_HASH256 const sfHookNamespace; @@ -472,12 +478,14 @@ extern SF_AMOUNT const sfDeliverMin; extern SF_AMOUNT const sfMinimumOffer; extern SF_AMOUNT const sfRippleEscrow; extern SF_AMOUNT const sfDeliveredAmount; +extern SF_AMOUNT const sfBrokerFee; // variable length (common) extern SF_VL const sfPublicKey; extern SF_VL const sfMessageKey; extern SF_VL const sfSigningPubKey; extern SF_VL const sfTxnSignature; +extern SF_VL const sfURI; extern SF_VL const sfSignature; extern SF_VL const sfDomain; extern SF_VL const sfFundCode; @@ -513,6 +521,7 @@ extern SF_ACCOUNT const sfEmitCallback; // account (uncommon) extern SF_ACCOUNT const sfHookAccount; +extern SF_ACCOUNT const sfMinter; // path set extern SField const sfPaths; @@ -521,6 +530,7 @@ extern SField const sfPaths; extern SF_VECTOR256 const sfIndexes; extern SF_VECTOR256 const sfHashes; extern SF_VECTOR256 const sfAmendments; +extern SF_VECTOR256 const sfTokenOffers; // inner object // OBJECT/1 is reserved for end of object @@ -534,6 +544,8 @@ extern SField const sfNewFields; extern SField const sfTemplateEntry; extern SField const sfMemo; extern SField const sfSignerEntry; +extern SField const sfNonFungibleToken; + extern SField const sfSigner; extern SField const sfMajority; extern SField const sfDisabledValidator; @@ -556,11 +568,13 @@ extern SField const sfMemos; extern SField const sfMajorities; extern SField const sfDisabledValidators; extern SField const sfEmitDetails; -extern SField const sfHookExecutions; // array of executions -extern SField const sfHookExecution; // actual execution result +extern SField const sfHookExecutions; +extern SField const sfHookExecution; extern SField const sfHookParameters; extern SField const sfHooks; extern SField const sfHookGrants; +extern SField const sfNonFungibleTokens; + //------------------------------------------------------------------------------ } // namespace ripple diff --git a/src/ripple/protocol/impl/SField.cpp b/src/ripple/protocol/impl/SField.cpp index e2d10fba2..acc2d4d3c 100644 --- a/src/ripple/protocol/impl/SField.cpp +++ b/src/ripple/protocol/impl/SField.cpp @@ -72,8 +72,8 @@ static SField::private_access_tag_t access; // clang-format off // SFields which, for historical reasons, do not follow naming conventions. -SField const sfInvalid(access, -1); -SField const sfGeneric(access, 0); +SField const sfInvalid(access, -1, false); +SField const sfGeneric(access, 0, false); SField const sfHash(access, STI_HASH256, 257, "hash"); SField const sfIndex(access, STI_HASH256, 258, "index"); @@ -97,6 +97,7 @@ CONSTRUCT_TYPED_SFIELD(sfHookResult, "HookResult", UINT8, CONSTRUCT_TYPED_SFIELD(sfLedgerEntryType, "LedgerEntryType", UINT16, 1, SField::sMD_Never); CONSTRUCT_TYPED_SFIELD(sfTransactionType, "TransactionType", UINT16, 2); CONSTRUCT_TYPED_SFIELD(sfSignerWeight, "SignerWeight", UINT16, 3); +CONSTRUCT_TYPED_SFIELD(sfTransferFee, "TransferFee", UINT16, 4); // 16-bit integers (uncommon) CONSTRUCT_TYPED_SFIELD(sfVersion, "Version", UINT16, 16); @@ -147,8 +148,11 @@ CONSTRUCT_TYPED_SFIELD(sfSignerListID, "SignerListID", UINT32, CONSTRUCT_TYPED_SFIELD(sfSettleDelay, "SettleDelay", UINT32, 39); CONSTRUCT_TYPED_SFIELD(sfTicketCount, "TicketCount", UINT32, 40); CONSTRUCT_TYPED_SFIELD(sfTicketSequence, "TicketSequence", UINT32, 41); -CONSTRUCT_TYPED_SFIELD(sfHookStateCount, "HookStateCount", UINT32, 42); -CONSTRUCT_TYPED_SFIELD(sfEmitGeneration, "EmitGeneration", UINT32, 43); +CONSTRUCT_TYPED_SFIELD(sfTokenTaxon, "TokenTaxon", UINT32, 42); +CONSTRUCT_TYPED_SFIELD(sfMintedTokens, "MintedTokens", UINT32, 43); +CONSTRUCT_TYPED_SFIELD(sfBurnedTokens, "BurnedTokens", UINT32, 44); +CONSTRUCT_TYPED_SFIELD(sfHookStateCount, "HookStateCount", UINT32, 45); +CONSTRUCT_TYPED_SFIELD(sfEmitGeneration, "EmitGeneration", UINT32, 46); // 64-bit integers CONSTRUCT_TYPED_SFIELD(sfIndexNext, "IndexNext", UINT64, 1); @@ -162,9 +166,8 @@ CONSTRUCT_TYPED_SFIELD(sfHighNode, "HighNode", UINT64, CONSTRUCT_TYPED_SFIELD(sfDestinationNode, "DestinationNode", UINT64, 9); CONSTRUCT_TYPED_SFIELD(sfCookie, "Cookie", UINT64, 10); CONSTRUCT_TYPED_SFIELD(sfServerVersion, "ServerVersion", UINT64, 11); -CONSTRUCT_TYPED_SFIELD(sfEmitBurden, "EmitBurden", UINT64, 12); - -// 64-bit integers (uncommon) +CONSTRUCT_TYPED_SFIELD(sfOfferNode, "OfferNode", UINT64, 12); +CONSTRUCT_TYPED_SFIELD(sfEmitBurden, "EmitBurden", UINT64, 13); CONSTRUCT_TYPED_SFIELD(sfHookOn, "HookOn", UINT64, 16); CONSTRUCT_TYPED_SFIELD(sfHookInstructionCount, "HookInstructionCount", UINT64, 17); CONSTRUCT_TYPED_SFIELD(sfHookReturnCode, "HookReturnCode", UINT64, 18); @@ -189,9 +192,10 @@ CONSTRUCT_TYPED_SFIELD(sfLedgerIndex, "LedgerIndex", HASH256, CONSTRUCT_TYPED_SFIELD(sfWalletLocator, "WalletLocator", HASH256, 7); CONSTRUCT_TYPED_SFIELD(sfRootIndex, "RootIndex", HASH256, 8, SField::sMD_Always); CONSTRUCT_TYPED_SFIELD(sfAccountTxnID, "AccountTxnID", HASH256, 9); -CONSTRUCT_TYPED_SFIELD(sfEmitParentTxnID, "EmitParentTxnID", HASH256, 10); -CONSTRUCT_TYPED_SFIELD(sfEmitNonce, "EmitNonce", HASH256, 11); -CONSTRUCT_TYPED_SFIELD(sfEmitHookHash, "EmitHookHash", HASH256, 12); +CONSTRUCT_TYPED_SFIELD(sfTokenID, "TokenID", HASH256, 10); +CONSTRUCT_TYPED_SFIELD(sfEmitParentTxnID, "EmitParentTxnID", HASH256, 11); +CONSTRUCT_TYPED_SFIELD(sfEmitNonce, "EmitNonce", HASH256, 12); +CONSTRUCT_TYPED_SFIELD(sfEmitHookHash, "EmitHookHash", HASH256, 13); // 256-bit (uncommon) CONSTRUCT_TYPED_SFIELD(sfBookDirectory, "BookDirectory", HASH256, 16); @@ -204,10 +208,14 @@ CONSTRUCT_TYPED_SFIELD(sfChannel, "Channel", HASH256, CONSTRUCT_TYPED_SFIELD(sfConsensusHash, "ConsensusHash", HASH256, 23); CONSTRUCT_TYPED_SFIELD(sfCheckID, "CheckID", HASH256, 24); CONSTRUCT_TYPED_SFIELD(sfValidatedHash, "ValidatedHash", HASH256, 25); -CONSTRUCT_TYPED_SFIELD(sfHookStateKey, "HookStateKey", HASH256, 26); -CONSTRUCT_TYPED_SFIELD(sfHookHash, "HookHash", HASH256, 27); -CONSTRUCT_TYPED_SFIELD(sfHookNamespace, "HookNamespace", HASH256, 28); -CONSTRUCT_TYPED_SFIELD(sfHookSetTxnID, "HookSetTxnID", HASH256, 29); +CONSTRUCT_TYPED_SFIELD(sfPreviousPageMin, "PreviousPageMin", HASH256, 26); +CONSTRUCT_TYPED_SFIELD(sfNextPageMin, "NextPageMin", HASH256, 27); +CONSTRUCT_TYPED_SFIELD(sfBuyOffer, "BuyOffer", HASH256, 28); +CONSTRUCT_TYPED_SFIELD(sfSellOffer, "SellOffer", HASH256, 29); +CONSTRUCT_TYPED_SFIELD(sfHookStateKey, "HookStateKey", HASH256, 30); +CONSTRUCT_TYPED_SFIELD(sfHookHash, "HookHash", HASH256, 31); +CONSTRUCT_TYPED_SFIELD(sfHookNamespace, "HookNamespace", HASH256, 32); +CONSTRUCT_TYPED_SFIELD(sfHookSetTxnID, "HookSetTxnID", HASH256, 33); // currency amount (common) CONSTRUCT_TYPED_SFIELD(sfAmount, "Amount", AMOUNT, 1); @@ -225,13 +233,14 @@ CONSTRUCT_TYPED_SFIELD(sfDeliverMin, "DeliverMin", AMOUNT, CONSTRUCT_TYPED_SFIELD(sfMinimumOffer, "MinimumOffer", AMOUNT, 16); CONSTRUCT_TYPED_SFIELD(sfRippleEscrow, "RippleEscrow", AMOUNT, 17); CONSTRUCT_TYPED_SFIELD(sfDeliveredAmount, "DeliveredAmount", AMOUNT, 18); +CONSTRUCT_TYPED_SFIELD(sfBrokerFee, "BrokerFee", AMOUNT, 19); // variable length (common) CONSTRUCT_TYPED_SFIELD(sfPublicKey, "PublicKey", VL, 1); CONSTRUCT_TYPED_SFIELD(sfMessageKey, "MessageKey", VL, 2); CONSTRUCT_TYPED_SFIELD(sfSigningPubKey, "SigningPubKey", VL, 3); CONSTRUCT_TYPED_SFIELD(sfTxnSignature, "TxnSignature", VL, 4, SField::sMD_Default, SField::notSigning); -// Was 5 used and then obsoleted? +CONSTRUCT_TYPED_SFIELD(sfURI, "URI", VL, 5); CONSTRUCT_TYPED_SFIELD(sfSignature, "Signature", VL, 6, SField::sMD_Default, SField::notSigning); CONSTRUCT_TYPED_SFIELD(sfDomain, "Domain", VL, 7); CONSTRUCT_TYPED_SFIELD(sfFundCode, "FundCode", VL, 8); @@ -263,7 +272,8 @@ CONSTRUCT_TYPED_SFIELD(sfAuthorize, "Authorize", ACCOUNT, CONSTRUCT_TYPED_SFIELD(sfUnauthorize, "Unauthorize", ACCOUNT, 6); // 7 is currently unused CONSTRUCT_TYPED_SFIELD(sfRegularKey, "RegularKey", ACCOUNT, 8); -CONSTRUCT_TYPED_SFIELD(sfEmitCallback, "EmitCallback", ACCOUNT, 9); +CONSTRUCT_TYPED_SFIELD(sfMinter, "Minter", ACCOUNT, 9); +CONSTRUCT_TYPED_SFIELD(sfEmitCallback, "EmitCallback", ACCOUNT, 10); // account (uncommon) CONSTRUCT_TYPED_SFIELD(sfHookAccount, "HookAccount", ACCOUNT, 16); @@ -272,6 +282,7 @@ CONSTRUCT_TYPED_SFIELD(sfHookAccount, "HookAccount", ACCOUNT, CONSTRUCT_TYPED_SFIELD(sfIndexes, "Indexes", VECTOR256, 1, SField::sMD_Never); CONSTRUCT_TYPED_SFIELD(sfHashes, "Hashes", VECTOR256, 2); CONSTRUCT_TYPED_SFIELD(sfAmendments, "Amendments", VECTOR256, 3); +CONSTRUCT_TYPED_SFIELD(sfTokenOffers, "TokenOffers", VECTOR256, 4); // path set CONSTRUCT_UNTYPED_SFIELD(sfPaths, "Paths", PATHSET, 1); @@ -288,8 +299,9 @@ CONSTRUCT_UNTYPED_SFIELD(sfNewFields, "NewFields", OBJECT, CONSTRUCT_UNTYPED_SFIELD(sfTemplateEntry, "TemplateEntry", OBJECT, 9); CONSTRUCT_UNTYPED_SFIELD(sfMemo, "Memo", OBJECT, 10); CONSTRUCT_UNTYPED_SFIELD(sfSignerEntry, "SignerEntry", OBJECT, 11); -CONSTRUCT_UNTYPED_SFIELD(sfEmitDetails, "EmitDetails", OBJECT, 12); -CONSTRUCT_UNTYPED_SFIELD(sfHook, "Hook", OBJECT, 13); +CONSTRUCT_UNTYPED_SFIELD(sfNonFungibleToken, "NonFungibleToken", OBJECT, 12); +CONSTRUCT_UNTYPED_SFIELD(sfEmitDetails, "EmitDetails", OBJECT, 13); +CONSTRUCT_UNTYPED_SFIELD(sfHook, "Hook", OBJECT, 14); // inner object (uncommon) CONSTRUCT_UNTYPED_SFIELD(sfSigner, "Signer", OBJECT, 16); @@ -312,7 +324,8 @@ CONSTRUCT_UNTYPED_SFIELD(sfNecessary, "Necessary", ARRAY, CONSTRUCT_UNTYPED_SFIELD(sfSufficient, "Sufficient", ARRAY, 7); CONSTRUCT_UNTYPED_SFIELD(sfAffectedNodes, "AffectedNodes", ARRAY, 8); CONSTRUCT_UNTYPED_SFIELD(sfMemos, "Memos", ARRAY, 9); -CONSTRUCT_UNTYPED_SFIELD(sfHooks, "Hooks", ARRAY, 10); +CONSTRUCT_UNTYPED_SFIELD(sfNonFungibleTokens, "NonFungibleTokens", ARRAY, 10); +CONSTRUCT_UNTYPED_SFIELD(sfHooks, "Hooks", ARRAY, 11); // array of objects (uncommon) CONSTRUCT_UNTYPED_SFIELD(sfMajorities, "Majorities", ARRAY, 16); @@ -348,7 +361,7 @@ SField::SField( knownCodeToField[fieldCode] = this; } -SField::SField(private_access_tag_t, int fc) +SField::SField(private_access_tag_t, int fc, bool) : fieldCode(fc) , fieldType(STI_UNKNOWN) , fieldValue(0)