mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-20 02:55:50 +00:00
Merge branch 'develop' into ximinez/online-delete-gaps
This commit is contained in:
44
.github/workflows/check-format.yml
vendored
44
.github/workflows/check-format.yml
vendored
@@ -1,44 +0,0 @@
|
|||||||
# This workflow checks if the code is properly formatted.
|
|
||||||
name: Check format
|
|
||||||
|
|
||||||
# This workflow can only be triggered by other workflows.
|
|
||||||
on: workflow_call
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}-format
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
pre-commit:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container: ghcr.io/xrplf/ci/tools-rippled-pre-commit
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
|
||||||
- name: Prepare runner
|
|
||||||
uses: XRPLF/actions/.github/actions/prepare-runner@638e0dc11ea230f91bd26622fb542116bb5254d5
|
|
||||||
- name: Format code
|
|
||||||
run: pre-commit run --show-diff-on-failure --color=always --all-files
|
|
||||||
- name: Check for differences
|
|
||||||
env:
|
|
||||||
MESSAGE: |
|
|
||||||
One or more files did not conform to the formatting. Maybe you did
|
|
||||||
not run 'pre-commit' before committing, or your version of
|
|
||||||
'clang-format' or 'prettier' has an incompatibility with the ones
|
|
||||||
used here (see the "Check configuration" step above).
|
|
||||||
|
|
||||||
Run 'pre-commit run --all-files' in your repo, and then commit and
|
|
||||||
push the changes.
|
|
||||||
run: |
|
|
||||||
DIFF=$(git status --porcelain)
|
|
||||||
if [ -n "${DIFF}" ]; then
|
|
||||||
# Print the files that changed to give the contributor a hint about
|
|
||||||
# what to expect when running pre-commit on their own machine.
|
|
||||||
git status
|
|
||||||
echo "${MESSAGE}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
9
.github/workflows/on-pr.yml
vendored
9
.github/workflows/on-pr.yml
vendored
@@ -50,12 +50,9 @@ jobs:
|
|||||||
files: |
|
files: |
|
||||||
# These paths are unique to `on-pr.yml`.
|
# These paths are unique to `on-pr.yml`.
|
||||||
.github/scripts/levelization/**
|
.github/scripts/levelization/**
|
||||||
.github/workflows/check-format.yml
|
|
||||||
.github/workflows/check-levelization.yml
|
.github/workflows/check-levelization.yml
|
||||||
.github/workflows/notify-clio.yml
|
.github/workflows/notify-clio.yml
|
||||||
.github/workflows/on-pr.yml
|
.github/workflows/on-pr.yml
|
||||||
.clang-format
|
|
||||||
.pre-commit-config.yaml
|
|
||||||
|
|
||||||
# Keep the paths below in sync with those in `on-trigger.yml`.
|
# Keep the paths below in sync with those in `on-trigger.yml`.
|
||||||
.github/actions/build-deps/**
|
.github/actions/build-deps/**
|
||||||
@@ -93,11 +90,6 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
go: ${{ steps.go.outputs.go == 'true' }}
|
go: ${{ steps.go.outputs.go == 'true' }}
|
||||||
|
|
||||||
check-format:
|
|
||||||
needs: should-run
|
|
||||||
if: needs.should-run.outputs.go == 'true'
|
|
||||||
uses: ./.github/workflows/check-format.yml
|
|
||||||
|
|
||||||
check-levelization:
|
check-levelization:
|
||||||
needs: should-run
|
needs: should-run
|
||||||
if: needs.should-run.outputs.go == 'true'
|
if: needs.should-run.outputs.go == 'true'
|
||||||
@@ -130,7 +122,6 @@ jobs:
|
|||||||
if: failure() || cancelled()
|
if: failure() || cancelled()
|
||||||
needs:
|
needs:
|
||||||
- build-test
|
- build-test
|
||||||
- check-format
|
|
||||||
- check-levelization
|
- check-levelization
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
14
.github/workflows/pre-commit.yml
vendored
Normal file
14
.github/workflows/pre-commit.yml
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
name: Run pre-commit hooks
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
branches: [develop, release, master]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run-hooks:
|
||||||
|
uses: XRPLF/actions/.github/workflows/pre-commit.yml@af1b0f0d764cda2e5435f5ac97b240d4bd4d95d3
|
||||||
|
with:
|
||||||
|
runs_on: ubuntu-latest
|
||||||
|
container: '{ "image": "ghcr.io/xrplf/ci/tools-rippled-pre-commit" }'
|
||||||
@@ -131,6 +131,32 @@ class Simulate_test : public beast::unit_test::suite
|
|||||||
std::to_string(env.current()->txCount()));
|
std::to_string(env.current()->txCount()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
testTxJsonMetadataField(
|
||||||
|
jtx::Env& env,
|
||||||
|
Json::Value const& tx,
|
||||||
|
std::function<void(
|
||||||
|
Json::Value const&,
|
||||||
|
Json::Value const&,
|
||||||
|
Json::Value const&)> const& validate,
|
||||||
|
Json::Value const& expectedMetadataKey,
|
||||||
|
bool testSerialized = true)
|
||||||
|
{
|
||||||
|
env.close();
|
||||||
|
|
||||||
|
Json::Value params;
|
||||||
|
params[jss::tx_json] = tx;
|
||||||
|
validate(
|
||||||
|
env.rpc("json", "simulate", to_string(params)),
|
||||||
|
tx,
|
||||||
|
expectedMetadataKey);
|
||||||
|
validate(env.rpc("simulate", to_string(tx)), tx, expectedMetadataKey);
|
||||||
|
|
||||||
|
BEAST_EXPECTS(
|
||||||
|
env.current()->txCount() == 0,
|
||||||
|
std::to_string(env.current()->txCount()));
|
||||||
|
}
|
||||||
|
|
||||||
Json::Value
|
Json::Value
|
||||||
getJsonMetadata(Json::Value txResult) const
|
getJsonMetadata(Json::Value txResult) const
|
||||||
{
|
{
|
||||||
@@ -1186,6 +1212,83 @@ class Simulate_test : public beast::unit_test::suite
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
testSuccessfulTransactionAdditionalMetadata()
|
||||||
|
{
|
||||||
|
testcase("Successful transaction with additional metadata");
|
||||||
|
|
||||||
|
using namespace jtx;
|
||||||
|
Env env{*this, envconfig([&](std::unique_ptr<Config> cfg) {
|
||||||
|
cfg->NETWORK_ID = 1025;
|
||||||
|
return cfg;
|
||||||
|
})};
|
||||||
|
|
||||||
|
Account const alice("alice");
|
||||||
|
|
||||||
|
env.fund(XRP(10000), alice);
|
||||||
|
env.close();
|
||||||
|
|
||||||
|
{
|
||||||
|
auto validateOutput = [&](Json::Value const& resp,
|
||||||
|
Json::Value const& tx,
|
||||||
|
Json::Value const& expectedMetadataKey) {
|
||||||
|
auto result = resp[jss::result];
|
||||||
|
|
||||||
|
BEAST_EXPECT(result[jss::engine_result] == "tesSUCCESS");
|
||||||
|
BEAST_EXPECT(result[jss::engine_result_code] == 0);
|
||||||
|
BEAST_EXPECT(
|
||||||
|
result[jss::engine_result_message] ==
|
||||||
|
"The simulated transaction would have been applied.");
|
||||||
|
|
||||||
|
if (BEAST_EXPECT(
|
||||||
|
result.isMember(jss::meta) ||
|
||||||
|
result.isMember(jss::meta_blob)))
|
||||||
|
{
|
||||||
|
Json::Value const metadata = getJsonMetadata(result);
|
||||||
|
|
||||||
|
BEAST_EXPECT(metadata[sfTransactionIndex.jsonName] == 0);
|
||||||
|
BEAST_EXPECT(
|
||||||
|
metadata[sfTransactionResult.jsonName] == "tesSUCCESS");
|
||||||
|
BEAST_EXPECT(
|
||||||
|
metadata.isMember(expectedMetadataKey.asString()));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
{
|
||||||
|
Json::Value tx;
|
||||||
|
tx[jss::Account] = env.master.human();
|
||||||
|
tx[jss::TransactionType] = jss::Payment;
|
||||||
|
tx[sfDestination] = alice.human();
|
||||||
|
tx[sfAmount] = "100";
|
||||||
|
|
||||||
|
// test delivered amount
|
||||||
|
testTxJsonMetadataField(
|
||||||
|
env, tx, validateOutput, jss::delivered_amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
Json::Value tx;
|
||||||
|
tx[jss::Account] = env.master.human();
|
||||||
|
tx[jss::TransactionType] = jss::NFTokenMint;
|
||||||
|
tx[sfNFTokenTaxon] = 1;
|
||||||
|
|
||||||
|
// test nft synthetic
|
||||||
|
testTxJsonMetadataField(
|
||||||
|
env, tx, validateOutput, jss::nftoken_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
Json::Value tx;
|
||||||
|
tx[jss::Account] = env.master.human();
|
||||||
|
tx[jss::TransactionType] = jss::MPTokenIssuanceCreate;
|
||||||
|
|
||||||
|
// test mpt issuance id
|
||||||
|
testTxJsonMetadataField(
|
||||||
|
env, tx, validateOutput, jss::mpt_issuance_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void
|
void
|
||||||
run() override
|
run() override
|
||||||
@@ -1202,6 +1305,7 @@ public:
|
|||||||
testMultisignedBadPubKey();
|
testMultisignedBadPubKey();
|
||||||
testDeleteExpiredCredentials();
|
testDeleteExpiredCredentials();
|
||||||
testSuccessfulTransactionNetworkID();
|
testSuccessfulTransactionNetworkID();
|
||||||
|
testSuccessfulTransactionAdditionalMetadata();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -24,10 +24,13 @@
|
|||||||
#include <xrpld/app/misc/TxQ.h>
|
#include <xrpld/app/misc/TxQ.h>
|
||||||
#include <xrpld/app/tx/apply.h>
|
#include <xrpld/app/tx/apply.h>
|
||||||
#include <xrpld/rpc/Context.h>
|
#include <xrpld/rpc/Context.h>
|
||||||
|
#include <xrpld/rpc/DeliveredAmount.h>
|
||||||
#include <xrpld/rpc/GRPCHandlers.h>
|
#include <xrpld/rpc/GRPCHandlers.h>
|
||||||
|
#include <xrpld/rpc/MPTokenIssuanceID.h>
|
||||||
#include <xrpld/rpc/detail/TransactionSign.h>
|
#include <xrpld/rpc/detail/TransactionSign.h>
|
||||||
|
|
||||||
#include <xrpl/protocol/ErrorCodes.h>
|
#include <xrpl/protocol/ErrorCodes.h>
|
||||||
|
#include <xrpl/protocol/NFTSyntheticSerializer.h>
|
||||||
#include <xrpl/protocol/RPCErr.h>
|
#include <xrpl/protocol/RPCErr.h>
|
||||||
#include <xrpl/protocol/STParsedJSON.h>
|
#include <xrpl/protocol/STParsedJSON.h>
|
||||||
#include <xrpl/resource/Fees.h>
|
#include <xrpl/resource/Fees.h>
|
||||||
@@ -272,6 +275,17 @@ simulateTxn(RPC::JsonContext& context, std::shared_ptr<Transaction> transaction)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
jvResult[jss::meta] = result.metadata->getJson(JsonOptions::none);
|
jvResult[jss::meta] = result.metadata->getJson(JsonOptions::none);
|
||||||
|
RPC::insertDeliveredAmount(
|
||||||
|
jvResult[jss::meta],
|
||||||
|
view,
|
||||||
|
transaction->getSTransaction(),
|
||||||
|
*result.metadata);
|
||||||
|
RPC::insertNFTSyntheticInJson(
|
||||||
|
jvResult, transaction->getSTransaction(), *result.metadata);
|
||||||
|
RPC::insertMPTokenIssuanceID(
|
||||||
|
jvResult[jss::meta],
|
||||||
|
transaction->getSTransaction(),
|
||||||
|
*result.metadata);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user