47 testcase(
"Enable AllowTrustLineClawback flag");
48 using namespace test::jtx;
54 Env env(*
this, features);
55 Account
const alice{
"alice"};
57 env.fund(XRP(1000), alice);
61 env(fset(alice, asfAllowTrustLineClawback));
63 env.require(flags(alice, asfAllowTrustLineClawback));
66 env(fclear(alice, asfAllowTrustLineClawback));
68 env.require(flags(alice, asfAllowTrustLineClawback));
71 env.require(nflags(alice, asfNoFreeze));
79 Env env(*
this, features);
80 Account
const alice{
"alice"};
82 env.fund(XRP(1000), alice);
85 env.require(nflags(alice, asfNoFreeze));
88 env(fset(alice, asfNoFreeze));
92 env.require(flags(alice, asfNoFreeze));
98 env.require(nflags(alice, asfAllowTrustLineClawback));
104 Env env(*
this, features);
106 Account
const alice{
"alice"};
107 Account
const bob{
"bob"};
109 env.fund(XRP(1000), alice, bob);
112 auto const USD = alice[
"USD"];
113 env.require(nflags(alice, asfAllowTrustLineClawback));
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);
124 env(fset(alice, asfAllowTrustLineClawback), ter(
tecOWNERS));
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);
136 env(fset(alice, asfAllowTrustLineClawback));
138 env.require(flags(alice, asfAllowTrustLineClawback));
140 BEAST_EXPECT(ownerCount(env, alice) == 0);
141 BEAST_EXPECT(ownerCount(env, bob) == 0);
147 Env env(*
this, features - featureClawback);
149 Account
const alice{
"alice"};
151 env.fund(XRP(1000), alice);
154 env.require(nflags(alice, asfAllowTrustLineClawback));
159 env(fset(alice, asfAllowTrustLineClawback));
161 env.require(nflags(alice, asfAllowTrustLineClawback));
164 env.enableFeature(featureClawback);
168 env(fset(alice, asfAllowTrustLineClawback));
170 env.require(flags(alice, asfAllowTrustLineClawback));
178 using namespace test::jtx;
184 Env env(*
this, features - featureClawback);
186 Account
const alice{
"alice"};
187 Account
const bob{
"bob"};
189 env.fund(XRP(1000), alice, bob);
192 env.require(nflags(alice, asfAllowTrustLineClawback));
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
const alice{
"alice"};
232 Account
const bob{
"bob"};
234 env.fund(XRP(1000), alice, bob);
238 env(fset(alice, asfAllowTrustLineClawback));
240 env.require(flags(alice, asfAllowTrustLineClawback));
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
const alice{
"alice"};
314 Account
const bob{
"bob"};
317 env.fund(XRP(1000), alice);
321 env(fset(alice, asfAllowTrustLineClawback));
323 env.require(flags(alice, asfAllowTrustLineClawback));
333 Env env(*
this, features);
335 Account
const alice{
"alice"};
336 Account
const bob{
"bob"};
337 Account
const cindy{
"cindy"};
339 env.fund(XRP(1000), alice, bob, cindy);
342 auto const USD = alice[
"USD"];
345 env(fset(alice, asfAllowTrustLineClawback));
347 env.require(flags(alice, asfAllowTrustLineClawback));
350 env(fset(cindy, asfAllowTrustLineClawback));
352 env.require(flags(cindy, asfAllowTrustLineClawback));
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
const alice{
"alice"};
379 Account
const bob{
"bob"};
381 env.fund(XRP(1000), alice, bob);
384 auto const USD = alice[
"USD"];
385 auto const CAD = bob[
"CAD"];
388 env(fset(alice, asfAllowTrustLineClawback));
390 env.require(flags(alice, asfAllowTrustLineClawback));
393 env(fset(bob, asfAllowTrustLineClawback));
395 env.require(flags(bob, asfAllowTrustLineClawback));
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
const alice{
"alice"};
449 Account
const bob{
"bob"};
451 env.fund(XRP(1000), alice, bob);
454 auto const USD = alice[
"USD"];
457 env(fset(alice, asfAllowTrustLineClawback));
459 env.require(flags(alice, asfAllowTrustLineClawback));
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
const alice{
"alice"};
500 Account
const bob{
"bob"};
501 Account
const cindy{
"cindy"};
503 env.fund(XRP(1000), alice, bob, cindy);
507 env(fset(alice, asfAllowTrustLineClawback));
509 env.require(flags(alice, asfAllowTrustLineClawback));
512 env(fset(bob, asfAllowTrustLineClawback));
514 env.require(flags(bob, asfAllowTrustLineClawback));
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
const alice{
"alice"};
558 Account
const bob{
"bob"};
559 Account
const cindy{
"cindy"};
561 env.fund(XRP(1000), alice, bob, cindy);
564 auto const USD = alice[
"USD"];
567 env(fset(alice, asfAllowTrustLineClawback));
569 env.require(flags(alice, asfAllowTrustLineClawback));
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
const alice{
"alice"};
628 Account
const bob{
"bob"};
630 env.fund(XRP(1000), alice, bob);
634 env(fset(alice, asfAllowTrustLineClawback));
636 env.require(flags(alice, asfAllowTrustLineClawback));
639 env(fset(bob, asfAllowTrustLineClawback));
641 env.require(flags(bob, asfAllowTrustLineClawback));
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
const alice{
"alice"};
715 Account
const bob{
"bob"};
717 env.fund(XRP(1000), alice, bob);
720 auto const USD = alice[
"USD"];
723 env(fset(alice, asfAllowTrustLineClawback));
725 env.require(flags(alice, asfAllowTrustLineClawback));
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
const alice{
"alice"};
765 Account
const bob{
"bob"};
767 env.fund(XRP(1000), alice, bob);
770 auto const USD = alice[
"USD"];
773 env(fset(alice, asfAllowTrustLineClawback));
775 env.require(flags(alice, asfAllowTrustLineClawback));
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)));
786 env(trust(alice, bob[
"USD"](0), tfSetFreeze));
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
const alice{
"alice"};
811 Account
const bob{
"bob"};
813 env.fund(XRP(1000), alice, bob);
816 auto const USD = alice[
"USD"];
819 env(fset(alice, asfAllowTrustLineClawback));
821 env.require(flags(alice, asfAllowTrustLineClawback));
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
const alice{
"alice"};
863 Account
const bob{
"bob"};
865 env.fund(XRP(1000), alice, bob);
868 auto const USD = alice[
"USD"];
871 env(fset(alice, asfAllowTrustLineClawback));
873 env.require(flags(alice, asfAllowTrustLineClawback));
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);