mirror of
				https://github.com/XRPLF/clio.git
				synced 2025-11-04 11:55:51 +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_CONTAINERS = [
 | 
			
		||||
    '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
 | 
			
		||||
    '{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }'
 | 
			
		||||
]
 | 
			
		||||
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]
 | 
			
		||||
        container:
 | 
			
		||||
          [
 | 
			
		||||
            '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }',
 | 
			
		||||
            '{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }',
 | 
			
		||||
          ]
 | 
			
		||||
        static: [true]
 | 
			
		||||
 | 
			
		||||
@@ -75,7 +75,7 @@ jobs:
 | 
			
		||||
    uses: ./.github/workflows/reusable-build.yml
 | 
			
		||||
    with:
 | 
			
		||||
      runs_on: heavy
 | 
			
		||||
      container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
 | 
			
		||||
      container: '{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }'
 | 
			
		||||
      conan_profile: gcc
 | 
			
		||||
      build_type: Debug
 | 
			
		||||
      download_ccache: true
 | 
			
		||||
@@ -94,7 +94,7 @@ jobs:
 | 
			
		||||
    uses: ./.github/workflows/reusable-build.yml
 | 
			
		||||
    with:
 | 
			
		||||
      runs_on: heavy
 | 
			
		||||
      container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
 | 
			
		||||
      container: '{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }'
 | 
			
		||||
      conan_profile: gcc
 | 
			
		||||
      build_type: Release
 | 
			
		||||
      download_ccache: true
 | 
			
		||||
