20#include <test/jtx/PathSet.h>
22#include <xrpld/ledger/ApplyViewImpl.h>
23#include <xrpld/ledger/PaymentSandbox.h>
24#include <xrpld/ledger/View.h>
26#include <xrpl/protocol/AmountConversions.h>
27#include <xrpl/protocol/Feature.h>
65 Env env(*
this, features);
71 env.
fund(
XRP(10000), snd, rcv, gw1, gw2);
73 auto const USD_gw1 = gw1[
"USD"];
74 auto const USD_gw2 = gw2[
"USD"];
76 env.
trust(USD_gw1(10), snd);
77 env.
trust(USD_gw2(10), snd);
78 env.
trust(USD_gw1(100), rcv);
79 env.
trust(USD_gw2(100), rcv);
81 env(
pay(gw1, snd, USD_gw1(2)));
82 env(
pay(gw2, snd, USD_gw2(4)));
89 env(
pay(snd, rcv,
any(USD_gw1(4))),
103 Env env(*
this, features);
108 env.
fund(
XRP(10000), alice, gw1, gw2);
112 auto const USD_gw1 = gw1[
"USD"];
113 auto const USD_gw2 = gw2[
"USD"];
115 env.
trust(USD_gw1(100), alice);
116 env.
trust(USD_gw2(100), alice);
118 env(
pay(gw1, alice, USD_gw1(50)));
119 env(
pay(gw2, alice, USD_gw2(50)));
121 STAmount const toCredit(USD_gw1(30));
122 STAmount const toDebit(USD_gw1(20));
127 auto const iss = USD_gw1.issue();
137 startingAmount + toCredit);
145 startingAmount + toCredit - toDebit);
152 auto const iss = USD_gw1.issue();
160 startingAmount + toCredit);
166 startingAmount + toCredit - toDebit);
174 auto const iss = USD_gw1.issue();
194 startingAmount - toDebit);
202 auto const iss = USD_gw1.issue();
218 auto const iss = USD_gw1.issue();
226 startingAmount - toDebit);
234 auto const iss = USD_gw1.issue();
250 auto const iss = USD_gw1.issue();
272 j) == startingAmount);
274 auto r =
accountSend(pv2, gw1, alice, toCredit, j);
284 j) == startingAmount);
294 startingAmount - toDebit);
309 Env env(*
this, features);
313 auto const USD = gw[
"USD"];
315 auto const issue = USD.issue();
332 BEAST_EXPECT(pv.
balanceHook(alice, gw, hugeAmt) == tinyAmt);
341 auto accountFundsXRP = [](
ReadView const& view,
349 return env.
current()->fees().accountReserve(count);
352 Env env(*
this, features);
376 accountFundsXRP(sb, alice, env.
journal) == beast::zero);
388 Env env(*
this, features);
391 auto const USD = gw[
"USD"];
400 tlIssue.
currency = USD.issue().currency;
408 BEAST_EXPECT(
balance.getIssuer() == USD.issue().account);
424 testAll(sa - featurePermissionedDEX);
A generic endpoint for log messages.
testcase_t testcase
Memberspace for declaring test cases.
virtual beast::Journal journal(std::string const &name)=0
Editable, discardable view that can build metadata for one tx.
A currency issued by an account.
A wrapper which makes credits unavailable to balances.
void creditHook(AccountID const &from, AccountID const &to, STAmount const &amount, STAmount const &preCreditBalance) override
STAmount balanceHook(AccountID const &account, AccountID const &issuer, STAmount const &amount) const override
static int const cMaxOffset
static int const cMinOffset
static std::uint64_t const cMinValue
static std::uint64_t const cMaxValue
void testTinyBalance(FeatureBitset features)
void testSelfFunding(FeatureBitset features)
void testSubtractCredits(FeatureBitset features)
void testBalanceHook(FeatureBitset features)
void testReserve(FeatureBitset features)
void run() override
Runs the suite.
Immutable cryptographic account descriptor.
AccountID id() const
Returns the Account ID.
A transaction testing environment.
void require(Args const &... args)
Check a set of requirements.
std::shared_ptr< OpenView const > current() const
Returns the current ledger.
bool close(NetClock::time_point closeTime, std::optional< std::chrono::milliseconds > consensusDelay=std::nullopt)
Close and advance the ledger.
void trust(STAmount const &amount, Account const &account)
Establish trust lines.
beast::Journal const journal
void fund(bool setDefaultRipple, STAmount const &amount, Account const &account)
Set Paths, SendMax on a JTx.
Json::Value pay(AccountID const &account, AccountID const &to, AnyAmount amount)
Create a payment.
any_t const any
Returns an amount representing "any issuer".
Json::Value offer(Account const &account, STAmount const &takerPays, STAmount const &takerGets, std::uint32_t flags)
Create an offer.
XRP_t const XRP
Converts to XRP Issue or STAmount.
FeatureBitset supported_amendments()
static XRPAmount reserve(jtx::Env &env, std::uint32_t count)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
AccountID const & xrpAccount()
Compute AccountID from public key.
TER redeemIOU(ApplyView &view, AccountID const &account, STAmount const &amount, Issue const &issue, beast::Journal j)
constexpr std::uint32_t tfPassive
constexpr std::uint32_t tfPartialPayment
Currency const & xrpCurrency()
XRP currency.
TER issueIOU(ApplyView &view, AccountID const &account, STAmount const &amount, Issue const &issue, beast::Journal j)
Issue const & noIssue()
Returns an asset specifier that represents no account and currency.
constexpr std::uint32_t tfNoRippleDirect
STAmount accountHolds(ReadView const &view, AccountID const &account, Currency const ¤cy, AccountID const &issuer, FreezeHandling zeroIfFrozen, beast::Journal j)
TER rippleCredit(ApplyView &view, AccountID const &uSenderID, AccountID const &uReceiverID, STAmount const &saAmount, bool bCheckIssuer, beast::Journal j)
Calls static rippleCreditIOU if saAmount represents Issue.
XRPAmount toAmount< XRPAmount >(STAmount const &amt)
TER accountSend(ApplyView &view, AccountID const &uSenderID, AccountID const &uReceiverID, STAmount const &saAmount, beast::Journal j, WaiveTransferFee waiveFee)
Calls static accountSendIOU if saAmount represents Issue.