Compare commits

...

8 Commits

Author SHA1 Message Date
RichardAH
8b27fa74e3 Update generate_sfcodes.sh 2024-11-09 14:08:26 +10:00
RichardAH
4cc073eeed Update hook/sfcodes.h
Co-authored-by: tequ <git@tequ.dev>
2024-11-09 14:04:37 +10:00
RichardAH
3569658287 Update hook/sfcodes.h
Co-authored-by: tequ <git@tequ.dev>
2024-11-09 14:04:00 +10:00
Denis Angell
e529e53c85 Update sfcodes.h 2024-09-05 11:46:09 +02:00
Denis Angell
b56972e373 add sfcodes script 2024-09-05 11:46:06 +02:00
RichardAH
833df20fce Fix240819 (#350)
fix240918
---------

Co-authored-by: Denis Angell <dangell@transia.co>
2024-08-20 09:40:31 +10:00
Wietse Wind
5737c2b6e8 Workaround CentOS7 EOL 2024-08-18 01:50:44 +02:00
Richard Holland
a15d0b2ecc set huge mode nudb cache to 64mib 2024-08-14 16:40:07 +10:00
12 changed files with 159 additions and 32 deletions

View File

@@ -9,6 +9,15 @@ echo "-- GITHUB_RUN_NUMBER: $4"
umask 0000; umask 0000;
echo "Fixing CentOS 7 EOL"
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
yum clean all
yum-config-manager --disable centos-sclo-sclo
####
cd /io; cd /io;
mkdir src/certs; mkdir src/certs;
curl --silent -k https://raw.githubusercontent.com/RichardAH/rippled-release-builder/main/ca-bundle/certbundle.h -o src/certs/certbundle.h; curl --silent -k https://raw.githubusercontent.com/RichardAH/rippled-release-builder/main/ca-bundle/certbundle.h -o src/certs/certbundle.h;

29
hook/generate_sfcodes.sh Executable file
View File

@@ -0,0 +1,29 @@
#/bin/bash
RIPPLED_ROOT="../src/ripple"
echo '// For documentation please see: https://xrpl-hooks.readme.io/reference/'
echo '// Generated using generate_sfcodes.sh'
cat $RIPPLED_ROOT/protocol/impl/SField.cpp | grep -E '^CONSTRUCT_' |
sed 's/UINT16/1/g' |
sed 's/UINT32/2/g' |
sed 's/UINT64/3/g' |
sed 's/HASH128/4/g' |
sed 's/HASH256/5/g' |
sed 's/UINT128/4/g' |
sed 's/UINT256/5/g' |
sed 's/AMOUNT/6/g' |
sed 's/VL/7/g' | sed 's/Import7/ImportVL/g' |
sed 's/ACCOUNT/8/g' |
sed 's/OBJECT/14/g' |
sed 's/ARRAY/15/g' |
sed 's/UINT8/16/g' |
sed 's/HASH160/17/g' |
sed 's/UINT160/17/g' |
sed 's/PATHSET/18/g' |
sed 's/VECTOR256/19/g' |
sed 's/UINT96/20/g' |
sed 's/UINT192/21/g' |
sed 's/UINT384/22/g' |
sed 's/UINT512/23/g' |
grep -Eo '"([^"]+)", *([0-9]+), *([0-9]+)' |
sed 's/"//g' | sed 's/ *//g' | sed 's/,/ /g' |
awk '{print ("#define sf"$1" (("$2"U << 16U) + "$3"U)")}'

View File

@@ -60,7 +60,10 @@
#define sfBurnedNFTokens ((2U << 16U) + 44U) #define sfBurnedNFTokens ((2U << 16U) + 44U)
#define sfHookStateCount ((2U << 16U) + 45U) #define sfHookStateCount ((2U << 16U) + 45U)
#define sfEmitGeneration ((2U << 16U) + 46U) #define sfEmitGeneration ((2U << 16U) + 46U)
#define sfLockCount ((2U << 16U) + 47U) #define sfLockCount ((2U << 16U) + 49U)
#define sfFirstNFTokenSequence ((2U << 16U) + 50U)
#define sfXahauActivationLgrSeq ((2U << 16U) + 96U)
#define sfImportSequence ((2U << 16U) + 97U)
#define sfRewardTime ((2U << 16U) + 98U) #define sfRewardTime ((2U << 16U) + 98U)
#define sfRewardLgrFirst ((2U << 16U) + 99U) #define sfRewardLgrFirst ((2U << 16U) + 99U)
#define sfRewardLgrLast ((2U << 16U) + 100U) #define sfRewardLgrLast ((2U << 16U) + 100U)
@@ -80,6 +83,8 @@
#define sfHookInstructionCount ((3U << 16U) + 17U) #define sfHookInstructionCount ((3U << 16U) + 17U)
#define sfHookReturnCode ((3U << 16U) + 18U) #define sfHookReturnCode ((3U << 16U) + 18U)
#define sfReferenceCount ((3U << 16U) + 19U) #define sfReferenceCount ((3U << 16U) + 19U)
#define sfAccountIndex ((3U << 16U) + 98U)
#define sfAccountCount ((3U << 16U) + 99U)
#define sfRewardAccumulator ((3U << 16U) + 100U) #define sfRewardAccumulator ((3U << 16U) + 100U)
#define sfEmailHash ((4U << 16U) + 1U) #define sfEmailHash ((4U << 16U) + 1U)
#define sfTakerPaysCurrency ((10U << 16U) + 1U) #define sfTakerPaysCurrency ((10U << 16U) + 1U)
@@ -120,6 +125,9 @@
#define sfOfferID ((5U << 16U) + 34U) #define sfOfferID ((5U << 16U) + 34U)
#define sfEscrowID ((5U << 16U) + 35U) #define sfEscrowID ((5U << 16U) + 35U)
#define sfURITokenID ((5U << 16U) + 36U) #define sfURITokenID ((5U << 16U) + 36U)
#define sfGovernanceFlags ((5U << 16U) + 99U)
#define sfGovernanceMarks ((5U << 16U) + 98U)
#define sfEmittedTxnID ((5U << 16U) + 97U)
#define sfAmount ((6U << 16U) + 1U) #define sfAmount ((6U << 16U) + 1U)
#define sfBalance ((6U << 16U) + 2U) #define sfBalance ((6U << 16U) + 2U)
#define sfLimitAmount ((6U << 16U) + 3U) #define sfLimitAmount ((6U << 16U) + 3U)
@@ -136,6 +144,9 @@
#define sfNFTokenBrokerFee ((6U << 16U) + 19U) #define sfNFTokenBrokerFee ((6U << 16U) + 19U)
#define sfHookCallbackFee ((6U << 16U) + 20U) #define sfHookCallbackFee ((6U << 16U) + 20U)
#define sfLockedBalance ((6U << 16U) + 21U) #define sfLockedBalance ((6U << 16U) + 21U)
#define sfBaseFeeDrops ((6U << 16U) + 22U)
#define sfReserveBaseDrops ((6U << 16U) + 23U)
#define sfReserveIncrementDrops ((6U << 16U) + 24U)
#define sfPublicKey ((7U << 16U) + 1U) #define sfPublicKey ((7U << 16U) + 1U)
#define sfMessageKey ((7U << 16U) + 2U) #define sfMessageKey ((7U << 16U) + 2U)
#define sfSigningPubKey ((7U << 16U) + 3U) #define sfSigningPubKey ((7U << 16U) + 3U)
@@ -171,11 +182,13 @@
#define sfNFTokenMinter ((8U << 16U) + 9U) #define sfNFTokenMinter ((8U << 16U) + 9U)
#define sfEmitCallback ((8U << 16U) + 10U) #define sfEmitCallback ((8U << 16U) + 10U)
#define sfHookAccount ((8U << 16U) + 16U) #define sfHookAccount ((8U << 16U) + 16U)
#define sfInform ((8U << 16U) + 99U)
#define sfIndexes ((19U << 16U) + 1U) #define sfIndexes ((19U << 16U) + 1U)
#define sfHashes ((19U << 16U) + 2U) #define sfHashes ((19U << 16U) + 2U)
#define sfAmendments ((19U << 16U) + 3U) #define sfAmendments ((19U << 16U) + 3U)
#define sfNFTokenOffers ((19U << 16U) + 4U) #define sfNFTokenOffers ((19U << 16U) + 4U)
#define sfHookNamespaces ((19U << 16U) + 5U) #define sfHookNamespaces ((19U << 16U) + 5U)
#define sfURITokenIDs ((19U << 16U) + 99U)
#define sfPaths ((18U << 16U) + 1U) #define sfPaths ((18U << 16U) + 1U)
#define sfTransactionMetaData ((14U << 16U) + 2U) #define sfTransactionMetaData ((14U << 16U) + 2U)
#define sfCreatedNode ((14U << 16U) + 3U) #define sfCreatedNode ((14U << 16U) + 3U)
@@ -198,6 +211,12 @@
#define sfHookDefinition ((14U << 16U) + 22U) #define sfHookDefinition ((14U << 16U) + 22U)
#define sfHookParameter ((14U << 16U) + 23U) #define sfHookParameter ((14U << 16U) + 23U)
#define sfHookGrant ((14U << 16U) + 24U) #define sfHookGrant ((14U << 16U) + 24U)
#define sfGenesisMint ((14U << 16U) + 96U)
#define sfActiveValidator ((14U << 16U) + 95U)
#define sfImportVLKey ((14U << 16U) + 94U)
#define sfHookEmission ((14U << 16U) + 93U)
#define sfMintURIToken ((14U << 16U) + 92U)
#define sfAmountEntry ((14U << 16U) + 91U)
#define sfSigners ((15U << 16U) + 3U) #define sfSigners ((15U << 16U) + 3U)
#define sfSignerEntries ((15U << 16U) + 4U) #define sfSignerEntries ((15U << 16U) + 4U)
#define sfTemplate ((15U << 16U) + 5U) #define sfTemplate ((15U << 16U) + 5U)
@@ -212,4 +231,8 @@
#define sfHookExecutions ((15U << 16U) + 18U) #define sfHookExecutions ((15U << 16U) + 18U)
#define sfHookParameters ((15U << 16U) + 19U) #define sfHookParameters ((15U << 16U) + 19U)
#define sfHookGrants ((15U << 16U) + 20U) #define sfHookGrants ((15U << 16U) + 20U)
#define sfGenesisMints ((15U << 16U) + 96U)
#define sfActiveValidators ((15U << 16U) + 95U) #define sfActiveValidators ((15U << 16U) + 95U)
#define sfImportVLKeys ((15U << 16U) + 94U)
#define sfHookEmissions ((15U << 16U) + 93U)
#define sfAmounts ((15U << 16U) + 92U)

View File

@@ -1142,8 +1142,12 @@ NetworkOPsImp::submitTransaction(std::shared_ptr<STTx const> const& iTrans)
// Enforce Network bar for emitted txn // Enforce Network bar for emitted txn
if (view->rules().enabled(featureHooks) && hook::isEmittedTxn(*iTrans)) if (view->rules().enabled(featureHooks) && hook::isEmittedTxn(*iTrans))
{ {
JLOG(m_journal.warn()) // RH NOTE: Warning removed here due to ConsesusSet using this function
<< "Submitted transaction invalid: EmitDetails present."; // which continually triggers this bar. Doesn't seem dangerous, just
// annoying.
// JLOG(m_journal.warn())
// << "Submitted transaction invalid: EmitDetails present.";
return; return;
} }
@@ -1155,7 +1159,11 @@ NetworkOPsImp::submitTransaction(std::shared_ptr<STTx const> const& iTrans)
if ((flags & SF_BAD) != 0) if ((flags & SF_BAD) != 0)
{ {
JLOG(m_journal.warn()) << "Submitted transaction cached bad"; // RH NOTE: Warning removed here due to ConsesusSet using this function
// which continually triggers this bar. Doesn't seem dangerous, just
// annoying.
// JLOG(m_journal.warn()) << "Submitted transaction cached bad";
return; return;
} }

View File

@@ -173,6 +173,11 @@ updateLedgerDBs(
auto const sParentHash{to_string(ledger->info().parentHash)}; auto const sParentHash{to_string(ledger->info().parentHash)};
auto const sDrops{to_string(ledger->info().drops)}; auto const sDrops{to_string(ledger->info().drops)};
auto const closingTime{
ledger->info().closeTime.time_since_epoch().count()};
auto const prevClosingTime{
ledger->info().parentCloseTime.time_since_epoch().count()};
auto const closeTimeRes{ledger->info().closeTimeResolution.count()};
auto const sAccountHash{to_string(ledger->info().accountHash)}; auto const sAccountHash{to_string(ledger->info().accountHash)};
auto const sTxHash{to_string(ledger->info().txHash)}; auto const sTxHash{to_string(ledger->info().txHash)};
@@ -188,11 +193,8 @@ updateLedgerDBs(
":closingTime, :prevClosingTime, :closeTimeRes," ":closingTime, :prevClosingTime, :closeTimeRes,"
":closeFlags, :accountSetHash, :transSetHash);", ":closeFlags, :accountSetHash, :transSetHash);",
soci::use(sHash), soci::use(ledgerSeq), soci::use(sParentHash), soci::use(sHash), soci::use(ledgerSeq), soci::use(sParentHash),
soci::use(sDrops), soci::use(sDrops), soci::use(closingTime),
soci::use(ledger->info().closeTime.time_since_epoch().count()), soci::use(prevClosingTime), soci::use(closeTimeRes),
soci::use(
ledger->info().parentCloseTime.time_since_epoch().count()),
soci::use(ledger->info().closeTimeResolution.count()),
soci::use(ledger->info().closeFlags), soci::use(sAccountHash), soci::use(ledger->info().closeFlags), soci::use(sAccountHash),
soci::use(sTxHash); soci::use(sTxHash);

View File

@@ -205,19 +205,20 @@ insertPeerReservation(
PublicKey const& nodeId, PublicKey const& nodeId,
std::string const& description) std::string const& description)
{ {
auto const sNodeId = toBase58(TokenType::NodePublic, nodeId);
session << "INSERT INTO PeerReservations (PublicKey, Description) " session << "INSERT INTO PeerReservations (PublicKey, Description) "
"VALUES (:nodeId, :desc) " "VALUES (:nodeId, :desc) "
"ON CONFLICT (PublicKey) DO UPDATE SET " "ON CONFLICT (PublicKey) DO UPDATE SET "
"Description=excluded.Description", "Description=excluded.Description",
soci::use(toBase58(TokenType::NodePublic, nodeId)), soci::use(sNodeId), soci::use(description);
soci::use(description);
} }
void void
deletePeerReservation(soci::session& session, PublicKey const& nodeId) deletePeerReservation(soci::session& session, PublicKey const& nodeId)
{ {
auto const sNodeId = toBase58(TokenType::NodePublic, nodeId);
session << "DELETE FROM PeerReservations WHERE PublicKey = :nodeId", session << "DELETE FROM PeerReservations WHERE PublicKey = :nodeId",
soci::use(toBase58(TokenType::NodePublic, nodeId)); soci::use(sNodeId);
} }
bool bool

View File

@@ -1921,6 +1921,12 @@ Transactor::operator()()
STObject const meta = metaRaw.getAsObject(); STObject const meta = metaRaw.getAsObject();
uint32_t lgrCur = view().seq(); uint32_t lgrCur = view().seq();
bool const has240819 = view().rules().enabled(fix240819);
auto const& sfRewardFields =
*(ripple::SField::knownCodeToField.at(917511 - has240819));
// iterate all affected balances // iterate all affected balances
for (auto const& node : meta.getFieldArray(sfAffectedNodes)) for (auto const& node : meta.getFieldArray(sfAffectedNodes))
{ {
@@ -1932,7 +1938,7 @@ Transactor::operator()()
if (nodeType != ltACCOUNT_ROOT || metaType == sfDeletedNode) if (nodeType != ltACCOUNT_ROOT || metaType == sfDeletedNode)
continue; continue;
if (!node.isFieldPresent(sfFinalFields) || if (!node.isFieldPresent(sfRewardFields) ||
!node.isFieldPresent(sfLedgerIndex)) !node.isFieldPresent(sfLedgerIndex))
continue; continue;
@@ -1948,7 +1954,7 @@ Transactor::operator()()
continue; continue;
STObject& finalFields = (const_cast<STObject&>(node)) STObject& finalFields = (const_cast<STObject&>(node))
.getField(sfFinalFields) .getField(sfRewardFields)
.downcast<STObject>(); .downcast<STObject>();
if (!finalFields.isFieldPresent(sfBalance)) if (!finalFields.isFieldPresent(sfBalance))

View File

@@ -127,7 +127,7 @@ sizedItems
{SizedItem::txnDBCache, {{ 4, 12, 24, 64, 128 }}}, {SizedItem::txnDBCache, {{ 4, 12, 24, 64, 128 }}},
{SizedItem::lgrDBCache, {{ 4, 8, 16, 32, 128 }}}, {SizedItem::lgrDBCache, {{ 4, 8, 16, 32, 128 }}},
{SizedItem::openFinalLimit, {{ 8, 16, 32, 64, 128 }}}, {SizedItem::openFinalLimit, {{ 8, 16, 32, 64, 128 }}},
{SizedItem::burstSize, {{ 4, 8, 16, 32, 48 }}}, {SizedItem::burstSize, {{ 4, 8, 16, 32, 64*1024*1024 }}},
{SizedItem::ramSizeGB, {{ 8, 12, 16, 24, 32 }}}, {SizedItem::ramSizeGB, {{ 8, 12, 16, 24, 32 }}},
{SizedItem::accountIdCacheSize, {{ 20047, 50053, 77081, 150061, 300007 }}} {SizedItem::accountIdCacheSize, {{ 20047, 50053, 77081, 150061, 300007 }}}
}}; }};

