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)), txflags(0x00008000), ter(
temINVALID_FLAG));
274 env(pay(bob, alice, USD(10)));
278 BEAST_EXPECT(ownerCount(env, alice) == 0);
279 BEAST_EXPECT(ownerCount(env, bob) == 1);
280 env.require(balance(bob, alice[
"USD"](0)));
281 env.require(balance(alice, bob[
"USD"](0)));
288 env(trust(bob, USD(0), 0));
292 BEAST_EXPECT(ownerCount(env, alice) == 0);
293 BEAST_EXPECT(ownerCount(env, bob) == 0);
296 env(claw(alice, bob[
"USD"](5)), ter(
tecNO_LINE));
307 using namespace test::jtx;
311 Env env(*
this, features);
313 Account alice{
"alice"};
317 env.fund(XRP(1000), alice);
333 Env env(*
this, features);
335 Account alice{
"alice"};
337 Account cindy{
"cindy"};
339 env.fund(XRP(1000), alice, bob, cindy);
342 auto const USD = alice[
"USD"];
355 env.trust(USD(1000), bob);
356 env(pay(alice, bob, USD(1000)));
359 env.require(balance(bob, alice[
"USD"](1000)));
360 env.require(balance(alice, bob[
"USD"](-1000)));
364 env(claw(cindy, bob[
"USD"](200)), ter(
tecNO_LINE));
376 Env env(*
this, features);
378 Account alice{
"alice"};
381 env.fund(XRP(1000), alice, bob);
384 auto const USD = alice[
"USD"];
385 auto const CAD = bob[
"CAD"];
404 env.trust(USD(1000), bob);
405 env(pay(alice, bob, USD(10)));
408 env.require(balance(bob, alice[
"USD"](10)));
409 env.require(balance(alice, bob[
"USD"](-10)));
424 env.trust(CAD(1000), alice);
425 env(pay(bob, alice, CAD(10)));
428 env.require(balance(bob, alice[
"CAD"](-10)));
429 env.require(balance(alice, bob[
"CAD"](10)));
443 using namespace test::jtx;
446 Env env(*
this, features);
448 Account alice{
"alice"};
451 env.fund(XRP(1000), alice, bob);
454 auto const USD = alice[
"USD"];
462 env.trust(USD(1000), bob);
463 env(pay(alice, bob, USD(1000)));
466 env.require(balance(bob, alice[
"USD"](1000)));
467 env.require(balance(alice, bob[
"USD"](-1000)));
470 env(claw(alice, bob[
"USD"](200)));
474 env.require(balance(bob, alice[
"USD"](800)));
475 env.require(balance(alice, bob[
"USD"](-800)));
478 env(claw(alice, bob[
"USD"](800)));
482 env.require(balance(bob, alice[
"USD"](0)));
483 env.require(balance(alice, bob[
"USD"](0)));
491 using namespace test::jtx;
497 Env env(*
this, features);
499 Account alice{
"alice"};
501 Account cindy{
"cindy"};
503 env.fund(XRP(1000), alice, bob, cindy);
517 env.trust(alice[
"USD"](1000), cindy);
518 env(pay(alice, cindy, alice[
"USD"](1000)));
522 env.trust(bob[
"USD"](1000), cindy);
523 env(pay(bob, cindy, bob[
"USD"](1000)));
527 env(claw(alice, cindy[
"USD"](200)));
531 env.require(balance(cindy, alice[
"USD"](800)));
532 env.require(balance(alice, cindy[
"USD"](-800)));
535 env.require(balance(cindy, bob[
"USD"](1000)));
536 env.require(balance(bob, cindy[
"USD"](-1000)));
539 env(claw(bob, cindy[
"USD"](600)));
543 env.require(balance(cindy, bob[
"USD"](400)));
544 env.require(balance(bob, cindy[
"USD"](-400)));
547 env.require(balance(cindy, alice[
"USD"](800)));
548 env.require(balance(alice, cindy[
"USD"](-800)));
555 Env env(*
this, features);
557 Account alice{
"alice"};
559 Account cindy{
"cindy"};
561 env.fund(XRP(1000), alice, bob, cindy);
564 auto const USD = alice[
"USD"];
572 env.trust(USD(1000), bob);
573 env(pay(alice, bob, USD(600)));
576 env.require(balance(alice, bob[
"USD"](-600)));
577 env.require(balance(bob, alice[
"USD"](600)));
580 env.trust(USD(1000), cindy);
581 env(pay(alice, cindy, USD(1000)));
584 env.require(balance(alice, cindy[
"USD"](-1000)));
585 env.require(balance(cindy, alice[
"USD"](1000)));
588 env(claw(alice, bob[
"USD"](500)));
592 env.require(balance(alice, bob[
"USD"](-100)));
593 env.require(balance(bob, alice[
"USD"](100)));
596 env.require(balance(alice, cindy[
"USD"](-1000)));
597 env.require(balance(cindy, alice[
"USD"](1000)));
600 env(claw(alice, cindy[
"USD"](300)));
604 env.require(balance(alice, bob[
"USD"](-100)));
605 env.require(balance(bob, alice[
"USD"](100)));
608 env.require(balance(alice, cindy[
"USD"](-700)));
609 env.require(balance(cindy, alice[
"USD"](700)));
617 using namespace test::jtx;
625 Env env(*
this, features);
627 Account alice{
"alice"};
630 env.fund(XRP(1000), alice, bob);
644 env.trust(alice[
"USD"](1000), bob);
645 env(pay(alice, bob, alice[
"USD"](1000)));
648 BEAST_EXPECT(ownerCount(env, alice) == 0);
649 BEAST_EXPECT(ownerCount(env, bob) == 1);
652 env.require(balance(bob, alice[
"USD"](1000)));
653 env.require(balance(alice, bob[
"USD"](-1000)));
656 env.trust(bob[
"USD"](1500), alice);
657 env(pay(bob, alice, bob[
"USD"](1500)));
660 BEAST_EXPECT(ownerCount(env, alice) == 1);
661 BEAST_EXPECT(ownerCount(env, bob) == 1);
665 env.require(balance(bob, alice[
"USD"](-500)));
666 env.require(balance(alice, bob[
"USD"](500)));
678 env(claw(bob, alice[
"USD"](200)));
681 env.require(balance(bob, alice[
"USD"](-300)));
682 env.require(balance(alice, bob[
"USD"](300)));
685 env(pay(alice, bob, alice[
"USD"](1000)));
690 env.require(balance(bob, alice[
"USD"](700)));
691 env.require(balance(alice, bob[
"USD"](-700)));
698 env(claw(alice, bob[
"USD"](200)));
701 env.require(balance(bob, alice[
"USD"](500)));
702 env.require(balance(alice, bob[
"USD"](-500)));
708 testcase(
"Delete default trustline");
709 using namespace test::jtx;
713 Env env(*
this, features);
714 Account alice{
"alice"};
717 env.fund(XRP(1000), alice, bob);
720 auto const USD = alice[
"USD"];
728 env.trust(USD(1000), bob);
729 env(pay(alice, bob, USD(1000)));
732 BEAST_EXPECT(ownerCount(env, alice) == 0);
733 BEAST_EXPECT(ownerCount(env, bob) == 1);
735 env.require(balance(bob, alice[
"USD"](1000)));
736 env.require(balance(alice, bob[
"USD"](-1000)));
739 env(trust(bob, USD(0), 0));
742 BEAST_EXPECT(ownerCount(env, alice) == 0);
743 BEAST_EXPECT(ownerCount(env, bob) == 1);
747 env(claw(alice, bob[
"USD"](1000)));
751 BEAST_EXPECT(ownerCount(env, alice) == 0);
752 BEAST_EXPECT(ownerCount(env, bob) == 0);
759 using namespace test::jtx;
763 Env env(*
this, features);
764 Account alice{
"alice"};
767 env.fund(XRP(1000), alice, bob);
770 auto const USD = alice[
"USD"];
778 env.trust(USD(1000), bob);
779 env(pay(alice, bob, USD(1000)));
782 env.require(balance(bob, alice[
"USD"](1000)));
783 env.require(balance(alice, bob[
"USD"](-1000)));
790 env(claw(alice, bob[
"USD"](200)));
794 env.require(balance(bob, alice[
"USD"](800)));
795 env.require(balance(alice, bob[
"USD"](-800)));
804 testcase(
"Amount exceeds available");
805 using namespace test::jtx;
809 Env env(*
this, features);
810 Account alice{
"alice"};
813 env.fund(XRP(1000), alice, bob);
816 auto const USD = alice[
"USD"];
824 env.trust(USD(1000), bob);
825 env(pay(alice, bob, USD(1000)));
828 env.require(balance(bob, alice[
"USD"](1000)));
829 env.require(balance(alice, bob[
"USD"](-1000)));
832 env(claw(alice, bob[
"USD"](2000)));
837 env.require(balance(bob, alice[
"USD"](0)));
838 env.require(balance(alice, bob[
"USD"](0)));
842 BEAST_EXPECT(ownerCount(env, alice) == 0);
843 BEAST_EXPECT(ownerCount(env, bob) == 1);
846 env(trust(bob, USD(0), 0));
850 BEAST_EXPECT(ownerCount(env, alice) == 0);
851 BEAST_EXPECT(ownerCount(env, bob) == 0);
858 using namespace test::jtx;
861 Env env(*
this, features);
862 Account alice{
"alice"};
865 env.fund(XRP(1000), alice, bob);
868 auto const USD = alice[
"USD"];
876 env.trust(USD(1000), bob);
877 env(pay(alice, bob, USD(100)));
880 env.require(balance(bob, alice[
"USD"](100)));
881 env.require(balance(alice, bob[
"USD"](-100)));
886 env(ticket::create(alice, ticketCnt));
889 BEAST_EXPECT(
ticketCount(env, alice) == ticketCnt);
890 BEAST_EXPECT(ownerCount(env, alice) == ticketCnt);
892 while (ticketCnt > 0)
895 env(claw(alice, bob[
"USD"](5)), ticket::use(aliceTicketSeq++));
899 BEAST_EXPECT(
ticketCount(env, alice) == ticketCnt);
900 BEAST_EXPECT(ownerCount(env, alice) == ticketCnt);
904 env.require(balance(bob, alice[
"USD"](50)));
905 env.require(balance(alice, bob[
"USD"](-50)));
908 BEAST_EXPECT(env.seq(alice) == aliceSeq);