Skip to content

Commit

Permalink
deploy 77 - reDeploy rETH/WETH strategy (#1843)
Browse files Browse the repository at this point in the history
* initail commit

* intermediary commit

* commit research files

* balancer booster abi

* intermittent commit

* add base balancer contract that implements checkBalance functionality

* add some additional initial integration

* intermittent commit

* add deployment file

* add fork test fixture

* intermittent commit

* prettier

* add basic withdrawal / deposit functionality

* correct the BPT calculation

* prettier + lint

* simplify the BPT price calculation

* add read-only re-entrancy protection

* add some missing tests and adjust existing. Deparate deposit and withdrawal slippage

* fix check balance implementation

* Balancer review changes (#1726)

* Generated contract docs

* Refactor Balancer storage variables

* Small Balancer changes

* Natspec updates
Added missing licensing
getPoolAssets gas optimized

* Updated generated Balancer strategy contract diagrams

* fix contract linter

* Removed restrictions on tests

* Small gas improvements
Fixed Slither

* Change BalancerError version

* Updated constant names
Addresses to use checksum format

* JS lint tasks

* Updated Balancer and Aura pool id constants

* Removed getRateProviderRate as it wasn't being used
Refactored to remove poolAssetsMapped storage variable

* Updated OETH Contracts diagrams
Generated new Balancer contract diagrams

* Fix failing test

* Fix merge conflict

* Restored getRateProviderRate

* Natspec updates
Added toPoolAsset override

* Removed unused getRateProviderRate

* Natspec updates
Gas optimization of InitializableAbstractStrategy

* Abstract strategy gas improvements (#1719)

* Refactor base strategy to use immutables

* Fixed strategy deployments in 001_core and fixtures

* Generated new strategy diagrams

* Deploy rETH instead of the stETH Balancer MetaStable Pool

* removed unused Aura config

* Balancer fork tests

* Added check that BPT amount equals Aura LP amount
Added rETH conversion to ETH value

* Updated balancer strat fork tests

* Updated Balancer fork tests

* Added optional deposit with multiple assets to the strategy

* Single asset deposit to use multi asset deposit

* Added optional checkBalance to Balancer strategy

* Added checkBalance() to BaseBalancerStrategy

* Fix slither
Fix curve HH task

* Added multi-asset withdraw to balancer strategy

* Fix multi-asset withdraw

* Updated Balancer and Vault diagrams

* Fix js linter

* Fixed checkBalance of rETH asset in Balancer strategy

* Only wrap assets if amount > 0
Added depositAll fork test for Balancer strat

* Removed Vault changes for multi-asset strategy support

* Updated generated docs

* Add tests for wstETH/WETH Balancer pool (#1725)

* Split deployment and fix fixtures

* Deposit tests for wstETH/WETH pool

* Add withdraw test

* prettier

* remove .only in fork tests

---------

Co-authored-by: Shahul Hameed <10547529+shahthepro@users.noreply.github.com>

* [ DFD-1 ] Balancer's checkBalance (#1730)

* add alternative implementation of Balancer's checkBalance

* correct the checkBalance implementation

* Balancer fork tests (#1727)

* Added large withdraw tests for Balancer strategy

* fix test log

* Balancer withdraw to handle close to BPT limit

* Small change to Balancer withdraw fork test

* add some comments

* change implementation

---------

Co-authored-by: Domen Grabec <grabec@gmail.com>

* Add read-only reentrancy test (#1731)

* Added large withdraw tests for Balancer strategy

* fix test log

* Balancer withdraw to handle close to BPT limit

* Small change to Balancer withdraw fork test

* add some comments

* Add test for read-only reentrancy

* add reentrancy protection to checkBalance functions

* add documentation

* remove the only

---------

Co-authored-by: Nicholas Addison <nick@addisonbrown.com.au>
Co-authored-by: Domen Grabec <grabec@gmail.com>

* Balancer fixes (#1734)

* prettier

* adjust how checkBalance is calculated

* Balancer withdrawal fix (#1739)

* fix balancer withdrawals

* lint

* prettier

* use only 1 safeApprove when applicable

* some renames and more correct application of approves

* renames, additional requires, move initializer to a better location, slither

* bug fix

* Generated latest Balancer strategy diagrams

* re-deploy BPT tokens sitting in the strategy

* fix re-entrancy test

* fixture fix

* bug fix

* prettier

* L02 improve naming  (#1783)

* improve naming

* one more rename

* buf fix

* do a check that supported assets are being withdrawn (#1784)

* set uint256 max instead of magic number (#1782)

* remove unused files (#1785)

* fix renaming bug

* correct safe approve all tokens and adjust the documentation (#1776)

* prettier

* M04 - minBptFunction robustness (#1795)

* change bptExpected to ignore Oracle prices and assume assets are always pegged. (Vault value checker shall be used to mitigate issues with said assumption)

* fix all the tests

* add test for pool manipulation

* prettier & lint

* minor change

* add withdrawal test

* update documentation

* pick string error length that is smaller than 32 characters

* prettier

* correct comment

* better comments

* prettier

* M02 withdrawal fuzzing tests (#1801)

* add more withdrawal tests

* add more withdrawal cases

* N02 gas inefficiencies  (#1786)

* gas optimisation

* fix bad merge and prettier

* remove todo comments (#1796)

* use a more appropriate array initialisation length (#1800)

* more consistant function naming (#1797)

* fix typo (#1798)

* simplify the way we withdrawAll. no need to pass along min amonts (#1777)

* M03 - missing or misleading documentation (#1781)

* improve documentation

* add comma

* M01 More comprehensive test suite (#1780)

* add tests for approving tokens and harvesting rewards

* prettier and lint

* fix bad merge + prettier & lint

* fix fork tests remove .only

* remove only

* lint

* fix unit tests

* add more tests to see how checkBalance behaves

* remove console log

* improve checkBalance test by testing that checkBalance amount doesn't decrease after the attack comaring to the middle of the attack.

* confirm that yield gained by 3rd party tilting the pool can be extracted by withdrawing the funds

* rename internal functions by prepending them with underscore

* Generated latest Balancer strategy diagrams (#1805)

* bug fix

* bug fix

* Minor Balancer changes from final review (#1819)

* Removed unused imports

* Generated updated contract diagram

* Deploy Balancer Meta stable pool RETH strategy

* update deploy description

* fix typo

* add proposal Id to deploy script

* prettier

* create a deploy file

* file rename

* improve wording

* fix name redundancy

---------

Co-authored-by: Nick Addison <nick@addisonbrown.com.au>
Co-authored-by: Shahul Hameed <10547529+shahthepro@users.noreply.github.com>
  • Loading branch information
3 people committed Sep 27, 2023
1 parent 8f473d4 commit acade8a
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 1 deletion.
66 changes: 66 additions & 0 deletions contracts/deploy/077_balancer_rETH_WETH.js
@@ -0,0 +1,66 @@
const { deploymentWithGovernanceProposal } = require("../utils/deploy");
const addresses = require("../utils/addresses");
const { balancer_rETH_WETH_PID } = require("../utils/constants");

const platformAddress = addresses.mainnet.rETH_WETH_BPT;

module.exports = deploymentWithGovernanceProposal(
{
deployName: "077_balancer_rETH_WETH",
forceDeploy: false,
//forceSkip: true,
deployerIsProposer: false,
//proposalId: ,
},
async ({ deployWithConfirmation, ethers }) => {
// Current contracts
const cOETHVaultProxy = await ethers.getContract("OETHVaultProxy");

// Deployer Actions
// ----------------
const cOETHBalancerMetaPoolStrategyProxy = await ethers.getContract(
"OETHBalancerMetaPoolrEthStrategyProxy"
);

// 1. Deploy new Balancer strategy implementation
const dOETHBalancerMetaPoolStrategyImpl = await deployWithConfirmation(
"BalancerMetaPoolStrategy",
[
[platformAddress, cOETHVaultProxy.address],
[
addresses.mainnet.rETH,
addresses.mainnet.stETH,
addresses.mainnet.wstETH,
addresses.mainnet.frxETH,
addresses.mainnet.sfrxETH,
addresses.mainnet.balancerVault, // Address of the Balancer vault
balancer_rETH_WETH_PID, // Pool ID of the Balancer pool
],
addresses.mainnet.rETH_WETH_AuraRewards, // Address of the Aura rewards contract
]
);

console.log(
"Balancer strategy address:",
cOETHBalancerMetaPoolStrategyProxy.address
);

// Governance Actions
// ----------------
return {
name: "Deploy new implementation of Balancer rETH/WETH MetaPool strategy\n\
\n\
The new implementation of the Balancer rETH/WETH strategy pool fixes a medium vulnerability of the strategy's checkBalance function.\n\
\n\
",
actions: [
// 1. Upgrade strategy implementation
{
contract: cOETHBalancerMetaPoolStrategyProxy,
signature: "upgradeTo(address)",
args: [dOETHBalancerMetaPoolStrategyImpl.address],
},
],
};
}
);
2 changes: 1 addition & 1 deletion contracts/package.json
Expand Up @@ -31,7 +31,7 @@
"slither": "yarn run clean && slither . --filter-paths \"crytic|mocks|openzeppelin|@openzeppelin\" --exclude-low --exclude-informational --exclude conformance-to-solidity-naming-conventions,different-pragma-directives-are-used,external-function,assembly,incorrect-equality",
"slither:triage": "yarn run clean && slither . --triage --filter-paths \"crytic|mocks|openzeppelin|@openzeppelin\" --exclude-low --exclude-informational --exclude conformance-to-solidity-naming-conventions,different-pragma-directives-are-used,external-function,assembly,incorrect-equality",
"clean": "rm -rf build crytic-export artifacts cache deployments/local*",
"cache-clean:light": "rm -rf cache/hardhat-network-fork/network-1337/*",
"cache-clean:light": "rm -rf cache/hardhat-network-fork/network-1337/",
"test:coverage": "IS_TEST=true npx hardhat coverage",
"test:coverage:fork": "REPORT_COVERAGE=true ./fork-test.sh"
},
Expand Down

0 comments on commit acade8a

Please sign in to comment.