View File

@@ -74,7 +74,7 @@ namespace detail {
// Feature.cpp. Because it's only used to reserve storage, and determine how // 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 // 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. // the actual number of amendments. A LogicError on startup will verify this.
static constexpr std::size_t numFeatures = 70; static constexpr std::size_t numFeatures = 71;
/** Amendments that this server supports and the default voting behavior. /** Amendments that this server supports and the default voting behavior.
Whether they are enabled depends on the Rules defined in the validated Whether they are enabled depends on the Rules defined in the validated
@@ -358,6 +358,7 @@ extern uint256 const fixXahauV2;
extern uint256 const featureRemit; extern uint256 const featureRemit;
extern uint256 const featureZeroB2M; extern uint256 const featureZeroB2M;
extern uint256 const fixNSDelete; extern uint256 const fixNSDelete;
extern uint256 const fix240819;
} // namespace ripple } // namespace ripple

View File

@@ -464,6 +464,7 @@ REGISTER_FIX (fixXahauV2, Supported::yes, VoteBehavior::De
REGISTER_FEATURE(Remit, Supported::yes, VoteBehavior::DefaultNo); REGISTER_FEATURE(Remit, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FEATURE(ZeroB2M, Supported::yes, VoteBehavior::DefaultNo); REGISTER_FEATURE(ZeroB2M, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fixNSDelete, Supported::yes, VoteBehavior::DefaultNo); REGISTER_FIX (fixNSDelete, Supported::yes, VoteBehavior::DefaultNo);
REGISTER_FIX (fix240819, Supported::yes, VoteBehavior::DefaultYes);
// The following amendments are obsolete, but must remain supported // The following amendments are obsolete, but must remain supported
// because they could potentially get enabled. // because they could potentially get enabled.

View File

@@ -256,6 +256,8 @@ BaseWSPeer<Handler, Impl>::close(
return post(strand_, [self = impl().shared_from_this(), reason] { return post(strand_, [self = impl().shared_from_this(), reason] {
self->close(reason); self->close(reason);
}); });
if (do_close_)
return;
do_close_ = true; do_close_ = true;
if (wq_.empty()) if (wq_.empty())
{ {

View File

@@ -3968,8 +3968,8 @@ struct XahauGenesis_test : public beast::unit_test::suite
using namespace std::chrono_literals; using namespace std::chrono_literals;
testcase("test claim reward valid without unl report"); testcase("test claim reward valid without unl report");
Env env{ Env env{*this, envconfig(), features - featureXahauGenesis};
*this, envconfig(), supported_amendments() - featureXahauGenesis}; bool const has240819 = env.current()->rules().enabled(fix240819);
double const rateDrops = 0.00333333333 * 1'000'000; double const rateDrops = 0.00333333333 * 1'000'000;
STAmount const feesXRP = XRP(1); STAmount const feesXRP = XRP(1);
@@ -4050,7 +4050,12 @@ struct XahauGenesis_test : public beast::unit_test::suite
// validate account fields // validate account fields
STAmount const postUser = preUser + netReward; STAmount const postUser = preUser + netReward;
BEAST_EXPECT(expectAccountFields( BEAST_EXPECT(expectAccountFields(
env, user, preLedger, preLedger + 1, postUser, preTime)); env,
user,
preLedger,
preLedger + 1,
has240819 ? (preUser - feesXRP) : postUser,
preTime));
env(claimReward(user, env.master), fee(feesXRP), ter(tecHOOK_REJECTED)); env(claimReward(user, env.master), fee(feesXRP), ter(tecHOOK_REJECTED));
env.close(); env.close();
@@ -4095,7 +4100,12 @@ struct XahauGenesis_test : public beast::unit_test::suite
// validate account fields // validate account fields
STAmount const postUser1 = preUser1 + netReward1; STAmount const postUser1 = preUser1 + netReward1;
BEAST_EXPECT(expectAccountFields( BEAST_EXPECT(expectAccountFields(
env, user, preLedger1, preLedger1 + 1, postUser1, preTime1)); env,
user,
preLedger1,
preLedger1 + 1,
has240819 ? (preUser1 - feesXRP) : postUser1,
preTime1));
} }
void void
@@ -4219,8 +4229,14 @@ struct XahauGenesis_test : public beast::unit_test::suite
// validate account fields // validate account fields
STAmount const postUser = preUser + netReward; STAmount const postUser = preUser + netReward;
bool const has240819 = env.current()->rules().enabled(fix240819);
BEAST_EXPECT(expectAccountFields( BEAST_EXPECT(expectAccountFields(
env, user, preLedger, preLedger + 1, postUser, preTime)); env,
user,
preLedger,
preLedger + 1,
has240819 ? (preUser - feesXRP) : postUser,
preTime));
} }
void void
@@ -4352,10 +4368,15 @@ struct XahauGenesis_test : public beast::unit_test::suite
// validate account fields // validate account fields
STAmount const postAlice = preAlice + netReward + l1Reward; STAmount const postAlice = preAlice + netReward + l1Reward;
bool const boolResult = withXahauV1 ? true : false; bool const boolResult = withXahauV1 ? true : false;
bool const has240819 = env.current()->rules().enabled(fix240819);
BEAST_EXPECT( BEAST_EXPECT(
expectAccountFields( expectAccountFields(
env, alice, preLedger, preLedger + 1, postAlice, preTime) == env,
boolResult); alice,
preLedger,
preLedger + 1,
has240819 ? (preAlice - feesXRP) : postAlice,
preTime) == boolResult);
} }
} }
@@ -4367,6 +4388,7 @@ struct XahauGenesis_test : public beast::unit_test::suite
testcase("test claim reward optin optout"); testcase("test claim reward optin optout");
Env env{*this, envconfig(), features - featureXahauGenesis}; Env env{*this, envconfig(), features - featureXahauGenesis};
bool const has240819 = env.current()->rules().enabled(fix240819);
double const rateDrops = 0.00333333333 * 1'000'000; double const rateDrops = 0.00333333333 * 1'000'000;
STAmount const feesXRP = XRP(1); STAmount const feesXRP = XRP(1);
@@ -4436,7 +4458,12 @@ struct XahauGenesis_test : public beast::unit_test::suite
// validate account fields // validate account fields
STAmount const postUser = preUser + netReward; STAmount const postUser = preUser + netReward;
BEAST_EXPECT(expectAccountFields( BEAST_EXPECT(expectAccountFields(
env, user, preLedger, preLedger + 1, postUser, preTime)); env,
user,
preLedger,
preLedger + 1,
has240819 ? (preUser - feesXRP) : postUser,
preTime));
// opt out of claim rewards // opt out of claim rewards
env(claimReward(user, std::nullopt, 1), fee(feesXRP), ter(tesSUCCESS)); env(claimReward(user, std::nullopt, 1), fee(feesXRP), ter(tesSUCCESS));
@@ -4461,7 +4488,7 @@ struct XahauGenesis_test : public beast::unit_test::suite
user, user,
preLedger1, preLedger1,
preLedger1 + 1, preLedger1 + 1,
env.balance(user), has240819 ? (env.balance(user) + feesXRP) : env.balance(user),
preTime1)); preTime1));
} }
@@ -4543,8 +4570,14 @@ struct XahauGenesis_test : public beast::unit_test::suite
// validate account fields // validate account fields
STAmount const postUser = preUser + netReward; STAmount const postUser = preUser + netReward;
bool const has240819 = env.current()->rules().enabled(fix240819);
BEAST_EXPECT(expectAccountFields( BEAST_EXPECT(expectAccountFields(
env, user, preLedger, preLedger + 1, postUser, preTime)); env,
user,
preLedger,
has240819 ? preLedger : preLedger + 1,
has240819 ? (preUser - feesXRP) : postUser,
preTime));
} }
void void
@@ -4618,8 +4651,14 @@ struct XahauGenesis_test : public beast::unit_test::suite
// validate account fields // validate account fields
STAmount const postUser = preUser + netReward; STAmount const postUser = preUser + netReward;
bool const has240819 = env.current()->rules().enabled(fix240819);
BEAST_EXPECT(expectAccountFields( BEAST_EXPECT(expectAccountFields(
env, user, preLedger, preLedger + 1, postUser, preTime)); env,
user,
preLedger,
preLedger + 1,
has240819 ? (preUser - feesXRP) : postUser,
preTime));
} }
void void
@@ -4824,13 +4863,13 @@ struct XahauGenesis_test : public beast::unit_test::suite
Env env{ Env env{
*this, *this,
makeGenesisConfig( makeGenesisConfig(
supported_amendments() - featureXahauGenesis, features - featureXahauGenesis,
21337, 21337,
"10", "10",
"1000000", "1000000",
"200000", "200000",
0), 0),
supported_amendments() - featureXahauGenesis}; features - featureXahauGenesis};
STAmount const feesXRP = XRP(1); STAmount const feesXRP = XRP(1);
@@ -4890,8 +4929,7 @@ struct XahauGenesis_test : public beast::unit_test::suite
using namespace std::chrono_literals; using namespace std::chrono_literals;
testcase("test compound interest over 12 claims"); testcase("test compound interest over 12 claims");
Env env{ Env env{*this, envconfig(), features - featureXahauGenesis};
*this, envconfig(), supported_amendments() - featureXahauGenesis};
double const rateDrops = 0.00333333333 * 1'000'000; double const rateDrops = 0.00333333333 * 1'000'000;
STAmount const feesXRP = XRP(1); STAmount const feesXRP = XRP(1);
@@ -4965,8 +5003,14 @@ struct XahauGenesis_test : public beast::unit_test::suite
// validate account fields // validate account fields
STAmount const postUser = preUser + netReward; STAmount const postUser = preUser + netReward;
bool const has240819 = env.current()->rules().enabled(fix240819);
BEAST_EXPECT(expectAccountFields( BEAST_EXPECT(expectAccountFields(
env, user, preLedger, preLedger + 1, postUser, preTime)); env,
user,
preLedger,
preLedger + 1,
has240819 ? (preUser - feesXRP) : postUser,
preTime));
} }
STAmount const endBal = env.balance(user); STAmount const endBal = env.balance(user);
@@ -5012,6 +5056,7 @@ struct XahauGenesis_test : public beast::unit_test::suite
using namespace test::jtx; using namespace test::jtx;
auto const sa = supported_amendments(); auto const sa = supported_amendments();
testGovernHookWithFeats(sa); testGovernHookWithFeats(sa);
testRewardHookWithFeats(sa - fix240819);
testRewardHookWithFeats(sa); testRewardHookWithFeats(sa);
} }
}; };