mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-19 18:45:52 +00:00
Address rare corruption of NFTokenPage linked list (#4945)
* Add fixNFTokenPageLinks amendment: It was discovered that under rare circumstances the links between NFTokenPages could be removed. If this happens, then the account_objects and account_nfts RPC commands under-report the NFTokens owned by an account. The fixNFTokenPageLinks amendment does the following to address the problem: - It fixes the underlying problem so no further broken links should be created. - It adds Invariants so, if such damage were introduced in the future, an invariant would stop it. - It adds a new FixLedgerState transaction that repairs directories that were damaged in this fashion. - It adds unit tests for all of it.
This commit is contained in:
@@ -80,7 +80,7 @@ namespace detail {
|
||||
// Feature.cpp. Because it's only used to reserve storage, and determine how
|
||||
// large to make the FeatureBitset, it MAY be larger. It MUST NOT be less than
|
||||
// the actual number of amendments. A LogicError on startup will verify this.
|
||||
static constexpr std::size_t numFeatures = 78;
|
||||
static constexpr std::size_t numFeatures = 79;
|
||||
|
||||
/** Amendments that this server supports and the default voting behavior.
|
||||
Whether they are enabled depends on the Rules defined in the validated
|
||||
@@ -371,6 +371,7 @@ extern uint256 const fixReducedOffersV2;
|
||||
extern uint256 const fixEnforceNFTokenTrustline;
|
||||
extern uint256 const fixInnerObjTemplate2;
|
||||
extern uint256 const featureInvariantsV1_1;
|
||||
extern uint256 const fixNFTokenPageLinks;
|
||||
|
||||
} // namespace ripple
|
||||
|
||||
|
||||
@@ -388,6 +388,7 @@ extern SF_UINT16 const sfHookEmitCount;
|
||||
extern SF_UINT16 const sfHookExecutionIndex;
|
||||
extern SF_UINT16 const sfHookApiVersion;
|
||||
extern SF_UINT16 const sfDiscountedFee;
|
||||
extern SF_UINT16 const sfLedgerFixType;
|
||||
|
||||
// 32-bit integers (common)
|
||||
extern SF_UINT32 const sfNetworkID;
|
||||
|
||||
@@ -182,6 +182,7 @@ enum TEFcodes : TERUnderlyingType {
|
||||
tefTOO_BIG,
|
||||
tefNO_TICKET,
|
||||
tefNFTOKEN_IS_NOT_TRANSFERABLE,
|
||||
tefINVALID_LEDGER_FIX_TYPE,
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
@@ -190,13 +190,16 @@ enum TxType : std::uint16_t
|
||||
/** This transaction type deletes a DID */
|
||||
ttDID_DELETE = 50,
|
||||
|
||||
|
||||
/** This transaction type creates an Oracle instance */
|
||||
ttORACLE_SET = 51,
|
||||
|
||||
/** This transaction type deletes an Oracle instance */
|
||||
ttORACLE_DELETE = 52,
|
||||
|
||||
/** This transaction type fixes a problem in the ledger state */
|
||||
ttLEDGER_STATE_FIX = 53,
|
||||
|
||||
|
||||
/** This system-generated transaction type is used to update the status of the various amendments.
|
||||
|
||||
For details, see: https://xrpl.org/amendments.html
|
||||
|
||||
@@ -104,6 +104,7 @@ JSS(NFTokenAcceptOffer); // transaction type.
|
||||
JSS(NFTokenCancelOffer); // transaction type.
|
||||
JSS(NFTokenCreateOffer); // transaction type.
|
||||
JSS(NFTokenPage); // ledger type.
|
||||
JSS(LedgerStateFix); // transaction type.
|
||||
JSS(LPTokenOut); // in: AMM Liquidity Provider deposit tokens
|
||||
JSS(LPTokenIn); // in: AMM Liquidity Provider withdraw tokens
|
||||
JSS(LPToken); // out: AMM Liquidity Provider tokens info
|
||||
|
||||
Reference in New Issue
Block a user