mirror of
https://github.com/Xahau/xahaud.git
synced 2026-01-10 01:35:16 +00:00
Compare commits
10 Commits
fix2025013
...
fix-github
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6a410033bb | ||
|
|
89cacb1258 | ||
|
|
8ccff44e8c | ||
|
|
420240a2ab | ||
|
|
230873f196 | ||
|
|
1fb1a99ea2 | ||
|
|
e0b63ac70e | ||
|
|
da8df63be3 | ||
|
|
317bd4bc6e | ||
|
|
2fd465bb3f |
2
.github/workflows/build-in-docker.yml
vendored
2
.github/workflows/build-in-docker.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
||||
checkout:
|
||||
runs-on: [self-hosted, vanity]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
clean: false
|
||||
checkpatterns:
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
#!/bin/bash
|
||||
#!/bin/bash -u
|
||||
# We use set -e and bash with -u to bail on first non zero exit code of any
|
||||
# processes launched or upon any unbound variable.
|
||||
# We use set -x to print commands before running them to help with
|
||||
# debugging.
|
||||
set -ex
|
||||
|
||||
set -e
|
||||
|
||||
echo "START INSIDE CONTAINER - CORE"
|
||||
|
||||
@@ -23,7 +30,7 @@ fi
|
||||
perl -i -pe "s/^(\\s*)-DBUILD_SHARED_LIBS=OFF/\\1-DBUILD_SHARED_LIBS=OFF\\n\\1-DROCKSDB_BUILD_SHARED=OFF/g" Builds/CMake/deps/Rocksdb.cmake &&
|
||||
mv Builds/CMake/deps/WasmEdge.cmake Builds/CMake/deps/WasmEdge.old &&
|
||||
echo "find_package(LLVM REQUIRED CONFIG)
|
||||
message(STATUS \"Found LLVM ${LLVM_PACKAGE_VERSION}\")
|
||||
message(STATUS \"Found LLVM \${LLVM_PACKAGE_VERSION}\")
|
||||
message(STATUS \"Using LLVMConfig.cmake in: \${LLVM_DIR}\")
|
||||
add_library (wasmedge STATIC IMPORTED GLOBAL)
|
||||
set_target_properties(wasmedge PROPERTIES IMPORTED_LOCATION \${WasmEdge_LIB})
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
#!/bin/bash
|
||||
#!/bin/bash -u
|
||||
# We use set -e and bash with -u to bail on first non zero exit code of any
|
||||
# processes launched or upon any unbound variable.
|
||||
# We use set -x to print commands before running them to help with
|
||||
# debugging.
|
||||
set -ex
|
||||
|
||||
set -e
|
||||
|
||||
echo "START INSIDE CONTAINER - FULL"
|
||||
|
||||
@@ -19,7 +26,7 @@ yum-config-manager --disable centos-sclo-sclo
|
||||
####
|
||||
|
||||
cd /io;
|
||||
mkdir src/certs;
|
||||
mkdir -p src/certs;
|
||||
curl --silent -k https://raw.githubusercontent.com/RichardAH/rippled-release-builder/main/ca-bundle/certbundle.h -o src/certs/certbundle.h;
|
||||
if [ "`grep certbundle.h src/ripple/net/impl/RegisterSSLCerts.cpp | wc -l`" -eq "0" ]
|
||||
then
|
||||
@@ -66,8 +73,8 @@ then
|
||||
#endif/g" src/ripple/net/impl/RegisterSSLCerts.cpp &&
|
||||
sed -i "s/#include <ripple\/net\/RegisterSSLCerts.h>/\0\n#include <certs\/certbundle.h>/g" src/ripple/net/impl/RegisterSSLCerts.cpp
|
||||
fi
|
||||
mkdir .nih_c;
|
||||
mkdir .nih_toolchain;
|
||||
mkdir -p .nih_c;
|
||||
mkdir -p .nih_toolchain;
|
||||
cd .nih_toolchain &&
|
||||
yum install -y wget lz4 lz4-devel git llvm13-static.x86_64 llvm13-devel.x86_64 devtoolset-10-binutils zlib-static ncurses-static -y \
|
||||
devtoolset-7-gcc-c++ \
|
||||
@@ -115,7 +122,7 @@ tar -xf libunwind-13.0.1.src.tar.xz &&
|
||||
cp -r libunwind-13.0.1.src/include libunwind-13.0.1.src/src lld-13.0.1.src/ &&
|
||||
cd lld-13.0.1.src &&
|
||||
rm -rf build CMakeCache.txt &&
|
||||
mkdir build &&
|
||||
mkdir -p build &&
|
||||
cd build &&
|
||||
cmake .. -DLLVM_LIBRARY_DIR=/usr/lib64/llvm13/lib/ -DCMAKE_INSTALL_PREFIX=/usr/lib64/llvm13/ -DCMAKE_BUILD_TYPE=Release &&
|
||||
make -j$3 install &&
|
||||
@@ -125,7 +132,7 @@ cd ../../ &&
|
||||
echo "-- Build WasmEdge --" &&
|
||||
( wget -nc -q https://github.com/WasmEdge/WasmEdge/archive/refs/tags/0.11.2.zip; unzip -o 0.11.2.zip; ) &&
|
||||
cd WasmEdge-0.11.2 &&
|
||||
( mkdir build; echo "" ) &&
|
||||
( mkdir -p build; echo "" ) &&
|
||||
cd build &&
|
||||
export BOOST_ROOT="/usr/local/src/boost_1_86_0" &&
|
||||
export Boost_LIBRARY_DIRS="/usr/local/lib" &&
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
#!/bin/bash
|
||||
#!/bin/bash -u
|
||||
# We use set -e and bash with -u to bail on first non zero exit code of any
|
||||
# processes launched or upon any unbound variable.
|
||||
# We use set -x to print commands before running them to help with
|
||||
# debugging.
|
||||
set -ex
|
||||
|
||||
set -e
|
||||
|
||||
echo "START BUILDING (HOST)"
|
||||
|
||||
@@ -36,7 +43,8 @@ fi
|
||||
|
||||
STATIC_CONTAINER=$(docker ps -a | grep $CONTAINER_NAME |wc -l)
|
||||
|
||||
if [[ "$STATIC_CONTAINER" -gt "0" && "$GITHUB_REPOSITORY" != "" ]]; then
|
||||
#if [[ "$STATIC_CONTAINER" -gt "0" && "$GITHUB_REPOSITORY" != "" ]]; then
|
||||
if false; then
|
||||
echo "Static container, execute in static container to have max. cache"
|
||||
docker start $CONTAINER_NAME
|
||||
docker exec -i $CONTAINER_NAME /hbb_exe/activate-exec bash -x /io/build-core.sh "$GITHUB_REPOSITORY" "$GITHUB_SHA" "$BUILD_CORES" "$GITHUB_RUN_NUMBER"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <ostream>
|
||||
#include <stack>
|
||||
#include <string>
|
||||
@@ -271,7 +272,19 @@ check_guard(
|
||||
int guard_func_idx,
|
||||
int last_import_idx,
|
||||
GuardLog guardLog,
|
||||
std::string guardLogAccStr)
|
||||
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
|
||||
|
||||
)
|
||||
{
|
||||
#define MAX_GUARD_CALLS 1024
|
||||
uint32_t guard_count = 0;
|
||||
@@ -621,11 +634,17 @@ 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
|
||||
@@ -807,6 +826,15 @@ 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();
|
||||
@@ -1477,7 +1505,8 @@ validateGuards(
|
||||
guard_import_number,
|
||||
last_import_number,
|
||||
guardLog,
|
||||
guardLogAccStr);
|
||||
guardLogAccStr,
|
||||
rulesVersion);
|
||||
|
||||
if (!valid)
|
||||
return {};
|
||||
|
||||
@@ -79,7 +79,7 @@ main(int argc, char** argv)
|
||||
|
||||
close(fd);
|
||||
|
||||
auto result = validateGuards(hook, std::cout, "", 1);
|
||||
auto result = validateGuards(hook, std::cout, "", 3);
|
||||
|
||||
if (!result)
|
||||
{
|
||||
|
||||
@@ -587,7 +587,8 @@ Change::activateXahauGenesis()
|
||||
wasmBytes, // wasm to verify
|
||||
loggerStream,
|
||||
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
|
||||
ctx_.view().rules().enabled(featureHooksUpdate1) ? 1 : 0);
|
||||
(ctx_.view().rules().enabled(featureHooksUpdate1) ? 1 : 0) +
|
||||
(ctx_.view().rules().enabled(fix20250131) ? 2 : 0));
|
||||
|
||||
if (!result)
|
||||
{
|
||||
|
||||
@@ -72,6 +72,16 @@ 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,7 +479,8 @@ SetHook::validateHookSetEntry(SetHookCtx& ctx, STObject const& hookSetObj)
|
||||
hook, // wasm to verify
|
||||
logger,
|
||||
hsacc,
|
||||
ctx.rules.enabled(featureHooksUpdate1) ? 1 : 0);
|
||||
(ctx.rules.enabled(featureHooksUpdate1) ? 1 : 0) +
|
||||
(ctx.rules.enabled(fix20250131) ? 2 : 0));
|
||||
|
||||
if (ctx.j.trace())
|
||||
{
|
||||
|
||||
@@ -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 = 76;
|
||||
static constexpr std::size_t numFeatures = 77;
|
||||
|
||||
/** Amendments that this server supports and the default voting behavior.
|
||||
Whether they are enabled depends on the Rules defined in the validated
|
||||
@@ -364,6 +364,7 @@ extern uint256 const fix240911;
|
||||
extern uint256 const fixFloatDivide;
|
||||
extern uint256 const fixReduceImport;
|
||||
extern uint256 const fixXahauV3;
|
||||
extern uint256 const fix20250131;
|
||||
|
||||
} // namespace ripple
|
||||
|
||||
|
||||
@@ -469,7 +469,8 @@ 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::DefaultNo);
|
||||
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,7 +240,9 @@ TxMeta::addRaw(Serializer& s, TER result, std::uint32_t index)
|
||||
{
|
||||
mResult = TERtoInt(result);
|
||||
mIndex = index;
|
||||
assert((mResult == 0) || ((mResult > 100) && (mResult <= 255)));
|
||||
assert(
|
||||
(mResult == 0 || mResult == 1) ||
|
||||
((mResult > 100) && (mResult <= 255)));
|
||||
|
||||
mNodes.sort([](STObject const& o1, STObject const& o2) {
|
||||
return o1.getFieldH256(sfLedgerIndex) < o2.getFieldH256(sfLedgerIndex);
|
||||
|
||||
@@ -36,12 +36,12 @@
|
||||
#include <magic/magic_enum.h>
|
||||
#include <sstream>
|
||||
|
||||
#define MAGIC_ENUM(x) \
|
||||
#define MAGIC_ENUM(x, _min, _max) \
|
||||
template <> \
|
||||
struct magic_enum::customize::enum_range<x> \
|
||||
{ \
|
||||
static constexpr int min = -20000; \
|
||||
static constexpr int max = 20000; \
|
||||
static constexpr int min = _min; \
|
||||
static constexpr int max = _max; \
|
||||
};
|
||||
|
||||
#define MAGIC_ENUM_16(x) \
|
||||
@@ -59,14 +59,14 @@
|
||||
static constexpr bool is_flags = true; \
|
||||
};
|
||||
|
||||
MAGIC_ENUM(ripple::SerializedTypeID);
|
||||
MAGIC_ENUM(ripple::LedgerEntryType);
|
||||
MAGIC_ENUM(ripple::TELcodes);
|
||||
MAGIC_ENUM(ripple::TEMcodes);
|
||||
MAGIC_ENUM(ripple::TEFcodes);
|
||||
MAGIC_ENUM(ripple::TERcodes);
|
||||
MAGIC_ENUM(ripple::TEScodes);
|
||||
MAGIC_ENUM(ripple::TECcodes);
|
||||
MAGIC_ENUM(ripple::SerializedTypeID, -2, 10004);
|
||||
MAGIC_ENUM(ripple::LedgerEntryType, 0, 255);
|
||||
MAGIC_ENUM(ripple::TELcodes, -399, 300);
|
||||
MAGIC_ENUM(ripple::TEMcodes, -299, -200);
|
||||
MAGIC_ENUM(ripple::TEFcodes, -199, -100);
|
||||
MAGIC_ENUM(ripple::TERcodes, -99, -1);
|
||||
MAGIC_ENUM(ripple::TEScodes, 0, 1);
|
||||
MAGIC_ENUM(ripple::TECcodes, 100, 255);
|
||||
MAGIC_ENUM_16(ripple::TxType);
|
||||
MAGIC_ENUM_FLAG(ripple::UniversalFlags);
|
||||
MAGIC_ENUM_FLAG(ripple::AccountSetFlags);
|
||||
|
||||
@@ -5544,7 +5544,6 @@ public:
|
||||
testTSH(sa - fixXahauV1 - fixXahauV2);
|
||||
testTSH(sa - fixXahauV2);
|
||||
testTSH(sa);
|
||||
testEmittedTxn(sa - fixXahauV2);
|
||||
testEmittedTxn(sa);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1138,6 +1138,54 @@ 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)
|
||||
{
|
||||
@@ -11973,6 +12021,8 @@ public:
|
||||
testNSDeletePartial(features);
|
||||
testPageCap(features);
|
||||
|
||||
testFillCopy(features);
|
||||
|
||||
testWasm(features);
|
||||
test_accept(features);
|
||||
test_rollback(features);
|
||||
|
||||
Reference in New Issue
Block a user