#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace xrpl::test::jtx { std::tuple Vault::create(CreateArgs const& args) const { auto const seqProxy = SeqProxy::rawSequence(env.seq(args.owner)); auto keylet = keylet::vault(args.owner.id(), seqProxy); json::Value jv; jv[jss::TransactionType] = jss::VaultCreate; jv[jss::Account] = args.owner.human(); jv[jss::Asset] = toJson(args.asset); if (args.flags) jv[jss::Flags] = *args.flags; if (args.vaultKind) jv[sfVaultKind] = *args.vaultKind; if (args.subscriptionDate) jv[sfSubscriptionDate] = *args.subscriptionDate; if (args.redemptionDate) jv[sfRedemptionDate] = *args.redemptionDate; if (args.leVersion) jv[sfLEVersion] = std::to_underlying(*args.leVersion); if (args.dealingInterval) jv[sfDealingInterval] = *args.dealingInterval; if (args.dealingWindow) jv[sfDealingWindow] = *args.dealingWindow; if (args.depositFee) jv[sfDepositFee] = *args.depositFee; if (args.redemptionFee) jv[sfRedemptionFee] = *args.redemptionFee; if (args.redemptionPeriod) jv[sfRedemptionPeriod] = *args.redemptionPeriod; if (args.accountingMethod) jv[sfAccountingMethod] = *args.accountingMethod; return {jv, keylet}; } std::tuple Vault::createClosedEnded(CreateClosedEndedArgs const& args) const { auto const sub = env.now() + args.subscriptionOffset; auto const red = sub + args.investmentWindow; auto [jv, keylet] = create( {.owner = args.owner, .asset = args.asset, .flags = args.flags, .vaultKind = std::to_underlying(VaultKind::ClosedEnded), .subscriptionDate = static_cast(sub.time_since_epoch().count()), .redemptionDate = static_cast(red.time_since_epoch().count())}); return {jv, keylet, sub}; } void Vault::closePastSubscription(NetClock::time_point subscriptionDate) const { env.close(subscriptionDate + std::chrono::seconds{1}); } json::Value Vault::set(SetArgs const& args) { json::Value jv; jv[jss::TransactionType] = jss::VaultSet; jv[jss::Account] = args.owner.human(); jv[sfVaultID] = to_string(args.id); return jv; } json::Value Vault::del(DeleteArgs const& args) { json::Value jv; jv[jss::TransactionType] = jss::VaultDelete; jv[jss::Account] = args.owner.human(); jv[sfVaultID] = to_string(args.id); return jv; } json::Value Vault::deposit(DepositArgs const& args) { json::Value jv; jv[jss::TransactionType] = jss::VaultDeposit; jv[jss::Account] = args.depositor.human(); jv[sfVaultID] = to_string(args.id); jv[jss::Amount] = toJson(args.amount); return jv; } json::Value Vault::withdraw(WithdrawArgs const& args) { json::Value jv; jv[jss::TransactionType] = jss::VaultWithdraw; jv[jss::Account] = args.depositor.human(); jv[sfVaultID] = to_string(args.id); jv[jss::Amount] = toJson(args.amount); return jv; } json::Value Vault::clawback(ClawbackArgs const& args) { json::Value jv; jv[jss::TransactionType] = jss::VaultClawback; jv[jss::Account] = args.issuer.human(); jv[sfVaultID] = to_string(args.id); jv[jss::Holder] = args.holder.human(); if (args.amount) jv[jss::Amount] = toJson(*args.amount); return jv; } } // namespace xrpl::test::jtx