diff --git a/src/ripple/app/tx/impl/Import.cpp b/src/ripple/app/tx/impl/Import.cpp index 856eb5218..74d1782af 100644 --- a/src/ripple/app/tx/impl/Import.cpp +++ b/src/ripple/app/tx/impl/Import.cpp @@ -131,20 +131,6 @@ Import::preflight(PreflightContext const& ctx) auto& tx = ctx.tx; - if (tx.getFieldAmount(sfFee) != beast::zero) - { - if (tx.isFieldPresent(sfIssuer)) - { - // pass. Import against a Hook does pay a fee - } - else - { - JLOG(ctx.j.warn()) - << "Import: sfFee must be 0 " - << tx.getTransactionID(); - return temMALFORMED; - } - } if (tx.getFieldVL(sfBlob).size() > (512 * 1024)) { diff --git a/src/ripple/app/tx/impl/Transactor.cpp b/src/ripple/app/tx/impl/Transactor.cpp index 4782fa933..68a62fd98 100644 --- a/src/ripple/app/tx/impl/Transactor.cpp +++ b/src/ripple/app/tx/impl/Transactor.cpp @@ -1021,11 +1021,12 @@ std::pair Transactor::reset(XRPAmount fee) { ApplyViewImpl& avi = dynamic_cast(ctx_.view()); - std::vector hookMeta; - avi.copyHookMetaData(hookMeta); + std::vector executions; + std::vector emissions; + avi.copyHookMetaData(executions, emissions); ctx_.discard(); ApplyViewImpl& avi2 = dynamic_cast(ctx_.view()); - avi2.setHookMetaData(std::move(hookMeta)); + avi2.setHookMetaData(std::move(executions), std::move(emissions)); auto const txnAcct = view().peek(keylet::account(ctx_.tx.getAccountID(sfAccount))); diff --git a/src/ripple/app/tx/impl/applySteps.cpp b/src/ripple/app/tx/impl/applySteps.cpp index 8fc569dd6..69b89e86f 100644 --- a/src/ripple/app/tx/impl/applySteps.cpp +++ b/src/ripple/app/tx/impl/applySteps.cpp @@ -202,7 +202,6 @@ invoke_preclaim(PreclaimContext const& ctx) return result; result = - ctx.tx.getTxnType() == ttIMPORT ? tesSUCCESS : T::checkFee(ctx, calculateBaseFee(ctx.view, ctx.tx)); if (result != tesSUCCESS) diff --git a/src/ripple/ledger/ApplyViewImpl.h b/src/ripple/ledger/ApplyViewImpl.h index d4915103d..d67ab4b0b 100644 --- a/src/ripple/ledger/ApplyViewImpl.h +++ b/src/ripple/ledger/ApplyViewImpl.h @@ -91,15 +91,17 @@ public: } void - setHookMetaData(std::vector&& vec) + setHookMetaData(std::vector&& executions, std::vector&& emissions) { - hookExecution_ = std::move(vec); + hookExecution_ = std::move(executions); + hookEmission_ = std::move(emissions); } void - copyHookMetaData(std::vector& into) + copyHookMetaData(std::vector& execution /* in */, std::vector& emission /* in */) { - std::copy(hookExecution_.begin(), hookExecution_.end(), std::back_inserter(into)); + std::copy(hookExecution_.begin(), hookExecution_.end(), std::back_inserter(execution)); + std::copy(hookEmission_.begin(), hookEmission_.end(), std::back_inserter(emission)); } uint16_t diff --git a/src/test/app/Import_test.cpp b/src/test/app/Import_test.cpp index a6ca0db7b..73e71a0f5 100644 --- a/src/test/app/Import_test.cpp +++ b/src/test/app/Import_test.cpp @@ -2582,6 +2582,7 @@ class Import_test : public beast::unit_test::suite auto const [signers, signersSle] = signersKeyAndSle(*env.current(), alice); + BEAST_REQUIRE(!!signersSle); auto const signerEntries = signersSle->getFieldArray(sfSignerEntries); BEAST_EXPECT(signerEntries.size() == 1);