Skip to content

Commit

Permalink
tests for withdrawErc20
Browse files Browse the repository at this point in the history
  • Loading branch information
ShivaanshK committed Jul 4, 2024
1 parent 58ebf22 commit de84d99
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.26;

import { console2 } from "forge-std/src/console2.sol";
import { NexusTestBase } from "../../base/NexusTestBase.sol";
import { IBiconomySponsorshipPaymaster } from "../../../../contracts/interfaces/IBiconomySponsorshipPaymaster.sol";
import { BiconomySponsorshipPaymaster } from "../../../../contracts/sponsorship/SponsorshipPaymasterWithPremium.sol";
import { PackedUserOperation } from "account-abstraction/contracts/core/UserOperationLib.sol";
import { MockToken } from "./../../../../lib/nexus.git/contracts/mocks/MockToken.sol";

contract TestSponsorshipPaymasterWithPremium is NexusTestBase {
BiconomySponsorshipPaymaster public bicoPaymaster;
Expand Down Expand Up @@ -286,4 +286,31 @@ contract TestSponsorshipPaymasterWithPremium is NexusTestBase {
vm.expectRevert("Gas overhead too high");
bicoPaymaster.setPostopCost(newPostopCost);
}

function test_WithdrawErc20() external prankModifier(PAYMASTER_OWNER.addr) {
MockToken token = new MockToken("Token", "TKN");
uint256 mintAmount = 10 * (10 ** token.decimals());
token.mint(address(bicoPaymaster), mintAmount);

assertEq(token.balanceOf(address(bicoPaymaster)), mintAmount);
assertEq(token.balanceOf(ALICE_ADDRESS), 0);

vm.expectEmit(true, true, true, true, address(bicoPaymaster));
emit IBiconomySponsorshipPaymaster.TokensWithdrawn(
address(token), ALICE_ADDRESS, mintAmount, PAYMASTER_OWNER.addr
);
bicoPaymaster.withdrawERC20(token, ALICE_ADDRESS, mintAmount);

assertEq(token.balanceOf(address(bicoPaymaster)), 0);
assertEq(token.balanceOf(ALICE_ADDRESS), mintAmount);
}

function test_RevertIf_WithdrawErc20ToZeroAddress() external prankModifier(PAYMASTER_OWNER.addr) {
MockToken token = new MockToken("Token", "TKN");
uint256 mintAmount = 10 * (10 ** token.decimals());
token.mint(address(bicoPaymaster), mintAmount);

vm.expectRevert(abi.encodeWithSelector(CanNotWithdrawToZeroAddress.selector));
bicoPaymaster.withdrawERC20(token, address(0), mintAmount);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import { console2 } from "forge-std/src/Console2.sol";
import { NexusTestBase } from "../../base/NexusTestBase.sol";
import { IBiconomySponsorshipPaymaster } from "../../../../contracts/interfaces/IBiconomySponsorshipPaymaster.sol";
import { BiconomySponsorshipPaymaster } from "../../../../contracts/sponsorship/SponsorshipPaymasterWithPremium.sol";
import { MockToken } from "./../../../../lib/nexus.git/contracts/mocks/MockToken.sol";


contract TestFuzz_SponsorshipPaymasterWithPremium is NexusTestBase {
BiconomySponsorshipPaymaster public bicoPaymaster;
Expand Down Expand Up @@ -90,4 +92,24 @@ contract TestFuzz_SponsorshipPaymasterWithPremium is NexusTestBase {
uint48 resultingPostopCost = bicoPaymaster.postopCost();
assertEq(resultingPostopCost, newPostopCost);
}

function testFuzz_WithdrawErc20(address target, uint256 amount) external prankModifier(PAYMASTER_OWNER.addr) {
vm.assume(target != address(0));
vm.assume(amount <= 1_000_000 * (10 ** 18));
MockToken token = new MockToken("Token", "TKN");
uint256 mintAmount = amount;
token.mint(address(bicoPaymaster), mintAmount);

assertEq(token.balanceOf(address(bicoPaymaster)), mintAmount);
assertEq(token.balanceOf(ALICE_ADDRESS), 0);

vm.expectEmit(true, true, true, true, address(bicoPaymaster));
emit IBiconomySponsorshipPaymaster.TokensWithdrawn(
address(token), ALICE_ADDRESS, mintAmount, PAYMASTER_OWNER.addr
);
bicoPaymaster.withdrawERC20(token, ALICE_ADDRESS, mintAmount);

assertEq(token.balanceOf(address(bicoPaymaster)), 0);
assertEq(token.balanceOf(ALICE_ADDRESS), mintAmount);
}
}

0 comments on commit de84d99

Please sign in to comment.