mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-20 19:15:54 +00:00
Merge branch 'develop' into mvadari/fix-bad-cast
This commit is contained in:
4
.github/scripts/strategy-matrix/generate.py
vendored
4
.github/scripts/strategy-matrix/generate.py
vendored
@@ -130,8 +130,8 @@ def generate_strategy_matrix(all: bool, config: Config) -> list:
|
|||||||
if os['distro_name'] == 'rhel' and architecture['platform'] == 'linux/arm64':
|
if os['distro_name'] == 'rhel' and architecture['platform'] == 'linux/arm64':
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# We skip all clang-20 on arm64 due to boost 1.86 build error
|
# We skip all clang 20+ on arm64 due to Boost build error.
|
||||||
if f'{os['compiler_name']}-{os['compiler_version']}' == 'clang-20' and architecture['platform'] == 'linux/arm64':
|
if f'{os['compiler_name']}-{os['compiler_version']}' in ['clang-20', 'clang-21'] and architecture['platform'] == 'linux/arm64':
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Enable code coverage for Debian Bookworm using GCC 15 in Debug and no
|
# Enable code coverage for Debian Bookworm using GCC 15 in Debug and no
|
||||||
|
|||||||
46
.github/scripts/strategy-matrix/linux.json
vendored
46
.github/scripts/strategy-matrix/linux.json
vendored
@@ -15,63 +15,91 @@
|
|||||||
"distro_version": "bookworm",
|
"distro_version": "bookworm",
|
||||||
"compiler_name": "gcc",
|
"compiler_name": "gcc",
|
||||||
"compiler_version": "12",
|
"compiler_version": "12",
|
||||||
"image_sha": "e1782cd"
|
"image_sha": "0525eae"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"distro_name": "debian",
|
"distro_name": "debian",
|
||||||
"distro_version": "bookworm",
|
"distro_version": "bookworm",
|
||||||
"compiler_name": "gcc",
|
"compiler_name": "gcc",
|
||||||
"compiler_version": "13",
|
"compiler_version": "13",
|
||||||
"image_sha": "e1782cd"
|
"image_sha": "0525eae"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"distro_name": "debian",
|
"distro_name": "debian",
|
||||||
"distro_version": "bookworm",
|
"distro_version": "bookworm",
|
||||||
"compiler_name": "gcc",
|
"compiler_name": "gcc",
|
||||||
"compiler_version": "14",
|
"compiler_version": "14",
|
||||||
"image_sha": "e1782cd"
|
"image_sha": "0525eae"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"distro_name": "debian",
|
"distro_name": "debian",
|
||||||
"distro_version": "bookworm",
|
"distro_version": "bookworm",
|
||||||
"compiler_name": "gcc",
|
"compiler_name": "gcc",
|
||||||
"compiler_version": "15",
|
"compiler_version": "15",
|
||||||
"image_sha": "e1782cd"
|
"image_sha": "0525eae"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"distro_name": "debian",
|
"distro_name": "debian",
|
||||||
"distro_version": "bookworm",
|
"distro_version": "bookworm",
|
||||||
"compiler_name": "clang",
|
"compiler_name": "clang",
|
||||||
"compiler_version": "16",
|
"compiler_version": "16",
|
||||||
"image_sha": "e1782cd"
|
"image_sha": "0525eae"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"distro_name": "debian",
|
"distro_name": "debian",
|
||||||
"distro_version": "bookworm",
|
"distro_version": "bookworm",
|
||||||
"compiler_name": "clang",
|
"compiler_name": "clang",
|
||||||
"compiler_version": "17",
|
"compiler_version": "17",
|
||||||
"image_sha": "e1782cd"
|
"image_sha": "0525eae"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"distro_name": "debian",
|
"distro_name": "debian",
|
||||||
"distro_version": "bookworm",
|
"distro_version": "bookworm",
|
||||||
"compiler_name": "clang",
|
"compiler_name": "clang",
|
||||||
"compiler_version": "18",
|
"compiler_version": "18",
|
||||||
"image_sha": "e1782cd"
|
"image_sha": "0525eae"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"distro_name": "debian",
|
"distro_name": "debian",
|
||||||
"distro_version": "bookworm",
|
"distro_version": "bookworm",
|
||||||
"compiler_name": "clang",
|
"compiler_name": "clang",
|
||||||
"compiler_version": "19",
|
"compiler_version": "19",
|
||||||
"image_sha": "e1782cd"
|
"image_sha": "0525eae"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"distro_name": "debian",
|
"distro_name": "debian",
|
||||||
"distro_version": "bookworm",
|
"distro_version": "bookworm",
|
||||||
"compiler_name": "clang",
|
"compiler_name": "clang",
|
||||||
"compiler_version": "20",
|
"compiler_version": "20",
|
||||||
"image_sha": "e1782cd"
|
"image_sha": "0525eae"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"distro_name": "debian",
|
||||||
|
"distro_version": "trixie",
|
||||||
|
"compiler_name": "gcc",
|
||||||
|
"compiler_version": "14",
|
||||||
|
"image_sha": "0525eae"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"distro_name": "debian",
|
||||||
|
"distro_version": "trixie",
|
||||||
|
"compiler_name": "gcc",
|
||||||
|
"compiler_version": "15",
|
||||||
|
"image_sha": "0525eae"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"distro_name": "debian",
|
||||||
|
"distro_version": "trixie",
|
||||||
|
"compiler_name": "clang",
|
||||||
|
"compiler_version": "20",
|
||||||
|
"image_sha": "0525eae"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"distro_name": "debian",
|
||||||
|
"distro_version": "trixie",
|
||||||
|
"compiler_name": "clang",
|
||||||
|
"compiler_version": "21",
|
||||||
|
"image_sha": "0525eae"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"distro_name": "rhel",
|
"distro_name": "rhel",
|
||||||
|
|||||||
@@ -66,7 +66,6 @@ XRPL_FEATURE(XRPFees, Supported::yes, VoteBehavior::DefaultNo
|
|||||||
XRPL_FEATURE(DisallowIncoming, Supported::yes, VoteBehavior::DefaultNo)
|
XRPL_FEATURE(DisallowIncoming, Supported::yes, VoteBehavior::DefaultNo)
|
||||||
XRPL_FIX (RemoveNFTokenAutoTrustLine, Supported::yes, VoteBehavior::DefaultYes)
|
XRPL_FIX (RemoveNFTokenAutoTrustLine, Supported::yes, VoteBehavior::DefaultYes)
|
||||||
XRPL_FEATURE(FlowSortStrands, Supported::yes, VoteBehavior::DefaultYes)
|
XRPL_FEATURE(FlowSortStrands, Supported::yes, VoteBehavior::DefaultYes)
|
||||||
XRPL_FEATURE(NegativeUNL, Supported::yes, VoteBehavior::DefaultYes)
|
|
||||||
XRPL_FEATURE(RequireFullyCanonicalSig, Supported::yes, VoteBehavior::DefaultYes)
|
XRPL_FEATURE(RequireFullyCanonicalSig, Supported::yes, VoteBehavior::DefaultYes)
|
||||||
XRPL_FEATURE(DeletableAccounts, Supported::yes, VoteBehavior::DefaultYes)
|
XRPL_FEATURE(DeletableAccounts, Supported::yes, VoteBehavior::DefaultYes)
|
||||||
XRPL_FEATURE(Checks, Supported::yes, VoteBehavior::DefaultYes)
|
XRPL_FEATURE(Checks, Supported::yes, VoteBehavior::DefaultYes)
|
||||||
@@ -130,6 +129,7 @@ XRPL_RETIRE_FEATURE(HardenedValidations)
|
|||||||
XRPL_RETIRE_FEATURE(ImmediateOfferKilled)
|
XRPL_RETIRE_FEATURE(ImmediateOfferKilled)
|
||||||
XRPL_RETIRE_FEATURE(MultiSign)
|
XRPL_RETIRE_FEATURE(MultiSign)
|
||||||
XRPL_RETIRE_FEATURE(MultiSignReserve)
|
XRPL_RETIRE_FEATURE(MultiSignReserve)
|
||||||
|
XRPL_RETIRE_FEATURE(NegativeUNL)
|
||||||
XRPL_RETIRE_FEATURE(NonFungibleTokensV1_1)
|
XRPL_RETIRE_FEATURE(NonFungibleTokensV1_1)
|
||||||
XRPL_RETIRE_FEATURE(PayChan)
|
XRPL_RETIRE_FEATURE(PayChan)
|
||||||
XRPL_RETIRE_FEATURE(SortedDirectories)
|
XRPL_RETIRE_FEATURE(SortedDirectories)
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ namespace test {
|
|||||||
/*
|
/*
|
||||||
* This file implements the following negative UNL related tests:
|
* This file implements the following negative UNL related tests:
|
||||||
* -- test filling and applying ttUNL_MODIFY Tx and ledger update
|
* -- test filling and applying ttUNL_MODIFY Tx and ledger update
|
||||||
* -- test ttUNL_MODIFY Tx failure without featureNegativeUNL amendment
|
|
||||||
* -- test the NegativeUNLVote class. The test cases are split to multiple
|
* -- test the NegativeUNLVote class. The test cases are split to multiple
|
||||||
* test classes to allow parallel execution.
|
* test classes to allow parallel execution.
|
||||||
* -- test the negativeUNLFilter function
|
* -- test the negativeUNLFilter function
|
||||||
@@ -208,7 +207,7 @@ class NegativeUNL_test : public beast::unit_test::suite
|
|||||||
|
|
||||||
testcase("Create UNLModify Tx and apply to ledgers");
|
testcase("Create UNLModify Tx and apply to ledgers");
|
||||||
|
|
||||||
jtx::Env env(*this, jtx::testable_amendments() | featureNegativeUNL);
|
jtx::Env env(*this, jtx::testable_amendments());
|
||||||
std::vector<PublicKey> publicKeys = createPublicKeys(3);
|
std::vector<PublicKey> publicKeys = createPublicKeys(3);
|
||||||
// genesis ledger
|
// genesis ledger
|
||||||
auto l = std::make_shared<Ledger>(
|
auto l = std::make_shared<Ledger>(
|
||||||
@@ -216,7 +215,6 @@ class NegativeUNL_test : public beast::unit_test::suite
|
|||||||
env.app().config(),
|
env.app().config(),
|
||||||
std::vector<uint256>{},
|
std::vector<uint256>{},
|
||||||
env.app().getNodeFamily());
|
env.app().getNodeFamily());
|
||||||
BEAST_EXPECT(l->rules().enabled(featureNegativeUNL));
|
|
||||||
|
|
||||||
// Record the public keys and ledger sequences of expected negative UNL
|
// Record the public keys and ledger sequences of expected negative UNL
|
||||||
// validators when we build the ledger history
|
// validators when we build the ledger history
|
||||||
@@ -500,44 +498,6 @@ class NegativeUNL_test : public beast::unit_test::suite
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class NegativeUNLNoAmendment_test : public beast::unit_test::suite
|
|
||||||
{
|
|
||||||
void
|
|
||||||
testNegativeUNLNoAmendment()
|
|
||||||
{
|
|
||||||
testcase("No negative UNL amendment");
|
|
||||||
|
|
||||||
jtx::Env env(*this, jtx::testable_amendments() - featureNegativeUNL);
|
|
||||||
std::vector<PublicKey> publicKeys = createPublicKeys(1);
|
|
||||||
// genesis ledger
|
|
||||||
auto l = std::make_shared<Ledger>(
|
|
||||||
create_genesis,
|
|
||||||
env.app().config(),
|
|
||||||
std::vector<uint256>{},
|
|
||||||
env.app().getNodeFamily());
|
|
||||||
BEAST_EXPECT(!l->rules().enabled(featureNegativeUNL));
|
|
||||||
|
|
||||||
// generate more ledgers
|
|
||||||
for (auto i = 0; i < 256 - 1; ++i)
|
|
||||||
{
|
|
||||||
l = std::make_shared<Ledger>(
|
|
||||||
*l, env.app().timeKeeper().closeTime());
|
|
||||||
}
|
|
||||||
BEAST_EXPECT(l->seq() == 256);
|
|
||||||
auto txDisable_0 = createTx(true, l->seq(), publicKeys[0]);
|
|
||||||
OpenView accum(&*l);
|
|
||||||
BEAST_EXPECT(applyAndTestResult(env, accum, txDisable_0, false));
|
|
||||||
accum.apply(*l);
|
|
||||||
BEAST_EXPECT(negUnlSizeTest(l, 0, false, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
run() override
|
|
||||||
{
|
|
||||||
testNegativeUNLNoAmendment();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility class for creating validators and ledger history
|
* Utility class for creating validators and ledger history
|
||||||
*/
|
*/
|
||||||
@@ -563,7 +523,7 @@ struct NetworkHistory
|
|||||||
};
|
};
|
||||||
|
|
||||||
NetworkHistory(beast::unit_test::suite& suite, Parameter const& p)
|
NetworkHistory(beast::unit_test::suite& suite, Parameter const& p)
|
||||||
: env(suite, jtx::testable_amendments() | featureNegativeUNL)
|
: env(suite, jtx::testable_amendments())
|
||||||
, param(p)
|
, param(p)
|
||||||
, validations(env.app().getValidations())
|
, validations(env.app().getValidations())
|
||||||
{
|
{
|
||||||
@@ -1867,7 +1827,6 @@ class NegativeUNLVoteFilterValidations_test : public beast::unit_test::suite
|
|||||||
};
|
};
|
||||||
|
|
||||||
BEAST_DEFINE_TESTSUITE(NegativeUNL, consensus, ripple);
|
BEAST_DEFINE_TESTSUITE(NegativeUNL, consensus, ripple);
|
||||||
BEAST_DEFINE_TESTSUITE(NegativeUNLNoAmendment, consensus, ripple);
|
|
||||||
|
|
||||||
BEAST_DEFINE_TESTSUITE(NegativeUNLVoteInternal, consensus, ripple);
|
BEAST_DEFINE_TESTSUITE(NegativeUNLVoteInternal, consensus, ripple);
|
||||||
BEAST_DEFINE_TESTSUITE_MANUAL(NegativeUNLVoteScoreTable, consensus, ripple);
|
BEAST_DEFINE_TESTSUITE_MANUAL(NegativeUNLVoteScoreTable, consensus, ripple);
|
||||||
|
|||||||
@@ -124,7 +124,8 @@ class Feature_test : public beast::unit_test::suite
|
|||||||
featureToName(fixRemoveNFTokenAutoTrustLine) ==
|
featureToName(fixRemoveNFTokenAutoTrustLine) ==
|
||||||
"fixRemoveNFTokenAutoTrustLine");
|
"fixRemoveNFTokenAutoTrustLine");
|
||||||
BEAST_EXPECT(featureToName(featureFlow) == "Flow");
|
BEAST_EXPECT(featureToName(featureFlow) == "Flow");
|
||||||
BEAST_EXPECT(featureToName(featureNegativeUNL) == "NegativeUNL");
|
BEAST_EXPECT(
|
||||||
|
featureToName(featureDeletableAccounts) == "DeletableAccounts");
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
featureToName(fixIncludeKeyletFields) == "fixIncludeKeyletFields");
|
featureToName(fixIncludeKeyletFields) == "fixIncludeKeyletFields");
|
||||||
BEAST_EXPECT(featureToName(featureTokenEscrow) == "TokenEscrow");
|
BEAST_EXPECT(featureToName(featureTokenEscrow) == "TokenEscrow");
|
||||||
|
|||||||
@@ -346,9 +346,7 @@ RCLConsensus::Adaptor::onClose(
|
|||||||
prevLedger, validations, initialSet, j_);
|
prevLedger, validations, initialSet, j_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (
|
else if (prevLedger->isVotingLedger())
|
||||||
prevLedger->isVotingLedger() &&
|
|
||||||
prevLedger->rules().enabled(featureNegativeUNL))
|
|
||||||
{
|
{
|
||||||
// previous ledger was a voting ledger,
|
// previous ledger was a voting ledger,
|
||||||
// so the current consensus session is for a flag ledger,
|
// so the current consensus session is for a flag ledger,
|
||||||
@@ -1015,8 +1013,7 @@ RCLConsensus::Adaptor::preStartRound(
|
|||||||
inboundTransactions_.newRound(prevLgr.seq());
|
inboundTransactions_.newRound(prevLgr.seq());
|
||||||
|
|
||||||
// Notify NegativeUNLVote that new validators are added
|
// Notify NegativeUNLVote that new validators are added
|
||||||
if (prevLgr.ledger_->rules().enabled(featureNegativeUNL) &&
|
if (!nowTrusted.empty())
|
||||||
!nowTrusted.empty())
|
|
||||||
nUnlVote_.newValidators(prevLgr.seq() + 1, nowTrusted);
|
nUnlVote_.newValidators(prevLgr.seq() + 1, nowTrusted);
|
||||||
|
|
||||||
// propose only if we're in sync with the network (and validating)
|
// propose only if we're in sync with the network (and validating)
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ buildLedgerImpl(
|
|||||||
{
|
{
|
||||||
auto built = std::make_shared<Ledger>(*parent, closeTime);
|
auto built = std::make_shared<Ledger>(*parent, closeTime);
|
||||||
|
|
||||||
if (built->isFlagLedger() && built->rules().enabled(featureNegativeUNL))
|
if (built->isFlagLedger())
|
||||||
{
|
{
|
||||||
built->updateNegativeUNL();
|
built->updateNegativeUNL();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2063,8 +2063,7 @@ NetworkOPsImp::beginConsensus(
|
|||||||
"ripple::NetworkOPsImp::beginConsensus : closedLedger parent matches "
|
"ripple::NetworkOPsImp::beginConsensus : closedLedger parent matches "
|
||||||
"hash");
|
"hash");
|
||||||
|
|
||||||
if (prevLedger->rules().enabled(featureNegativeUNL))
|
app_.validators().setNegativeUNL(prevLedger->negativeUNL());
|
||||||
app_.validators().setNegativeUNL(prevLedger->negativeUNL());
|
|
||||||
TrustChanges const changes = app_.validators().updateTrusted(
|
TrustChanges const changes = app_.validators().updateTrusted(
|
||||||
app_.getValidations().getCurrentNodeIDs(),
|
app_.getValidations().getCurrentNodeIDs(),
|
||||||
closingInfo.parentCloseTime,
|
closingInfo.parentCloseTime,
|
||||||
|
|||||||
@@ -51,13 +51,6 @@ Transactor::invokePreflight<Change>(PreflightContext const& ctx)
|
|||||||
return temBAD_SEQUENCE;
|
return temBAD_SEQUENCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx.tx.getTxnType() == ttUNL_MODIFY &&
|
|
||||||
!ctx.rules.enabled(featureNegativeUNL))
|
|
||||||
{
|
|
||||||
JLOG(ctx.j.warn()) << "Change: NegativeUNL not enabled";
|
|
||||||
return temDISABLED;
|
|
||||||
}
|
|
||||||
|
|
||||||
return tesSUCCESS;
|
return tesSUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user