47        testcase(
"Enable AllowTrustLineClawback flag");
 
   48        using namespace test::jtx;
 
   54            Env env(*
this, features);
 
   55            Account alice{
"alice"};
 
   57            env.fund(XRP(1000), alice);
 
   79            Env env(*
this, features);
 
   80            Account alice{
"alice"};
 
   82            env.fund(XRP(1000), alice);
 
  104            Env env(*
this, features);
 
  106            Account alice{
"alice"};
 
  109            env.fund(XRP(1000), alice, bob);
 
  112            auto const USD = alice[
"USD"];
 
  116            env.trust(USD(1000), bob);
 
  117            env(pay(alice, bob, USD(10)));
 
  120            BEAST_EXPECT(ownerCount(env, alice) == 0);
 
  121            BEAST_EXPECT(ownerCount(env, bob) == 1);
 
  129            env(trust(bob, USD(0), 0));
 
  130            env(pay(bob, alice, USD(10)));
 
  132            BEAST_EXPECT(ownerCount(env, alice) == 0);
 
  133            BEAST_EXPECT(ownerCount(env, bob) == 0);
 
  140            BEAST_EXPECT(ownerCount(env, alice) == 0);
 
  141            BEAST_EXPECT(ownerCount(env, bob) == 0);
 
  147            Env env(*
this, features - featureClawback);
 
  149            Account alice{
"alice"};
 
  151            env.fund(XRP(1000), alice);
 
  164            env.enableFeature(featureClawback);
 
 
  178        using namespace test::jtx;
 
  184            Env env(*
this, features - featureClawback);
 
  186            Account alice{
"alice"};
 
  189            env.fund(XRP(1000), alice, bob);
 
  194            auto const USD = alice[
"USD"];
 
  197            env.trust(USD(1000), bob);
 
  198            env(pay(alice, bob, USD(10)));
 
  201            env.require(balance(bob, alice[
"USD"](10)));
 
  202            env.require(balance(alice, bob[
"USD"](-10)));
 
  209            env.enableFeature(featureClawback);
 
  216            env.require(balance(bob, alice[
"USD"](10)));
 
  217            env.require(balance(alice, bob[
"USD"](-10)));
 
  229            Env env(*
this, features);
 
  231            Account alice{
"alice"};
 
  234            env.fund(XRP(1000), alice, bob);
 
  242            auto const USD = alice[
"USD"];
 
  245            env.trust(USD(1000), bob);
 
  246            env(pay(alice, bob, USD(10)));
 
  249            env.require(balance(bob, alice[
"USD"](10)));
 
  250            env.require(balance(alice, bob[
"USD"](-10)));
 
  253            env(claw(alice, bob[
"USD"](5)),
 
  276            env(pay(bob, alice, USD(10)));
 
  280            BEAST_EXPECT(ownerCount(env, alice) == 0);
 
  281            BEAST_EXPECT(ownerCount(env, bob) == 1);
 
  282            env.require(balance(bob, alice[
"USD"](0)));
 
  283            env.require(balance(alice, bob[
"USD"](0)));
 
  290            env(trust(bob, USD(0), 0));
 
  294            BEAST_EXPECT(ownerCount(env, alice) == 0);
 
  295            BEAST_EXPECT(ownerCount(env, bob) == 0);
 
  298            env(claw(alice, bob[
"USD"](5)), ter(
tecNO_LINE));
 
 
  309        using namespace test::jtx;
 
  313            Env env(*
this, features);
 
  315            Account alice{
"alice"};
 
  319            env.fund(XRP(1000), alice);
 
  335            Env env(*
this, features);
 
  337            Account alice{
"alice"};
 
  339            Account cindy{
"cindy"};
 
  341            env.fund(XRP(1000), alice, bob, cindy);
 
  344            auto const USD = alice[
"USD"];
 
  357            env.trust(USD(1000), bob);
 
  358            env(pay(alice, bob, USD(1000)));
 
  361            env.require(balance(bob, alice[
"USD"](1000)));
 
  362            env.require(balance(alice, bob[
"USD"](-1000)));
 
  366            env(claw(cindy, bob[
"USD"](200)), ter(
tecNO_LINE));
 
  378            Env env(*
this, features);
 
  380            Account alice{
"alice"};
 
  383            env.fund(XRP(1000), alice, bob);
 
  386            auto const USD = alice[
"USD"];
 
  387            auto const CAD = bob[
"CAD"];
 
  406                env.trust(USD(1000), bob);
 
  407                env(pay(alice, bob, USD(10)));
 
  410                env.require(balance(bob, alice[
"USD"](10)));
 
  411                env.require(balance(alice, bob[
"USD"](-10)));
 
  426                env.trust(CAD(1000), alice);
 
  427                env(pay(bob, alice, CAD(10)));
 
  430                env.require(balance(bob, alice[
"CAD"](-10)));
 
  431                env.require(balance(alice, bob[
"CAD"](10)));
 
 
  445        using namespace test::jtx;
 
  448        Env env(*
this, features);
 
  450        Account alice{
"alice"};
 
  453        env.fund(XRP(1000), alice, bob);
 
  456        auto const USD = alice[
"USD"];
 
  464        env.trust(USD(1000), bob);
 
  465        env(pay(alice, bob, USD(1000)));
 
  468        env.require(balance(bob, alice[
"USD"](1000)));
 
  469        env.require(balance(alice, bob[
"USD"](-1000)));
 
  472        env(claw(alice, bob[
"USD"](200)));
 
  476        env.require(balance(bob, alice[
"USD"](800)));
 
  477        env.require(balance(alice, bob[
"USD"](-800)));
 
  480        env(claw(alice, bob[
"USD"](800)));
 
  484        env.require(balance(bob, alice[
"USD"](0)));
 
  485        env.require(balance(alice, bob[
"USD"](0)));
 
 
  493        using namespace test::jtx;
 
  499            Env env(*
this, features);
 
  501            Account alice{
"alice"};
 
  503            Account cindy{
"cindy"};
 
  505            env.fund(XRP(1000), alice, bob, cindy);
 
  519            env.trust(alice[
"USD"](1000), cindy);
 
  520            env(pay(alice, cindy, alice[
"USD"](1000)));
 
  524            env.trust(bob[
"USD"](1000), cindy);
 
  525            env(pay(bob, cindy, bob[
"USD"](1000)));
 
  529            env(claw(alice, cindy[
"USD"](200)));
 
  533            env.require(balance(cindy, alice[
"USD"](800)));
 
  534            env.require(balance(alice, cindy[
"USD"](-800)));
 
  537            env.require(balance(cindy, bob[
"USD"](1000)));
 
  538            env.require(balance(bob, cindy[
"USD"](-1000)));
 
  541            env(claw(bob, cindy[
"USD"](600)));
 
  545            env.require(balance(cindy, bob[
"USD"](400)));
 
  546            env.require(balance(bob, cindy[
"USD"](-400)));
 
  549            env.require(balance(cindy, alice[
"USD"](800)));
 
  550            env.require(balance(alice, cindy[
"USD"](-800)));
 
  557            Env env(*
this, features);
 
  559            Account alice{
"alice"};
 
  561            Account cindy{
"cindy"};
 
  563            env.fund(XRP(1000), alice, bob, cindy);
 
  566            auto const USD = alice[
"USD"];
 
  574            env.trust(USD(1000), bob);
 
  575            env(pay(alice, bob, USD(600)));
 
  578            env.require(balance(alice, bob[
"USD"](-600)));
 
  579            env.require(balance(bob, alice[
"USD"](600)));
 
  582            env.trust(USD(1000), cindy);
 
  583            env(pay(alice, cindy, USD(1000)));
 
  586            env.require(balance(alice, cindy[
"USD"](-1000)));
 
  587            env.require(balance(cindy, alice[
"USD"](1000)));
 
  590            env(claw(alice, bob[
"USD"](500)));
 
  594            env.require(balance(alice, bob[
"USD"](-100)));
 
  595            env.require(balance(bob, alice[
"USD"](100)));
 
  598            env.require(balance(alice, cindy[
"USD"](-1000)));
 
  599            env.require(balance(cindy, alice[
"USD"](1000)));
 
  602            env(claw(alice, cindy[
"USD"](300)));
 
  606            env.require(balance(alice, bob[
"USD"](-100)));
 
  607            env.require(balance(bob, alice[
"USD"](100)));
 
  610            env.require(balance(alice, cindy[
"USD"](-700)));
 
  611            env.require(balance(cindy, alice[
"USD"](700)));
 
 
  619        using namespace test::jtx;
 
  627        Env env(*
this, features);
 
  629        Account alice{
"alice"};
 
  632        env.fund(XRP(1000), alice, bob);
 
  646        env.trust(alice[
"USD"](1000), bob);
 
  647        env(pay(alice, bob, alice[
"USD"](1000)));
 
  650        BEAST_EXPECT(ownerCount(env, alice) == 0);
 
  651        BEAST_EXPECT(ownerCount(env, bob) == 1);
 
  654        env.require(balance(bob, alice[
"USD"](1000)));
 
  655        env.require(balance(alice, bob[
"USD"](-1000)));
 
  658        env.trust(bob[
"USD"](1500), alice);
 
  659        env(pay(bob, alice, bob[
"USD"](1500)));
 
  662        BEAST_EXPECT(ownerCount(env, alice) == 1);
 
  663        BEAST_EXPECT(ownerCount(env, bob) == 1);
 
  667        env.require(balance(bob, alice[
"USD"](-500)));
 
  668        env.require(balance(alice, bob[
"USD"](500)));
 
  680        env(claw(bob, alice[
"USD"](200)));
 
  683        env.require(balance(bob, alice[
"USD"](-300)));
 
  684        env.require(balance(alice, bob[
"USD"](300)));
 
  687        env(pay(alice, bob, alice[
"USD"](1000)));
 
  692        env.require(balance(bob, alice[
"USD"](700)));
 
  693        env.require(balance(alice, bob[
"USD"](-700)));
 
  700        env(claw(alice, bob[
"USD"](200)));
 
  703        env.require(balance(bob, alice[
"USD"](500)));
 
  704        env.require(balance(alice, bob[
"USD"](-500)));
 
 
  710        testcase(
"Delete default trustline");
 
  711        using namespace test::jtx;
 
  715        Env env(*
this, features);
 
  716        Account alice{
"alice"};
 
  719        env.fund(XRP(1000), alice, bob);
 
  722        auto const USD = alice[
"USD"];
 
  730        env.trust(USD(1000), bob);
 
  731        env(pay(alice, bob, USD(1000)));
 
  734        BEAST_EXPECT(ownerCount(env, alice) == 0);
 
  735        BEAST_EXPECT(ownerCount(env, bob) == 1);
 
  737        env.require(balance(bob, alice[
"USD"](1000)));
 
  738        env.require(balance(alice, bob[
"USD"](-1000)));
 
  741        env(trust(bob, USD(0), 0));
 
  744        BEAST_EXPECT(ownerCount(env, alice) == 0);
 
  745        BEAST_EXPECT(ownerCount(env, bob) == 1);
 
  749        env(claw(alice, bob[
"USD"](1000)));
 
  753        BEAST_EXPECT(ownerCount(env, alice) == 0);
 
  754        BEAST_EXPECT(ownerCount(env, bob) == 0);
 
 
  761        using namespace test::jtx;
 
  765        Env env(*
this, features);
 
  766        Account alice{
"alice"};
 
  769        env.fund(XRP(1000), alice, bob);
 
  772        auto const USD = alice[
"USD"];
 
  780        env.trust(USD(1000), bob);
 
  781        env(pay(alice, bob, USD(1000)));
 
  784        env.require(balance(bob, alice[
"USD"](1000)));
 
  785        env.require(balance(alice, bob[
"USD"](-1000)));
 
  792        env(claw(alice, bob[
"USD"](200)));
 
  796        env.require(balance(bob, alice[
"USD"](800)));
 
  797        env.require(balance(alice, bob[
"USD"](-800)));
 
 
  806        testcase(
"Amount exceeds available");
 
  807        using namespace test::jtx;
 
  811        Env env(*
this, features);
 
  812        Account alice{
"alice"};
 
  815        env.fund(XRP(1000), alice, bob);
 
  818        auto const USD = alice[
"USD"];
 
  826        env.trust(USD(1000), bob);
 
  827        env(pay(alice, bob, USD(1000)));
 
  830        env.require(balance(bob, alice[
"USD"](1000)));
 
  831        env.require(balance(alice, bob[
"USD"](-1000)));
 
  834        env(claw(alice, bob[
"USD"](2000)));
 
  839        env.require(balance(bob, alice[
"USD"](0)));
 
  840        env.require(balance(alice, bob[
"USD"](0)));
 
  844        BEAST_EXPECT(ownerCount(env, alice) == 0);
 
  845        BEAST_EXPECT(ownerCount(env, bob) == 1);
 
  848        env(trust(bob, USD(0), 0));
 
  852        BEAST_EXPECT(ownerCount(env, alice) == 0);
 
  853        BEAST_EXPECT(ownerCount(env, bob) == 0);
 
 
  860        using namespace test::jtx;
 
  863        Env env(*
this, features);
 
  864        Account alice{
"alice"};
 
  867        env.fund(XRP(1000), alice, bob);
 
  870        auto const USD = alice[
"USD"];
 
  878        env.trust(USD(1000), bob);
 
  879        env(pay(alice, bob, USD(100)));
 
  882        env.require(balance(bob, alice[
"USD"](100)));
 
  883        env.require(balance(alice, bob[
"USD"](-100)));
 
  888        env(ticket::create(alice, ticketCnt));
 
  891        BEAST_EXPECT(
ticketCount(env, alice) == ticketCnt);
 
  892        BEAST_EXPECT(ownerCount(env, alice) == ticketCnt);
 
  894        while (ticketCnt > 0)
 
  897            env(claw(alice, bob[
"USD"](5)), ticket::use(aliceTicketSeq++));
 
  901            BEAST_EXPECT(
ticketCount(env, alice) == ticketCnt);
 
  902            BEAST_EXPECT(ownerCount(env, alice) == ticketCnt);
 
  906        env.require(balance(bob, alice[
"USD"](50)));
 
  907        env.require(balance(alice, bob[
"USD"](-50)));
 
  910        BEAST_EXPECT(env.seq(alice) == aliceSeq);