Skip to content

Commit cd71860

Browse files
authored
Add tests for wstETH/WETH Balancer pool (#1725)
* Split deployment and fix fixtures * Deposit tests for wstETH/WETH pool * Add withdraw test
1 parent d60fe7e commit cd71860

File tree

5 files changed

+488
-33
lines changed

5 files changed

+488
-33
lines changed

contracts/contracts/proxies/Proxies.sol

+9
Original file line numberDiff line numberDiff line change
@@ -165,3 +165,12 @@ contract OETHBalancerMetaPoolrEthStrategyProxy is
165165
{
166166

167167
}
168+
169+
/**
170+
* @notice OETHBalancerMetaPoolwstEthStrategyProxy delegates calls to a BalancerMetaPoolStrategy implementation
171+
*/
172+
contract OETHBalancerMetaPoolwstEthStrategyProxy is
173+
InitializeGovernedUpgradeabilityProxy
174+
{
175+
176+
}

contracts/contracts/strategies/balancer/BaseBalancerStrategy.sol

+6-2
Original file line numberDiff line numberDiff line change
@@ -287,10 +287,14 @@ abstract contract BaseBalancerStrategy is InitializableAbstractStrategy {
287287
{
288288
if (asset == stETH) {
289289
wrappedAsset = wstETH;
290-
wrappedAmount = IWstETH(wstETH).wrap(amount);
290+
if (amount > 0) {
291+
wrappedAmount = IWstETH(wstETH).wrap(amount);
292+
}
291293
} else if (asset == frxETH) {
292294
wrappedAsset = sfrxETH;
293-
wrappedAmount = IERC4626(sfrxETH).deposit(amount, address(this));
295+
if (amount > 0) {
296+
wrappedAmount = IERC4626(sfrxETH).deposit(amount, address(this));
297+
}
294298
} else {
295299
wrappedAsset = asset;
296300
wrappedAmount = amount;

contracts/test/_fixture.js

+88-25
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const hre = require("hardhat");
33
const { ethers } = hre;
44

55
const addresses = require("../utils/addresses");
6-
const { balancer_rETH_WETH_PID } = require("../utils/constants");
6+
const { balancer_rETH_WETH_PID, balancer_stETH_WETH_PID } = require("../utils/constants");
77
const {
88
fundAccounts,
99
fundAccountsForOETHUnitTests,
@@ -27,6 +27,7 @@ const threepoolSwapAbi = require("./abi/threepoolSwap.json");
2727
const sfrxETHAbi = require("./abi/sfrxETH.json");
2828
const { deployWithConfirmation } = require("../utils/deploy");
2929
const { defaultAbiCoder, parseUnits, parseEther } = require("ethers/lib/utils");
30+
const balancerStrategyDeployment = require("../utils/balancerStrategyDeployment");
3031

3132
const defaultFixture = deployments.createFixture(async () => {
3233
await deployments.fixture(
@@ -828,34 +829,95 @@ async function convexVaultFixture() {
828829
}
829830

830831
/**
831-
* Configure a Vault with only the balancerREthStrategy
832+
* Configure a Vault with the balancerREthStrategy
832833
*/
833-
async function balancerREthFixture() {
834-
const fixture = await loadFixture(defaultFixture);
835-
const { oethVault, timelock, weth, reth, balancerREthStrategy, josh } =
836-
fixture;
834+
function balancerREthFixtureSetup() {
835+
return deployments.createFixture(async () => {
836+
const fixture = await defaultFixture();
837+
const { oethVault, timelock, weth, reth, balancerREthStrategy, josh } =
838+
fixture;
837839

838-
await oethVault
839-
.connect(timelock)
840-
.setAssetDefaultStrategy(reth.address, balancerREthStrategy.address);
841-
await oethVault
842-
.connect(timelock)
843-
.setAssetDefaultStrategy(weth.address, balancerREthStrategy.address);
840+
await oethVault
841+
.connect(timelock)
842+
.setAssetDefaultStrategy(reth.address, balancerREthStrategy.address);
843+
await oethVault
844+
.connect(timelock)
845+
.setAssetDefaultStrategy(weth.address, balancerREthStrategy.address);
844846

845-
fixture.rEthBPT = await ethers.getContractAt(
846-
"IERC20Metadata",
847-
addresses.mainnet.rETH_WETH_BPT,
848-
josh
849-
);
850-
fixture.balancerREthPID = balancer_rETH_WETH_PID;
847+
fixture.rEthBPT = await ethers.getContractAt(
848+
"IERC20Metadata",
849+
addresses.mainnet.rETH_WETH_BPT,
850+
josh
851+
);
852+
fixture.balancerREthPID = balancer_rETH_WETH_PID;
851853

852-
fixture.balancerVault = await ethers.getContractAt(
853-
"IBalancerVault",
854-
addresses.mainnet.balancerVault,
855-
josh
856-
);
854+
fixture.balancerVault = await ethers.getContractAt(
855+
"IBalancerVault",
856+
addresses.mainnet.balancerVault,
857+
josh
858+
);
857859

858-
return fixture;
860+
return fixture;
861+
})
862+
}
863+
864+
/**
865+
* Configure a Vault with the balancer strategy for wstETH/WETH pool
866+
*/
867+
function balancerWstEthFixtureSetup() {
868+
return deployments.createFixture(async () => {
869+
const fixture = await defaultFixture();
870+
871+
const d = balancerStrategyDeployment({
872+
deploymentOpts: {
873+
deployName: "99999_balancer_wstETH_WETH",
874+
forceDeploy: true,
875+
deployerIsProposer: true,
876+
},
877+
proxyContractName: "OETHBalancerMetaPoolwstEthStrategyProxy",
878+
879+
platformAddress: addresses.mainnet.wstETH_WETH_BPT,
880+
poolId: balancer_stETH_WETH_PID,
881+
882+
auraRewardsContractAddress: addresses.mainnet.wstETH_WETH_AuraRewards,
883+
884+
rewardTokenAddresses: [addresses.mainnet.BAL, addresses.mainnet.AURA],
885+
assets: [addresses.mainnet.stETH, addresses.mainnet.WETH],
886+
})
887+
888+
await d(hre)
889+
890+
891+
const balancerWstEthStrategyProxy = await ethers.getContract("OETHBalancerMetaPoolwstEthStrategyProxy")
892+
const balancerWstEthStrategy = await ethers.getContractAt("BalancerMetaPoolStrategy", balancerWstEthStrategyProxy.address)
893+
894+
fixture.balancerWstEthStrategy = balancerWstEthStrategy
895+
896+
const { oethVault, timelock, weth, stETH, josh } =
897+
fixture;
898+
899+
await oethVault
900+
.connect(timelock)
901+
.setAssetDefaultStrategy(stETH.address, balancerWstEthStrategy.address);
902+
await oethVault
903+
.connect(timelock)
904+
.setAssetDefaultStrategy(weth.address, balancerWstEthStrategy.address);
905+
906+
fixture.stEthBPT = await ethers.getContractAt(
907+
"IERC20Metadata",
908+
addresses.mainnet.wstETH_WETH_BPT,
909+
josh
910+
);
911+
fixture.balancerWstEthPID = balancer_stETH_WETH_PID;
912+
913+
fixture.balancerVault = await ethers.getContractAt(
914+
"IBalancerVault",
915+
addresses.mainnet.balancerVault,
916+
josh
917+
);
918+
919+
return fixture;
920+
})
859921
}
860922

861923
async function fundWith3Crv(address, maxAmount) {
@@ -1656,7 +1718,8 @@ module.exports = {
16561718
impersonateAndFundContract,
16571719
impersonateAccount,
16581720
fraxETHStrategyFixtureSetup,
1659-
balancerREthFixture,
1721+
balancerREthFixtureSetup,
1722+
balancerWstEthFixtureSetup,
16601723
oethMorphoAaveFixtureSetup,
16611724
mintWETH,
16621725
replaceContractAt,

0 commit comments

Comments
 (0)