xrpld
Loading...
Searching...
No Matches
vault.cpp
1#include <test/jtx/vault.h>
2
3#include <test/jtx/Env.h>
4
5#include <xrpl/basics/base_uint.h>
6#include <xrpl/basics/chrono.h>
7#include <xrpl/json/json_value.h>
8#include <xrpl/protocol/Asset.h>
9#include <xrpl/protocol/Indexes.h>
10#include <xrpl/protocol/Keylet.h>
11#include <xrpl/protocol/Protocol.h>
12#include <xrpl/protocol/SField.h>
13#include <xrpl/protocol/STBase.h>
14#include <xrpl/protocol/SeqProxy.h>
15#include <xrpl/protocol/jss.h>
16
17#include <chrono>
18#include <cstdint>
19#include <optional>
20#include <tuple>
21#include <utility>
22
23namespace xrpl::test::jtx {
24
25std::tuple<json::Value, Keylet>
26Vault::create(CreateArgs const& args) const
27{
28 auto const seqProxy = SeqProxy::rawSequence(env.seq(args.owner));
29 auto keylet = keylet::vault(args.owner.id(), seqProxy);
30 json::Value jv;
31 jv[jss::TransactionType] = jss::VaultCreate;
32 jv[jss::Account] = args.owner.human();
33 jv[jss::Asset] = toJson(args.asset);
34 if (args.flags)
35 jv[jss::Flags] = *args.flags;
36 if (args.vaultKind)
37 jv[sfVaultKind] = *args.vaultKind;
38 if (args.subscriptionDate)
39 jv[sfSubscriptionDate] = *args.subscriptionDate;
40 if (args.redemptionDate)
41 jv[sfRedemptionDate] = *args.redemptionDate;
42 if (args.leVersion)
43 jv[sfLEVersion] = std::to_underlying(*args.leVersion);
44 return {jv, keylet};
45}
46
49{
50 auto const sub = env.now() + args.subscriptionOffset;
51 auto const red = sub + args.investmentWindow;
52 auto [jv, keylet] = create(
53 {.owner = args.owner,
54 .asset = args.asset,
55 .flags = args.flags,
56 .vaultKind = std::to_underlying(VaultKind::ClosedEnded),
57 .subscriptionDate = static_cast<std::uint32_t>(sub.time_since_epoch().count()),
58 .redemptionDate = static_cast<std::uint32_t>(red.time_since_epoch().count())});
59 return {jv, keylet, sub};
60}
61
62void
64{
65 env.close(subscriptionDate + std::chrono::seconds{1});
66}
67
69Vault::set(SetArgs const& args)
70{
71 json::Value jv;
72 jv[jss::TransactionType] = jss::VaultSet;
73 jv[jss::Account] = args.owner.human();
74 jv[sfVaultID] = to_string(args.id);
75 return jv;
76}
77
80{
81 json::Value jv;
82 jv[jss::TransactionType] = jss::VaultDelete;
83 jv[jss::Account] = args.owner.human();
84 jv[sfVaultID] = to_string(args.id);
85 return jv;
86}
87
90{
91 json::Value jv;
92 jv[jss::TransactionType] = jss::VaultDeposit;
93 jv[jss::Account] = args.depositor.human();
94 jv[sfVaultID] = to_string(args.id);
95 jv[jss::Amount] = toJson(args.amount);
96 return jv;
97}
98
101{
102 json::Value jv;
103 jv[jss::TransactionType] = jss::VaultWithdraw;
104 jv[jss::Account] = args.depositor.human();
105 jv[sfVaultID] = to_string(args.id);
106 jv[jss::Amount] = toJson(args.amount);
107 return jv;
108}
109
112{
113 json::Value jv;
114 jv[jss::TransactionType] = jss::VaultClawback;
115 jv[jss::Account] = args.issuer.human();
116 jv[sfVaultID] = to_string(args.id);
117 jv[jss::Holder] = args.holder.human();
118 if (args.amount)
119 jv[jss::Amount] = toJson(*args.amount);
120 return jv;
121}
122
123} // namespace xrpl::test::jtx
Represents a JSON value.
Definition json_value.h:117
std::chrono::time_point< NetClock > time_point
Definition chrono.h:48
static constexpr SeqProxy rawSequence(std::uint32_t v)
Factory function to return a sequence-based SeqProxy.
Definition SeqProxy.h:62
std::string const & human() const
Returns the human readable public key.
AccountID id() const
Returns the Account ID.
Keylet computation functions.
Definition Indexes.h:40
Keylet vault(AccountID const &owner, SeqProxy const &seq) noexcept
Definition Indexes.cpp:591
std::string to_string(BaseUInt< Bits, Tag > const &a)
Definition base_uint.h:657
json::Value toJson(Asset const &asset)
Definition Asset.h:168
std::optional< STAmount > amount
Definition vault.h:122
std::optional< std::uint8_t > vaultKind
Definition vault.h:31
std::optional< std::uint32_t > subscriptionDate
Definition vault.h:33
std::optional< std::uint32_t > redemptionDate
Definition vault.h:35
std::optional< VaultVersion > leVersion
Definition vault.h:37
std::optional< std::uint32_t > flags
Definition vault.h:29
std::optional< std::uint32_t > flags
Definition vault.h:51
std::tuple< json::Value, Keylet > create(CreateArgs const &args) const
Return a VaultCreate transaction and the Vault's expected keylet.
Definition vault.cpp:26
static json::Value withdraw(WithdrawArgs const &args)
Definition vault.cpp:100
static json::Value del(DeleteArgs const &args)
Definition vault.cpp:79
static json::Value clawback(ClawbackArgs const &args)
Definition vault.cpp:111
static json::Value set(SetArgs const &args)
Definition vault.cpp:69
std::tuple< json::Value, Keylet, NetClock::time_point > createClosedEnded(CreateClosedEndedArgs const &args) const
Return a VaultCreate transaction for a closed-ended vault, its expected keylet, and the vault's Subsc...
Definition vault.cpp:48
void closePastSubscription(NetClock::time_point subscriptionDate) const
Advance env's clock to just past subscriptionDate, moving a closed-ended vault from the Subscription ...
Definition vault.cpp:63
static json::Value deposit(DepositArgs const &args)
Definition vault.cpp:89