3#include <test/app/lending/LoanTestBase.h>
4#include <test/jtx/Account.h>
5#include <test/jtx/Env.h>
6#include <test/jtx/TestHelpers.h>
7#include <test/jtx/amount.h>
8#include <test/jtx/fee.h>
9#include <test/jtx/flags.h>
10#include <test/jtx/pay.h>
11#include <test/jtx/sig.h>
12#include <test/jtx/vault.h>
14#include <xrpl/basics/Number.h>
15#include <xrpl/basics/base_uint.h>
16#include <xrpl/basics/chrono.h>
17#include <xrpl/protocol/Asset.h>
18#include <xrpl/protocol/Feature.h>
19#include <xrpl/protocol/Indexes.h>
20#include <xrpl/protocol/Keylet.h>
21#include <xrpl/protocol/LedgerFormats.h>
22#include <xrpl/protocol/MPTIssue.h>
23#include <xrpl/protocol/Protocol.h>
24#include <xrpl/protocol/SField.h>
25#include <xrpl/protocol/STAmount.h>
26#include <xrpl/protocol/SeqProxy.h>
27#include <xrpl/protocol/TxFlags.h>
28#include <xrpl/protocol/UintTypes.h>
29#include <xrpl/protocol/Units.h>
106 n.
sharesTotal = issuanceSle->at(sfOutstandingAmount);
146 env(
fset(f.
issuer, asfAllowTrustLineClawback));
162 .vaultDeposit = 1'000,
165 .coverDeposit = 10'000,
173 Vault const vault{env};
174 auto [
createTx, vaultKeylet] = vault.create({.owner = f.
lender, .asset = asset});
180 {.depositor = f.lender,
181 .id = vaultKeylet.key,
182 .amount = asset(brokerParams.vaultDeposit)}));
185 auto const brokerKeylet =
190 kDebtMaximum(asset(brokerParams.
debtMax).value()),
193 env(coverDeposit(f.
lender, brokerKeylet.key, asset(brokerParams.
coverDeposit).value()));
198 auto const vaultSle = env.
le(vaultKeylet);
200 f.
share = vaultSle->at(sfShareMPTID);
202 Fee const bigFee{env.
current()->fees().base * 200};
204 auto const setLoan = [&](
Number const& principal) ->
Keylet {
205 auto const brokerSle = env.
le(brokerKeylet);
223 if (!impairAndPaySibling)
238 auto const payoff = asset(
Number{50}).value();
243 if (env.
current()->rules().enabled(fixCleanup3_4_0))
std::chrono::time_point< NetClock > time_point
std::chrono::duration< rep, period > duration
Number is a floating point type that can represent a wide range of values.
static constexpr SeqProxy rawSequence(std::uint32_t v)
Factory function to return a sequence-based SeqProxy.
Shared base for the Loan*_test family under src/test/app/lending/.
static Number oneUnit(Asset const &asset, Number const &assetsTotalAfter)
static Numbers read(jtx::Env const &env, Fixture const &f)
static constexpr std::uint32_t kFixtureGracePeriod
static Fixture setupSingleLoanVault(jtx::Env &env, bool impairAndPaySibling, bool allowClawback=false)
static constexpr std::uint32_t kFixtureInterestTenthBips
static constexpr std::uint32_t kFixturePaymentTotal
static constexpr std::uint32_t kFixturePaymentInterval
Immutable cryptographic account descriptor.
AccountID id() const
Returns the Account ID.
A transaction testing environment.
bool close(NetClock::time_point closeTime, std::optional< std::chrono::milliseconds > consensusDelay=std::nullopt)
Close and advance the ledger.
SLE::const_pointer le(Account const &account) const
Return an account root.
void fund(bool setDefaultRipple, STAmount const &amount, Account const &account)
std::uint32_t seq(Account const &account) const
Returns the next sequence number on account.
PrettyAmount balance(Account const &account) const
Returns the XRP balance on an account.
void trust(STAmount const &amount, Account const &account)
Establish trust lines.
std::shared_ptr< OpenView const > current() const
Returns the current ledger.
Set the regular signature on a JTx.
Keylet loanBroker(AccountID const &owner, SeqProxy const &seq) noexcept
Keylet loan(UInt256 const &loanBrokerID, SeqProxy const &loanSeq) noexcept
Keylet mptokenIssuance(MPTID const &issuanceID) noexcept
constexpr TenthBips32 kMaxCoverRate
The maximum coverage rate required of a loan broker in 1/10 bips.
json::Value manage(AccountID const &account, UInt256 const &loanID, std::uint32_t flags)
json::Value set(AccountID const &account, UInt256 const &loanBrokerID, Number principalRequested, std::uint32_t flags)
auto const kPaymentInterval
json::Value pay(AccountID const &account, AccountID const &to, AnyAmount amount)
Create a payment.
XrpT const XRP
Converts to XRP Issue or STAmount.
static Number number(STAmount const &a)
json::Value fset(Account const &account, std::uint32_t on, std::uint32_t off=0)
Add and/or remove flag.
STTx createTx(bool disabling, LedgerIndex seq, PublicKey const &txKey)
Create ttUNL_MODIFY Tx.
bool set(T &target, std::string const &name, Section const §ion)
Set a value from a configuration Section If the named value is not found or doesn't parse as a T,...
constexpr TenthBips32 percentageToTenthBips(std::uint32_t percentage)
int scale(Number const &number, Asset const &asset)
Get the scale of a Number for a given asset.
TenthBips< std::uint32_t > TenthBips32
TenthBips< std::uint16_t > TenthBips16
BaseUInt< 192 > MPTID
MPTID is a 192-bit value representing MPT Issuance ID, which is a concatenation of a 32-bit sequence ...
A pair of SHAMap key and LedgerEntryType.
TenthBips16 managementFeeRate
TenthBips32 coverRateLiquidation
std::optional< BrokerInfo > broker
jtx::Account vaultAccount
std::optional< jtx::PrettyAsset > asset