mirror of
https://github.com/XRPLF/rippled.git
synced 2026-06-04 01:06:48 +00:00
Merge branch 'ripple/wasmi-host-functions' of https://github.com/XRPLF/rippled into ripple/se/fees
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
#include <test/jtx.h>
|
||||
|
||||
#include <xrpld/app/ledger/Ledger.h>
|
||||
#include <xrpld/app/misc/FeeVote.h>
|
||||
|
||||
#include <xrpl/basics/BasicConfig.h>
|
||||
@@ -231,7 +230,7 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
FeeSetup const defaultSetup;
|
||||
{
|
||||
// defaults
|
||||
Section config;
|
||||
Section const config;
|
||||
auto setup = setup_FeeVote(config);
|
||||
BEAST_EXPECT(setup.reference_fee == defaultSetup.reference_fee);
|
||||
BEAST_EXPECT(setup.account_reserve == defaultSetup.account_reserve);
|
||||
@@ -328,16 +327,17 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
jtx::Env env(*this, jtx::testable_amendments() - featureXRPFees - featureSmartEscrow);
|
||||
auto ledger = std::make_shared<Ledger>(
|
||||
create_genesis,
|
||||
env.app().config(),
|
||||
Rules{env.app().config().features},
|
||||
env.app().config().FEES.toFees(),
|
||||
std::vector<uint256>{},
|
||||
env.app().getNodeFamily());
|
||||
|
||||
// Create the next ledger to apply transaction to
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().timeKeeper().closeTime());
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().getTimeKeeper().closeTime());
|
||||
|
||||
// Test successful fee transaction with legacy fields
|
||||
|
||||
FeeSettingsFields fields{
|
||||
FeeSettingsFields const fields{
|
||||
.baseFee = 10,
|
||||
.reserveBase = 200000,
|
||||
.reserveIncrement = 50000,
|
||||
@@ -357,14 +357,15 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
jtx::Env env(*this, jtx::testable_amendments() - featureSmartEscrow);
|
||||
auto ledger = std::make_shared<Ledger>(
|
||||
create_genesis,
|
||||
env.app().config(),
|
||||
Rules{env.app().config().features},
|
||||
env.app().config().FEES.toFees(),
|
||||
std::vector<uint256>{},
|
||||
env.app().getNodeFamily());
|
||||
|
||||
// Create the next ledger to apply transaction to
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().timeKeeper().closeTime());
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().getTimeKeeper().closeTime());
|
||||
|
||||
FeeSettingsFields fields{
|
||||
FeeSettingsFields const fields{
|
||||
.baseFeeDrops = XRPAmount{10},
|
||||
.reserveBaseDrops = XRPAmount{200000},
|
||||
.reserveIncrementDrops = XRPAmount{50000}};
|
||||
@@ -446,12 +447,13 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
jtx::Env env(*this, jtx::testable_amendments() - featureXRPFees - featureSmartEscrow);
|
||||
auto ledger = std::make_shared<Ledger>(
|
||||
create_genesis,
|
||||
env.app().config(),
|
||||
Rules{env.app().config().features},
|
||||
env.app().config().FEES.toFees(),
|
||||
std::vector<uint256>{},
|
||||
env.app().getNodeFamily());
|
||||
|
||||
// Create the next ledger to apply transaction to
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().timeKeeper().closeTime());
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().getTimeKeeper().closeTime());
|
||||
|
||||
// Test transaction with missing required legacy fields
|
||||
auto invalidTx = createInvalidFeeTx(ledger->rules(), ledger->seq(), true, false, 1);
|
||||
@@ -467,12 +469,13 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
jtx::Env env(*this, jtx::testable_amendments() - featureSmartEscrow);
|
||||
auto ledger = std::make_shared<Ledger>(
|
||||
create_genesis,
|
||||
env.app().config(),
|
||||
Rules{env.app().config().features},
|
||||
env.app().config().FEES.toFees(),
|
||||
std::vector<uint256>{},
|
||||
env.app().getNodeFamily());
|
||||
|
||||
// Create the next ledger to apply transaction to
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().timeKeeper().closeTime());
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().getTimeKeeper().closeTime());
|
||||
|
||||
// Test transaction with missing required new fields
|
||||
auto invalidTx = createInvalidFeeTx(ledger->rules(), ledger->seq(), true, false, 3);
|
||||
@@ -513,10 +516,14 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
|
||||
jtx::Env env(*this, jtx::testable_amendments() - featureSmartEscrow);
|
||||
auto ledger = std::make_shared<Ledger>(
|
||||
create_genesis, env.app().config(), std::vector<uint256>{}, env.app().getNodeFamily());
|
||||
create_genesis,
|
||||
Rules{env.app().config().features},
|
||||
env.app().config().FEES.toFees(),
|
||||
std::vector<uint256>{},
|
||||
env.app().getNodeFamily());
|
||||
|
||||
// Create the next ledger to apply transaction to
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().timeKeeper().closeTime());
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().getTimeKeeper().closeTime());
|
||||
|
||||
auto feeTx = createFeeTx(
|
||||
ledger->rules(),
|
||||
@@ -548,11 +555,15 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
|
||||
jtx::Env env(*this, jtx::testable_amendments() - featureSmartEscrow);
|
||||
auto ledger = std::make_shared<Ledger>(
|
||||
create_genesis, env.app().config(), std::vector<uint256>{}, env.app().getNodeFamily());
|
||||
create_genesis,
|
||||
Rules{env.app().config().features},
|
||||
env.app().config().FEES.toFees(),
|
||||
std::vector<uint256>{},
|
||||
env.app().getNodeFamily());
|
||||
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().timeKeeper().closeTime());
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().getTimeKeeper().closeTime());
|
||||
|
||||
FeeSettingsFields fields1{
|
||||
FeeSettingsFields const fields1{
|
||||
.baseFeeDrops = XRPAmount{10},
|
||||
.reserveBaseDrops = XRPAmount{200000},
|
||||
.reserveIncrementDrops = XRPAmount{50000}};
|
||||
@@ -567,9 +578,9 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
BEAST_EXPECT(verifyFeeObject(ledger, ledger->rules(), fields1));
|
||||
|
||||
// Apply second fee transaction with different values
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().timeKeeper().closeTime());
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().getTimeKeeper().closeTime());
|
||||
|
||||
FeeSettingsFields fields2{
|
||||
FeeSettingsFields const fields2{
|
||||
.baseFeeDrops = XRPAmount{20},
|
||||
.reserveBaseDrops = XRPAmount{300000},
|
||||
.reserveIncrementDrops = XRPAmount{75000}};
|
||||
@@ -592,9 +603,13 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
|
||||
jtx::Env env(*this, jtx::testable_amendments() - featureSmartEscrow);
|
||||
auto ledger = std::make_shared<Ledger>(
|
||||
create_genesis, env.app().config(), std::vector<uint256>{}, env.app().getNodeFamily());
|
||||
create_genesis,
|
||||
Rules{env.app().config().features},
|
||||
env.app().config().FEES.toFees(),
|
||||
std::vector<uint256>{},
|
||||
env.app().getNodeFamily());
|
||||
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().timeKeeper().closeTime());
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().getTimeKeeper().closeTime());
|
||||
|
||||
// Test transaction with wrong ledger sequence
|
||||
auto feeTx = createFeeTx(
|
||||
@@ -619,11 +634,15 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
|
||||
jtx::Env env(*this, jtx::testable_amendments() - featureSmartEscrow);
|
||||
auto ledger = std::make_shared<Ledger>(
|
||||
create_genesis, env.app().config(), std::vector<uint256>{}, env.app().getNodeFamily());
|
||||
create_genesis,
|
||||
Rules{env.app().config().features},
|
||||
env.app().config().FEES.toFees(),
|
||||
std::vector<uint256>{},
|
||||
env.app().getNodeFamily());
|
||||
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().timeKeeper().closeTime());
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().getTimeKeeper().closeTime());
|
||||
|
||||
FeeSettingsFields fields1{
|
||||
FeeSettingsFields const fields1{
|
||||
.baseFeeDrops = XRPAmount{10},
|
||||
.reserveBaseDrops = XRPAmount{200000},
|
||||
.reserveIncrementDrops = XRPAmount{50000}};
|
||||
@@ -637,10 +656,10 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
|
||||
BEAST_EXPECT(verifyFeeObject(ledger, ledger->rules(), fields1));
|
||||
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().timeKeeper().closeTime());
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().getTimeKeeper().closeTime());
|
||||
|
||||
// Apply partial update (only some fields)
|
||||
FeeSettingsFields fields2{
|
||||
FeeSettingsFields const fields2{
|
||||
.baseFeeDrops = XRPAmount{20}, .reserveBaseDrops = XRPAmount{200000}};
|
||||
auto feeTx2 = createFeeTx(ledger->rules(), ledger->seq(), fields2);
|
||||
|
||||
@@ -661,9 +680,13 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
|
||||
jtx::Env env(*this, jtx::testable_amendments() - featureSmartEscrow);
|
||||
auto ledger = std::make_shared<Ledger>(
|
||||
create_genesis, env.app().config(), std::vector<uint256>{}, env.app().getNodeFamily());
|
||||
create_genesis,
|
||||
Rules{env.app().config().features},
|
||||
env.app().config().FEES.toFees(),
|
||||
std::vector<uint256>{},
|
||||
env.app().getNodeFamily());
|
||||
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().timeKeeper().closeTime());
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().getTimeKeeper().closeTime());
|
||||
|
||||
// Test invalid transaction with non-zero account - this should fail
|
||||
// validation
|
||||
@@ -695,11 +718,12 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
// Test with XRPFees enabled
|
||||
{
|
||||
Env env(*this, testable_amendments() - featureSmartEscrow);
|
||||
auto feeVote = make_FeeVote(setup, env.app().journal("FeeVote"));
|
||||
auto feeVote = make_FeeVote(setup, env.app().getJournal("FeeVote"));
|
||||
|
||||
auto ledger = std::make_shared<Ledger>(
|
||||
create_genesis,
|
||||
env.app().config(),
|
||||
Rules{env.app().config().features},
|
||||
env.app().config().FEES.toFees(),
|
||||
std::vector<uint256>{},
|
||||
env.app().getNodeFamily());
|
||||
|
||||
@@ -707,7 +731,7 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
auto pub = derivePublicKey(KeyType::secp256k1, sec);
|
||||
|
||||
auto val = std::make_shared<STValidation>(
|
||||
env.app().timeKeeper().now(), pub, sec, calcNodeID(pub), [](STValidation& v) {
|
||||
env.app().getTimeKeeper().now(), pub, sec, calcNodeID(pub), [](STValidation& v) {
|
||||
v.setFieldU32(sfLedgerSequence, 12345);
|
||||
});
|
||||
|
||||
@@ -724,11 +748,12 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
// Test with XRPFees disabled (legacy format)
|
||||
{
|
||||
Env env(*this, testable_amendments() - featureXRPFees - featureSmartEscrow);
|
||||
auto feeVote = make_FeeVote(setup, env.app().journal("FeeVote"));
|
||||
auto feeVote = make_FeeVote(setup, env.app().getJournal("FeeVote"));
|
||||
|
||||
auto ledger = std::make_shared<Ledger>(
|
||||
create_genesis,
|
||||
env.app().config(),
|
||||
Rules{env.app().config().features},
|
||||
env.app().config().FEES.toFees(),
|
||||
std::vector<uint256>{},
|
||||
env.app().getNodeFamily());
|
||||
|
||||
@@ -736,7 +761,7 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
auto pub = derivePublicKey(KeyType::secp256k1, sec);
|
||||
|
||||
auto val = std::make_shared<STValidation>(
|
||||
env.app().timeKeeper().now(), pub, sec, calcNodeID(pub), [](STValidation& v) {
|
||||
env.app().getTimeKeeper().now(), pub, sec, calcNodeID(pub), [](STValidation& v) {
|
||||
v.setFieldU32(sfLedgerSequence, 12345);
|
||||
});
|
||||
|
||||
@@ -769,15 +794,19 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
BEAST_EXPECT(env.current()->fees().reserve == XRPAmount{200'000'000});
|
||||
BEAST_EXPECT(env.current()->fees().increment == XRPAmount{50'000'000});
|
||||
|
||||
auto feeVote = make_FeeVote(setup, env.app().journal("FeeVote"));
|
||||
auto feeVote = make_FeeVote(setup, env.app().getJournal("FeeVote"));
|
||||
auto ledger = std::make_shared<Ledger>(
|
||||
create_genesis, env.app().config(), std::vector<uint256>{}, env.app().getNodeFamily());
|
||||
create_genesis,
|
||||
Rules{env.app().config().features},
|
||||
env.app().config().FEES.toFees(),
|
||||
std::vector<uint256>{},
|
||||
env.app().getNodeFamily());
|
||||
|
||||
// doVoting requires a flag ledger (every 256th ledger)
|
||||
// We need to create a ledger at sequence 256 to make it a flag ledger
|
||||
for (int i = 0; i < 256 - 1; ++i)
|
||||
{
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().timeKeeper().closeTime());
|
||||
ledger = std::make_shared<Ledger>(*ledger, env.app().getTimeKeeper().closeTime());
|
||||
}
|
||||
BEAST_EXPECT(ledger->isFlagLedger());
|
||||
|
||||
@@ -790,14 +819,14 @@ class FeeVote_test : public beast::unit_test::suite
|
||||
auto pub = derivePublicKey(KeyType::secp256k1, sec);
|
||||
|
||||
auto val = std::make_shared<STValidation>(
|
||||
env.app().timeKeeper().now(), pub, sec, calcNodeID(pub), [&](STValidation& v) {
|
||||
env.app().getTimeKeeper().now(), pub, sec, calcNodeID(pub), [&](STValidation& v) {
|
||||
v.setFieldU32(sfLedgerSequence, ledger->seq());
|
||||
// Vote for different fees than current
|
||||
v.setFieldAmount(sfBaseFeeDrops, XRPAmount{setup.reference_fee});
|
||||
v.setFieldAmount(sfReserveBaseDrops, XRPAmount{setup.account_reserve});
|
||||
v.setFieldAmount(sfReserveIncrementDrops, XRPAmount{setup.owner_reserve});
|
||||
});
|
||||
if (i % 2)
|
||||
if ((i % 2) != 0)
|
||||
val->setTrusted();
|
||||
validations.push_back(val);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user