diff --git a/src/interfaces/IBalancerVaultAdmin.sol b/src/interfaces/IBalancerVaultAdmin.sol index 8ba1cb7..4c36109 100644 --- a/src/interfaces/IBalancerVaultAdmin.sol +++ b/src/interfaces/IBalancerVaultAdmin.sol @@ -8,4 +8,7 @@ interface IBalancerVaultAdmin { /// @return minimumTradeAmount The minimum trade amount. /// This is used to ensure that trades do not occur below a certain threshold. function getMinimumTradeAmount() external view returns (uint256); + /// @dev Gets the balancer vault address. + /// @return balancerVault The address of the Balancer vault. + function vault() external view returns (address balancerVault); } diff --git a/test/DerolasAuction.t.sol b/test/DerolasAuction.t.sol index 5f8f4fd..7edb7cf 100644 --- a/test/DerolasAuction.t.sol +++ b/test/DerolasAuction.t.sol @@ -24,6 +24,7 @@ contract TestDerolasAuctionContract is Test { // Test parameters address public whaleAddress = 0xC8F7030a4e25585624e2Fc792255a547255Cd77c; uint256 public topUpAmount = 2e18; // 2 Incentive Token + address public wethAddress = 0x4200000000000000000000000000000000000006; // WETH address on Base function setUp() public { c = new DerolasAuction( @@ -264,6 +265,36 @@ contract TestDerolasAuctionContract is Test { assertTrue(c.isRatioPass(updatedNonce, initialNonce, 0), "isRatioPass should return true after increment"); } + // Balancer donation tests. + function testBalancerEthDonation() public { + // Check that a donation can be made using Balancer's ETH donation method + this.testTopupIncentivesBalance(); // Ensure incentives are topped up + this.testDonateWithIncentives(); // Ensure a donation has been made + IBalancerVaultAdmin balancerVaultAdminContract = IBalancerVaultAdmin(balancerVaultAdmin); + uint256 initialBalance = IToken(wethAddress).balanceOf(balancerVaultAdminContract.vault()); + this.testCanEndRound(); // Ensure the round can be ended + uint256 finalBalance = IToken(wethAddress).balanceOf(balancerVaultAdminContract.vault()); + assertEq( + finalBalance, + initialBalance + minimumDonation, + "Final balance should be greater than initial balance after donation" + ); + } + + function testBalancerUnclaimedIncentiveDonation() public { + // Check that a donation can be made using Balancer's ETH donation method + IBalancerVaultAdmin balancerVaultAdminContract = IBalancerVaultAdmin(balancerVaultAdmin); + uint256 initialBalance = IToken(incentiveTokenAddress).balanceOf(balancerVaultAdminContract.vault()); + this.testTopupIncentivesBalance(); // Ensure incentives are topped up + this.testDonateWithIncentives(); // Ensure a donation has been made + this.testCanEndRound(); // Ensure the round can be ended + uint256 secondBalance = IToken(incentiveTokenAddress).balanceOf(balancerVaultAdminContract.vault()); + assertEq(secondBalance, initialBalance, "Vault balance equal to initial balance after 1st round"); + this.testCanEndRound(); // Ensure the round can be ended again + uint256 finalBalance = IToken(incentiveTokenAddress).balanceOf(balancerVaultAdminContract.vault()); + assertEq(finalBalance, initialBalance + availableRewards, "Final balance should include unclaimed"); + } + // admin tests function testCanChangeOwner() public { // Check that the owner can change the contract owner