66 testcase(
"Enable AllowTrustLineClawback flag");
67 using namespace test::jtx;
73 Env env(*
this, features);
74 Account alice{
"alice"};
76 env.fund(XRP(1000), alice);
98 Env env(*
this, features);
99 Account alice{
"alice"};
101 env.fund(XRP(1000), alice);
123 Env env(*
this, features);
125 Account alice{
"alice"};
128 env.fund(XRP(1000), alice, bob);
131 auto const USD = alice[
"USD"];
135 env.trust(USD(1000), bob);
136 env(pay(alice, bob, USD(10)));
139 BEAST_EXPECT(ownerCount(env, alice) == 0);
140 BEAST_EXPECT(ownerCount(env, bob) == 1);
148 env(trust(bob, USD(0), 0));
149 env(pay(bob, alice, USD(10)));
151 BEAST_EXPECT(ownerCount(env, alice) == 0);
152 BEAST_EXPECT(ownerCount(env, bob) == 0);
159 BEAST_EXPECT(ownerCount(env, alice) == 0);
160 BEAST_EXPECT(ownerCount(env, bob) == 0);
166 Env env(*
this, features - featureClawback);
168 Account alice{
"alice"};
170 env.fund(XRP(1000), alice);
183 env.enableFeature(featureClawback);
197 using namespace test::jtx;
203 Env env(*
this, features - featureClawback);
205 Account alice{
"alice"};
208 env.fund(XRP(1000), alice, bob);
213 auto const USD = alice[
"USD"];
216 env.trust(USD(1000), bob);
217 env(pay(alice, bob, USD(10)));
220 env.require(balance(bob, alice[
"USD"](10)));
221 env.require(balance(alice, bob[
"USD"](-10)));
228 env.enableFeature(featureClawback);
235 env.require(balance(bob, alice[
"USD"](10)));
236 env.require(balance(alice, bob[
"USD"](-10)));
248 Env env(*
this, features);
250 Account alice{
"alice"};
253 env.fund(XRP(1000), alice, bob);
261 auto const USD = alice[
"USD"];
264 env.trust(USD(1000), bob);
265 env(pay(alice, bob, USD(10)));
268 env.require(balance(bob, alice[
"USD"](10)));
269 env.require(balance(alice, bob[
"USD"](-10)));
272 env(claw(alice, bob[
"USD"](5)),
295 env(pay(bob, alice, USD(10)));
299 BEAST_EXPECT(ownerCount(env, alice) == 0);
300 BEAST_EXPECT(ownerCount(env, bob) == 1);
301 env.require(balance(bob, alice[
"USD"](0)));
302 env.require(balance(alice, bob[
"USD"](0)));
309 env(trust(bob, USD(0), 0));
313 BEAST_EXPECT(ownerCount(env, alice) == 0);
314 BEAST_EXPECT(ownerCount(env, bob) == 0);
317 env(claw(alice, bob[
"USD"](5)), ter(
tecNO_LINE));
328 using namespace test::jtx;
332 Env env(*
this, features);
334 Account alice{
"alice"};
338 env.fund(XRP(1000), alice);
354 Env env(*
this, features);
356 Account alice{
"alice"};
358 Account cindy{
"cindy"};
360 env.fund(XRP(1000), alice, bob, cindy);
363 auto const USD = alice[
"USD"];
376 env.trust(USD(1000), bob);
377 env(pay(alice, bob, USD(1000)));
380 env.require(balance(bob, alice[
"USD"](1000)));
381 env.require(balance(alice, bob[
"USD"](-1000)));
385 env(claw(cindy, bob[
"USD"](200)), ter(
tecNO_LINE));
397 Env env(*
this, features);
399 Account alice{
"alice"};
402 env.fund(XRP(1000), alice, bob);
405 auto const USD = alice[
"USD"];
406 auto const CAD = bob[
"CAD"];
425 env.trust(USD(1000), bob);
426 env(pay(alice, bob, USD(10)));
429 env.require(balance(bob, alice[
"USD"](10)));
430 env.require(balance(alice, bob[
"USD"](-10)));
445 env.trust(CAD(1000), alice);
446 env(pay(bob, alice, CAD(10)));
449 env.require(balance(bob, alice[
"CAD"](-10)));
450 env.require(balance(alice, bob[
"CAD"](10)));
464 using namespace test::jtx;
467 Env env(*
this, features);
469 Account alice{
"alice"};
472 env.fund(XRP(1000), alice, bob);
475 auto const USD = alice[
"USD"];
483 env.trust(USD(1000), bob);
484 env(pay(alice, bob, USD(1000)));
487 env.require(balance(bob, alice[
"USD"](1000)));
488 env.require(balance(alice, bob[
"USD"](-1000)));
491 env(claw(alice, bob[
"USD"](200)));
495 env.require(balance(bob, alice[
"USD"](800)));
496 env.require(balance(alice, bob[
"USD"](-800)));
499 env(claw(alice, bob[
"USD"](800)));
503 env.require(balance(bob, alice[
"USD"](0)));
504 env.require(balance(alice, bob[
"USD"](0)));
512 using namespace test::jtx;
518 Env env(*
this, features);
520 Account alice{
"alice"};
522 Account cindy{
"cindy"};
524 env.fund(XRP(1000), alice, bob, cindy);
538 env.trust(alice[
"USD"](1000), cindy);
539 env(pay(alice, cindy, alice[
"USD"](1000)));
543 env.trust(bob[
"USD"](1000), cindy);
544 env(pay(bob, cindy, bob[
"USD"](1000)));
548 env(claw(alice, cindy[
"USD"](200)));
552 env.require(balance(cindy, alice[
"USD"](800)));
553 env.require(balance(alice, cindy[
"USD"](-800)));
556 env.require(balance(cindy, bob[
"USD"](1000)));
557 env.require(balance(bob, cindy[
"USD"](-1000)));
560 env(claw(bob, cindy[
"USD"](600)));
564 env.require(balance(cindy, bob[
"USD"](400)));
565 env.require(balance(bob, cindy[
"USD"](-400)));
568 env.require(balance(cindy, alice[
"USD"](800)));
569 env.require(balance(alice, cindy[
"USD"](-800)));
576 Env env(*
this, features);
578 Account alice{
"alice"};
580 Account cindy{
"cindy"};
582 env.fund(XRP(1000), alice, bob, cindy);
585 auto const USD = alice[
"USD"];
593 env.trust(USD(1000), bob);
594 env(pay(alice, bob, USD(600)));
597 env.require(balance(alice, bob[
"USD"](-600)));
598 env.require(balance(bob, alice[
"USD"](600)));
601 env.trust(USD(1000), cindy);
602 env(pay(alice, cindy, USD(1000)));
605 env.require(balance(alice, cindy[
"USD"](-1000)));
606 env.require(balance(cindy, alice[
"USD"](1000)));
609 env(claw(alice, bob[
"USD"](500)));
613 env.require(balance(alice, bob[
"USD"](-100)));
614 env.require(balance(bob, alice[
"USD"](100)));
617 env.require(balance(alice, cindy[
"USD"](-1000)));
618 env.require(balance(cindy, alice[
"USD"](1000)));
621 env(claw(alice, cindy[
"USD"](300)));
625 env.require(balance(alice, bob[
"USD"](-100)));
626 env.require(balance(bob, alice[
"USD"](100)));
629 env.require(balance(alice, cindy[
"USD"](-700)));
630 env.require(balance(cindy, alice[
"USD"](700)));
638 using namespace test::jtx;
646 Env env(*
this, features);
648 Account alice{
"alice"};
651 env.fund(XRP(1000), alice, bob);
665 env.trust(alice[
"USD"](1000), bob);
666 env(pay(alice, bob, alice[
"USD"](1000)));
669 BEAST_EXPECT(ownerCount(env, alice) == 0);
670 BEAST_EXPECT(ownerCount(env, bob) == 1);
673 env.require(balance(bob, alice[
"USD"](1000)));
674 env.require(balance(alice, bob[
"USD"](-1000)));
677 env.trust(bob[
"USD"](1500), alice);
678 env(pay(bob, alice, bob[
"USD"](1500)));
681 BEAST_EXPECT(ownerCount(env, alice) == 1);
682 BEAST_EXPECT(ownerCount(env, bob) == 1);
686 env.require(balance(bob, alice[
"USD"](-500)));
687 env.require(balance(alice, bob[
"USD"](500)));
699 env(claw(bob, alice[
"USD"](200)));
702 env.require(balance(bob, alice[
"USD"](-300)));
703 env.require(balance(alice, bob[
"USD"](300)));
706 env(pay(alice, bob, alice[
"USD"](1000)));
711 env.require(balance(bob, alice[
"USD"](700)));
712 env.require(balance(alice, bob[
"USD"](-700)));
719 env(claw(alice, bob[
"USD"](200)));
722 env.require(balance(bob, alice[
"USD"](500)));
723 env.require(balance(alice, bob[
"USD"](-500)));
729 testcase(
"Delete default trustline");
730 using namespace test::jtx;
734 Env env(*
this, features);
735 Account alice{
"alice"};
738 env.fund(XRP(1000), alice, bob);
741 auto const USD = alice[
"USD"];
749 env.trust(USD(1000), bob);
750 env(pay(alice, bob, USD(1000)));
753 BEAST_EXPECT(ownerCount(env, alice) == 0);
754 BEAST_EXPECT(ownerCount(env, bob) == 1);
756 env.require(balance(bob, alice[
"USD"](1000)));
757 env.require(balance(alice, bob[
"USD"](-1000)));
760 env(trust(bob, USD(0), 0));
763 BEAST_EXPECT(ownerCount(env, alice) == 0);
764 BEAST_EXPECT(ownerCount(env, bob) == 1);
768 env(claw(alice, bob[
"USD"](1000)));
772 BEAST_EXPECT(ownerCount(env, alice) == 0);
773 BEAST_EXPECT(ownerCount(env, bob) == 0);
780 using namespace test::jtx;
784 Env env(*
this, features);
785 Account alice{
"alice"};
788 env.fund(XRP(1000), alice, bob);
791 auto const USD = alice[
"USD"];
799 env.trust(USD(1000), bob);
800 env(pay(alice, bob, USD(1000)));
803 env.require(balance(bob, alice[
"USD"](1000)));
804 env.require(balance(alice, bob[
"USD"](-1000)));
811 env(claw(alice, bob[
"USD"](200)));
815 env.require(balance(bob, alice[
"USD"](800)));
816 env.require(balance(alice, bob[
"USD"](-800)));
825 testcase(
"Amount exceeds available");
826 using namespace test::jtx;
830 Env env(*
this, features);
831 Account alice{
"alice"};
834 env.fund(XRP(1000), alice, bob);
837 auto const USD = alice[
"USD"];
845 env.trust(USD(1000), bob);
846 env(pay(alice, bob, USD(1000)));
849 env.require(balance(bob, alice[
"USD"](1000)));
850 env.require(balance(alice, bob[
"USD"](-1000)));
853 env(claw(alice, bob[
"USD"](2000)));
858 env.require(balance(bob, alice[
"USD"](0)));
859 env.require(balance(alice, bob[
"USD"](0)));
863 BEAST_EXPECT(ownerCount(env, alice) == 0);
864 BEAST_EXPECT(ownerCount(env, bob) == 1);
867 env(trust(bob, USD(0), 0));
871 BEAST_EXPECT(ownerCount(env, alice) == 0);
872 BEAST_EXPECT(ownerCount(env, bob) == 0);
879 using namespace test::jtx;
882 Env env(*
this, features);
883 Account alice{
"alice"};
886 env.fund(XRP(1000), alice, bob);
889 auto const USD = alice[
"USD"];
897 env.trust(USD(1000), bob);
898 env(pay(alice, bob, USD(100)));
901 env.require(balance(bob, alice[
"USD"](100)));
902 env.require(balance(alice, bob[
"USD"](-100)));
907 env(ticket::create(alice, ticketCnt));
910 BEAST_EXPECT(
ticketCount(env, alice) == ticketCnt);
911 BEAST_EXPECT(ownerCount(env, alice) == ticketCnt);
913 while (ticketCnt > 0)
916 env(claw(alice, bob[
"USD"](5)), ticket::use(aliceTicketSeq++));
920 BEAST_EXPECT(
ticketCount(env, alice) == ticketCnt);
921 BEAST_EXPECT(ownerCount(env, alice) == ticketCnt);
925 env.require(balance(bob, alice[
"USD"](50)));
926 env.require(balance(alice, bob[
"USD"](-50)));
929 BEAST_EXPECT(env.seq(alice) == aliceSeq);