Merge pull request #70 from Xahau/governance_hook_l2

Governance hook l2
This commit is contained in:
RichardAH
2023-06-26 15:10:46 +02:00
committed by GitHub
38 changed files with 1472 additions and 284 deletions

View File

@@ -454,9 +454,10 @@ REGISTER_FIX (fixNonFungibleTokensV1_2, Supported::yes, VoteBehavior::De
REGISTER_FIX (fixNFTokenRemint, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(Hooks, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(BalanceRewards, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(PaychanAndEscrowForTokens, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(URIToken, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(Import, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(PaychanAndEscrowForTokens, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(URIToken, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(Import, Supported::yes, VoteBehavior::DefaultYes);
REGISTER_FEATURE(XahauGenesis, Supported::yes, VoteBehavior::DefaultYes);
// The following amendments are obsolete, but must remain supported
// because they could potentially get enabled.

View File

@@ -71,6 +71,7 @@ enum class LedgerNameSpace : std::uint16_t {
NFTOKEN_SELL_OFFERS = 'i',
URI_TOKEN = 'U',
IMPORT_VLSEQ = 'I',
UNL_REPORT = 'R',
// No longer used or supported. Left here to reserve the space
// to avoid accidental reuse.
@@ -236,6 +237,14 @@ negativeUNL() noexcept
return ret;
}
Keylet const&
UNLReport() noexcept
{
static Keylet const ret{
ltUNL_REPORT, indexHash(LedgerNameSpace::UNL_REPORT)};
return ret;
}
Keylet
book_t::operator()(Book const& b) const
{

View File

@@ -125,6 +125,29 @@ InnerObjectFormats::InnerObjectFormats()
{sfNFTokenID, soeREQUIRED},
{sfURI, soeOPTIONAL},
});
add(sfGenesisMint.jsonName.c_str(),
sfGenesisMint.getCode(),
{
{sfDestination, soeREQUIRED},
{sfAmount, soeOPTIONAL},
{sfGovernanceFlags, soeOPTIONAL},
{sfGovernanceMarks, soeOPTIONAL},
});
add(sfActiveValidator.jsonName.c_str(),
sfActiveValidator.getCode(),
{
{sfPublicKey, soeREQUIRED},
{sfAccount, soeOPTIONAL},
});
add(sfImportVLKey.jsonName.c_str(),
sfImportVLKey.getCode(),
{
{sfPublicKey, soeREQUIRED},
{sfAccount, soeOPTIONAL},
});
}
InnerObjectFormats const&

View File

@@ -63,6 +63,8 @@ LedgerFormats::LedgerFormats()
{sfRewardAccumulator, soeOPTIONAL},
{sfFirstNFTokenSequence, soeOPTIONAL},
{sfImportSequence, soeOPTIONAL},
{sfGovernanceFlags, soeOPTIONAL},
{sfGovernanceMarks, soeOPTIONAL},
},
commonFields);
@@ -298,6 +300,16 @@ LedgerFormats::LedgerFormats()
},
commonFields);
add(jss::UNLReport,
ltUNL_REPORT,
{
{sfImportVLKeys, soeOPTIONAL},
{sfActiveValidators, soeOPTIONAL},
{sfPreviousTxnID, soeREQUIRED},
{sfPreviousTxnLgrSeq, soeREQUIRED},
},
commonFields);
add(jss::EmittedTxn,
ltEMITTED_TXN,
{

View File

@@ -230,6 +230,8 @@ CONSTRUCT_TYPED_SFIELD(sfHookSetTxnID, "HookSetTxnID", UINT256,
CONSTRUCT_TYPED_SFIELD(sfOfferID, "OfferID", UINT256, 34);
CONSTRUCT_TYPED_SFIELD(sfEscrowID, "EscrowID", UINT256, 35);
CONSTRUCT_TYPED_SFIELD(sfURITokenID, "URITokenID", UINT256, 36);
CONSTRUCT_TYPED_SFIELD(sfGovernanceFlags, "GovernanceFlags", UINT256, 99);
CONSTRUCT_TYPED_SFIELD(sfGovernanceMarks, "GovernanceMarks", UINT256, 98);
// currency amount (common)
CONSTRUCT_TYPED_SFIELD(sfAmount, "Amount", AMOUNT, 1);
@@ -336,6 +338,9 @@ CONSTRUCT_UNTYPED_SFIELD(sfHookExecution, "HookExecution", OBJECT,
CONSTRUCT_UNTYPED_SFIELD(sfHookDefinition, "HookDefinition", OBJECT, 22);
CONSTRUCT_UNTYPED_SFIELD(sfHookParameter, "HookParameter", OBJECT, 23);
CONSTRUCT_UNTYPED_SFIELD(sfHookGrant, "HookGrant", OBJECT, 24);
CONSTRUCT_UNTYPED_SFIELD(sfGenesisMint, "GenesisMint", OBJECT, 96);
CONSTRUCT_UNTYPED_SFIELD(sfActiveValidator, "ActiveValidator", OBJECT, 95);
CONSTRUCT_UNTYPED_SFIELD(sfImportVLKey, "ImportVLKey", OBJECT, 94);
// array of objects
// ARRAY/1 is reserved for end of array
@@ -356,6 +361,9 @@ CONSTRUCT_UNTYPED_SFIELD(sfDisabledValidators, "DisabledValidators", ARRAY,
CONSTRUCT_UNTYPED_SFIELD(sfHookExecutions, "HookExecutions", ARRAY, 18);
CONSTRUCT_UNTYPED_SFIELD(sfHookParameters, "HookParameters", ARRAY, 19);
CONSTRUCT_UNTYPED_SFIELD(sfHookGrants, "HookGrants", ARRAY, 20);
CONSTRUCT_UNTYPED_SFIELD(sfGenesisMints, "GenesisMints", ARRAY, 96);
CONSTRUCT_UNTYPED_SFIELD(sfActiveValidators, "ActiveValidators", ARRAY, 95);
CONSTRUCT_UNTYPED_SFIELD(sfImportVLKeys, "ImportVLKeys", ARRAY, 94);
// clang-format on

View File

@@ -564,7 +564,7 @@ isPseudoTx(STObject const& tx)
return false;
auto tt = safe_cast<TxType>(*t);
return tt == ttAMENDMENT || tt == ttFEE || tt == ttUNL_MODIFY || tt == ttEMIT_FAILURE;
return tt == ttAMENDMENT || tt == ttFEE || tt == ttUNL_MODIFY || tt == ttEMIT_FAILURE || tt == ttUNL_REPORT;
}
} // namespace ripple

View File

@@ -192,6 +192,16 @@ TxFormats::TxFormats()
},
commonFields);
add(jss::UNLReport,
ttUNL_REPORT,
{
{sfLedgerSequence, soeREQUIRED},
{sfActiveValidator, soeOPTIONAL},
{sfImportVLKey, soeOPTIONAL},
},
commonFields);
add(jss::TicketCreate,
ttTICKET_CREATE,
{
@@ -358,6 +368,13 @@ TxFormats::TxFormats()
},
commonFields);
add(jss::GenesisMint,
ttGENESIS_MINT,
{
{sfGenesisMints, soeREQUIRED},
},
commonFields);
add(jss::Import,
ttIMPORT,
{