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);