@@ -111,7 +111,7 @@ jobs:
 | 
			
		||||
    needs: build-and-test
 | 
			
		||||
    runs-on: heavy
 | 
			
		||||
    container:
 | 
			
		||||
      image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
 | 
			
		||||
      image: ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - 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 }}`
 | 
			
		||||
    runs-on: heavy
 | 
			
		||||
    container:
 | 
			
		||||
      image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
 | 
			
		||||
      image: ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v4
 | 
			
		||||
@@ -67,7 +67,7 @@ jobs:
 | 
			
		||||
    needs: build
 | 
			
		||||
    runs-on: heavy
 | 
			
		||||
    container:
 | 
			
		||||
      image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
 | 
			
		||||
      image: ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - 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')
 | 
			
		||||
    runs-on: heavy
 | 
			
		||||
    container:
 | 
			
		||||
      image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
 | 
			
		||||
      image: ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d
 | 
			
		||||
 | 
			
		||||
    permissions:
 | 
			
		||||
      contents: write
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/docs.yml
									
									
									
									
										vendored
									
									
								
							@@ -14,7 +14,7 @@ jobs:
 | 
			
		||||
  build:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    container:
 | 
			
		||||
      image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
 | 
			
		||||
      image: ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/workflows/nightly.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/nightly.yml
									
									
									
									
										vendored
									
									
								
							@@ -39,17 +39,17 @@ jobs:
 | 
			
		||||
            conan_profile: gcc
 | 
			
		||||
            build_type: Release
 | 
			
		||||
            static: true
 | 
			
		||||
            container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
 | 
			
		||||
            container: '{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }'
 | 
			
		||||
          - os: heavy
 | 
			
		||||
            conan_profile: gcc
 | 
			
		||||
            build_type: Debug
 | 
			
		||||
            static: true
 | 
			
		||||
            container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
 | 
			
		||||
            container: '{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }'
 | 
			
		||||
          - os: heavy
 | 
			
		||||
            conan_profile: gcc.ubsan
 | 
			
		||||
            build_type: Release
 | 
			
		||||
            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
 | 
			
		||||
    with:
 | 
			
		||||
@@ -73,7 +73,7 @@ jobs:
 | 
			
		||||
        include:
 | 
			
		||||
          - os: heavy
 | 
			
		||||
            conan_profile: clang
 | 
			
		||||
            container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
 | 
			
		||||
            container: '{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }'
 | 
			
		||||
            static: true
 | 
			
		||||
          - os: macos15
 | 
			
		||||
            conan_profile: apple-clang
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								.github/workflows/pre-commit.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/pre-commit.yml
									
									
									
									
										vendored
									
									
								
							@@ -8,7 +8,7 @@ on:
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  run-hooks:
 | 
			
		||||
    uses: XRPLF/actions/.github/workflows/pre-commit.yml@afbcbdafbe0ce5439492fb87eda6441371086386
 | 
			
		||||
    uses: XRPLF/actions/.github/workflows/pre-commit.yml@a8d7472b450eb53a1e5228f64552e5974457a21a
 | 
			
		||||
    with:
 | 
			
		||||
      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
 | 
			
		||||
            build_type: Release
 | 
			
		||||
            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
 | 
			
		||||
    with:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/reusable-release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/reusable-release.yml
									
									
									
									
										vendored
									
									
								
							@@ -42,7 +42,7 @@ jobs:
 | 
			
		||||
  release:
 | 
			
		||||
    runs-on: heavy
 | 
			
		||||
    container:
 | 
			
		||||
      image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
 | 
			
		||||
      image: ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d
 | 
			
		||||
    env:
 | 
			
		||||
      GH_REPO: ${{ github.repository }}
 | 
			
		||||
      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
 | 
			
		||||
    with:
 | 
			
		||||
      runs_on: heavy
 | 
			
		||||
      container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
 | 
			
		||||
      container: '{ "image": "ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d" }'
 | 
			
		||||
      download_ccache: false
 | 
			
		||||
      upload_ccache: false
 | 
			
		||||
      conan_profile: ${{ matrix.compiler }}${{ matrix.sanitizer_ext }}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
services:
 | 
			
		||||
  clio_develop:
 | 
			
		||||
    image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
 | 
			
		||||
    image: ghcr.io/xrplf/clio-ci:b2be4b51d1d81548ca48e2f2b8f67356b880c96d
 | 
			
		||||
    volumes:
 | 
			
		||||
      - clio_develop_conan_data:/root/.conan2/p
 | 
			
		||||
      - clio_develop_ccache:/root/.ccache
 | 
			
		||||
 
 | 
			
		||||
@@ -17,6 +17,7 @@ RUN apt-get update \
 | 
			
		||||
    && apt-get install -y --no-install-recommends --no-install-suggests \
 | 
			
		||||
        curl \
 | 
			
		||||
        git \
 | 
			
		||||
        libatomic1 \
 | 
			
		||||
        software-properties-common \
 | 
			
		||||
    && apt-get clean \
 | 
			
		||||
    && 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.
 | 
			
		||||
 | 
			
		||||
```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
 | 
			
		||||
cd clio
 | 
			
		||||
