3#include <xrpld/app/tx/applySteps.h> 
    5#include <xrpl/ledger/Dir.h> 
    6#include <xrpl/ledger/Sandbox.h> 
    7#include <xrpl/protocol/Feature.h> 
    8#include <xrpl/protocol/Indexes.h> 
    9#include <xrpl/protocol/STAmount.h> 
   10#include <xrpl/protocol/TxFlags.h> 
   11#include <xrpl/protocol/jss.h> 
   28        if (sle && sle->isFieldPresent(sfLockedAmount))
 
   29            return (*sle)[sfLockedAmount];
 
 
   37        if (sle && sle->isFieldPresent(sfLockedAmount))
 
   38            return (*sle)[sfLockedAmount];
 
 
   49        params[jss::account] = account.human();
 
   50        auto jrr = env.
rpc(
"json", 
"gateway_balances", 
to_string(params));
 
   51        auto const result = jrr[jss::result];
 
   52        auto const obligations =
 
   54        if (obligations.isNull())
 
   55            return {
STAmount(issue, 0), account.name()};
 
   57        return {amount, account.name()};
 
 
   67        params[jss::account] = account.human();
 
   68        auto jrr = env.
rpc(
"json", 
"gateway_balances", 
to_string(params));
 
   69        auto const result = jrr[jss::result];
 
   72            return {
STAmount(issue, 0), account.name()};
 
   74        return {amount, account.name()};
 
 
   85        for (
bool const withTokenEscrow : {
false, 
true})
 
   88                withTokenEscrow ? features : features - featureTokenEscrow;
 
   89            Env env{*
this, amend};
 
   90            auto const baseFee = env.
current()->fees().base;
 
   91            auto const alice = 
Account(
"alice");
 
   92            auto const bob = 
Account(
"bob");
 
   93            auto const gw = 
