@@ -7,8 +7,11 @@ import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol";
7
7
8
8
import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStakingShared.t.sol " ;
9
9
import { PaymentsEscrowSharedTest } from "../shared/payments-escrow/PaymentsEscrowShared.t.sol " ;
10
+ import { PPMMath } from "../../contracts/libraries/PPMMath.sol " ;
10
11
11
12
contract GraphEscrowTest is HorizonStakingSharedTest , PaymentsEscrowSharedTest {
13
+ using PPMMath for uint256 ;
14
+
12
15
/*
13
16
* MODIFIERS
14
17
*/
@@ -59,6 +62,7 @@ contract GraphEscrowTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest {
59
62
uint256 receiverBalance;
60
63
uint256 delegationPoolBalance;
61
64
uint256 dataServiceBalance;
65
+ uint256 payerEscrowBalance;
62
66
}
63
67
64
68
function _collectEscrow (
@@ -67,53 +71,62 @@ contract GraphEscrowTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest {
67
71
address _receiver ,
68
72
uint256 _tokens ,
69
73
address _dataService ,
70
- uint256 _tokensDataService
74
+ uint256 _dataServiceCut
71
75
) internal {
72
76
(, address _collector , ) = vm.readCallers ();
73
77
74
78
// Previous balances
75
- (uint256 previousPayerEscrowBalance , , ) = escrow.escrowAccounts (_payer, _collector, _receiver);
76
79
CollectPaymentData memory previousBalances = CollectPaymentData ({
77
80
escrowBalance: token.balanceOf (address (escrow)),
78
81
paymentsBalance: token.balanceOf (address (payments)),
79
82
receiverBalance: token.balanceOf (_receiver),
80
83
delegationPoolBalance: staking.getDelegatedTokensAvailable (_receiver, _dataService),
81
- dataServiceBalance: token.balanceOf (_dataService)
84
+ dataServiceBalance: token.balanceOf (_dataService),
85
+ payerEscrowBalance: 0
82
86
});
83
87
88
+ {
89
+ (uint256 payerEscrowBalance , , ) = escrow.escrowAccounts (_payer, _collector, _receiver);
90
+ previousBalances.payerEscrowBalance = payerEscrowBalance;
91
+ }
92
+
84
93
vm.expectEmit (address (escrow));
85
94
emit IPaymentsEscrow.EscrowCollected (_payer, _collector, _receiver, _tokens);
86
- escrow.collect (_paymentType, _payer, _receiver, _tokens, _dataService, _tokensDataService );
95
+ escrow.collect (_paymentType, _payer, _receiver, _tokens, _dataService, _dataServiceCut );
87
96
88
97
// Calculate cuts
89
- uint256 protocolPaymentCut = payments.PROTOCOL_PAYMENT_CUT ();
90
- uint256 delegatorCut = staking.getDelegationFeeCut (_receiver, _dataService, _paymentType);
98
+ // this is nasty but stack is indeed too deep
99
+ uint256 tokensDataService = (_tokens - _tokens.mulPPMRoundUp (payments.PROTOCOL_PAYMENT_CUT ())).mulPPMRoundUp (
100
+ _dataServiceCut
101
+ );
102
+ uint256 tokensDelegation = (_tokens -
103
+ _tokens.mulPPMRoundUp (payments.PROTOCOL_PAYMENT_CUT ()) -
104
+ tokensDataService).mulPPMRoundUp (staking.getDelegationFeeCut (_receiver, _dataService, _paymentType));
105
+ uint256 receiverExpectedPayment = _tokens -
106
+ _tokens.mulPPMRoundUp (payments.PROTOCOL_PAYMENT_CUT ()) -
107
+ tokensDataService -
108
+ tokensDelegation;
91
109
92
110
// After balances
93
- (uint256 afterPayerEscrowBalance , , ) = escrow.escrowAccounts (_payer, _collector, _receiver);
94
111
CollectPaymentData memory afterBalances = CollectPaymentData ({
95
112
escrowBalance: token.balanceOf (address (escrow)),
96
113
paymentsBalance: token.balanceOf (address (payments)),
97
114
receiverBalance: token.balanceOf (_receiver),
98
115
delegationPoolBalance: staking.getDelegatedTokensAvailable (_receiver, _dataService),
99
- dataServiceBalance: token.balanceOf (_dataService)
116
+ dataServiceBalance: token.balanceOf (_dataService),
117
+ payerEscrowBalance: 0
100
118
});
119
+ {
120
+ (uint256 afterPayerEscrowBalance , , ) = escrow.escrowAccounts (_payer, _collector, _receiver);
121
+ afterBalances.payerEscrowBalance = afterPayerEscrowBalance;
122
+ }
101
123
102
124
// Check receiver balance after payment
103
- uint256 receiverExpectedPayment = _tokens -
104
- _tokensDataService -
105
- (_tokens * protocolPaymentCut) /
106
- MAX_PPM -
107
- (_tokens * delegatorCut) /
108
- MAX_PPM;
109
125
assertEq (afterBalances.receiverBalance - previousBalances.receiverBalance, receiverExpectedPayment);
110
126
assertEq (token.balanceOf (address (payments)), 0 );
111
127
112
128
// Check delegation pool balance after payment
113
- assertEq (
114
- afterBalances.delegationPoolBalance - previousBalances.delegationPoolBalance,
115
- (_tokens * delegatorCut) / MAX_PPM
116
- );
129
+ assertEq (afterBalances.delegationPoolBalance - previousBalances.delegationPoolBalance, tokensDelegation);
117
130
118
131
// Check that the escrow account has been updated
119
132
assertEq (previousBalances.escrowBalance, afterBalances.escrowBalance + _tokens);
@@ -122,9 +135,9 @@ contract GraphEscrowTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest {
122
135
assertEq (previousBalances.paymentsBalance, afterBalances.paymentsBalance);
123
136
124
137
// Check data service balance after payment
125
- assertEq (afterBalances.dataServiceBalance - previousBalances.dataServiceBalance, _tokensDataService );
138
+ assertEq (afterBalances.dataServiceBalance - previousBalances.dataServiceBalance, tokensDataService );
126
139
127
140
// Check payers escrow balance after payment
128
- assertEq (previousPayerEscrowBalance - _tokens, afterPayerEscrowBalance );
141
+ assertEq (previousBalances.payerEscrowBalance - _tokens, afterBalances.payerEscrowBalance );
129
142
}
130
143
}
0 commit comments