mirror of
https://github.com/Xahau/xahaud.git
synced 2026-01-25 00:55:17 +00:00
Compare commits
2 Commits
fix2025013
...
datagram-l
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0eba2092ac | ||
|
|
ae34bbb080 |
2
.github/workflows/clang-format.yml
vendored
2
.github/workflows/clang-format.yml
vendored
@@ -30,7 +30,7 @@ jobs:
|
||||
git diff --exit-code | tee "clang-format.patch"
|
||||
- name: Upload patch
|
||||
if: failure() && steps.assert.outcome == 'failure'
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v3
|
||||
continue-on-error: true
|
||||
with:
|
||||
name: clang-format.patch
|
||||
|
||||
2
.github/workflows/levelization.yml
vendored
2
.github/workflows/levelization.yml
vendored
@@ -18,7 +18,7 @@ jobs:
|
||||
git diff --exit-code | tee "levelization.patch"
|
||||
- name: Upload patch
|
||||
if: failure() && steps.assert.outcome == 'failure'
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v3
|
||||
continue-on-error: true
|
||||
with:
|
||||
name: levelization.patch
|
||||
|
||||
@@ -92,7 +92,7 @@ pwd &&
|
||||
tar -xzf cmake-3.23.1-linux-x86_64.tar.gz -C /hbb/ &&
|
||||
echo "-- Install Boost 1.86.0 --" &&
|
||||
pwd &&
|
||||
( wget -nc -q https://archives.boost.io/release/1.86.0/source/boost_1_86_0.tar.gz; echo "" ) &&
|
||||
( wget -nc -q https://boostorg.jfrog.io/artifactory/main/release/1.86.0/source/boost_1_86_0.tar.gz; echo "" ) &&
|
||||
tar -xzf boost_1_86_0.tar.gz &&
|
||||
cd boost_1_86_0 && ./bootstrap.sh && ./b2 link=static -j$3 && ./b2 install &&
|
||||
cd ../ &&
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <ostream>
|
||||
#include <stack>
|
||||
#include <string>
|
||||
@@ -272,19 +271,7 @@ check_guard(
|
||||
int guard_func_idx,
|
||||
int last_import_idx,
|
||||
GuardLog guardLog,
|
||||
std::string guardLogAccStr,
|
||||
/* RH NOTE:
|
||||
* rules version is a bit field, so rule update 1 is 0x01, update 2 is 0x02
|
||||
* and update 3 is 0x04 ideally at rule version 3 all bits so far are set
|
||||
* (0b111) so the ruleVersion = 7, however if a specific rule update must be
|
||||
* rolled back due to unforeseen behaviour then this may no longer be the
|
||||
* case. using a bit field here leaves us flexible to rollback changes that
|
||||
* might have unforeseen consequences, without also rolling back further
|
||||
* changes that are fine.
|
||||
*/
|
||||
uint64_t rulesVersion = 0
|
||||
|
||||
)
|
||||
std::string guardLogAccStr)
|
||||
{
|
||||
#define MAX_GUARD_CALLS 1024
|
||||
uint32_t guard_count = 0;
|
||||
@@ -634,17 +621,11 @@ check_guard(
|
||||
}
|
||||
else if (fc_type == 10) // memory.copy
|
||||
{
|
||||
if (rulesVersion & 0x02U)
|
||||
GUARD_ERROR("Memory.copy instruction is not allowed.");
|
||||
|
||||
REQUIRE(2);
|
||||
ADVANCE(2);
|
||||
}
|
||||
else if (fc_type == 11) // memory.fill
|
||||
{
|
||||
if (rulesVersion & 0x02U)
|
||||
GUARD_ERROR("Memory.fill instruction is not allowed.");
|
||||
|
||||
ADVANCE(1);
|
||||
}
|
||||
else if (fc_type <= 7) // numeric instructions
|
||||
@@ -826,15 +807,6 @@ validateGuards(
|
||||
std::vector<uint8_t> const& wasm,
|
||||
GuardLog guardLog,
|
||||
std::string guardLogAccStr,
|
||||
/* RH NOTE:
|
||||
* rules version is a bit field, so rule update 1 is 0x01, update 2 is 0x02
|
||||
* and update 3 is 0x04 ideally at rule version 3 all bits so far are set
|
||||
* (0b111) so the ruleVersion = 7, however if a specific rule update must be
|
||||
* rolled back due to unforeseen behaviour then this may no longer be the
|
||||
* case. using a bit field here leaves us flexible to rollback changes that
|
||||
* might have unforeseen consequences, without also rolling back further
|
||||
* changes that are fine.
|
||||
*/
|
||||
uint64_t rulesVersion = 0)
|
||||
{
|
||||
uint64_t byteCount = wasm.size();
|
||||
@@ -1505,8 +1477,7 @@ validateGuards(
|
||||
guard_import_number,
|
||||
last_import_number,
|
||||
guardLog,
|
||||
guardLogAccStr,
|
||||
rulesVersion);
|
||||
guardLogAccStr);
|
||||
|
||||
if (!valid)
|
||||
return {};
|
||||
|
||||
@@ -79,7 +79,7 @@ main(int argc, char** argv)
|
||||
|
||||
close(fd);
|
||||
|
||||
auto result = validateGuards(hook, std::cout, "", 3);
|
||||
auto result = validateGuards(hook, std::cout, "", 1);
|
||||
|
||||
if (!result)
|
||||
{
|
||||
|
||||
@@ -1217,10 +1217,9 @@ hook::apply(
|
||||
.hookParamOverrides = hookParamOverrides,
|
||||
.hookParams = hookParams,
|
||||
.hookSkips = {},
|
||||
.exitType = applyCtx.view().rules().enabled(fixXahauV3)
|
||||
? hook_api::ExitType::UNSET
|
||||
: hook_api::ExitType::ROLLBACK, // default is to rollback
|
||||
// unless hook calls accept()
|
||||
.exitType =
|
||||
hook_api::ExitType::ROLLBACK, // default is to rollback unless
|
||||
// hook calls accept()
|
||||
.exitReason = std::string(""),
|
||||
.exitCode = -1,
|
||||
.hasCallback = hasCallback,
|
||||
@@ -4791,7 +4790,7 @@ DEFINE_HOOK_FUNCTION(
|
||||
|
||||
if (float1 == 0)
|
||||
{
|
||||
j.trace() << "HookTrace[" << HC_ACC() << "]: "
|
||||
j.trace() << "HookTrace[" << HC_ACC() << "]:"
|
||||
<< (read_len == 0
|
||||
? ""
|
||||
: std::string_view(
|
||||
|
||||
@@ -587,8 +587,7 @@ Change::activateXahauGenesis()
|
||||
wasmBytes, // wasm to verify
|
||||
loggerStream,
|
||||
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
|
||||
(ctx_.view().rules().enabled(featureHooksUpdate1) ? 1 : 0) +
|
||||
(ctx_.view().rules().enabled(fix20250131) ? 2 : 0));
|
||||
ctx_.view().rules().enabled(featureHooksUpdate1) ? 1 : 0);
|
||||
|
||||
if (!result)
|
||||
{
|
||||
|
||||
@@ -72,16 +72,6 @@ Remit::preflight(PreflightContext const& ctx)
|
||||
return temREDUNDANT;
|
||||
}
|
||||
|
||||
if (ctx.rules.enabled(fix20250131))
|
||||
{
|
||||
if (!dstID || dstID == noAccount())
|
||||
{
|
||||
JLOG(ctx.j.warn())
|
||||
<< "Malformed transaction: Remit to invalid account.";
|
||||
return temMALFORMED;
|
||||
}
|
||||
}
|
||||
|
||||
if (ctx.tx.isFieldPresent(sfInform))
|
||||
{
|
||||
AccountID const infID = ctx.tx.getAccountID(sfInform);
|
||||
|
||||
@@ -479,8 +479,7 @@ SetHook::validateHookSetEntry(SetHookCtx& ctx, STObject const& hookSetObj)
|
||||
hook, // wasm to verify
|
||||
logger,
|
||||
hsacc,
|
||||
(ctx.rules.enabled(featureHooksUpdate1) ? 1 : 0) +
|
||||
(ctx.rules.enabled(fix20250131) ? 2 : 0));
|
||||
ctx.rules.enabled(featureHooksUpdate1) ? 1 : 0);
|
||||
|
||||
if (ctx.j.trace())
|
||||
{
|
||||
|
||||
@@ -1270,18 +1270,10 @@ Transactor::executeHookChain(
|
||||
if (results.back().exitType == hook_api::ExitType::WASM_ERROR)
|
||||
{
|
||||
JLOG(j_.warn()) << "HookError[" << account << "-"
|
||||
<< ctx_.tx.getAccountID(sfAccount)
|
||||
<< ctx_.tx.getAccountID(sfAccount) << "]: "
|
||||
<< "]: Execution failure (graceful) "
|
||||
<< "HookHash: " << hookHash;
|
||||
}
|
||||
if (results.back().exitType == hook_api::ExitType::UNSET)
|
||||
{
|
||||
JLOG(j_.warn())
|
||||
<< "HookError[" << account << "-"
|
||||
<< ctx_.tx.getAccountID(sfAccount)
|
||||
<< "]: Execution failure (no exit type specified) "
|
||||
<< "HookHash: " << hookHash;
|
||||
}
|
||||
return tecHOOK_REJECTED;
|
||||
}
|
||||
|
||||
@@ -1306,7 +1298,7 @@ Transactor::executeHookChain(
|
||||
{
|
||||
JLOG(j_.warn())
|
||||
<< "HookError[" << account << "-"
|
||||
<< ctx_.tx.getAccountID(sfAccount)
|
||||
<< ctx_.tx.getAccountID(sfAccount) << "]: "
|
||||
<< "]: Execution failure (exceptional) "
|
||||
<< "Exception: " << e.what() << " HookHash: " << hookHash;
|
||||
|
||||
@@ -1434,13 +1426,13 @@ Transactor::doHookCallback(
|
||||
finalizeHookResult(callbackResult, ctx_, success);
|
||||
|
||||
JLOG(j_.trace()) << "HookInfo[" << callbackAccountID << "-"
|
||||
<< ctx_.tx.getAccountID(sfAccount)
|
||||
<< "]: Callback finalizeHookResult = " << result;
|
||||
<< ctx_.tx.getAccountID(sfAccount) << "]: "
|
||||
<< "Callback finalizeHookResult = " << result;
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
JLOG(j_.fatal()) << "HookError[" << callbackAccountID << "-"
|
||||
<< ctx_.tx.getAccountID(sfAccount)
|
||||
<< ctx_.tx.getAccountID(sfAccount) << "]: "
|
||||
<< "]: Callback failure " << e.what();
|
||||
}
|
||||
}
|
||||
@@ -1686,13 +1678,13 @@ Transactor::doAgainAsWeak(
|
||||
results.push_back(aawResult);
|
||||
|
||||
JLOG(j_.trace()) << "HookInfo[" << hookAccountID << "-"
|
||||
<< ctx_.tx.getAccountID(sfAccount)
|
||||
<< "]: aaw Hook ExitCode = " << aawResult.exitCode;
|
||||
<< ctx_.tx.getAccountID(sfAccount) << "]: "
|
||||
<< " aaw Hook ExitCode = " << aawResult.exitCode;
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
JLOG(j_.fatal()) << "HookError[" << hookAccountID << "-"
|
||||
<< ctx_.tx.getAccountID(sfAccount)
|
||||
<< ctx_.tx.getAccountID(sfAccount) << "]: "
|
||||
<< "]: aaw failure " << e.what();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,7 +74,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 = 77;
|
||||
static constexpr std::size_t numFeatures = 75;
|
||||
|
||||
/** Amendments that this server supports and the default voting behavior.
|
||||
Whether they are enabled depends on the Rules defined in the validated
|
||||
@@ -363,8 +363,6 @@ extern uint256 const fixPageCap;
|
||||
extern uint256 const fix240911;
|
||||
extern uint256 const fixFloatDivide;
|
||||
extern uint256 const fixReduceImport;
|
||||
extern uint256 const fixXahauV3;
|
||||
extern uint256 const fix20250131;
|
||||
|
||||
} // namespace ripple
|
||||
|
||||
|
||||
@@ -469,8 +469,6 @@ REGISTER_FIX (fixPageCap, Supported::yes, VoteBehavior::De
|
||||
REGISTER_FIX (fix240911, Supported::yes, VoteBehavior::DefaultYes);
|
||||
REGISTER_FIX (fixFloatDivide, Supported::yes, VoteBehavior::DefaultYes);
|
||||
REGISTER_FIX (fixReduceImport, Supported::yes, VoteBehavior::DefaultYes);
|
||||
REGISTER_FIX (fixXahauV3, Supported::yes, VoteBehavior::DefaultYes);
|
||||
REGISTER_FIX (fix20250131, Supported::yes, VoteBehavior::DefaultYes);
|
||||
|
||||
// The following amendments are obsolete, but must remain supported
|
||||
// because they could potentially get enabled.
|
||||
|
||||
@@ -240,9 +240,7 @@ TxMeta::addRaw(Serializer& s, TER result, std::uint32_t index)
|
||||
{
|
||||
mResult = TERtoInt(result);
|
||||
mIndex = index;
|
||||
assert(
|
||||
(mResult == 0 || mResult == 1) ||
|
||||
((mResult > 100) && (mResult <= 255)));
|
||||
assert((mResult == 0) || ((mResult > 100) && (mResult <= 255)));
|
||||
|
||||
mNodes.sort([](STObject const& o1, STObject const& o2) {
|
||||
return o1.getFieldH256(sfLedgerIndex) < o2.getFieldH256(sfLedgerIndex);
|
||||
|
||||
@@ -75,7 +75,7 @@ doAccountInfo(RPC::JsonContext& context)
|
||||
auto const accountID{std::move(id.value())};
|
||||
|
||||
static constexpr std::
|
||||
array<std::pair<std::string_view, LedgerSpecificFlags>, 11>
|
||||
array<std::pair<std::string_view, LedgerSpecificFlags>, 10>
|
||||
lsFlags{
|
||||
{{"defaultRipple", lsfDefaultRipple},
|
||||
{"depositAuth", lsfDepositAuth},
|
||||
@@ -86,8 +86,7 @@ doAccountInfo(RPC::JsonContext& context)
|
||||
{"passwordSpent", lsfPasswordSpent},
|
||||
{"requireAuthorization", lsfRequireAuth},
|
||||
{"tshCollect", lsfTshCollect},
|
||||
{"requireDestinationTag", lsfRequireDestTag},
|
||||
{"uriTokenIssuer", lsfURITokenIssuer}}};
|
||||
{"requireDestinationTag", lsfRequireDestTag}}};
|
||||
|
||||
static constexpr std::
|
||||
array<std::pair<std::string_view, LedgerSpecificFlags>, 5>
|
||||
|
||||
@@ -5544,6 +5544,7 @@ public:
|
||||
testTSH(sa - fixXahauV1 - fixXahauV2);
|
||||
testTSH(sa - fixXahauV2);
|
||||
testTSH(sa);
|
||||
testEmittedTxn(sa - fixXahauV2);
|
||||
testEmittedTxn(sa);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1138,54 +1138,6 @@ public:
|
||||
: preHookCount + 66);
|
||||
}
|
||||
|
||||
void
|
||||
testFillCopy(FeatureBitset features)
|
||||
{
|
||||
testcase("Test fill/copy");
|
||||
|
||||
// a hook containing memory.fill instruction
|
||||
std::string hookFill =
|
||||
"0061736d0100000001130360027f7f017f60037f7f7e017e60017f017e02"
|
||||
"170203656e76025f67000003656e76066163636570740001030201020503"
|
||||
"0100020621057f01418088040b7f004180080b7f004180080b7f00418088"
|
||||
"040b7f004180080b07080104686f6f6b00020aa4800001a0800001017e23"
|
||||
"01412a41e400fc0b004101410110001a41004100420010011a20010b";
|
||||
|
||||
// a hook containing memory.copy instruction
|
||||
std::string hookCopy =
|
||||
"0061736d0100000001130360027f7f017f60037f7f7e017e60017f017e02"
|
||||
"170203656e76025f67000003656e76066163636570740001030201020503"
|
||||
"0100020621057f01418088040b7f004180080b7f004180080b7f00418088"
|
||||
"040b7f004180080b07080104686f6f6b00020aa5800001a1800001017e23"
|
||||
"00230141e400fc0a00004101410110001a41004100420010011a20010b";
|
||||
|
||||
using namespace jtx;
|
||||
|
||||
for (int withFix = 0; withFix < 2; ++withFix)
|
||||
{
|
||||
auto f = withFix ? features : features - fix20250131;
|
||||
Env env{*this, f};
|
||||
|
||||
auto const alice = Account{"alice"};
|
||||
env.fund(XRP(10000), alice);
|
||||
|
||||
auto const bob = Account{"bob"};
|
||||
env.fund(XRP(10000), bob);
|
||||
|
||||
env(ripple::test::jtx::hook(alice, {{hso(hookFill)}}, 0),
|
||||
M(withFix ? "hookFill - with fix" : "hookFill - zonder fix"),
|
||||
HSFEE,
|
||||
withFix ? ter(temMALFORMED) : ter(tesSUCCESS));
|
||||
|
||||
env(ripple::test::jtx::hook(bob, {{hso(hookCopy)}}, 0),
|
||||
M(withFix ? "hookCopy - with fix" : "hookCopy - zonder fix"),
|
||||
HSFEE,
|
||||
withFix ? ter(temMALFORMED) : ter(tesSUCCESS));
|
||||
|
||||
env.close();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
testCreate(FeatureBitset features)
|
||||
{
|
||||
@@ -12021,8 +11973,6 @@ public:
|
||||
testNSDeletePartial(features);
|
||||
testPageCap(features);
|
||||
|
||||
testFillCopy(features);
|
||||
|
||||
testWasm(features);
|
||||
test_accept(features);
|
||||
test_rollback(features);
|
||||
|
||||
Reference in New Issue
Block a user