diff --git a/src/xrpld/app/tx/detail/VaultDeposit.cpp b/src/xrpld/app/tx/detail/VaultDeposit.cpp index cc601f1c0f..828873fbfe 100644 --- a/src/xrpld/app/tx/detail/VaultDeposit.cpp +++ b/src/xrpld/app/tx/detail/VaultDeposit.cpp @@ -66,6 +66,23 @@ VaultDeposit::preclaim(PreclaimContext const& ctx) if (assets.asset() != vaultAsset) return tecWRONG_ASSET; + if (vaultAsset.native()) + ; // No special checks for XRP + else if (vaultAsset.holds()) + { + auto mptID = vaultAsset.get().getMptID(); + auto issuance = ctx.view.read(keylet::mptIssuance(mptID)); + if (!issuance) + return tecOBJECT_NOT_FOUND; + } + else if (vaultAsset.holds()) + { + auto const issuer = + ctx.view.read(keylet::account(vaultAsset.getIssuer())); + if (!issuer) + return tefINTERNAL; // LCOV_EXCL_LINE + } + auto const mptIssuanceID = vault->at(sfShareMPTID); auto const vaultShare = MPTIssue(mptIssuanceID); if (vaultShare == assets.asset()) diff --git a/src/xrpld/app/tx/detail/VaultWithdraw.cpp b/src/xrpld/app/tx/detail/VaultWithdraw.cpp index 22dde3fa7e..09f1cd345b 100644 --- a/src/xrpld/app/tx/detail/VaultWithdraw.cpp +++ b/src/xrpld/app/tx/detail/VaultWithdraw.cpp @@ -68,6 +68,23 @@ VaultWithdraw::preclaim(PreclaimContext const& ctx) if (assets.asset() != vaultAsset && assets.asset() != vaultShare) return tecWRONG_ASSET; + if (vaultAsset.native()) + ; // No special checks for XRP + else if (vaultAsset.holds()) + { + auto mptID = vaultAsset.get().getMptID(); + auto issuance = ctx.view.read(keylet::mptIssuance(mptID)); + if (!issuance) + return tecOBJECT_NOT_FOUND; + } + else if (vaultAsset.holds()) + { + auto const issuer = + ctx.view.read(keylet::account(vaultAsset.getIssuer())); + if (!issuer) + return tefINTERNAL; // LCOV_EXCL_LINE + } + // Enforce valid withdrawal policy if (vault->at(sfWithdrawalPolicy) != vaultStrategyFirstComeFirstServe) return tefINTERNAL; // LCOV_EXCL_LINE