diff --git a/src/xrpld/app/tx/detail/MPTokenIssuanceCreate.cpp b/src/xrpld/app/tx/detail/MPTokenIssuanceCreate.cpp index bf89c44ad4..8e0d1ef6c9 100644 --- a/src/xrpld/app/tx/detail/MPTokenIssuanceCreate.cpp +++ b/src/xrpld/app/tx/detail/MPTokenIssuanceCreate.cpp @@ -71,53 +71,46 @@ Expected MPTokenIssuanceCreate::create( ApplyView& view, beast::Journal journal, - AccountID const& account, - std::uint32_t sequence, - std::uint32_t flags, - std::optional maxAmount, - std::optional assetScale, - std::optional transferFee, - std::optional const& metadata, - std::optional domainId) + MPTCreateArgs const& args) { - auto const acct = view.peek(keylet::account(account)); + auto const acct = view.peek(keylet::account(args.account)); if (!acct) return Unexpected(tecINTERNAL); - auto mptId = makeMptID(sequence, account); + auto mptId = makeMptID(args.sequence, args.account); auto const mptIssuanceKeylet = keylet::mptIssuance(mptId); // create the MPTokenIssuance { auto const ownerNode = view.dirInsert( - keylet::ownerDir(account), + keylet::ownerDir(args.account), mptIssuanceKeylet, - describeOwnerDir(account)); + describeOwnerDir(args.account)); if (!ownerNode) return Unexpected(tecDIR_FULL); auto mptIssuance = std::make_shared(mptIssuanceKeylet); - (*mptIssuance)[sfFlags] = flags & ~tfUniversal; - (*mptIssuance)[sfIssuer] = account; + (*mptIssuance)[sfFlags] = args.flags & ~tfUniversal; + (*mptIssuance)[sfIssuer] = args.account; (*mptIssuance)[sfOutstandingAmount] = 0; (*mptIssuance)[sfOwnerNode] = *ownerNode; - (*mptIssuance)[sfSequence] = sequence; + (*mptIssuance)[sfSequence] = args.sequence; - if (maxAmount) - (*mptIssuance)[sfMaximumAmount] = *maxAmount; + if (args.maxAmount) + (*mptIssuance)[sfMaximumAmount] = *args.maxAmount; - if (assetScale) - (*mptIssuance)[sfAssetScale] = *assetScale; + if (args.assetScale) + (*mptIssuance)[sfAssetScale] = *args.assetScale; - if (transferFee) - (*mptIssuance)[sfTransferFee] = *transferFee; + if (args.transferFee) + (*mptIssuance)[sfTransferFee] = *args.transferFee; - if (metadata) - (*mptIssuance)[sfMPTokenMetadata] = *metadata; + if (args.metadata) + (*mptIssuance)[sfMPTokenMetadata] = *args.metadata; - if (domainId) - (*mptIssuance)[sfDomainID] = *domainId; + if (args.domainId) + (*mptIssuance)[sfDomainID] = *args.domainId; view.insert(mptIssuance); } @@ -140,13 +133,13 @@ MPTokenIssuanceCreate::doApply() auto result = create( view(), j_, - account_, - tx.getSeqProxy().value(), - tx.getFlags(), - tx[~sfMaximumAmount], - tx[~sfAssetScale], - tx[~sfTransferFee], - tx[~sfMPTokenMetadata]); + {.account = account_, + .sequence = tx.getSeqProxy().value(), + .flags = tx.getFlags(), + .maxAmount = tx[~sfMaximumAmount], + .assetScale = tx[~sfAssetScale], + .transferFee = tx[~sfTransferFee], + .metadata = tx[~sfMPTokenMetadata]}); return result ? tesSUCCESS : result.error(); } diff --git a/src/xrpld/app/tx/detail/MPTokenIssuanceCreate.h b/src/xrpld/app/tx/detail/MPTokenIssuanceCreate.h index 3a60543db0..a91490e6a2 100644 --- a/src/xrpld/app/tx/detail/MPTokenIssuanceCreate.h +++ b/src/xrpld/app/tx/detail/MPTokenIssuanceCreate.h @@ -26,6 +26,18 @@ namespace ripple { +struct MPTCreateArgs +{ + AccountID const& account; + std::uint32_t sequence; + std::uint32_t flags = 0; + std::optional maxAmount{}; + std::optional assetScale{}; + std::optional transferFee{}; + std::optional const& metadata{}; + std::optional domainId{}; +}; + class MPTokenIssuanceCreate : public Transactor { public: @@ -42,17 +54,7 @@ public: doApply() override; static Expected - create( - ApplyView& view, - beast::Journal journal, - AccountID const& account, - std::uint32_t sequence, - std::uint32_t flags = 0, - std::optional maxAmount = {}, - std::optional assetScale = {}, - std::optional transferFee = {}, - std::optional const& metadata = {}, - std::optional domainId = {}); + create(ApplyView& view, beast::Journal journal, MPTCreateArgs const& args); }; } // namespace ripple diff --git a/src/xrpld/app/tx/detail/MPTokenIssuanceDestroy.cpp b/src/xrpld/app/tx/detail/MPTokenIssuanceDestroy.cpp index f37f5f5c1d..0e642fca13 100644 --- a/src/xrpld/app/tx/detail/MPTokenIssuanceDestroy.cpp +++ b/src/xrpld/app/tx/detail/MPTokenIssuanceDestroy.cpp @@ -66,16 +66,15 @@ TER MPTokenIssuanceDestroy::destroy( ApplyView& view, beast::Journal journal, - AccountID const account, - MPTID issuanceID) + MPTDestroyArgs const& args) { - auto const mpt = view.peek(keylet::mptIssuance(issuanceID)); + auto const mpt = view.peek(keylet::mptIssuance(args.issuanceID)); if (!mpt) return tecOBJECT_NOT_FOUND; - if ((*mpt)[sfIssuer] != account) + if ((*mpt)[sfIssuer] != args.account) return tecNO_PERMISSION; - auto const& issuer = account; + auto const& issuer = args.account; if ((*mpt)[~sfOutstandingAmount] != 0) return tecHAS_OBLIGATIONS; @@ -93,7 +92,10 @@ TER MPTokenIssuanceDestroy::doApply() { return destroy( - view(), j_, ctx_.tx[sfAccount], ctx_.tx[sfMPTokenIssuanceID]); + view(), + j_, + {.account = ctx_.tx[sfAccount], + .issuanceID = ctx_.tx[sfMPTokenIssuanceID]}); } } // namespace ripple diff --git a/src/xrpld/app/tx/detail/MPTokenIssuanceDestroy.h b/src/xrpld/app/tx/detail/MPTokenIssuanceDestroy.h index 66214b87bb..278f77b7b5 100644 --- a/src/xrpld/app/tx/detail/MPTokenIssuanceDestroy.h +++ b/src/xrpld/app/tx/detail/MPTokenIssuanceDestroy.h @@ -24,6 +24,12 @@ namespace ripple { +struct MPTDestroyArgs +{ + AccountID const& account; + MPTID issuanceID; +}; + class MPTokenIssuanceDestroy : public Transactor { public: @@ -43,8 +49,7 @@ public: destroy( ApplyView& view, beast::Journal journal, - AccountID const account, - MPTID issuanceID); + MPTDestroyArgs const& args); TER doApply() override; diff --git a/src/xrpld/app/tx/detail/VaultCreate.cpp b/src/xrpld/app/tx/detail/VaultCreate.cpp index 837e81b956..65876d6cb4 100644 --- a/src/xrpld/app/tx/detail/VaultCreate.cpp +++ b/src/xrpld/app/tx/detail/VaultCreate.cpp @@ -141,14 +141,13 @@ VaultCreate::doApply() auto maybeShare = MPTokenIssuanceCreate::create( view(), j_, - pseudoId, - 1, - mptFlags, - {}, - {}, - {}, - tx[~sfMPTokenMetadata], - tx[~sfDomainID]); + { + .account = pseudoId, + .sequence = 1, + .flags = mptFlags, + .metadata = tx[~sfMPTokenMetadata], + .domainId = tx[~sfDomainID], + }); if (!maybeShare) return maybeShare.error(); auto& share = *maybeShare; diff --git a/src/xrpld/app/tx/detail/VaultDelete.cpp b/src/xrpld/app/tx/detail/VaultDelete.cpp index e920126380..b999c277cf 100644 --- a/src/xrpld/app/tx/detail/VaultDelete.cpp +++ b/src/xrpld/app/tx/detail/VaultDelete.cpp @@ -69,7 +69,10 @@ VaultDelete::doApply() // Destroy the share issuance. if (auto ter = MPTokenIssuanceDestroy::destroy( - view(), j_, vault->at(sfAccount), vault->at(sfMPTokenIssuanceID))) + view(), + j_, + {.account = vault->at(sfAccount), + .issuanceID = vault->at(sfMPTokenIssuanceID)})) return ter; // The psuedo-account's directory should have been deleted already.