@@ -3501,6 +3501,10 @@ struct EscrowToken_test : public beast::unit_test::suite
3501
3501
BEAST_EXPECT (
3502
3502
transferRate.value == std::uint32_t (1'000'000'000 * 1.25 ));
3503
3503
3504
+ BEAST_EXPECT (mptEscrowed (env, alice, MPT) == 125 );
3505
+ BEAST_EXPECT (issuerMPTEscrowed (env, MPT) == 125 );
3506
+ BEAST_EXPECT (env.balance (gw, MPT) == MPT (20'000 ));
3507
+
3504
3508
// bob can finish escrow
3505
3509
env (escrow::finish (bob, alice, seq1),
3506
3510
escrow::condition (escrow::cb1),
@@ -3510,6 +3514,15 @@ struct EscrowToken_test : public beast::unit_test::suite
3510
3514
3511
3515
BEAST_EXPECT (env.balance (alice, MPT) == preAlice - delta);
3512
3516
BEAST_EXPECT (env.balance (bob, MPT) == MPT (10'100 ));
3517
+
3518
+ auto const escrowedWithFix =
3519
+ env.current ()->rules ().enabled (fixTokenEscrowV1) ? 0 : 25 ;
3520
+ auto const outstandingWithFix =
3521
+ env.current ()->rules ().enabled (fixTokenEscrowV1) ? MPT (19'975 )
3522
+ : MPT (20'000 );
3523
+ BEAST_EXPECT (mptEscrowed (env, alice, MPT) == escrowedWithFix);
3524
+ BEAST_EXPECT (issuerMPTEscrowed (env, MPT) == escrowedWithFix);
3525
+ BEAST_EXPECT (env.balance (gw, MPT) == outstandingWithFix);
3513
3526
}
3514
3527
3515
3528
// test locked rate: cancel
@@ -3554,6 +3567,60 @@ struct EscrowToken_test : public beast::unit_test::suite
3554
3567
3555
3568
BEAST_EXPECT (env.balance (alice, MPT) == preAlice);
3556
3569
BEAST_EXPECT (env.balance (bob, MPT) == preBob);
3570
+ BEAST_EXPECT (env.balance (gw, MPT) == MPT (20'000 ));
3571
+ BEAST_EXPECT (mptEscrowed (env, alice, MPT) == 0 );
3572
+ BEAST_EXPECT (issuerMPTEscrowed (env, MPT) == 0 );
3573
+ }
3574
+
3575
+ // test locked rate: issuer is destination
3576
+ {
3577
+ Env env{*this , features};
3578
+ auto const baseFee = env.current ()->fees ().base ;
3579
+ auto const alice = Account (" alice" );
3580
+ auto const bob = Account (" bob" );
3581
+ auto const gw = Account (" gw" );
3582
+
3583
+ MPTTester mptGw (env, gw, {.holders = {alice, bob}});
3584
+ mptGw.create (
3585
+ {.transferFee = 25000 ,
3586
+ .ownerCount = 1 ,
3587
+ .holderCount = 0 ,
3588
+ .flags = tfMPTCanEscrow | tfMPTCanTransfer});
3589
+ mptGw.authorize ({.account = alice});
3590
+ mptGw.authorize ({.account = bob});
3591
+ auto const MPT = mptGw[" MPT" ];
3592
+ env (pay (gw, alice, MPT (10'000 )));
3593
+ env (pay (gw, bob, MPT (10'000 )));
3594
+ env.close ();
3595
+
3596
+ // alice can create escrow w/ xfer rate
3597
+ auto const preAlice = env.balance (alice, MPT);
3598
+ auto const seq1 = env.seq (alice);
3599
+ auto const delta = MPT (125 );
3600
+ env (escrow::create (alice, gw, MPT (125 )),
3601
+ escrow::condition (escrow::cb1),
3602
+ escrow::finish_time (env.now () + 1s),
3603
+ fee (baseFee * 150 ));
3604
+ env.close ();
3605
+ auto const transferRate = escrow::rate (env, alice, seq1);
3606
+ BEAST_EXPECT (
3607
+ transferRate.value == std::uint32_t (1'000'000'000 * 1.25 ));
3608
+
3609
+ BEAST_EXPECT (mptEscrowed (env, alice, MPT) == 125 );
3610
+ BEAST_EXPECT (issuerMPTEscrowed (env, MPT) == 125 );
3611
+ BEAST_EXPECT (env.balance (gw, MPT) == MPT (20'000 ));
3612
+
3613
+ // bob can finish escrow
3614
+ env (escrow::finish (gw, alice, seq1),
3615
+ escrow::condition (escrow::cb1),
3616
+ escrow::fulfillment (escrow::fb1),
3617
+ fee (baseFee * 150 ));
3618
+ env.close ();
3619
+
3620
+ BEAST_EXPECT (env.balance (alice, MPT) == preAlice - delta);
3621
+ BEAST_EXPECT (mptEscrowed (env, alice, MPT) == 0 );
3622
+ BEAST_EXPECT (issuerMPTEscrowed (env, MPT) == 0 );
3623
+ BEAST_EXPECT (env.balance (gw, MPT) == MPT (19'875 ));
3557
3624
}
3558
3625
}
3559
3626
@@ -3878,6 +3945,7 @@ struct EscrowToken_test : public beast::unit_test::suite
3878
3945
FeatureBitset const all{testable_amendments ()};
3879
3946
testIOUWithFeats (all);
3880
3947
testMPTWithFeats (all);
3948
+ testMPTWithFeats (all - fixTokenEscrowV1);
3881
3949
}
3882
3950
};
3883
3951
0 commit comments