@@ -171,4 +171,62 @@ contract RebaseTokenTest is Test {
171171 rebaseToken.setInterestRate (newInterestRate);
172172 assertEq (rebaseToken.getInterestRate (), initInterestRate);
173173 }
174+
175+ function testTransferMintsAccruedInterestToBothUsers (
176+ uint256 mintAmount ,
177+ uint256 amountSent
178+ ) public {
179+ mintAmount = bound (mintAmount, 1e5 + 1e5 , type (uint96 ).max);
180+ amountSent = bound (amountSent, 1e5 , mintAmount - 1e5 );
181+ vm.deal (user, mintAmount);
182+ vm.prank (user);
183+ vault.deposit {value: mintAmount}();
184+
185+ address user2 = makeAddr ("user2 " );
186+ uint256 userBalance = rebaseToken.balanceOf (user);
187+ uint256 user2Balance = rebaseToken.balanceOf (user2);
188+ assertEq (userBalance, mintAmount);
189+ assertEq (user2Balance, 0 );
190+
191+ vm.warp (block .timestamp + 1.5 hours);
192+ vm.prank (user);
193+ rebaseToken.transfer (user2, amountSent);
194+
195+ assertEq (
196+ rebaseToken.getUserInterestrate (user),
197+ rebaseToken.getUserInterestrate (user2)
198+ );
199+ }
200+
201+ function testTransferFromWithAllowance (
202+ uint256 allowance /*uint256 amount */
203+ ) public {
204+ allowance = bound (allowance, 1e5 , type (uint96 ).max);
205+ //amount = bound(amount, 1e5, type(uint96).max);
206+
207+ vm.deal (owner, allowance);
208+ vm.prank (owner);
209+ vault.deposit {value: allowance}();
210+
211+ vm.prank (owner);
212+ rebaseToken.approve (user, allowance);
213+
214+ address user1 = makeAddr ("user1 " );
215+
216+ uint256 ownerBalance = rebaseToken.balanceOf (owner);
217+ uint256 user1Balance = rebaseToken.balanceOf (user1);
218+ uint256 userAllowanceBefore = rebaseToken.allowance (owner, user);
219+
220+ vm.prank (user);
221+ rebaseToken.transferFrom (owner, user1, allowance);
222+
223+ uint256 ownerBalanceAfter = rebaseToken.balanceOf (owner);
224+ uint256 user1BalanceAfter = rebaseToken.balanceOf (user1);
225+ uint256 userAllowanceAfter = rebaseToken.allowance (owner, user);
226+
227+ // Assert the balances and allowance are updated correctly
228+ assertEq (ownerBalanceAfter, ownerBalance - allowance);
229+ assertEq (user1BalanceAfter, user1Balance + allowance);
230+ assertEq (userAllowanceAfter, userAllowanceBefore - allowance);
231+ }
174232}
0 commit comments