```
 | 
			
		||||
 
 | 
			
		||||
@@ -951,7 +951,7 @@ span.arrowhead {
 | 
			
		||||
    border-color: var(--primary-color);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#nav-tree ul li:first-child > div > a {
 | 
			
		||||
#nav-tree-contents > ul > li:first-child > div > a {
 | 
			
		||||
    opacity: 0;
 | 
			
		||||
    pointer-events: none;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -209,8 +209,9 @@ TransactionFeed::pub(
 | 
			
		||||
        rpc::insertDeliveredAmount(pubObj[JS(meta)].as_object(), tx, meta, txMeta.date);
 | 
			
		||||
 | 
			
		||||
        auto& txnPubobj = pubObj[txKey].as_object();
 | 
			
		||||
        auto& metaPubobj = pubObj[JS(meta)].as_object();
 | 
			
		||||
        rpc::insertDeliverMaxAlias(txnPubobj, version);
 | 
			
		||||
        rpc::insertMPTIssuanceID(txnPubobj, meta);
 | 
			
		||||
        rpc::insertMPTIssuanceID(txnPubobj, tx, metaPubobj, meta);
 | 
			
		||||
 | 
			
		||||
        Json::Value nftJson;
 | 
			
		||||
        ripple::RPC::insertNFTSyntheticInJson(nftJson, tx, *meta);
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,6 @@
 | 
			
		||||
#include "web/Context.hpp"
 | 
			
		||||
 | 
			
		||||
#include <boost/algorithm/string/case_conv.hpp>
 | 
			
		||||
#include <boost/algorithm/string/predicate.hpp>
 | 
			
		||||
#include <boost/asio/spawn.hpp>
 | 
			
		||||
#include <boost/format/format_fwd.hpp>
 | 
			
		||||
#include <boost/format/free_funcs.hpp>
 | 
			
		||||
@@ -258,7 +257,7 @@ toExpandedJson(
 | 
			
		||||
    auto metaJson = toJson(*meta);
 | 
			
		||||
    insertDeliveredAmount(metaJson, txn, meta, blobs.date);
 | 
			
		||||
    insertDeliverMaxAlias(txnJson, apiVersion);
 | 
			
		||||
    insertMPTIssuanceID(txnJson, meta);
 | 
			
		||||
    insertMPTIssuanceID(txnJson, txn, metaJson, meta);
 | 
			
		||||
 | 
			
		||||
    if (nftEnabled == NFTokenjson::ENABLE) {
 | 
			
		||||
        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
 | 
			
		||||
 *
 | 
			
		||||
 * @param txnJson The transaction Json
 | 
			
		||||
 * @param meta The metadata
 | 
			
		||||
 * @param txn The transaction object
 | 
			
		||||
 * @param meta The metadata object
 | 
			
		||||
 * @return true if the transaction can have a mpt_issuance_id
 | 
			
		||||
 */
 | 
			
		||||
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
 | 
			
		||||
        not boost::iequals(txnJson.at(JS(TransactionType)).as_string(), JS(MPTokenIssuanceCreate)))
 | 
			
		||||
    if (txn->getTxnType() != ripple::ttMPTOKEN_ISSUANCE_CREATE)
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
    if (meta->getResultTER() != ripple::tesSUCCESS)
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
    return (meta->getResultTER() == ripple::tesSUCCESS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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))
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
    if (txnJson.contains(JS(TransactionType)) && txnJson.at(JS(TransactionType)).is_string() and
 | 
			
		||||
        txnJson.at(JS(TransactionType)).as_string() == JS(MPTokenIssuanceCreate))
 | 
			
		||||
    if (!canHaveMPTIssuanceID(txn, meta))
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
    auto const id = getMPTIssuanceID(meta);
 | 
			
		||||
    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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -201,15 +201,23 @@ insertDeliveredAmount(
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @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
 | 
			
		||||
 * is generated only after one submits MPTokenIssuanceCreate, so there’s no way to know what the id is. (rippled)
 | 
			
		||||
 * @note We add "mpt_issuance_id" into the meta part of MPTokenIssuanceCreate only. The reason is because the
 | 
			
		||||
 * 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 txn The txn object
 | 
			
		||||
 * @param metaJson The metadata Json 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
 | 
			
		||||
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
 | 
			
		||||
 
 | 
			
		||||
@@ -333,7 +333,13 @@ tag_invoke(boost::json::value_to_tag<LedgerEntryHandler::Input>, boost::json::va
 | 
			
		||||
        {JS(mptoken), ripple::ltMPTOKEN},
 | 
			
		||||
        {JS(permissioned_domain), ripple::ltPERMISSIONED_DOMAIN},
 | 
			
		||||
        {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) {
 | 
			
		||||
 
 | 
			
		||||
@@ -428,6 +428,12 @@ public:
 | 
			
		||||
                      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{}},
 | 
			
		||||
            {"include_deleted", validation::Type<bool>{}},
 | 
			
		||||
        };
 | 
			
		||||
 
 | 
			
		||||
@@ -29,6 +29,7 @@
 | 
			
		||||
 | 
			
		||||
#include <algorithm>
 | 
			
		||||
#include <memory>
 | 
			
		||||
#include <string_view>
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
LoggerFixture::init()
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,9 @@ struct AmendmentBlockHandlerTest : util::prometheus::WithPrometheus, SyncAsioCon
 | 
			
		||||
    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)
 | 
			
		||||
{
 | 
			
		||||
    AmendmentBlockHandler handler{ctx_, state, std::chrono::nanoseconds{1}, actionMock.AsStdFunction()};
 | 
			
		||||
@@ -45,12 +48,7 @@ TEST_F(AmendmentBlockHandlerTest, CallToNotifyAmendmentBlockedSetsStateAndRepeat
 | 
			
		||||
    handler.notifyAmendmentBlocked();
 | 
			
		||||
    EXPECT_TRUE(state.isAmendmentBlocked);
 | 
			
		||||
 | 
			
		||||
// Code runs significantly slower when assertions are enabled
 | 
			
		||||
#ifdef _GLIBCXX_ASSERTIONS
 | 
			
		||||
    runContextFor(std::chrono::milliseconds{10});
 | 
			
		||||
#else
 | 
			
		||||
    runContextFor(std::chrono::milliseconds{1});
 | 
			
		||||
#endif
 | 
			
		||||
    runContextFor(std::chrono::milliseconds{50});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct DefaultAmendmentBlockActionTest : LoggerFixture {};
 | 
			
		||||
 
 | 
			
		||||
@@ -1282,7 +1282,8 @@ TEST_F(FeedTransactionTest, PublishesMPTokenIssuanceCreateTx)
 | 
			
		||||
                    }
 | 
			
		||||
                ],
 | 
			
		||||
                "TransactionIndex": 0,
 | 
			
		||||
                "TransactionResult": "tesSUCCESS"
 | 
			
		||||
                "TransactionResult": "tesSUCCESS",
 | 
			
		||||
                "mpt_issuance_id": "000000014B4E9C06F24296074F7BC48F92A97916C6DC5EA9"
 | 
			
		||||
            },
 | 
			
		||||
            "ctid": "C000002100000000",
 | 
			
		||||
            "type": "transaction",
 | 
			
		||||
 
 | 
			
		||||
@@ -1625,7 +1625,8 @@ TEST_F(RPCAccountTxHandlerTest, MPTTxs_API_v2)
 | 
			
		||||
                            }}
 | 
			
		||||
                        ],
 | 
			
		||||
                        "TransactionIndex": 0,
 | 
			
		||||
                        "TransactionResult": "tesSUCCESS"
 | 
			
		||||
                        "TransactionResult": "tesSUCCESS",
 | 
			
		||||
                        "mpt_issuance_id": "000000014B4E9C06F24296074F7BC48F92A97916C6DC5EA9"
 | 
			
		||||
                    }},
 | 
			
		||||
                    "hash": "A52221F4003C281D3C83F501F418B55A1F9DC1C6A129EF13E1A8F0E5C008DAE3",
 | 
			
		||||
                    "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(
 | 
			
		||||
    RPCLedgerEntryGroup3,
 | 
			
		||||
    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{}
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,7 @@
 | 
			
		||||
#include <spdlog/spdlog.h>
 | 
			
		||||
 | 
			
		||||
#include <cstddef>
 | 
			
		||||
#include <memory>
 | 
			
		||||
#include <string>
 | 
			
		||||
using namespace util;
 | 
			
		||||
 | 
			
		||||
@@ -93,11 +94,11 @@ TEST_F(LoggerTest, ManyDynamicLoggers)
 | 
			
		||||
    for (size_t i = 0; i < kNUM_LOGGERS; ++i) {
 | 
			
		||||
        std::string const loggerName = "DynamicLogger" + std::to_string(i);
 | 
			
		||||
 | 
			
		||||
        Logger log{loggerName};
 | 
			
		||||
        Logger const log{loggerName};
 | 
			
		||||
        log.info() << "Logger number " << i;
 | 
			
		||||
        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;
 | 
			
		||||
        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;
 | 
			
		||||
    auto work = boost::asio::make_work_guard(clientCtx);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user