-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
5fde7b0
commit 06a7c89
Showing
10 changed files
with
301 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
// SPDX-License-Identifier: Unlicensed | ||
pragma solidity 0.8.20; | ||
|
||
import "./ZapperTest.sol"; | ||
|
||
contract Constructor is ZapperTest { | ||
function test_constructor_Normal() public { | ||
assertEq(address(zapper.swapRouter()), address(augustusSwapper), "swapRouter is not assigned correctly in constructor"); | ||
assertEq(address(zapper.owner()), address(owner), "owner is not assigned correctly in constructor"); | ||
assertEq(address(zapper.vault()), address(vault), "vault is not assigned correctly in constructor"); | ||
assertEq(address(zapper.warMinter()), address(minter), "warMinter is not assigned correctly in constructor"); | ||
assertEq(address(zapper.tokenTransferAddress()), address(tokenTransferAddress), "tokenTransferAddress is not assigned correctly in constructor"); | ||
} | ||
|
||
function test_constructor_ZeroAddressAugustusSwapper() public { | ||
vm.expectRevert(Errors.ZeroAddress.selector); | ||
new Zapper(address(owner), address(0), address(tokenTransferAddress), address(minter), address(vault)); | ||
} | ||
|
||
function test_constructor_ZeroAddressTokenTransferAddress() public { | ||
vm.expectRevert(Errors.ZeroAddress.selector); | ||
new Zapper(address(owner), address(augustusSwapper), address(0), address(minter), address(vault)); | ||
} | ||
|
||
function test_constructor_ZeroAddressWarMinter() public { | ||
vm.expectRevert(Errors.ZeroAddress.selector); | ||
new Zapper(address(owner), address(augustusSwapper), address(tokenTransferAddress), address(0), address(vault)); | ||
} | ||
|
||
function test_constructor_ZeroAddressVault() public { | ||
vm.expectRevert(Errors.ZeroAddress.selector); | ||
new Zapper(address(owner), address(augustusSwapper), address(tokenTransferAddress), address(minter), address(0)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// SPDX-License-Identifier: Unlicensed | ||
pragma solidity 0.8.20; | ||
|
||
import "./ZapperTest.sol"; | ||
|
||
contract RemoveWarlordAllowances is ZapperTest { | ||
function test_removeWarlordAllowances_Normal() public { | ||
vm.startPrank(owner); | ||
zapper.resetWarlordAllowances(); | ||
|
||
assertEq(cvx.allowance(address(zapper), address(minter)), type(uint256).max, "allowance is not set correctly"); | ||
assertEq(aura.allowance(address(zapper), address(minter)), type(uint256).max, "allowance is not set correctly"); | ||
assertEq(war.allowance(address(zapper), address(vault)), type(uint256).max, "allowance is not set correctly"); | ||
|
||
zapper.removeWarlordAllowances(); | ||
|
||
assertEq(cvx.allowance(address(zapper), address(minter)), 0, "allowance is not set correctly"); | ||
assertEq(aura.allowance(address(zapper), address(minter)), 0, "allowance is not set correctly"); | ||
assertEq(war.allowance(address(zapper), address(vault)), 0, "allowance is not set correctly"); | ||
|
||
vm.stopPrank(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
// SPDX-License-Identifier: Unlicensed | ||
pragma solidity 0.8.20; | ||
|
||
import "./ZapperTest.sol"; | ||
|
||
contract ResetWarlordAllowances is ZapperTest { | ||
function test_resetWarlordAllowances_Normal() public { | ||
vm.prank(owner); | ||
zapper.resetWarlordAllowances(); | ||
|
||
assertEq(cvx.allowance(address(zapper), address(minter)), type(uint256).max, "allowance is not set correctly"); | ||
assertEq(aura.allowance(address(zapper), address(minter)), type(uint256).max, "allowance is not set correctly"); | ||
assertEq(war.allowance(address(zapper), address(vault)), type(uint256).max, "allowance is not set correctly"); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
// SPDX-License-Identifier: Unlicensed | ||
pragma solidity 0.8.20; | ||
|
||
import "./ZapperTest.sol"; | ||
|
||
contract ZapERC20ToMultipleTokens is ZapperTest { | ||
function test_zapERC20ToMultipleTokens_Normal(uint256 erc20Amount, uint256[2] memory tokenAmount) public { | ||
erc20Amount = bound(erc20Amount, 1e18, 3000e18); | ||
tokenAmount[0] = bound(tokenAmount[0], 1e18, 3000e18); | ||
tokenAmount[1] = bound(tokenAmount[1], 1e18, 3000e18); | ||
|
||
bytes[] memory datas = new bytes[](2); | ||
address[] memory tokens = new address[](2); | ||
tokens[0] = address(aura); | ||
tokens[1] = address(cvx); | ||
|
||
uint256 stakerBalance = staker.balanceOf(address(vault)); | ||
|
||
deal(address(aura), address(zapper), tokenAmount[0]); | ||
deal(address(cvx), address(zapper), tokenAmount[1]); | ||
deal(alice, erc20Amount); | ||
|
||
uint256 expectedMintedAmount = ratios.getMintAmount(address(aura), tokenAmount[0]) + ratios.getMintAmount(address(cvx), tokenAmount[1]); | ||
uint256 expectedShares = vault.previewDeposit(expectedMintedAmount); | ||
|
||
vm.startPrank(alice); | ||
|
||
usdc.approve(address(zapper), erc20Amount); | ||
zapper.zapERC20ToMultipleTokens(address(usdc), tokens, erc20Amount, alice, datas); | ||
|
||
vm.stopPrank(); | ||
|
||
assertEqDecimal(aura.balanceOf(address(zapper)), 0, 18, "Vault should have no AURA"); | ||
assertEqDecimal(cvx.balanceOf(address(zapper)), 0, 18, "Vault should have no CVX"); | ||
assertEqDecimal( | ||
staker.balanceOf(address(vault)), stakerBalance + expectedMintedAmount, 18, "Vault should have same staker balance" | ||
); | ||
assertEqDecimal(vault.balanceOf(alice), expectedShares, 18, "Alice should have expected shares"); | ||
} | ||
|
||
function test_zapERC20ToMultipleTokens_ZeroValue(bool tokenSeed) public { | ||
bytes[] memory datas = new bytes[](2); | ||
address[] memory tokens = new address[](2); | ||
tokens[0] = address(aura); | ||
tokens[1] = address(cvx); | ||
|
||
vm.prank(alice); | ||
vm.expectRevert(Errors.ZeroValue.selector); | ||
zapper.zapERC20ToMultipleTokens(address(usdc), tokens, 0, alice, datas); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
// SPDX-License-Identifier: Unlicensed | ||
pragma solidity 0.8.20; | ||
|
||
import "./ZapperTest.sol"; | ||
|
||
contract ZapERC20ToSingleToken is ZapperTest { | ||
function test_zapERC20ToSingleToken_Normal(uint256 erc20amount, uint256 tokenAmount, bool tokenSeed) public { | ||
erc20amount = bound(erc20amount, 1e18, 3000e18); | ||
tokenAmount = bound(tokenAmount, 1e18, 3000e18); | ||
|
||
bytes memory data = ""; | ||
|
||
uint256 stakerBalance = staker.balanceOf(address(vault)); | ||
|
||
address token = tokenSeed ? address(aura) : address(cvx); | ||
deal(address(token), address(zapper), tokenAmount); | ||
deal(address(usdc), alice, erc20amount); | ||
|
||
uint256 expectedMintedAmount = ratios.getMintAmount(token, tokenAmount); | ||
uint256 expectedShares = vault.previewDeposit(expectedMintedAmount); | ||
|
||
vm.startPrank(alice); | ||
|
||
usdc.approve(address(zapper), erc20amount); | ||
zapper.zapERC20ToSingleToken(address(usdc), address(token), erc20amount, alice, data); | ||
|
||
vm.stopPrank(); | ||
|
||
assertEqDecimal(IERC20(token).balanceOf(address(zapper)), 0, 18, "Vault should have no AURA"); | ||
assertEqDecimal( | ||
staker.balanceOf(address(vault)), stakerBalance + expectedMintedAmount, 18, "Vault should have same staker balance" | ||
); | ||
assertEqDecimal(vault.balanceOf(alice), expectedShares, 18, "Alice should have expected shares"); | ||
} | ||
|
||
function test_zapERC20ToSingleToken_ZeroValue(bool tokenSeed) public { | ||
bytes memory data = ""; | ||
address token = tokenSeed ? address(aura) : address(cvx); | ||
|
||
vm.prank(alice); | ||
vm.expectRevert(Errors.ZeroValue.selector); | ||
zapper.zapERC20ToSingleToken(address(usdc), address(token), 0, alice, data); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
// SPDX-License-Identifier: Unlicensed | ||
pragma solidity 0.8.20; | ||
|
||
import "./ZapperTest.sol"; | ||
|
||
contract ZapEtherToMultipleTokens is ZapperTest { | ||
function test_zapEtherToMultipleTokens_Normal(uint256 etherAmount, uint256[2] memory tokenAmount) public { | ||
etherAmount = bound(etherAmount, 1e18, 3000e18); | ||
tokenAmount[0] = bound(tokenAmount[0], 1e18, 3000e18); | ||
tokenAmount[1] = bound(tokenAmount[1], 1e18, 3000e18); | ||
|
||
bytes[] memory datas = new bytes[](2); | ||
address[] memory tokens = new address[](2); | ||
tokens[0] = address(aura); | ||
tokens[1] = address(cvx); | ||
|
||
uint256 stakerBalance = staker.balanceOf(address(vault)); | ||
|
||
deal(address(aura), address(zapper), tokenAmount[0]); | ||
deal(address(cvx), address(zapper), tokenAmount[1]); | ||
deal(alice, etherAmount); | ||
|
||
uint256 expectedMintedAmount = ratios.getMintAmount(address(aura), tokenAmount[0]) + ratios.getMintAmount(address(cvx), tokenAmount[1]); | ||
uint256 expectedShares = vault.previewDeposit(expectedMintedAmount); | ||
|
||
vm.prank(alice); | ||
zapper.zapEtherToMultipleTokens{value: etherAmount}(tokens, alice, datas); | ||
|
||
|
||
assertEqDecimal(aura.balanceOf(address(zapper)), 0, 18, "Vault should have no AURA"); | ||
assertEqDecimal(cvx.balanceOf(address(zapper)), 0, 18, "Vault should have no CVX"); | ||
assertEqDecimal( | ||
staker.balanceOf(address(vault)), stakerBalance + expectedMintedAmount, 18, "Vault should have same staker balance" | ||
); | ||
assertEqDecimal(vault.balanceOf(alice), expectedShares, 18, "Alice should have expected shares"); | ||
} | ||
|
||
function test_zapEtherToMultipleTokens_ZeroValue(bool tokenSeed) public { | ||
bytes[] memory datas = new bytes[](2); | ||
address[] memory tokens = new address[](2); | ||
tokens[0] = address(aura); | ||
tokens[1] = address(cvx); | ||
|
||
vm.prank(alice); | ||
vm.expectRevert(Errors.ZeroValue.selector); | ||
zapper.zapEtherToMultipleTokens{value: 0}(tokens, alice, datas); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
// SPDX-License-Identifier: Unlicensed | ||
pragma solidity 0.8.20; | ||
|
||
import "./ZapperTest.sol"; | ||
|
||
contract ZapEtherToSingleToken is ZapperTest { | ||
function test_zapEtherToSingleToken_Normal(uint256 etherAmount, uint256 tokenAmount, bool tokenSeed) public { | ||
etherAmount = bound(etherAmount, 1e18, 3000e18); | ||
tokenAmount = bound(tokenAmount, 1e18, 3000e18); | ||
|
||
bytes memory data = ""; | ||
|
||
uint256 stakerBalance = staker.balanceOf(address(vault)); | ||
|
||
address token = tokenSeed ? address(aura) : address(cvx); | ||
deal(address(token), address(zapper), tokenAmount); | ||
deal(alice, etherAmount); | ||
|
||
uint256 expectedMintedAmount = ratios.getMintAmount(token, tokenAmount); | ||
uint256 expectedShares = vault.previewDeposit(expectedMintedAmount); | ||
|
||
vm.prank(alice); | ||
zapper.zapEtherToSingleToken{value: etherAmount}(address(token), alice, data); | ||
|
||
|
||
assertEqDecimal(IERC20(token).balanceOf(address(zapper)), 0, 18, "Vault should have no AURA"); | ||
assertEqDecimal( | ||
staker.balanceOf(address(vault)), stakerBalance + expectedMintedAmount, 18, "Vault should have same staker balance" | ||
); | ||
assertEqDecimal(vault.balanceOf(alice), expectedShares, 18, "Alice should have expected shares"); | ||
} | ||
|
||
function test_zapEtherToSingleToken_ZeroValue(bool tokenSeed) public { | ||
bytes memory data = ""; | ||
address token = tokenSeed ? address(aura) : address(cvx); | ||
|
||
vm.prank(alice); | ||
vm.expectRevert(Errors.ZeroValue.selector); | ||
zapper.zapEtherToSingleToken{value: 0}(address(token), alice, data); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
// SPDX-License-Identifier: Unlicensed | ||
pragma solidity 0.8.20; | ||
|
||
import "../Vault/VaultTest.sol"; | ||
import { Zapper } from "../../src/Zapper.sol"; | ||
import { Vault } from "../../src/Vault.sol"; | ||
|
||
contract ZapperTest is VaultTest { | ||
uint256 constant cvxMaxSupply = 100_000_000e18; | ||
uint256 constant auraMaxSupply = 100_000_000e18; | ||
|
||
Zapper zapper; | ||
|
||
event ZapHappened(address indexed sender, address indexed receiver, uint256 stakedAmount); | ||
|
||
function setUp() public virtual override { | ||
VaultTest.setUp(); | ||
|
||
vm.startPrank(owner); | ||
|
||
zapper = new Zapper(owner, augustusSwapper, tokenTransferAddress, address(minter), address(vault)); | ||
|
||
zapper.resetWarlordAllowances(); | ||
|
||
vm.stopPrank(); | ||
|
||
deal(address(weth), address(alice), 10_000e18); | ||
deal(address(usdc), address(alice), 10_000e18); | ||
} | ||
} |