Account{
"gateway"};
 
   94            auto const USD = gw[
"USD"];
 
   95            env.fund(
XRP(5000), alice, bob, gw);
 
   98            env.trust(USD(10'000), alice, bob);
 
  100            env(
pay(gw, alice, USD(5000)));
 
  101            env(
pay(gw, bob, USD(5000)));
 
  104            auto const createResult =
 
  106            auto const finishResult =
 
  109            auto const seq1 = env.seq(alice);
 
  123            auto const seq2 = env.seq(alice);
 
  135        for (
bool const withTokenEscrow : {
false, 
true})
 
  138                withTokenEscrow ? features : features - featureTokenEscrow;
 
  139            Env env{*
this, amend};
 
  140            auto const baseFee = env.
current()->fees().base;
 
  141            auto const alice = 
Account(
"alice");
 
  142            auto const bob = 
Account(
"bob");
 
  143            auto const gw = 
Account{
"gateway"};
 
  144            auto const USD = gw[
"USD"];
 
  145            env.fund(
XRP(5000), alice, bob, gw);
 
  148            env.trust(USD(10'000), alice, bob);
 
  150            env(
pay(gw, alice, USD(5000)));
 
  151            env(
pay(gw, bob, USD(5000)));
 
  154            auto const seq1 = env.seq(alice);
 
 
  175        Env env{*
this, features};
 
  176        auto const baseFee = env.current()->fees().base;
 
  177        auto const alice = 
Account(
"alice");
 
  178        auto const bob = 
Account(
"bob");
 
  179        auto const gw = 
Account{
"gateway"};
 
  180        auto const USD = gw[
"USD"];
 
  181        env.fund(
XRP(5000), alice, bob, gw);
 
  184        env.trust(USD(10'000), alice, bob);
 
  186        env(
pay(gw, alice, USD(5000)));
 
  187        env(
pay(gw, bob, USD(5000)));
 
  191        auto const seq1 = env.seq(alice);
 
  199        auto const seq2 = env.seq(alice);
 
 
  237        using namespace test::jtx;
 
  242            Env env{*
this, features};
 
  243            auto const alice = 
Account(
"alice");
 
  244            auto const bob = 
Account(
"bob");
 
  245            auto const gw = 
Account{
"gateway"};
 
  246            auto const USD = gw[
"USD"];
 
  247            env.fund(
XRP(5000), alice, bob, gw);
 
  258            Env env{*
this, features};
 
  259            auto const baseFee = env.current()->fees().base;
 
  260            auto const alice = 
Account(
"alice");
 
  261            auto const bob = 
Account(
"bob");
 
  262            auto const gw = 
Account{
"gateway"};
 
  263            auto const USD = gw[
"USD"];
 
  264            env.fund(
XRP(5000), alice, bob, gw);
 
  276            Env env{*
this, features};
 
  277            auto const baseFee = env.current()->fees().base;
 
  278            auto const alice = 
Account(
"alice");
 
  279            auto const bob = 
Account(
"bob");
 
  280            auto const gw = 
Account{
"gateway"};
 
  282            env.fund(
XRP(5000), alice, bob, gw);
 
 
  297        using namespace test::jtx;
 
  302            Env env{*
this, features};
 
  303            auto const baseFee = env.current()->fees().base;
 
  304            auto const alice = 
Account(
"alice");
 
  305            auto const bob = 
Account(
"bob");
 
  306            auto const gw = 
Account{
"gateway"};
 
  307            auto const USD = gw[
"USD"];
 
  308            env.fund(
XRP(5000), alice, bob, gw);
 
  320            Env env{*
this, features};
 
  321            auto const baseFee = env.current()->fees().base;
 
  322            auto const alice = 
Account(
"alice");
 
  323            auto const bob = 
Account(
"bob");
 
  324            auto const gw = 
Account{
"gateway"};
 
  325            auto const USD = gw[
"USD"];
 
  326            env.fund(
XRP(5000), alice, bob);
 
  340            Env env{*
this, features};
 
  341            auto const baseFee = env.current()->fees().base;
 
  342            auto const alice = 
Account(
"alice");
 
  343            auto const bob = 
Account(
"bob");
 
  344            auto const gw = 
Account{
"gateway"};
 
  345            auto const USD = gw[
"USD"];
 
  346            env.fund(
XRP(5000), alice, bob, gw);
 
  348            env.trust(USD(10'000), alice, bob);
 
  350            env(
pay(gw, alice, USD(5000)));
 
  351            env(
pay(gw, bob, USD(5000)));
 
  364            Env env{*
this, features};
 
  365            auto const baseFee = env.current()->fees().base;
 
  366            auto const alice = 
Account(
"alice");
 
  367            auto const bob = 
Account(
"bob");
 
  368            auto const gw = 
Account{
"gateway"};
 
  369            auto const USD = gw[
"USD"];
 
  370            env.fund(
XRP(5000), alice, bob, gw);
 
  385            Env env{*
this, features};
 
  386            auto const baseFee = env.current()->fees().base;
 
  387            auto const alice = 
Account(
"alice");
 
  388            auto const bob = 
Account(
"bob");
 
  389            auto const gw = 
Account{
"gateway"};
 
  390            auto const USD = gw[
"USD"];
 
  391            env.fund(
XRP(5000), alice, bob, gw);
 
  395            env.trust(USD(10'000), alice, bob);
 
  408            Env env{*
this, features};
 
  409            auto const baseFee = env.current()->fees().base;
 
  410            auto const alice = 
Account(
"alice");
 
  411            auto const bob = 
Account(
"bob");
 
  412            auto const gw = 
Account{
"gateway"};
 
  413            auto const USD = gw[
"USD"];
 
  414            auto const aliceUSD = alice[
"USD"];
 
  415            env.fund(
XRP(5000), alice, bob, gw);
 
  420            env.trust(USD(10'000), alice, bob);
 
  434            Env env{*
this, features};
 
  435            auto const alice = 
Account(
"alice");
 
  436            auto const bob = 
Account(
"bob");
 
  437            auto const gw = 
Account{
"gateway"};
 
  438            auto const USD = gw[
"USD"];
 
  439            auto const baseFee = env.current()->fees().base;
 
  440            env.fund(
XRP(10'000), alice, bob, gw);
 
  443            env(
trust(alice, USD(100'000)));
 
  444            env(
trust(bob, USD(100'000)));
 
  446            env(
pay(gw, alice, USD(10'000)));
 
  447            env(
pay(gw, bob, USD(10'000)));
 
  465            Env env{*
this, features};
 
  466            auto const alice = 
Account(
"alice");
 
  467            auto const bob = 
Account(
"bob");
 
  468            auto const gw = 
Account{
"gateway"};
 
  469            auto const USD = gw[
"USD"];
 
  470            auto const baseFee = env.current()->fees().base;
 
  471            env.fund(
XRP(10'000), alice, bob, gw);
 
  474            env(
trust(alice, USD(100'000)));
 
  475            env(
trust(bob, USD(100'000)));
 
  477            env(
pay(gw, alice, USD(10'000)));
 
  478            env(
pay(gw, bob, USD(10'000)));
 
  496            Env env{*
this, features};
 
  497            auto const alice = 
Account(
"alice");
 
  498            auto const bob = 
Account(
"bob");
 
  499            auto const gw = 
Account{
"gateway"};
 
  500            auto const USD = gw[
"USD"];
 
  501            auto const baseFee = env.current()->fees().base;
 
  502            env.fund(
XRP(10'000), alice, bob, gw);
 
  505            env(
trust(alice, USD(100'000)));
 
  506            env(
trust(bob, USD(100'000)));
 
  520            Env env{*
this, features};
 
  521            auto const alice = 
Account(
"alice");
 
  522            auto const bob = 
Account(
"bob");
 
  523            auto const gw = 
Account{
"gateway"};
 
  524            auto const USD = gw[
"USD"];
 
  525            auto const baseFee = env.current()->fees().base;
 
  526            env.fund(
XRP(10'000), alice, bob, gw);
 
  529            env(
trust(alice, USD(100'000)));
 
  530            env(
trust(bob, USD(100'000)));
 
  532            env(
pay(gw, alice, USD(10'000)));
 
  533            env(
pay(gw, bob, USD(10'000)));
 
  546            Env env{*
this, features};
 
  547            auto const alice = 
Account(
"alice");
 
  548            auto const bob = 
Account(
"bob");
 
  549            auto const gw = 
Account{
"gateway"};
 
  550            auto const USD = gw[
"USD"];
 
  551            auto const baseFee = env.current()->fees().base;
 
  552            env.fund(
XRP(10'000), alice, bob, gw);
 
  555            env.trust(USD(100000000000000000), alice);
 
  556            env.trust(USD(100000000000000000), bob);
 
  558            env(
pay(gw, alice, USD(10000000000000000)));
 
  559            env(
pay(gw, bob, USD(1)));
 
 
  576        using namespace test::jtx;
 
  581            Env env{*
this, features};
 
  582            auto const baseFee = env.current()->fees().base;
 
  583            auto const alice = 
Account(
"alice");
 
  584            auto const bob = 
Account(
"bob");
 
  585            auto const gw = 
Account{
"gateway"};
 
  586            auto const USD = gw[
"USD"];
 
  587            auto const aliceUSD = alice[
"USD"];
 
  588            auto const bobUSD = bob[
"USD"];
 
  589            env.fund(
XRP(5000), alice, bob, gw);
 
  595            env.trust(USD(10'000), alice, bob);
 
  597            env(
pay(gw, alice, USD(10'000)));
 
  598            env(
pay(gw, bob, USD(10'000)));
 
  601            auto const seq1 = env.seq(alice);
 
  609            env(
pay(bob, gw, USD(10'000)));
 
  611            env(
trust(bob, USD(0)));
 
  614            env.trust(USD(10'000), bob);
 
  628            Env env{*
this, features};
 
  629            auto const baseFee = env.current()->fees().base;
 
  630            auto const alice = 
Account(
"alice");
 
  631            auto const bob = 
Account(
"bob");
 
  632            auto const gw = 
Account{
"gateway"};
 
  633            auto const USD = gw[
"USD"];
 
  634            env.fund(
XRP(5000), alice, bob, gw);
 
  637            env.trust(USD(10'000), alice, bob);
 
  639            env(
pay(gw, alice, USD(10'000)));
 
  640            env(
pay(gw, bob, USD(10'000)));
 
  643            auto const seq1 = env.seq(alice);
 
 
  668        using namespace test::jtx;
 
  673            Env env{*
this, features};
 
  674            auto const baseFee = env.current()->fees().base;
 
  675            auto const acctReserve = env.current()->fees().reserve;
 
  676            auto const incReserve = env.current()->fees().increment;
 
  677            auto const alice = 
Account(
"alice");
 
  678            auto const bob = 
Account(
"bob");
 
  679            auto const gw = 
Account{
"gateway"};
 
  680            auto const USD = gw[
"USD"];
 
  681            env.fund(
XRP(5000), alice, gw);
 
  682            env.fund(acctReserve + (incReserve - 1), bob);
 
  686            env.trust(USD(10'000), alice);
 
  688            env(
pay(gw, alice, USD(10'000)));
 
  691            auto const seq1 = env.seq(alice);
 
  710            Env env{*
this, features};
 
  711            auto const baseFee = env.current()->fees().base;
 
  712            auto const alice = 
Account(
"alice");
 
  713            auto const bob = 
Account(
"bob");
 
  714            auto const gw = 
Account{
"gateway"};
 
  715            auto const USD = gw[
"USD"];
 
  716            env.fund(
XRP(5000), alice, bob, gw);
 
  720            env.trust(USD(10'000), alice);
 
  722            env(
pay(gw, alice, USD(10'000)));
 
  725            auto const seq1 = env.seq(alice);
 
  744            Env env{*
this, features};
 
  745            auto const baseFee = env.current()->fees().base;
 
  746            auto const alice = 
Account(
"alice");
 
  747            auto const bob = 
Account(
"bob");
 
  748            auto const gw = 
Account{
"gateway"};
 
  749            auto const USD = gw[
"USD"];
 
  750            env.fund(
XRP(5000), alice, bob, gw);
 
  754            env.trust(USD(1000), alice, bob);
 
  756            env(
pay(gw, alice, USD(1000)));
 
  759            auto const seq1 = env.seq(alice);
 
  767            env.trust(USD(1), bob);
 
  781            Env env{*
this, features};
 
  782            auto const baseFee = env.current()->fees().base;
 
  783            auto const alice = 
Account(
"alice");
 
  784            auto const bob = 
Account(
"bob");
 
  785            auto const gw = 
Account{
"gateway"};
 
  786            auto const USD = gw[
"USD"];
 
  787            env.fund(
XRP(5000), alice, bob, gw);
 
  791            env.trust(USD(1000), alice, bob);
 
  793            env(
pay(gw, alice, USD(1000)));
 
  796            auto const seq1 = env.seq(alice);
 
  804            env.trust(USD(1), bob);
 
  808            auto const bobPreLimit = env.limit(bob, USD);
 
  818            BEAST_EXPECT(env.limit(bob, USD) == bobPreLimit);
 
 
  826        using namespace test::jtx;
 
  831            Env env{*
this, features};
 
  832            auto const baseFee = env.current()->fees().base;
 
  833            auto const alice = 
Account(
"alice");
 
  834            auto const bob = 
Account(
"bob");
 
  835            auto const gw = 
Account{
"gateway"};
 
  836            auto const USD = gw[
"USD"];
 
  837            auto const aliceUSD = alice[
"USD"];
 
  838            auto const bobUSD = bob[
"USD"];
 
  839            env.fund(
XRP(5000), alice, bob, gw);
 
  845            env.trust(USD(10'000), alice, bob);
 
  847            env(
pay(gw, alice, USD(10'000)));
 
  848            env(
pay(gw, bob, USD(10'000)));
 
  851            auto const seq1 = env.seq(alice);
 
  859            env(
pay(alice, gw, USD(9'999)));
 
  861            env(
trust(alice, USD(0)));
 
  864            env.trust(USD(10'000), alice);
 
 
  883        Env env{*
this, features};
 
  884        auto const baseFee = env.current()->fees().base;
 
  885        auto const alice = 
Account(
"alice");
 
  886        auto const bob = 
Account(
"bob");
 
  887        auto const gw = 
Account{
"gateway"};
 
  888        auto const USD = gw[
"USD"];
 
  889        env.fund(
XRP(5000), alice, bob, gw);
 
  892        env.trust(USD(10'000), alice, bob);
 
  894        env(
pay(gw, alice, USD(5'000)));
 
  895        env(
pay(gw, bob, USD(5'000)));
 
  898        auto const outstandingUSD = USD(10'000);
 
  901        auto const seq1 = env.seq(alice);
 
  903            auto const preAliceUSD = env.balance(alice, USD);
 
  904            auto const preBobUSD = env.balance(bob, USD);
 
  912            BEAST_EXPECT(env.balance(alice, USD) == preAliceUSD - USD(1'000));
 
  913            BEAST_EXPECT(env.balance(bob, USD) == preBobUSD);
 
  919            auto const preAliceUSD = env.balance(alice, USD);
 
  920            auto const preBobUSD = env.balance(bob, USD);
 
  928            BEAST_EXPECT(env.balance(alice, USD) == preAliceUSD);
 
  929            BEAST_EXPECT(env.balance(bob, USD) == preBobUSD + USD(1'000));
 
  935        auto const seq2 = env.seq(alice);
 
  937            auto const preAliceUSD = env.balance(alice, USD);
 
  938            auto const preBobUSD = env.balance(bob, USD);
 
  947            BEAST_EXPECT(env.balance(alice, USD) == preAliceUSD - USD(1'000));
 
  948            BEAST_EXPECT(env.balance(bob, USD) == preBobUSD);
 
  954            auto const preAliceUSD = env.balance(alice, USD);
 
  955            auto const preBobUSD = env.balance(bob, USD);
 
  959            BEAST_EXPECT(env.balance(alice, USD) == preAliceUSD + USD(1'000));
 
  960            BEAST_EXPECT(env.balance(bob, USD) == preBobUSD);
 
 
  972        auto const alice = 
Account(
"alice");
 
  973        auto const bob = 
Account(
"bob");
 
  974        auto const carol = 
Account(
"carol");
 
  975        auto const gw = 
Account{
"gateway"};
 
  976        auto const USD = gw[
"USD"];
 
  980            Env env{*
this, features};
 
  981            env.fund(
XRP(5000), alice, bob, carol, gw);
 
  984            env.trust(USD(10'000), alice, bob, carol);
 
  986            env(
pay(gw, alice, USD(5000)));
 
  987            env(
pay(gw, bob, USD(5000)));
 
  988            env(
pay(gw, carol, USD(5000)));
 
  990            auto const aseq = env.seq(alice);
 
  991            auto const bseq = env.seq(bob);
 
  997                (*env.meta())[sfTransactionResult] ==
 
 1020                (*env.meta())[sfTransactionResult] ==
 
 1045                    (*env.meta())[sfTransactionResult] ==
 
 1069                    (*env.meta())[sfTransactionResult] ==
 
 1086            Env env{*
this, features};
 
 1087            env.fund(
XRP(5000), alice, bob, carol, gw);
 
 1090            env.trust(USD(10'000), alice, bob, carol);
 
 1092            env(
pay(gw, alice, USD(5000)));
 
 1093            env(
pay(gw, bob, USD(5000)));
 
 1094            env(
pay(gw, carol, USD(5000)));
 
 1096            auto const aseq = env.seq(alice);
 
 1097            auto const bseq = env.seq(bob);
 
 1102                (*env.meta())[sfTransactionResult] ==
 
 1109                (*env.meta())[sfTransactionResult] ==
 
 1205            testcase(
"IOU Metadata to issuer");
 
 1207            Env env{*
this, features};
 
 1208            env.fund(
XRP(5000), alice, carol, gw);
 
 1211            env.trust(USD(10'000), alice, carol);
 
 1213            env(
pay(gw, alice, USD(5000)));
 
 1214            env(
pay(gw, carol, USD(5000)));
 
 1216            auto const aseq = env.seq(alice);
 
 1222                (*env.meta())[sfTransactionResult] ==
 
 
 1274        using namespace test::jtx;
 
 1277        struct TestAccountData
 
 1305        for (
auto const& t : tests)
 
 1307            Env env{*
this, features};
 
 1308            auto const baseFee = env.current()->fees().base;
 
 1309            auto const USD = t.gw[
"USD"];
 
 1310            env.fund(
XRP(5000), t.src, t.dst, t.gw);
 
 1315                env.trust(USD(100'000), t.src, t.dst);
 
 1317                env.trust(USD(100'000), t.src);
 
 1320            env(
pay(t.gw, t.src, USD(10'000)));
 
 1322                env(
pay(t.gw, t.dst, USD(10'000)));
 
 1326            auto const seq1 = env.seq(t.src);
 
 1327            auto const delta = USD(1'000);
 
 1331                fee(baseFee * 150));
 
 1335            auto const preSrc = env.balance(t.src, USD);
 
 1336            auto const preDst = env.balance(t.dst, USD);
 
 1341                fee(baseFee * 150));
 
 1344            BEAST_EXPECT(env.balance(t.src, USD) == preSrc);
 
 1345            BEAST_EXPECT(env.balance(t.dst, USD) == preDst + delta);
 
 
 1353        using namespace test::jtx;
 
 1356        struct TestAccountData
 
 1365            auto const gw = 
Account{
"gateway"};
 
 1366            auto const alice = 
Account{
"alice"};
 
 1367            Env env{*
this, features};
 
 1368            auto const baseFee = env.current()->fees().base;
 
 1369            auto const USD = gw[
"USD"];
 
 1370            env.fund(
XRP(5000), alice, gw);
 
 1373            env.trust(USD(100'000), alice);
 
 1376            env(
pay(gw, alice, USD(10'000)));
 
 1400        for (
auto const& t : gwDstTests)
 
 1402            Env env{*
this, features};
 
 1403            auto const baseFee = env.current()->fees().base;
 
 1404            auto const USD = t.dst[
"USD"];
 
 1405            env.fund(
XRP(5000), t.dst, t.src);
 
 1409            env.trust(USD(100'000), t.src);
 
 1412            env(
pay(t.dst, t.src, USD(10'000)));
 
 1416            auto const seq1 = env.seq(t.src);
 
 1417            auto const preSrc = env.balance(t.src, USD);
 
 1421                fee(baseFee * 150));
 
 1428                fee(baseFee * 150));
 
 1430            auto const preAmount = 10'000;
 
 1431            BEAST_EXPECT(preSrc == USD(preAmount));
 
 1432            auto const postAmount = 9000;
 
 1433            BEAST_EXPECT(env.balance(t.src, USD) == USD(postAmount));
 
 1434            BEAST_EXPECT(env.balance(t.dst, USD) == USD(0));
 
 1439            auto const gw = 
Account{
"gateway"};
 
 1440            auto const USD = gw[
"USD"];
 
 1441            Env env{*
this, features};
 
 1442            auto const baseFee = env.current()->fees().base;
 
 1443            env.fund(
XRP(5000), gw);
 
 
 1461        using namespace test::jtx;
 
 1464        auto const alice = 
Account(
"alice");
 
 1465        auto const bob = 
Account(
"bob");
 
 1466        auto const carol = 
Account(
"carol");
 
 1467        auto const gw = 
Account{
"gateway"};
 
 1468        auto const USD = gw[
"USD"];
 
 1472            Env env{*
this, features};
 
 1473            auto const baseFee = env.current()->fees().base;
 
 1474            env.fund(
XRP(10'000), alice, bob, gw);
 
 1476            env(
rate(gw, 1.25));
 
 1478            env.trust(USD(100'000), alice);
 
 1479            env.trust(USD(100'000), bob);
 
 1481            env(
pay(gw, alice, USD(10'000)));
 
 1482            env(
pay(gw, bob, USD(10'000)));
 
 1486            auto const preAlice = env.balance(alice, USD);
 
 1487            auto const seq1 = env.seq(alice);
 
 1488            auto const delta = USD(125);
 
 1492                fee(baseFee * 150));
 
 1502                fee(baseFee * 150));
 
 1505            BEAST_EXPECT(env.balance(alice, USD) == preAlice - delta);
 
 1506            BEAST_EXPECT(env.balance(bob, USD) == USD(10'100));
 
 1510            Env env{*
this, features};
 
 1511            auto const baseFee = env.current()->fees().base;
 
 1512            env.fund(
XRP(10'000), alice, bob, gw);
 
 1514            env(
rate(gw, 1.25));
 
 1516            env.trust(USD(100'000), alice);
 
 1517            env.trust(USD(100'000), bob);
 
 1519            env(
pay(gw, alice, USD(10'000)));
 
 1520            env(
pay(gw, bob, USD(10'000)));
 
 1524            auto const preAlice = env.balance(alice, USD);
 
 1525            auto const seq1 = env.seq(alice);
 
 1526            auto const delta = USD(125);
 
 1530                fee(baseFee * 150));
 
 1537            env(
rate(gw, 1.26));
 
 1544                fee(baseFee * 150));
 
 1547            BEAST_EXPECT(env.balance(alice, USD) == preAlice - delta);
 
 1548            BEAST_EXPECT(env.balance(bob, USD) == USD(10'100));
 
 1553            Env env{*
this, features};
 
 1554            auto const baseFee = env.current()->fees().base;
 
 1555            env.fund(
XRP(10'000), alice, bob, gw);
 
 1557            env(
rate(gw, 1.25));
 
 1559            env.trust(USD(100'000), alice);
 
 1560            env.trust(USD(100'000), bob);
 
 1562            env(
pay(gw, alice, USD(10'000)));
 
 1563            env(
pay(gw, bob, USD(10'000)));
 
 1567            auto const preAlice = env.balance(alice, USD);
 
 1568            auto const seq1 = env.seq(alice);
 
 1569            auto const delta = USD(125);
 
 1573                fee(baseFee * 150));
 
 1580            env(
rate(gw, 1.00));
 
 1587                fee(baseFee * 150));
 
 1590            BEAST_EXPECT(env.balance(alice, USD) == preAlice - delta);
 
 1591            BEAST_EXPECT(env.balance(bob, USD) == USD(10125));
 
 1596            Env env{*
this, features};
 
 1597            auto const baseFee = env.current()->fees().base;
 
 1598            env.fund(
XRP(10'000), alice, bob, gw);
 
 1600            env(
rate(gw, 1.25));
 
 1602            env.trust(USD(100'000), alice);
 
 1603            env.trust(USD(100'000), bob);
 
 1605            env(
pay(gw, alice, USD(10'000)));
 
 1606            env(
pay(gw, bob, USD(10'000)));
 
 1610            auto const preAlice = env.balance(alice, USD);
 
 1611            auto const seq1 = env.seq(alice);
 
 1612            auto const delta = USD(125);
 
 1623            env(
rate(gw, 1.00));
 
 1630            BEAST_EXPECT(env.balance(alice, USD) == preAlice);
 
 1631            BEAST_EXPECT(env.balance(bob, USD) == USD(10000));
 
 
 1639        using namespace test::jtx;
 
 1642        auto const alice = 
Account(
"alice");
 
 1643        auto const bob = 
Account(
"bob");
 
 1644        auto const gw = 
Account{
"gateway"};
 
 1645        auto const USD = gw[
"USD"];
 
 1649            Env env{*
this, features};
 
 1650            auto const baseFee = env.current()->fees().base;
 
 1651            env.fund(
XRP(1'000), alice, bob, gw);
 
 1654            env.trust(USD(10'000), alice, bob);
 
 1656            env(
pay(gw, alice, USD(1'000)));
 
 1657            env(
pay(gw, bob, USD(1'000)));
 
 1661            auto seq1 = env.seq(alice);
 
 1662            auto const delta = USD(125);
 
 1666                fee(baseFee * 150));
 
 1670            auto const preBobLimit = env.limit(bob, USD);
 
 1674                fee(baseFee * 150));
 
 1676            auto const postBobLimit = env.limit(bob, USD);
 
 1678            BEAST_EXPECT(postBobLimit == preBobLimit);
 
 
 1686        using namespace test::jtx;
 
 1689        auto const alice = 
Account(
"alice");
 
 1690        auto const bob = 
Account(
"bob");
 
 1691        auto const carol = 
Account(
"carol");
 
 1692        auto const gw = 
Account{
"gateway"};
 
 1693        auto const USD = gw[
"USD"];
 
 1695        auto const aliceUSD = alice[
"USD"];
 
 1696        auto const bobUSD = bob[
"USD"];
 
 1698        Env env{*
this, features};
 
 1699        auto const baseFee = env.current()->fees().base;
 
 1700        env.fund(
XRP(1'000), alice, bob, gw);
 
 1705        env(
trust(alice, USD(10'000)));
 
 1706        env(
trust(bob, USD(10'000)));
 
 1708        env(
pay(gw, alice, USD(1'000)));
 
 1712        auto seq1 = env.seq(alice);
 
 1713        auto const delta = USD(125);
 
 1723        env(
trust(bob, USD(10'000)));
 
 1725        env(
pay(gw, bob, USD(1'000)));
 
 1729        seq1 = env.seq(alice);
 
 1733            fee(baseFee * 150));
 
 1740            fee(baseFee * 150));
 
 
 1748        using namespace test::jtx;
 
 1751        auto const alice = 
Account(
"alice");
 
 1752        auto const bob = 
Account(
"bob");
 
 1753        auto const carol = 
Account(
"carol");
 
 1754        auto const gw = 
Account{
"gateway"};
 
 1755        auto const USD = gw[
"USD"];
 
 1759            Env env{*
this, features};
 
 1760            auto const baseFee = env.current()->fees().base;
 
 1761            env.fund(
XRP(10'000), alice, bob, gw);
 
 1764            env.trust(USD(100'000), alice);
 
 1765            env.trust(USD(100'000), bob);
 
 1767            env(
pay(gw, alice, USD(10'000)));
 
 1768            env(
pay(gw, bob, USD(10'000)));
 
 1774            auto seq1 = env.seq(alice);
 
 1775            auto const delta = USD(125);
 
 1790            seq1 = env.seq(alice);
 
 1794                fee(baseFee * 150));
 
 1805                fee(baseFee * 150));
 
 1813            seq1 = env.seq(alice);
 
 1817                fee(baseFee * 150));
 
 1832            Env env{*
this, features};
 
 1833            auto const baseFee = env.current()->fees().base;
 
 1834            env.fund(
XRP(10'000), alice, bob, gw);
 
 1837            env(
trust(alice, USD(100'000)));
 
 1838            env(
trust(bob, USD(100'000)));
 
 1840            env(
pay(gw, alice, USD(10'000)));
 
 1841            env(
pay(gw, bob, USD(10'000)));
 
 1849            auto seq1 = env.seq(alice);
 
 1850            auto const delta = USD(125);
 
 1865            seq1 = env.seq(alice);
 
 1869                fee(baseFee * 150));
 
 1880                fee(baseFee * 150));
 
 1889            seq1 = env.seq(alice);
 
 1893                fee(baseFee * 150));
 
 1908            Env env{*
this, features};
 
 1909            auto const baseFee = env.current()->fees().base;
 
 1910            env.fund(
XRP(10'000), alice, bob, gw);
 
 1913            env(
trust(alice, USD(100'000)));
 
 1914            env(
trust(bob, USD(100'000)));
 
 1916            env(
pay(gw, alice, USD(10'000)));
 
 1917            env(
pay(gw, bob, USD(10'000)));
 
 1925            auto seq1 = env.seq(alice);
 
 1926            auto const delta = USD(125);
 
 1942            seq1 = env.seq(alice);
 
 1946                fee(baseFee * 150));
 
 1968            seq1 = env.seq(alice);
 
 1972                fee(baseFee * 150));
 
 
 1990        using namespace test::jtx;
 
 1993        auto const alice = 
Account(
"alice");
 
 1994        auto const bob = 
Account(
"bob");
 
 1995        auto const carol = 
Account(
"carol");
 
 1996        auto const gw = 
Account{
"gateway"};
 
 1997        auto const USD = gw[
"USD"];
 
 2001            Env env{*
this, features};
 
 2002            auto const baseFee = env.current()->fees().base;
 
 2003            env.fund(
XRP(10'000), alice, bob, gw);
 
 2006            env.trust(USD(100'000), alice);
 
 2007            env.trust(USD(100'000), bob);
 
 2009            env(
pay(gw, alice, USD(10'000)));
 
 2010            env(
pay(gw, bob, USD(10'000)));
 
 2014            auto const delta = USD(1'000);
 
 2018                fee(baseFee * 150));
 
 2025            Env env{*
this, features};
 
 2026            auto const baseFee = env.current()->fees().base;
 
 2027            env.fund(
XRP(10'000), alice, bob, gw);
 
 2030            env.trust(USD(100'000), alice);
 
 2031            env.trust(USD(100'000), bob);
 
 2033            env(
pay(gw, alice, USD(10'000)));
 
 2034            env(
pay(gw, bob, USD(10'000)));
 
 2037            auto const delta = USD(1'000);
 
 2041                fee(baseFee * 150));
 
 
 2057        using namespace test::jtx;
 
 2060        auto const alice = 
Account(
"alice");
 
 2061        auto const bob = 
Account(
"bob");
 
 2062        auto const gw = 
Account{
"gateway"};
 
 2063        auto const USD = gw[
"USD"];
 
 2067            Env env(*
this, features);
 
 2068            auto const baseFee = env.
current()->fees().base;
 
 2069            env.
fund(
XRP(10'000), alice, bob, gw);
 
 2072            env.
trust(USD(100000000000000000), alice);
 
 2073            env.
trust(USD(100000000000000000), bob);
 
 2075            env(
pay(gw, alice, USD(10000000000000000)));
 
 2076            env(
pay(gw, bob, USD(1)));
 
 2087            auto const seq1 = env.
seq(alice);
 
 2092                fee(baseFee * 150));
 
 2099                fee(baseFee * 150));
 
 
 2109        using namespace jtx;
 
 2112        for (
bool const withTokenEscrow : {
false, 
true})
 
 2115                withTokenEscrow ? features : features - featureTokenEscrow;
 
 2116            Env env{*
this, amend};
 
 2117            auto const baseFee = env.
current()->fees().base;
 
 2118            auto const alice = 
Account(
"alice");
 
 2119            auto const bob = 
Account(
"bob");
 
 2120            auto const gw = 
Account(
"gw");
 
 2121            env.fund(
XRP(5000), bob);
 
 2123            MPTTester mptGw(env, gw, {.holders = {alice}});
 
 2128            mptGw.authorize({.account = alice});
 
 2129            auto const MPT = mptGw[
"MPT"];
 
 2130            env(
pay(gw, alice, 
MPT(10'000)));
 
 2133            auto const createResult =
 
 2135            auto const finishResult =
 
 2138            auto const seq1 = env.seq(alice);
 
 2151            auto const seq2 = env.seq(alice);
 
 
 2168        using namespace test::jtx;
 
 2171        for (
bool const withMPT : {
true, 
false})
 
 2174                withMPT ? features : features - featureMPTokensV1;
 
 2175            Env env{*
this, amend};
 
 2176            auto const baseFee = env.
current()->fees().base;
 
 2177            auto const alice = 
Account(
"alice");
 
 2178            auto const bob = 
Account(
"bob");
 
 2179            auto const gw = 
Account(
"gw");
 
 2180            env.fund(
XRP(1'000), alice, bob, gw);
 
 2184            jv[jss::Amount][jss::mpt_issuance_id] =
 
 2185                "00000004A407AF5856CCF3C42619DAA925813FC955C72983";
 
 2186            jv[jss::Amount][jss::value] = 
"-1";
 
 2199            Env env{*
this, features};
 
 2200            auto const baseFee = env.current()->fees().base;
 
 2201            auto const alice = 
Account(
"alice");
 
 2202            auto const bob = 
Account(
"bob");
 
 2203            auto const gw = 
Account(
"gw");
 
 2205            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 2210            mptGw.authorize({.account = alice});
 
 2211            mptGw.authorize({.account = bob});
 
 2212            auto const MPT = mptGw[
"MPT"];
 
 2213            env(
pay(gw, alice, 
MPT(10'000)));
 
 2214            env(
pay(gw, bob, 
MPT(10'000)));
 
 
 2230        using namespace test::jtx;
 
 2235            Env env{*
this, features};
 
 2236            auto const baseFee = env.current()->fees().base;
 
 2237            auto const alice = 
Account(
"alice");
 
 2238            auto const gw = 
Account(
"gw");
 
 2240            MPTTester mptGw(env, gw, {.holders = {alice}});
 
 2245            mptGw.authorize({.account = alice});
 
 2246            auto const MPT = mptGw[
"MPT"];
 
 2247            env(
pay(gw, alice, 
MPT(10'000)));
 
 2260            Env env{*
this, features};
 
 2261            auto const baseFee = env.current()->fees().base;
 
 2262            auto const alice = 
Account(
"alice");
 
 2263            auto const bob = 
Account(
"bob");
 
 2264            auto const gw = 
Account(
"gw");
 
 2265            env.fund(
XRP(10'000), alice, bob, gw);
 
 2269                alice.name(), 
makeMptID(env.seq(alice), alice));
 
 2271            jv[jss::Amount][jss::mpt_issuance_id] =
 
 2272                "00000004A407AF5856CCF3C42619DAA925813FC955C72983";
 
 2283            Env env{*
this, features};
 
 2284            auto const baseFee = env.current()->fees().base;
 
 2285            auto const alice = 
Account(
"alice");
 
 2286            auto const bob = 
Account(
"bob");
 
 2287            auto const gw = 
Account(
"gw");
 
 2289            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 2292            mptGw.authorize({.account = alice});
 
 2293            mptGw.authorize({.account = bob});
 
 2294            auto const MPT = mptGw[
"MPT"];
 
 2295            env(
pay(gw, alice, 
MPT(10'000)));
 
 2296            env(
pay(gw, bob, 
MPT(10'000)));
 
 2309            Env env{*
this, features};
 
 2310            auto const baseFee = env.current()->fees().base;
 
 2311            auto const alice = 
Account(
"alice");
 
 2312            auto const bob = 
Account(
"bob");
 
 2313            auto const gw = 
Account(
"gw");
 
 2315            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 2320            auto const MPT = mptGw[
"MPT"];
 
 2332            Env env{*
this, features};
 
 2333            auto const baseFee = env.current()->fees().base;
 
 2334            auto const alice = 
Account(
"alice");
 
 2335            auto const bob = 
Account(
"bob");
 
 2336            auto const gw = 
Account(
"gw");
 
 2338            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 2344            mptGw.authorize({.account = alice});
 
 2345            mptGw.authorize({.account = gw, .holder = alice});
 
 2346            auto const MPT = mptGw[
"MPT"];
 
 2347            env(
pay(gw, alice, 
MPT(10'000)));
 
 2364            Env env{*
this, features};
 
 2365            auto const baseFee = env.current()->fees().base;
 
 2366            auto const alice = 
Account(
"alice");
 
 2367            auto const bob = 
Account(
"bob");
 
 2368            auto const gw = 
Account(
"gw");
 
 2370            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 2376            mptGw.authorize({.account = alice});
 
 2377            mptGw.authorize({.account = gw, .holder = alice});
 
 2378            mptGw.authorize({.account = bob});
 
 2379            mptGw.authorize({.account = gw, .holder = bob});
 
 2380            auto const MPT = mptGw[
"MPT"];
 
 2381            env(
pay(gw, alice, 
MPT(10'000)));
 
 2382            env(
pay(gw, bob, 
MPT(10'000)));
 
 2399            Env env{*
this, features};
 
 2400            auto const baseFee = env.current()->fees().base;
 
 2401            auto const alice = 
Account(
"alice");
 
 2402            auto const bob = 
Account(
"bob");
 
 2403            auto const gw = 
Account(
"gw");
 
 2405            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 2410            mptGw.authorize({.account = alice});
 
 2411            mptGw.authorize({.account = bob});
 
 2412            auto const MPT = mptGw[
"MPT"];
 
 2413            env(
pay(gw, alice, 
MPT(10'000)));
 
 2414            env(
pay(gw, bob, 
MPT(10'000)));
 
 2418            mptGw.set({.account = gw, .holder = alice, .flags = 
tfMPTLock});
 
 2430            Env env{*
this, features};
 
 2431            auto const baseFee = env.current()->fees().base;
 
 2432            auto const alice = 
Account(
"alice");
 
 2433            auto const bob = 
Account(
"bob");
 
 2434            auto const gw = 
Account(
"gw");
 
 2436            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 2441            mptGw.authorize({.account = alice});
 
 2442            mptGw.authorize({.account = bob});
 
 2443            auto const MPT = mptGw[
"MPT"];
 
 2444            env(
pay(gw, alice, 
MPT(10'000)));
 
 2445            env(
pay(gw, bob, 
MPT(10'000)));
 
 2449            mptGw.set({.account = gw, .holder = bob, .flags = 
tfMPTLock});
 
 2461            Env env{*
this, features};
 
 2462            auto const baseFee = env.current()->fees().base;
 
 2463            auto const alice = 
Account(
"alice");
 
 2464            auto const bob = 
Account(
"bob");
 
 2465            auto const gw = 
Account(
"gw");
 
 2467            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 2470            mptGw.authorize({.account = alice});
 
 2471            mptGw.authorize({.account = bob});
 
 2472            auto const MPT = mptGw[
"MPT"];
 
 2473            env(
pay(gw, alice, 
MPT(10'000)));
 
 2474            env(
pay(gw, bob, 
MPT(10'000)));
 
 2487            Env env{*
this, features};
 
 2488            auto const baseFee = env.current()->fees().base;
 
 2489            auto const alice = 
Account(
"alice");
 
 2490            auto const bob = 
Account(
"bob");
 
 2491            auto const gw = 
Account(
"gw");
 
 2493            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 2498            mptGw.authorize({.account = alice});
 
 2499            mptGw.authorize({.account = bob});
 
 2500            auto const MPT = mptGw[
"MPT"];
 
 2501            env(
pay(gw, bob, 
MPT(10)));
 
 2514            Env env{*
this, features};
 
 2515            auto const baseFee = env.current()->fees().base;
 
 2516            auto const alice = 
Account(
"alice");
 
 2517            auto const bob = 
Account(
"bob");
 
 2518            auto const gw = 
Account(
"gw");
 
 2520            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 2525            mptGw.authorize({.account = alice});
 
 2526            mptGw.authorize({.account = bob});
 
 2527            auto const MPT = mptGw[
"MPT"];
 
 2528            env(
pay(gw, alice, 
MPT(10)));
 
 2529            env(
pay(gw, bob, 
MPT(10)));
 
 
 2545        using namespace test::jtx;
 
 2550            Env env{*
this, features};
 
 2551            auto const baseFee = env.current()->fees().base;
 
 2552            auto const alice = 
Account(
"alice");
 
 2553            auto const bob = 
Account(
"bob");
 
 2554            auto const gw = 
Account(
"gw");
 
 2556            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 2562            mptGw.authorize({.account = alice});
 
 2563            mptGw.authorize({.account = gw, .holder = alice});
 
 2564            mptGw.authorize({.account = bob});
 
 2565            mptGw.authorize({.account = gw, .holder = bob});
 
 2566            auto const MPT = mptGw[
"MPT"];
 
 2567            env(
pay(gw, alice, 
MPT(10'000)));
 
 2568            env(
pay(gw, bob, 
MPT(10'000)));
 
 2571            auto const seq1 = env.seq(alice);
 
 2593            Env env{*
this, features};
 
 2594            auto const baseFee = env.current()->fees().base;
 
 2595            auto const alice = 
Account(
"alice");
 
 2596            auto const bob = 
Account(
"bob");
 
 2597            env.fund(
XRP(10'000), alice, bob);
 
 2600            auto const seq1 = env.seq(alice);
 
 2601            env.app().openLedger().modify(
 
 2609                    sleNew->setAccountID(sfDestination, bob);
 
 2610                    sleNew->setFieldAmount(sfAmount, amt);
 
 2626            Env env{*
this, features};
 
 2627            auto const baseFee = env.current()->fees().base;
 
 2628            auto const alice = 
Account(
"alice");
 
 2629            auto const bob = 
Account(
"bob");
 
 2630            auto const gw = 
Account(
"gw");
 
 2632            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 2637            mptGw.authorize({.account = alice});
 
 2638            mptGw.authorize({.account = bob});
 
 2639            auto const MPT = mptGw[
"MPT"];
 
 2640            env(
pay(gw, alice, 
MPT(10'000)));
 
 2641            env(
pay(gw, bob, 
MPT(10'000)));
 
 2644            auto const seq1 = env.seq(alice);
 
 2653            mptGw.set({.account = gw, .holder = bob, .flags = 
tfMPTLock});
 
 
 2668        using namespace test::jtx;
 
 2673            Env env{*
this, features};
 
 2674            auto const baseFee = env.current()->fees().base;
 
 2675            auto const acctReserve = env.current()->fees().reserve;
 
 2676            auto const incReserve = env.current()->fees().increment;
 
 2678            auto const alice = 
Account(
"alice");
 
 2679            auto const bob = 
Account(
"bob");
 
 2680            auto const gw = 
Account(
"gw");
 
 2681            env.fund(acctReserve + (incReserve - 1), bob);
 
 2684            MPTTester mptGw(env, gw, {.holders = {alice}});
 
 2689            mptGw.authorize({.account = alice});
 
 2690            auto const MPT = mptGw[
"MPT"];
 
 2691            env(
pay(gw, alice, 
MPT(10'000)));
 
 2694            auto const seq1 = env.seq(alice);
 
 2712            Env env{*
this, features};
 
 2713            auto const baseFee = env.current()->fees().base;
 
 2714            auto const alice = 
Account(
"alice");
 
 2715            auto const bob = 
Account(
"bob");
 
 2716            auto const gw = 
Account(
"gw");
 
 2717            env.fund(
XRP(10'000), bob);
 
 2720            MPTTester mptGw(env, gw, {.holders = {alice}});
 
 2725            mptGw.authorize({.account = alice});
 
 2726            auto const MPT = mptGw[
"MPT"];
 
 2727            env(
pay(gw, alice, 
MPT(10'000)));
 
 2730            auto const seq1 = env.seq(alice);
 
 2748            Env env{*
this, features};
 
 2749            auto const baseFee = env.current()->fees().base;
 
 2750            auto const alice = 
Account(
"alice");
 
 2751            auto const bob = 
Account(
"bob");
 
 2752            auto const carol = 
Account(
"carol");
 
 2753            auto const gw = 
Account(
"gw");
 
 2754            env.fund(
XRP(10'000), bob, carol);
 
 2757            MPTTester mptGw(env, gw, {.holders = {alice}});
 
 2762            mptGw.authorize({.account = alice});
 
 2763            auto const MPT = mptGw[
"MPT"];
 
 2764            env(
pay(gw, alice, 
MPT(10'000)));
 
 2767            auto const seq1 = env.seq(alice);
 
 
 2788        using namespace test::jtx;
 
 2793            Env env{*
this, features};
 
 2794            auto const baseFee = env.current()->fees().base;
 
 2795            auto const alice = 
Account(
"alice");
 
 2796            auto const bob = 
Account(
"bob");
 
 2797            auto const gw = 
Account(
"gw");
 
 2799            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 2805            mptGw.authorize({.account = alice});
 
 2806            mptGw.authorize({.account = gw, .holder = alice});
 
 2807            mptGw.authorize({.account = bob});
 
 2808            mptGw.authorize({.account = gw, .holder = bob});
 
 2809            auto const MPT = mptGw[
"MPT"];
 
 2810            env(
pay(gw, alice, 
MPT(10'000)));
 
 2811            env(
pay(gw, bob, 
MPT(10'000)));
 
 2814            auto const seq1 = env.seq(alice);
 
 2832            Env env{*
this, features};
 
 2833            auto const baseFee = env.current()->fees().base;
 
 2834            auto const alice = 
Account(
"alice");
 
 2835            auto const bob = 
Account(
"bob");
 
 2836            env.fund(
XRP(10'000), alice, bob);
 
 2838            auto const seq1 = env.seq(alice);
 
 2839            env.app().openLedger().modify(
 
 2847                    sleNew->setAccountID(sfDestination, bob);
 
 2848                    sleNew->setFieldAmount(sfAmount, amt);
 
 
 2866        using namespace jtx;
 
 2869        Env env{*
this, features};
 
 2870        auto const baseFee = env.current()->fees().base;
 
 2871        auto const alice = 
Account(
"alice");
 
 2872        auto const bob = 
Account(
"bob");
 
 2873        auto const carol = 
Account(
"carol");
 
 2874        auto const gw = 
Account(
"gw");
 
 2875        env.fund(
XRP(5000), bob);
 
 2877        MPTTester mptGw(env, gw, {.holders = {alice, carol}});
 
 2882        mptGw.authorize({.account = alice});
 
 2883        mptGw.authorize({.account = carol});
 
 2884        auto const MPT = mptGw[
"MPT"];
 
 2885        env(
pay(gw, alice, 
MPT(10'000)));
 
 2886        env(
pay(gw, carol, 
MPT(10'000)));
 
 2889        auto outstandingMPT = env.balance(gw, 
MPT);
 
 2892        auto const seq1 = env.seq(alice);
 
 2894            auto const preAliceMPT = env.balance(alice, 
MPT);
 
 2895            auto const preBobMPT = env.balance(bob, 
MPT);
 
 2903            BEAST_EXPECT(env.balance(alice, 
MPT) == preAliceMPT - 
MPT(1'000));
 
 2905            BEAST_EXPECT(env.balance(bob, 
MPT) == preBobMPT);
 
 2907            BEAST_EXPECT(env.balance(gw, 
MPT) == outstandingMPT);
 
 2911            auto const preAliceMPT = env.balance(alice, 
MPT);
 
 2912            auto const preBobMPT = env.balance(bob, 
MPT);
 
 2920            BEAST_EXPECT(env.balance(alice, 
MPT) == preAliceMPT);
 
 2922            BEAST_EXPECT(env.balance(bob, 
MPT) == preBobMPT + 
MPT(1'000));
 
 2924            BEAST_EXPECT(env.balance(gw, 
MPT) == outstandingMPT);
 
 2929        auto const seq2 = env.seq(alice);
 
 2931            auto const preAliceMPT = env.balance(alice, 
MPT);
 
 2932            auto const preBobMPT = env.balance(bob, 
MPT);
 
 2941            BEAST_EXPECT(env.balance(alice, 
MPT) == preAliceMPT - 
MPT(1'000));
 
 2943            BEAST_EXPECT(env.balance(bob, 
MPT) == preBobMPT);
 
 2945            BEAST_EXPECT(env.balance(gw, 
MPT) == outstandingMPT);
 
 2949            auto const preAliceMPT = env.balance(alice, 
MPT);
 
 2950            auto const preBobMPT = env.balance(bob, 
MPT);
 
 2954            BEAST_EXPECT(env.balance(alice, 
MPT) == preAliceMPT + 
MPT(1'000));
 
 2956            BEAST_EXPECT(env.balance(bob, 
MPT) == preBobMPT);
 
 2958            BEAST_EXPECT(env.balance(gw, 
MPT) == outstandingMPT);
 
 2964            auto const seq = env.
seq(alice);
 
 2965            auto const preAliceMPT = env.balance(alice, 
MPT);
 
 2973            BEAST_EXPECT(env.balance(alice, 
MPT) == preAliceMPT - 
MPT(1'000));
 
 2975            BEAST_EXPECT(env.balance(gw, 
MPT) == outstandingMPT);
 
 2985            BEAST_EXPECT(env.balance(alice, 
MPT) == preAliceMPT);
 
 2987            BEAST_EXPECT(env.balance(gw, 
MPT) == outstandingMPT);
 
 2993            auto const seq = env.
seq(alice);
 
 2994            auto const preAliceMPT = env.balance(alice, 
MPT);
 
 3003            BEAST_EXPECT(env.balance(alice, 
MPT) == preAliceMPT - 
MPT(1'000));
 
 3005            BEAST_EXPECT(env.balance(gw, 
MPT) == outstandingMPT);
 
 3011            BEAST_EXPECT(env.balance(alice, 
MPT) == preAliceMPT);
 
 3013            BEAST_EXPECT(env.balance(gw, 
MPT) == outstandingMPT);
 
 3019            auto const preAliceMPT = env.balance(alice, 
MPT);
 
 3020            auto const preBobMPT = env.balance(bob, 
MPT);
 
 3021            auto const preCarolMPT = env.balance(carol, 
MPT);
 
 3036            BEAST_EXPECT(env.balance(alice, 
MPT) == preAliceMPT - 
MPT(1'000));
 
 3038            BEAST_EXPECT(env.balance(bob, 
MPT) == preBobMPT);
 
 3040            BEAST_EXPECT(env.balance(carol, 
MPT) == preCarolMPT - 
MPT(1'000));
 
 3042            BEAST_EXPECT(env.balance(gw, 
MPT) == outstandingMPT);
 
 3048            Env env{*
this, features};
 
 3049            auto const baseFee = env.current()->fees().base;
 
 3050            auto const alice = 
Account(
"alice");
 
 3051            auto const bob = 
Account(
"bob");
 
 3052            auto const gw = 
Account(
"gw");
 
 3054            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 3059            mptGw.authorize({.account = alice});
 
 3060            mptGw.authorize({.account = bob});
 
 3061            auto const MPT = mptGw[
"MPT"];
 
 3065            auto const preAliceMPT = env.balance(alice, 
MPT);
 
 3066            auto const preBobMPT = env.balance(bob, 
MPT);
 
 3067            auto const outstandingMPT = env.balance(gw, 
MPT);
 
 3069            auto const seq1 = env.seq(alice);
 
 3073                fee(baseFee * 150));
 
 3076            BEAST_EXPECT(env.balance(alice, 
MPT) == preAliceMPT - 
MPT(1));
 
 3078            BEAST_EXPECT(env.balance(bob, 
MPT) == preBobMPT);
 
 3080            BEAST_EXPECT(env.balance(gw, 
MPT) == outstandingMPT);
 
 3090            BEAST_EXPECT(env.balance(alice, 
MPT) == preAliceMPT - 
MPT(1));
 
 3093                              ->isFieldPresent(sfLockedAmount));
 
 3094            BEAST_EXPECT(env.balance(bob, 
MPT) == preBobMPT + 
MPT(1));
 
 3096            BEAST_EXPECT(env.balance(gw, 
MPT) == outstandingMPT);
 
 3099                              ->isFieldPresent(sfLockedAmount));
 
 3104            Env env{*
this, features};
 
 3105            auto const baseFee = env.current()->fees().base;
 
 3106            auto const alice = 
Account(
"alice");
 
 3107            auto const bob = 
Account(
"bob");
 
 3108            auto const gw = 
Account(
"gw");
 
 3110            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 3115            mptGw.authorize({.account = alice});
 
 3116            mptGw.authorize({.account = bob});
 
 3117            auto const MPT = mptGw[
"MPT"];
 
 3121            auto const preAliceMPT = env.balance(alice, 
MPT);
 
 3122            auto const preBobMPT = env.balance(bob, 
MPT);
 
 3123            auto const outstandingMPT = env.balance(gw, 
MPT);
 
 3126            auto const seq1 = env.seq(alice);
 
 3130                fee(baseFee * 150));
 
 3134            auto const seq2 = env.seq(alice);
 
 3138                fee(baseFee * 150));
 
 3144            BEAST_EXPECT(env.balance(bob, 
MPT) == preBobMPT);
 
 3146            BEAST_EXPECT(env.balance(gw, 
MPT) == outstandingMPT);
 
 3169            BEAST_EXPECT(env.balance(gw, 
MPT) == outstandingMPT);
 
 
 3177        using namespace jtx;
 
 3180        auto const alice = 
Account(
"alice");
 
 3181        auto const bob = 
Account(
"bob");
 
 3182        auto const carol = 
Account(
"carol");
 
 3183        auto const gw = 
Account{
"gateway"};
 
 3187            Env env{*
this, features};
 
 3188            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 3193            mptGw.authorize({.account = alice});
 
 3194            mptGw.authorize({.account = bob});
 
 3195            auto const MPT = mptGw[
"MPT"];
 
 3196            env(
pay(gw, alice, 
MPT(10'000)));
 
 3197            env(
pay(gw, bob, 
MPT(10'000)));
 
 3199            auto const aseq = env.seq(alice);
 
 3200            auto const bseq = env.seq(bob);
 
 3206                (*env.meta())[sfTransactionResult] ==
 
 3229                (*env.meta())[sfTransactionResult] ==
 
 3247                    (*env.meta())[sfTransactionResult] ==
 
 3266                    (*env.meta())[sfTransactionResult] ==
 
 3279            Env env{*
this, features};
 
 3280            MPTTester mptGw(env, gw, {.holders = {alice, bob, carol}});
 
 3285            mptGw.authorize({.account = alice});
 
 3286            mptGw.authorize({.account = bob});
 
 3287            mptGw.authorize({.account = carol});
 
 3288            auto const MPT = mptGw[
"MPT"];
 
 3289            env(
pay(gw, alice, 
MPT(10'000)));
 
 3290            env(
pay(gw, bob, 
MPT(10'000)));
 
 3291            env(
pay(gw, carol, 
MPT(10'000)));
 
 3293            auto const aseq = env.seq(alice);
 
 3294            auto const bseq = env.seq(bob);
 
 3299                (*env.meta())[sfTransactionResult] ==
 
 3306                (*env.meta())[sfTransactionResult] ==
 
 
 3385        using namespace test::jtx;
 
 3390            Env env{*
this, features};
 
 3391            auto const baseFee = env.current()->fees().base;
 
 3392            auto const alice = 
Account(
"alice");
 
 3393            auto const gw = 
Account(
"gw");
 
 3395            MPTTester mptGw(env, gw, {.holders = {alice}});
 
 3400            mptGw.authorize({.account = alice});
 
 3401            auto const MPT = mptGw[
"MPT"];
 
 3402            env(
pay(gw, alice, 
MPT(10'000)));
 
 3406            auto const seq1 = env.seq(alice);
 
 3407            auto const preAliceMPT = env.balance(alice, 
MPT);
 
 3408            auto const preOutstanding = env.balance(gw, 
MPT);
 
 3410            BEAST_EXPECT(preOutstanding == 
MPT(-10'000));
 
 3411            BEAST_EXPECT(preEscrowed == 0);
 
 3416                fee(baseFee * 150));
 
 3419            BEAST_EXPECT(env.balance(alice, 
MPT) == preAliceMPT - 
MPT(1'000));
 
 3421            BEAST_EXPECT(env.balance(gw, 
MPT) == preOutstanding);
 
 3428                fee(baseFee * 150));
 
 3431            BEAST_EXPECT(env.balance(alice, 
MPT) == preAliceMPT - 
MPT(1'000));
 
 3433            BEAST_EXPECT(env.balance(gw, 
MPT) == preOutstanding + 
MPT(1'000));
 
 
 3442        using namespace test::jtx;
 
 3445        auto const alice = 
Account(
"alice");
 
 3446        auto const bob = 
Account(
"bob");
 
 3447        auto const carol = 
Account(
"carol");
 
 3448        auto const gw = 
Account{
"gateway"};
 
 3449        auto const USD = gw[
"USD"];
 
 3453            Env env{*
this, features};
 
 3454            auto const baseFee = env.current()->fees().base;
 
 3455            auto const alice = 
Account(
"alice");
 
 3456            auto const bob = 
Account(
"bob");
 
 3457            auto const gw = 
Account(
"gw");
 
 3459            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 3461                {.transferFee = 25000,
 
 3465            mptGw.authorize({.account = alice});
 
 3466            mptGw.authorize({.account = bob});
 
 3467            auto const MPT = mptGw[
"MPT"];
 
 3468            env(
pay(gw, alice, 
MPT(10'000)));
 
 3469            env(
pay(gw, bob, 
MPT(10'000)));
 
 3473            auto const preAlice = env.balance(alice, 
MPT);
 
 3474            auto const seq1 = env.seq(alice);
 
 3475            auto const delta = 
MPT(125);
 
 3479                fee(baseFee * 150));
 
 3487            BEAST_EXPECT(env.balance(gw, 
MPT) == 
MPT(-20'000));
 
 3493                fee(baseFee * 150));
 
 3496            BEAST_EXPECT(env.balance(alice, 
MPT) == preAlice - delta);
 
 3497            BEAST_EXPECT(env.balance(bob, 
MPT) == 
MPT(10'100));
 
 3499            auto const escrowedWithFix =
 
 3500                env.current()->rules().enabled(fixTokenEscrowV1) ? 0 : 25;
 
 3501            auto const outstandingWithFix =
 
 3502                env.current()->rules().enabled(fixTokenEscrowV1) ? 
MPT(19'975)
 
 3506            BEAST_EXPECT(env.balance(gw, 
MPT) == -outstandingWithFix);
 
 3511            Env env{*
this, features};
 
 3512            auto const baseFee = env.current()->fees().base;
 
 3513            auto const alice = 
Account(
"alice");
 
 3514            auto const bob = 
Account(
"bob");
 
 3515            auto const gw = 
Account(
"gw");
 
 3517            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 3519                {.transferFee = 25000,
 
 3523            mptGw.authorize({.account = alice});
 
 3524            mptGw.authorize({.account = bob});
 
 3525            auto const MPT = mptGw[
"MPT"];
 
 3526            env(
pay(gw, alice, 
MPT(10'000)));
 
 3527            env(
pay(gw, bob, 
MPT(10'000)));
 
 3531            auto const preAlice = env.balance(alice, 
MPT);
 
 3532            auto const preBob = env.balance(bob, 
MPT);
 
 3533            auto const seq1 = env.seq(alice);
 
 3534            auto const delta = 
MPT(125);
 
 3539                fee(baseFee * 150));
 
 3549            BEAST_EXPECT(env.balance(alice, 
MPT) == preAlice);
 
 3550            BEAST_EXPECT(env.balance(bob, 
MPT) == preBob);
 
 3551            BEAST_EXPECT(env.balance(gw, 
MPT) == 
MPT(-20'000));
 
 3558            Env env{*
this, features};
 
 3559            auto const baseFee = env.current()->fees().base;
 
 3560            auto const alice = 
Account(
"alice");
 
 3561            auto const bob = 
Account(
"bob");
 
 3562            auto const gw = 
Account(
"gw");
 
 3564            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 3566                {.transferFee = 25000,
 
 3570            mptGw.authorize({.account = alice});
 
 3571            mptGw.authorize({.account = bob});
 
 3572            auto const MPT = mptGw[
"MPT"];
 
 3573            env(
pay(gw, alice, 
MPT(10'000)));
 
 3574            env(
pay(gw, bob, 
MPT(10'000)));
 
 3578            auto const preAlice = env.balance(alice, 
MPT);
 
 3579            auto const seq1 = env.seq(alice);
 
 3580            auto const delta = 
MPT(125);
 
 3584                fee(baseFee * 150));
 
 3592            BEAST_EXPECT(env.balance(gw, 
MPT) == 
MPT(-20'000));
 
 3598                fee(baseFee * 150));
 
 3601            BEAST_EXPECT(env.balance(alice, 
MPT) == preAlice - delta);
 
 3604            BEAST_EXPECT(env.balance(gw, 
MPT) == 
MPT(-19'875));
 
 
 3612        using namespace test::jtx;
 
 3615        Env env{*
this, features};
 
 3616        auto const baseFee = env.current()->fees().base;
 
 3617        auto const alice = 
Account(
"alice");
 
 3618        auto const bob = 
Account(
"bob");
 
 3619        auto const gw = 
Account(
"gw");
 
 3621        MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 3626        mptGw.authorize({.account = alice});
 
 3627        mptGw.authorize({.account = gw, .holder = alice});
 
 3628        mptGw.authorize({.account = bob});
 
 3629        mptGw.authorize({.account = gw, .holder = bob});
 
 3630        auto const MPT = mptGw[
"MPT"];
 
 3631        env(
pay(gw, alice, 
MPT(10'000)));
 
 3634        auto seq = env.
seq(alice);
 
 3635        auto const delta = 
MPT(125);
 
 3640            fee(baseFee * 150));
 
 3647            fee(baseFee * 150));
 
 
 3655        using namespace test::jtx;
 
 3658        Env env{*
this, features};
 
 3659        auto const baseFee = env.current()->fees().base;
 
 3660        auto const alice = 
Account(
"alice");
 
 3661        auto const bob = 
Account(
"bob");
 
 3662        auto const gw = 
Account(
"gw");
 
 3664        MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 3669        mptGw.authorize({.account = alice});
 
 3670        mptGw.authorize({.account = bob});
 
 3671        auto const MPT = mptGw[
"MPT"];
 
 3672        env(
pay(gw, alice, 
MPT(10'000)));
 
 3673        env(
pay(gw, bob, 
MPT(10'000)));
 
 3677        auto seq1 = env.seq(alice);
 
 3682            fee(baseFee * 150));
 
 3686        mptGw.set({.account = gw, .holder = alice, .flags = 
tfMPTLock});
 
 3687        mptGw.set({.account = gw, .holder = bob, .flags = 
tfMPTLock});
 
 
 3706        using namespace test::jtx;
 
 3709        Env env{*
this, features};
 
 3710        auto const baseFee = env.current()->fees().base;
 
 3711        auto const alice = 
Account(
"alice");
 
 3712        auto const bob = 
Account(
"bob");
 
 3713        auto const gw = 
Account(
"gw");
 
 3715        MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 3718        mptGw.authorize({.account = alice});
 
 3719        mptGw.authorize({.account = bob});
 
 3720        auto const MPT = mptGw[
"MPT"];
 
 3721        env(
pay(gw, alice, 
MPT(10'000)));
 
 3722        env(
pay(gw, bob, 
MPT(10'000)));
 
 3737            auto seq = env.
seq(alice);
 
 3741                fee(baseFee * 150));
 
 3748                fee(baseFee * 150));
 
 3755            auto seq = env.
seq(alice);
 
 3760                fee(baseFee * 150));
 
 
 3773        using namespace test::jtx;
 
 3778            Env env{*
this, features};
 
 3779            auto const baseFee = env.current()->fees().base;
 
 3780            auto const alice = 
Account(
"alice");
 
 3781            auto const bob = 
Account(
"bob");
 
 3782            auto const gw = 
Account(
"gw");
 
 3784            MPTTester mptGw(env, gw, {.holders = {alice, bob}});
 
 3789            mptGw.authorize({.account = alice});
 
 3790            mptGw.authorize({.account = bob});
 
 3791            auto const MPT = mptGw[
"MPT"];
 
 3792            env(
pay(gw, alice, 
MPT(10'000)));
 
 3793            env(
pay(gw, bob, 
MPT(10'000)));
 
 3796            auto const seq1 = env.seq(alice);
 
 3800                fee(baseFee * 150));
 
 3804            env(
pay(alice, gw, 
MPT(9'990)));
 
 3805            env(
pay(bob, gw, 
MPT(10'000)));
 
 3806            BEAST_EXPECT(env.balance(alice, 
MPT) == 
MPT(0));
 
 3808            BEAST_EXPECT(env.balance(bob, 
MPT) == 
MPT(0));
 
 3810            BEAST_EXPECT(env.balance(gw, 
MPT) == 
MPT(-10));
 
 3813                {.id = mptGw.issuanceID(),
 
 3824            env(
pay(bob, gw, 
MPT(10)));
 
 3825            mptGw.destroy({.id = mptGw.issuanceID(), .
ownerCount = 0});
 
 3830            Env env{*
this, features};
 
 3831            auto const baseFee = env.current()->fees().base;
 
 3832            auto const alice = 
Account(
"alice");
 
 3833            auto const bob = 
Account(
"bob");
 
 3834            auto const gw = 
Account(
"gw");
 
 3835            env.fund(
XRP(10'000), bob);
 
 3838            MPTTester mptGw(env, gw, {.holders = {alice}});
 
 3843            mptGw.authorize({.account = alice});
 
 3844            auto const MPT = mptGw[
"MPT"];
 
 3845            env(
pay(gw, alice, 
MPT(10'000)));
 
 3848            auto const seq1 = env.seq(alice);
 
 3856            env(
pay(alice, gw, 
MPT(9'990)));
 
 3859            BEAST_EXPECT(env.balance(alice, 
MPT) == 
MPT(0));
 
 3873            BEAST_EXPECT(env.balance(alice, 
MPT) == 
MPT(0));
 
 
 3925        using namespace test::jtx;
 
 
 
 3933BEAST_DEFINE_TESTSUITE(EscrowToken, app, 
ripple);
 
Value removeMember(char const *key)
Remove and return the named member.
 
A generic endpoint for log messages.
 
testcase_t testcase
Memberspace for declaring test cases.
 
A class that simplifies iterating ledger directory pages.
 
const_iterator end() const
 
const_iterator begin() const
 
A currency issued by an account.
 
Writable ledger view that accumulates state and tx changes.
 
Discardable, editable view to a ledger.
 
void insert(std::shared_ptr< SLE > const &sle) override
Insert a new state SLE.
 
Immutable cryptographic account descriptor.
 
A transaction testing environment.
 
std::uint32_t seq(Account const &account) const
Returns the next sequence number on account.
 
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.
 
NetClock::time_point now()
Returns the current network time.
 
Json::Value rpc(unsigned apiVersion, std::unordered_map< std::string, std::string > const &headers, std::string const &cmd, Args &&... args)
Execute an RPC command.
 
void fund(bool setDefaultRipple, STAmount const &amount, Account const &account)
 
std::shared_ptr< SLE const > le(Account const &account) const
Return an account root.
 
Converts to IOU Issue or STAmount.
 
void create(MPTCreate const &arg=MPTCreate{})
 
Converts to MPT Issue or STAmount.
 
ripple::MPTID const & mpt() const
 
Match clear account flags.
 
Set the expected result code for a JTx The test will fail if the code doesn't match.
 
Keylet mptoken(MPTID const &issuanceID, AccountID const &holder) noexcept
 
Keylet mptIssuance(std::uint32_t seq, AccountID const &issuer) noexcept
 
Keylet escrow(AccountID const &src, std::uint32_t seq) noexcept
An escrow entry.
 
Keylet ownerDir(AccountID const &id) noexcept
The root page of an account's directory.
 
std::array< std::uint8_t, 39 > const cb1
 
Json::Value create(AccountID const &account, AccountID const &to, STAmount const &amount)
 
auto const finish_time
Set the "FinishAfter" time tag on a JTx.
 
Rate rate(Env &env, Account const &account, std::uint32_t const &seq)
 
Json::Value cancel(AccountID const &account, Account const &from, std::uint32_t seq)
 
std::array< std::uint8_t, 39 > const cb2
 
auto const cancel_time
Set the "CancelAfter" time tag on a JTx.
 
std::array< std::uint8_t, 4 > const fb1
 
Json::Value finish(AccountID const &account, AccountID const &from, std::uint32_t seq)
 
std::uint32_t ownerCount(Env const &env, Account const &account)
 
Json::Value fclear(Account const &account, std::uint32_t off)
Remove account flag.
 
Json::Value trust(Account const &account, STAmount const &amount, std::uint32_t flags)
Modify a trust line.
 
Json::Value fset(Account const &account, std::uint32_t on, std::uint32_t off=0)
Add and/or remove flag.
 
Json::Value pay(AccountID const &account, AccountID const &to, AnyAmount amount)
Create a payment.
 
FeatureBitset testable_amendments()
 
Json::Value rate(Account const &account, double multiplier)
Set a transfer rate.
 
XRP_t const XRP
Converts to XRP Issue or STAmount.
 
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
 
base_uint< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
 
constexpr std::uint32_t asfGlobalFreeze
 
Currency const & badCurrency()
We deliberately disallow the currency that looks like "XRP" because too many people were using it ins...
 
constexpr std::uint32_t tfSetDeepFreeze
 
constexpr std::uint32_t asfAllowTrustLineLocking
 
constexpr std::uint32_t const tfMPTCanTransfer
 
std::uint64_t constexpr maxMPTokenAmount
The maximum amount of MPTokenIssuance.
 
constexpr std::uint32_t const tfMPTUnauthorize
 
constexpr std::uint32_t tfSetfAuth
 
constexpr std::uint32_t tfClearFreeze
 
Rate transferRate(ReadView const &view, AccountID const &issuer)
Returns IOU issuer transfer fee as Rate.
 
@ tecNO_LINE_INSUF_RESERVE
 
@ tecINSUFFICIENT_RESERVE
 
constexpr std::uint32_t const tfMPTLock
 
constexpr std::uint32_t tfClearDeepFreeze
 
std::string to_string(base_uint< Bits, Tag > const &a)
 
STAmount amountFromString(Asset const &asset, std::string const &amount)
 
constexpr std::uint32_t asfRequireAuth
 
MPTID makeMptID(std::uint32_t sequence, AccountID const &account)
 
constexpr std::uint32_t const tfMPTCanEscrow
 
constexpr std::uint32_t const tfMPTRequireAuth
 
constexpr std::uint32_t tfSetFreeze
 
constexpr std::uint32_t const tfMPTCanLock
 
void testMPTBalances(FeatureBitset features)
 
void testIOUWithFeats(FeatureBitset features)
 
void testMPTLockedRate(FeatureBitset features)
 
void testIOUINSF(FeatureBitset features)
 
void testIOULimitAmount(FeatureBitset features)
 
void testIOURippleState(FeatureBitset features)
 
void testMPTFinishPreclaim(FeatureBitset features)
 
void testMPTGateway(FeatureBitset features)
 
void testIOULockedRate(FeatureBitset features)
 
static uint64_t issuerMPTEscrowed(jtx::Env const &env, jtx::MPT const &mpt)
 
static uint64_t mptEscrowed(jtx::Env const &env, jtx::Account const &account, jtx::MPT const &mpt)
 
void testIOUEnablement(FeatureBitset features)
 
void run() override
Runs the suite.
 
void testIOUFreeze(FeatureBitset features)
 
void testIOUAllowLockingFlag(FeatureBitset features)
 
void testMPTCreatePreclaim(FeatureBitset features)
 
void testIOUFinishDoApply(FeatureBitset features)
 
jtx::PrettyAmount issuerBalance(jtx::Env &env, jtx::Account const &account, Issue const &issue)
 
void testMPTRequireAuth(FeatureBitset features)
 
void testMPTCanTransfer(FeatureBitset features)
 
void testMPTCreatePreflight(FeatureBitset features)
 
void testMPTDestroy(FeatureBitset features)
 
void testMPTLock(FeatureBitset features)
 
void testIOUCreatePreclaim(FeatureBitset features)
 
void testIOUPrecisionLoss(FeatureBitset features)
 
void testIOUBalances(FeatureBitset features)
 
void testMPTCancelPreclaim(FeatureBitset features)
 
void testIOUGateway(FeatureBitset features)
 
void testMPTWithFeats(FeatureBitset features)
 
void testIOUFinishPreclaim(FeatureBitset features)
 
void testIOUCreatePreflight(FeatureBitset features)
 
void testMPTEnablement(FeatureBitset features)
 
void testMPTFinishDoApply(FeatureBitset features)
 
void testIOUMetaAndOwnership(FeatureBitset features)
 
void testIOURequireAuth(FeatureBitset features)
 
jtx::PrettyAmount issuerEscrowed(jtx::Env &env, jtx::Account const &account, Issue const &issue)
 
void testIOUCancelPreclaim(FeatureBitset features)
 
void testMPTMetaAndOwnership(FeatureBitset features)
 
Represents an XRP or IOU quantity This customizes the string conversion and supports XRP conversions ...
 
Set the sequence number on a JTx.