mirror of
https://github.com/XRPLF/clio.git
synced 2025-12-06 17:27:58 +00:00
Merge branch 'develop' into release/2.6.0
This commit is contained in:
2
.github/scripts/conan/generate_matrix.py
vendored
2
.github/scripts/conan/generate_matrix.py
vendored
@@ -4,7 +4,7 @@ import json
|
|||||||
|
|
||||||
LINUX_OS = ["heavy", "heavy-arm64"]
|
LINUX_OS = ["heavy", "heavy-arm64"]
|
||||||
LINUX_CONTAINERS = [
|
LINUX_CONTAINERS = [
|
||||||
'{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
|
'{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }'
|
||||||
]
|
]
|
||||||
LINUX_COMPILERS = ["gcc", "clang"]
|
LINUX_COMPILERS = ["gcc", "clang"]
|
||||||
|
|
||||||
|
|||||||
8
.github/workflows/build.yml
vendored
8
.github/workflows/build.yml
vendored
@@ -45,7 +45,7 @@ jobs:
|
|||||||
build_type: [Release, Debug]
|
build_type: [Release, Debug]
|
||||||
container:
|
container:
|
||||||
[
|
[
|
||||||
'{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }',
|
'{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }',
|
||||||
]
|
]
|
||||||
static: [true]
|
static: [true]
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ jobs:
|
|||||||
uses: ./.github/workflows/reusable-build.yml
|
uses: ./.github/workflows/reusable-build.yml
|
||||||
with:
|
with:
|
||||||
runs_on: heavy
|
runs_on: heavy
|
||||||
container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
|
container: '{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }'
|
||||||
conan_profile: gcc
|
conan_profile: gcc
|
||||||
build_type: Debug
|
build_type: Debug
|
||||||
download_ccache: true
|
download_ccache: true
|
||||||
@@ -94,7 +94,7 @@ jobs:
|
|||||||
uses: ./.github/workflows/reusable-build.yml
|
uses: ./.github/workflows/reusable-build.yml
|
||||||
with:
|
with:
|
||||||
runs_on: heavy
|
runs_on: heavy
|
||||||
container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
|
container: '{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }'
|
||||||
conan_profile: gcc
|
conan_profile: gcc
|
||||||
build_type: Release
|
build_type: Release
|
||||||
download_ccache: true
|
download_ccache: true
|
||||||
@@ -111,7 +111,7 @@ jobs:
|
|||||||
needs: build-and-test
|
needs: build-and-test
|
||||||
runs-on: heavy
|
runs-on: heavy
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
|
image: ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|||||||
4
.github/workflows/check-libxrpl.yml
vendored
4
.github/workflows/check-libxrpl.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
|||||||
name: Build Clio / `libXRPL ${{ github.event.client_payload.version }}`
|
name: Build Clio / `libXRPL ${{ github.event.client_payload.version }}`
|
||||||
runs-on: heavy
|
runs-on: heavy
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
|
image: ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@@ -67,7 +67,7 @@ jobs:
|
|||||||
needs: build
|
needs: build
|
||||||
runs-on: heavy
|
runs-on: heavy
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
|
image: ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/download-artifact@v5
|
- uses: actions/download-artifact@v5
|
||||||
|
|||||||
2
.github/workflows/clang-tidy.yml
vendored
2
.github/workflows/clang-tidy.yml
vendored
@@ -27,7 +27,7 @@ jobs:
|
|||||||
if: github.event_name != 'push' || contains(github.event.head_commit.message, 'clang-tidy auto fixes')
|
if: github.event_name != 'push' || contains(github.event.head_commit.message, 'clang-tidy auto fixes')
|
||||||
runs-on: heavy
|
runs-on: heavy
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
|
image: ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
|||||||
2
.github/workflows/docs.yml
vendored
2
.github/workflows/docs.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
|
image: ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
|
|||||||
8
.github/workflows/nightly.yml
vendored
8
.github/workflows/nightly.yml
vendored
@@ -39,17 +39,17 @@ jobs:
|
|||||||
conan_profile: gcc
|
conan_profile: gcc
|
||||||
build_type: Release
|
build_type: Release
|
||||||
static: true
|
static: true
|
||||||
container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
|
container: '{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }'
|
||||||
- os: heavy
|
- os: heavy
|
||||||
conan_profile: gcc
|
conan_profile: gcc
|
||||||
build_type: Debug
|
build_type: Debug
|
||||||
static: true
|
static: true
|
||||||
container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
|
container: '{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }'
|
||||||
- os: heavy
|
- os: heavy
|
||||||
conan_profile: gcc.ubsan
|
conan_profile: gcc.ubsan
|
||||||
build_type: Release
|
build_type: Release
|
||||||
static: false
|
static: false
|
||||||
container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
|
container: '{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }'
|
||||||
|
|
||||||
uses: ./.github/workflows/reusable-build-test.yml
|
uses: ./.github/workflows/reusable-build-test.yml
|
||||||
with:
|
with:
|
||||||
@@ -73,7 +73,7 @@ jobs:
|
|||||||
include:
|
include:
|
||||||
- os: heavy
|
- os: heavy
|
||||||
conan_profile: clang
|
conan_profile: clang
|
||||||
container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
|
container: '{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }'
|
||||||
static: true
|
static: true
|
||||||
- os: macos15
|
- os: macos15
|
||||||
conan_profile: apple-clang
|
conan_profile: apple-clang
|
||||||
|
|||||||
4
.github/workflows/pre-commit.yml
vendored
4
.github/workflows/pre-commit.yml
vendored
@@ -8,7 +8,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
run-hooks:
|
run-hooks:
|
||||||
uses: XRPLF/actions/.github/workflows/pre-commit.yml@afbcbdafbe0ce5439492fb87eda6441371086386
|
uses: XRPLF/actions/.github/workflows/pre-commit.yml@a8d7472b450eb53a1e5228f64552e5974457a21a
|
||||||
with:
|
with:
|
||||||
runs_on: heavy
|
runs_on: heavy
|
||||||
container: '{ "image": "ghcr.io/xrplf/clio-pre-commit:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
|
container: '{ "image": "ghcr.io/xrplf/clio-pre-commit:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }'
|
||||||
|
|||||||
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@@ -29,7 +29,7 @@ jobs:
|
|||||||
conan_profile: gcc
|
conan_profile: gcc
|
||||||
build_type: Release
|
build_type: Release
|
||||||
static: true
|
static: true
|
||||||
container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
|
container: '{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }'
|
||||||
|
|
||||||
uses: ./.github/workflows/reusable-build-test.yml
|
uses: ./.github/workflows/reusable-build-test.yml
|
||||||
with:
|
with:
|
||||||
|
|||||||
2
.github/workflows/reusable-release.yml
vendored
2
.github/workflows/reusable-release.yml
vendored
@@ -42,7 +42,7 @@ jobs:
|
|||||||
release:
|
release:
|
||||||
runs-on: heavy
|
runs-on: heavy
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
|
image: ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d
|
||||||
env:
|
env:
|
||||||
GH_REPO: ${{ github.repository }}
|
GH_REPO: ${{ github.repository }}
|
||||||
GH_TOKEN: ${{ github.token }}
|
GH_TOKEN: ${{ github.token }}
|
||||||
|
|||||||
2
.github/workflows/sanitizers.yml
vendored
2
.github/workflows/sanitizers.yml
vendored
@@ -44,7 +44,7 @@ jobs:
|
|||||||
uses: ./.github/workflows/reusable-build-test.yml
|
uses: ./.github/workflows/reusable-build-test.yml
|
||||||
with:
|
with:
|
||||||
runs_on: heavy
|
runs_on: heavy
|
||||||
container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
|
container: '{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }'
|
||||||
download_ccache: false
|
download_ccache: false
|
||||||
upload_ccache: false
|
upload_ccache: false
|
||||||
conan_profile: ${{ matrix.compiler }}${{ matrix.sanitizer_ext }}
|
conan_profile: ${{ matrix.compiler }}${{ matrix.sanitizer_ext }}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
clio_develop:
|
clio_develop:
|
||||||
image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
|
image: ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d
|
||||||
volumes:
|
volumes:
|
||||||
- clio_develop_conan_data:/root/.conan2/p
|
- clio_develop_conan_data:/root/.conan2/p
|
||||||
- clio_develop_ccache:/root/.ccache
|
- clio_develop_ccache:/root/.ccache
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ RUN apt-get update \
|
|||||||
&& apt-get install -y --no-install-recommends --no-install-suggests \
|
&& apt-get install -y --no-install-recommends --no-install-suggests \
|
||||||
curl \
|
curl \
|
||||||
git \
|
git \
|
||||||
|
libatomic1 \
|
||||||
software-properties-common \
|
software-properties-common \
|
||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ Open the `index.html` file in your browser to see the documentation pages.
|
|||||||
It is also possible to build Clio using [Docker](https://www.docker.com/) if you don't want to install all the dependencies on your machine.
|
It is also possible to build Clio using [Docker](https://www.docker.com/) if you don't want to install all the dependencies on your machine.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
docker run -it ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
|
docker run -it ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d
|
||||||
git clone https://github.com/XRPLF/clio
|
git clone https://github.com/XRPLF/clio
|
||||||
cd clio
|
cd clio
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -951,7 +951,7 @@ span.arrowhead {
|
|||||||
border-color: var(--primary-color);
|
border-color: var(--primary-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#nav-tree ul li:first-child > div > a {
|
#nav-tree-contents > ul > li:first-child > div > a {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -209,8 +209,9 @@ TransactionFeed::pub(
|
|||||||
rpc::insertDeliveredAmount(pubObj[JS(meta)].as_object(), tx, meta, txMeta.date);
|
rpc::insertDeliveredAmount(pubObj[JS(meta)].as_object(), tx, meta, txMeta.date);
|
||||||
|
|
||||||
auto& txnPubobj = pubObj[txKey].as_object();
|
auto& txnPubobj = pubObj[txKey].as_object();
|
||||||
|
auto& metaPubobj = pubObj[JS(meta)].as_object();
|
||||||
rpc::insertDeliverMaxAlias(txnPubobj, version);
|
rpc::insertDeliverMaxAlias(txnPubobj, version);
|
||||||
rpc::insertMPTIssuanceID(txnPubobj, meta);
|
rpc::insertMPTIssuanceID(txnPubobj, tx, metaPubobj, meta);
|
||||||
|
|
||||||
Json::Value nftJson;
|
Json::Value nftJson;
|
||||||
ripple::RPC::insertNFTSyntheticInJson(nftJson, tx, *meta);
|
ripple::RPC::insertNFTSyntheticInJson(nftJson, tx, *meta);
|
||||||
|
|||||||
@@ -34,7 +34,6 @@
|
|||||||
#include "web/Context.hpp"
|
#include "web/Context.hpp"
|
||||||
|
|
||||||
#include <boost/algorithm/string/case_conv.hpp>
|
#include <boost/algorithm/string/case_conv.hpp>
|
||||||
#include <boost/algorithm/string/predicate.hpp>
|
|
||||||
#include <boost/asio/spawn.hpp>
|
#include <boost/asio/spawn.hpp>
|
||||||
#include <boost/format/format_fwd.hpp>
|
#include <boost/format/format_fwd.hpp>
|
||||||
#include <boost/format/free_funcs.hpp>
|
#include <boost/format/free_funcs.hpp>
|
||||||
@@ -258,7 +257,7 @@ toExpandedJson(
|
|||||||
auto metaJson = toJson(*meta);
|
auto metaJson = toJson(*meta);
|
||||||
insertDeliveredAmount(metaJson, txn, meta, blobs.date);
|
insertDeliveredAmount(metaJson, txn, meta, blobs.date);
|
||||||
insertDeliverMaxAlias(txnJson, apiVersion);
|
insertDeliverMaxAlias(txnJson, apiVersion);
|
||||||
insertMPTIssuanceID(txnJson, meta);
|
insertMPTIssuanceID(txnJson, txn, metaJson, meta);
|
||||||
|
|
||||||
if (nftEnabled == NFTokenjson::ENABLE) {
|
if (nftEnabled == NFTokenjson::ENABLE) {
|
||||||
Json::Value nftJson;
|
Json::Value nftJson;
|
||||||
@@ -343,36 +342,41 @@ getMPTIssuanceID(std::shared_ptr<ripple::TxMeta const> const& meta)
|
|||||||
/**
|
/**
|
||||||
* @brief Check if transaction has a new MPToken created
|
* @brief Check if transaction has a new MPToken created
|
||||||
*
|
*
|
||||||
* @param txnJson The transaction Json
|
* @param txn The transaction object
|
||||||
* @param meta The metadata
|
* @param meta The metadata object
|
||||||
* @return true if the transaction can have a mpt_issuance_id
|
* @return true if the transaction can have a mpt_issuance_id
|
||||||
*/
|
*/
|
||||||
static bool
|
static bool
|
||||||
canHaveMPTIssuanceID(boost::json::object const& txnJson, std::shared_ptr<ripple::TxMeta const> const& meta)
|
canHaveMPTIssuanceID(std::shared_ptr<ripple::STTx const> const& txn, std::shared_ptr<ripple::TxMeta const> const& meta)
|
||||||
{
|
{
|
||||||
if (txnJson.at(JS(TransactionType)).is_string() and
|
if (txn->getTxnType() != ripple::ttMPTOKEN_ISSUANCE_CREATE)
|
||||||
not boost::iequals(txnJson.at(JS(TransactionType)).as_string(), JS(MPTokenIssuanceCreate)))
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (meta->getResultTER() != ripple::tesSUCCESS)
|
return (meta->getResultTER() == ripple::tesSUCCESS);
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
insertMPTIssuanceID(boost::json::object& txnJson, std::shared_ptr<ripple::TxMeta const> const& meta)
|
insertMPTIssuanceID(
|
||||||
|
boost::json::object& txnJson,
|
||||||
|
std::shared_ptr<ripple::STTx const> const& txn,
|
||||||
|
boost::json::object& metaJson,
|
||||||
|
std::shared_ptr<ripple::TxMeta const> const& meta
|
||||||
|
)
|
||||||
{
|
{
|
||||||
if (!canHaveMPTIssuanceID(txnJson, meta))
|
if (!canHaveMPTIssuanceID(txn, meta))
|
||||||
return false;
|
|
||||||
|
|
||||||
if (txnJson.contains(JS(TransactionType)) && txnJson.at(JS(TransactionType)).is_string() and
|
|
||||||
txnJson.at(JS(TransactionType)).as_string() == JS(MPTokenIssuanceCreate))
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
auto const id = getMPTIssuanceID(meta);
|
auto const id = getMPTIssuanceID(meta);
|
||||||
ASSERT(id.has_value(), "MPTIssuanceID must have value");
|
ASSERT(id.has_value(), "MPTIssuanceID must have value");
|
||||||
|
|
||||||
|
// For mpttokenissuance create, add mpt_issuance_id to metajson
|
||||||
|
// Otherwise, add it to txn json
|
||||||
|
if (txnJson.contains(JS(TransactionType)) && txnJson.at(JS(TransactionType)).is_string() and
|
||||||
|
txnJson.at(JS(TransactionType)).as_string() == JS(MPTokenIssuanceCreate)) {
|
||||||
|
metaJson[JS(mpt_issuance_id)] = ripple::to_string(*id);
|
||||||
|
} else {
|
||||||
txnJson[JS(mpt_issuance_id)] = ripple::to_string(*id);
|
txnJson[JS(mpt_issuance_id)] = ripple::to_string(*id);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -201,15 +201,23 @@ insertDeliveredAmount(
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Add "mpt_issuance_id" into various MPTToken transaction json.
|
* @brief Add "mpt_issuance_id" into various MPTToken transaction json.
|
||||||
* @note We exclude "mpt_issuance_id" for MPTokenIssuanceCreate only. The reason is because the mpt_issuance_id
|
* @note We add "mpt_issuance_id" into the meta part of MPTokenIssuanceCreate only. The reason is because the
|
||||||
* is generated only after one submits MPTokenIssuanceCreate, so there’s no way to know what the id is. (rippled)
|
* mpt_issuance_id is generated only after one submits MPTokenIssuanceCreate, so there’s no way to know what the id is.
|
||||||
|
* (rippled)
|
||||||
*
|
*
|
||||||
* @param txnJson The transaction Json object
|
* @param txnJson The transaction Json object
|
||||||
|
* @param txn The txn object
|
||||||
|
* @param metaJson The metadata Json object
|
||||||
* @param meta The metadata object
|
* @param meta The metadata object
|
||||||
* @return true if the "mpt_issuance_id" is added to the txnJson JSON object
|
* @return true if the "mpt_issuance_id" is added to either txnJson or metaJson object
|
||||||
*/
|
*/
|
||||||
bool
|
bool
|
||||||
insertMPTIssuanceID(boost::json::object& txnJson, std::shared_ptr<ripple::TxMeta const> const& meta);
|
insertMPTIssuanceID(
|
||||||
|
boost::json::object& txnJson,
|
||||||
|
std::shared_ptr<ripple::STTx const> const& txn,
|
||||||
|
boost::json::object& metaJson,
|
||||||
|
std::shared_ptr<ripple::TxMeta const> const& meta
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Convert STBase object to JSON
|
* @brief Convert STBase object to JSON
|
||||||
|
|||||||
@@ -333,7 +333,13 @@ tag_invoke(boost::json::value_to_tag<LedgerEntryHandler::Input>, boost::json::va
|
|||||||
{JS(mptoken), ripple::ltMPTOKEN},
|
{JS(mptoken), ripple::ltMPTOKEN},
|
||||||
{JS(permissioned_domain), ripple::ltPERMISSIONED_DOMAIN},
|
{JS(permissioned_domain), ripple::ltPERMISSIONED_DOMAIN},
|
||||||
{JS(vault), ripple::ltVAULT},
|
{JS(vault), ripple::ltVAULT},
|
||||||
{JS(delegate), ripple::ltDELEGATE}
|
{JS(delegate), ripple::ltDELEGATE},
|
||||||
|
{JS(amendments), ripple::ltAMENDMENTS},
|
||||||
|
{JS(fee), ripple::ltFEE_SETTINGS},
|
||||||
|
{JS(hashes), ripple::ltLEDGER_HASHES},
|
||||||
|
{JS(nft_offer), ripple::ltNFTOKEN_OFFER},
|
||||||
|
{JS(nunl), ripple::ltNEGATIVE_UNL},
|
||||||
|
{JS(signer_list), ripple::ltSIGNER_LIST}
|
||||||
};
|
};
|
||||||
|
|
||||||
auto const parseBridgeFromJson = [](boost::json::value const& bridgeJson) {
|
auto const parseBridgeFromJson = [](boost::json::value const& bridgeJson) {
|
||||||
|
|||||||
@@ -428,6 +428,12 @@ public:
|
|||||||
validation::CustomValidators::accountBase58Validator, Status(ClioError::RpcMalformedAddress)
|
validation::CustomValidators::accountBase58Validator, Status(ClioError::RpcMalformedAddress)
|
||||||
}}
|
}}
|
||||||
}}},
|
}}},
|
||||||
|
{JS(amendments), kMALFORMED_REQUEST_HEX_STRING_VALIDATOR},
|
||||||
|
{JS(fee), kMALFORMED_REQUEST_HEX_STRING_VALIDATOR},
|
||||||
|
{JS(hashes), kMALFORMED_REQUEST_HEX_STRING_VALIDATOR},
|
||||||
|
{JS(nft_offer), kMALFORMED_REQUEST_HEX_STRING_VALIDATOR},
|
||||||
|
{JS(nunl), kMALFORMED_REQUEST_HEX_STRING_VALIDATOR},
|
||||||
|
{JS(signer_list), kMALFORMED_REQUEST_HEX_STRING_VALIDATOR},
|
||||||
{JS(ledger), check::Deprecated{}},
|
{JS(ledger), check::Deprecated{}},
|
||||||
{"include_deleted", validation::Type<bool>{}},
|
{"include_deleted", validation::Type<bool>{}},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <string_view>
|
||||||
|
|
||||||
void
|
void
|
||||||
LoggerFixture::init()
|
LoggerFixture::init()
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ struct AmendmentBlockHandlerTest : util::prometheus::WithPrometheus, SyncAsioCon
|
|||||||
etl::SystemState state;
|
etl::SystemState state;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Note: This test can be flaky due to the way it was written (depends on time)
|
||||||
|
// Since the old ETL is going to be replaced by ETLng all tests including this one will be deleted anyway so the fix for
|
||||||
|
// flakiness is to increase the context runtime to 50ms until then (to not waste time).
|
||||||
TEST_F(AmendmentBlockHandlerTest, CallToNotifyAmendmentBlockedSetsStateAndRepeatedlyCallsAction)
|
TEST_F(AmendmentBlockHandlerTest, CallToNotifyAmendmentBlockedSetsStateAndRepeatedlyCallsAction)
|
||||||
{
|
{
|
||||||
AmendmentBlockHandler handler{ctx_, state, std::chrono::nanoseconds{1}, actionMock.AsStdFunction()};
|
AmendmentBlockHandler handler{ctx_, state, std::chrono::nanoseconds{1}, actionMock.AsStdFunction()};
|
||||||
@@ -45,12 +48,7 @@ TEST_F(AmendmentBlockHandlerTest, CallToNotifyAmendmentBlockedSetsStateAndRepeat
|
|||||||
handler.notifyAmendmentBlocked();
|
handler.notifyAmendmentBlocked();
|
||||||
EXPECT_TRUE(state.isAmendmentBlocked);
|
EXPECT_TRUE(state.isAmendmentBlocked);
|
||||||
|
|
||||||
// Code runs significantly slower when assertions are enabled
|
runContextFor(std::chrono::milliseconds{50});
|
||||||
#ifdef _GLIBCXX_ASSERTIONS
|
|
||||||
runContextFor(std::chrono::milliseconds{10});
|
|
||||||
#else
|
|
||||||
runContextFor(std::chrono::milliseconds{1});
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct DefaultAmendmentBlockActionTest : LoggerFixture {};
|
struct DefaultAmendmentBlockActionTest : LoggerFixture {};
|
||||||
|
|||||||
@@ -1282,7 +1282,8 @@ TEST_F(FeedTransactionTest, PublishesMPTokenIssuanceCreateTx)
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"TransactionIndex": 0,
|
"TransactionIndex": 0,
|
||||||
"TransactionResult": "tesSUCCESS"
|
"TransactionResult": "tesSUCCESS",
|
||||||
|
"mpt_issuance_id": "000000014B4E9C06F24296074F7BC48F92A97916C6DC5EA9"
|
||||||
},
|
},
|
||||||
"ctid": "C000002100000000",
|
"ctid": "C000002100000000",
|
||||||
"type": "transaction",
|
"type": "transaction",
|
||||||
|
|||||||
@@ -1625,7 +1625,8 @@ TEST_F(RPCAccountTxHandlerTest, MPTTxs_API_v2)
|
|||||||
}}
|
}}
|
||||||
],
|
],
|
||||||
"TransactionIndex": 0,
|
"TransactionIndex": 0,
|
||||||
"TransactionResult": "tesSUCCESS"
|
"TransactionResult": "tesSUCCESS",
|
||||||
|
"mpt_issuance_id": "000000014B4E9C06F24296074F7BC48F92A97916C6DC5EA9"
|
||||||
}},
|
}},
|
||||||
"hash": "A52221F4003C281D3C83F501F418B55A1F9DC1C6A129EF13E1A8F0E5C008DAE3",
|
"hash": "A52221F4003C281D3C83F501F418B55A1F9DC1C6A129EF13E1A8F0E5C008DAE3",
|
||||||
"ledger_index": 11,
|
"ledger_index": 11,
|
||||||
|
|||||||
@@ -2311,11 +2311,23 @@ struct IndexTest : public HandlerBaseTest, public WithParamInterface<std::string
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
// content of index, payment_channel, nft_page and check fields is ledger index.
|
// content of index, amendments, check, fee, hashes, nft_offer, nunl, nft_page, payment_channel, signer_list fields is
|
||||||
|
// ledger index.
|
||||||
INSTANTIATE_TEST_CASE_P(
|
INSTANTIATE_TEST_CASE_P(
|
||||||
RPCLedgerEntryGroup3,
|
RPCLedgerEntryGroup3,
|
||||||
IndexTest,
|
IndexTest,
|
||||||
Values("index", "nft_page", "payment_channel", "check"),
|
Values(
|
||||||
|
"index",
|
||||||
|
"amendments",
|
||||||
|
"check",
|
||||||
|
"fee",
|
||||||
|
"hashes",
|
||||||
|
"nft_offer",
|
||||||
|
"nunl",
|
||||||
|
"nft_page",
|
||||||
|
"payment_channel",
|
||||||
|
"signer_list"
|
||||||
|
),
|
||||||
IndexTest::NameGenerator{}
|
IndexTest::NameGenerator{}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
#include <spdlog/spdlog.h>
|
#include <spdlog/spdlog.h>
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
using namespace util;
|
using namespace util;
|
||||||
|
|
||||||
@@ -93,11 +94,11 @@ TEST_F(LoggerTest, ManyDynamicLoggers)
|
|||||||
for (size_t i = 0; i < kNUM_LOGGERS; ++i) {
|
for (size_t i = 0; i < kNUM_LOGGERS; ++i) {
|
||||||
std::string const loggerName = "DynamicLogger" + std::to_string(i);
|
std::string const loggerName = "DynamicLogger" + std::to_string(i);
|
||||||
|
|
||||||
Logger log{loggerName};
|
Logger const log{loggerName};
|
||||||
log.info() << "Logger number " << i;
|
log.info() << "Logger number " << i;
|
||||||
ASSERT_EQ(getLoggerString(), "inf:" + loggerName + " - Logger number " + std::to_string(i) + "\n");
|
ASSERT_EQ(getLoggerString(), "inf:" + loggerName + " - Logger number " + std::to_string(i) + "\n");
|
||||||
|
|
||||||
Logger copy = log;
|
Logger const copy = log;
|
||||||
copy.info() << "Copy of logger number " << i;
|
copy.info() << "Copy of logger number " << i;
|
||||||
ASSERT_EQ(getLoggerString(), "inf:" + loggerName + " - Copy of logger number " + std::to_string(i) + "\n");
|
ASSERT_EQ(getLoggerString(), "inf:" + loggerName + " - Copy of logger number " + std::to_string(i) + "\n");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,7 +108,9 @@ TEST_F(WebWsConnectionTests, WasUpgraded)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(WebWsConnectionTests, DisconnectClientOnInactivity)
|
// This test is either flaky or incorrect
|
||||||
|
// see https://github.com/XRPLF/clio/issues/2700
|
||||||
|
TEST_F(WebWsConnectionTests, DISABLED_DisconnectClientOnInactivity)
|
||||||
{
|
{
|
||||||
boost::asio::io_context clientCtx;
|
boost::asio::io_context clientCtx;
|
||||||
auto work = boost::asio::make_work_guard(clientCtx);
|
auto work = boost::asio::make_work_guard(clientCtx);
|
||||||
|
|||||||
Reference in New Issue
Block a user