Skip to content

Commit 7786a0f

Browse files
sparrowDomnaddison36shahthepro
authored
Balancer MetaStablePool Strategy (#1697)
* 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 <[email protected]> * [ 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 <[email protected]> * 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 <[email protected]> Co-authored-by: Domen Grabec <[email protected]> * 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 --------- Co-authored-by: Nick Addison <[email protected]> Co-authored-by: Shahul Hameed <[email protected]>
1 parent 6f7edb8 commit 7786a0f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+5208
-186
lines changed

brownie/abi/balancerUserData.json

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
[
2+
{
3+
"constant": false,
4+
"inputs": [
5+
{
6+
"internalType": "uint256",
7+
"name": "joinKind",
8+
"type": "uint256"
9+
},
10+
{
11+
"internalType": "uint256",
12+
"name": "bptAmountOut",
13+
"type": "uint256"
14+
},
15+
{
16+
"internalType": "uint256",
17+
"name": "enterTokenIndex",
18+
"type": "uint256"
19+
}
20+
],
21+
"name": "userDataTokenInExactBPTOut",
22+
"outputs": [],
23+
"payable": false,
24+
"stateMutability": "nonpayable",
25+
"type": "function"
26+
},
27+
{
28+
"constant": false,
29+
"inputs": [
30+
{
31+
"internalType": "uint256",
32+
"name": "joinKind",
33+
"type": "uint256"
34+
},
35+
{
36+
"internalType": "uint256[]",
37+
"name": "amounts",
38+
"type": "uint256[]"
39+
},
40+
{
41+
"internalType": "uint256",
42+
"name": "minBptAmountout",
43+
"type": "uint256"
44+
}
45+
],
46+
"name": "userDataExactTokenInForBPTOut",
47+
"outputs": [],
48+
"payable": false,
49+
"stateMutability": "nonpayable",
50+
"type": "function"
51+
},
52+
{
53+
"constant": false,
54+
"inputs": [
55+
{
56+
"internalType": "uint256",
57+
"name": "joinKind",
58+
"type": "uint256"
59+
},
60+
{
61+
"internalType": "uint256",
62+
"name": "minBptAmountout",
63+
"type": "uint256"
64+
}
65+
],
66+
"name": "userDataExactBPTinForTokensOut",
67+
"outputs": [],
68+
"payable": false,
69+
"stateMutability": "nonpayable",
70+
"type": "function"
71+
}
72+
]

brownie/abi/balancer_booster.json

+1
Large diffs are not rendered by default.

brownie/abi/balancer_strat.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"inputs": [{"components": [{"internalType": "address","name": "platformAddress","type": "address"},{"internalType": "address","name": "vaultAddress","type": "address"}],"internalType": "struct InitializableAbstractStrategy.BaseStrategyConfig","name": "_stratConfig","type": "tuple"},{"components": [{"internalType": "address","name": "rEthAddress","type": "address"},{"internalType": "address","name": "stEthAddress","type": "address"},{"internalType": "address","name": "wstEthAddress","type": "address"},{"internalType": "address","name": "frxEthAddress","type": "address"},{"internalType": "address","name": "sfrxEthAddress","type": "address"},{"internalType": "address","name": "balancerVaultAddress","type": "address"},{"internalType": "bytes32","name": "balancerPoolId","type": "bytes32"}],"internalType": "struct BaseBalancerStrategy.BaseBalancerConfig","name": "_balancerConfig","type": "tuple"},{"internalType": "address","name": "_auraRewardPoolAddress","type": "address"}],"stateMutability": "nonpayable","type": "constructor"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "address","name": "_asset","type": "address"},{"indexed": false,"internalType": "address","name": "_pToken","type": "address"},{"indexed": false,"internalType": "uint256","name": "_amount","type": "uint256"}],"name": "Deposit","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "address","name": "previousGovernor","type": "address"},{"indexed": true,"internalType": "address","name": "newGovernor","type": "address"}],"name": "GovernorshipTransferred","type": "event"},{"anonymous": false,"inputs": [{"indexed": false,"internalType": "address","name": "_oldHarvesterAddress","type": "address"},{"indexed": false,"internalType": "address","name": "_newHarvesterAddress","type": "address"}],"name": "HarvesterAddressesUpdated","type": "event"},{"anonymous": false,"inputs": [{"indexed": false,"internalType": "uint256","name": "_prevMaxSlippagePercentage","type": "uint256"},{"indexed": false,"internalType": "uint256","name": "_newMaxSlippagePercentage","type": "uint256"}],"name": "MaxDepositDeviationUpdated","type": "event"},{"anonymous": false,"inputs": [{"indexed": false,"internalType": "uint256","name": "_prevMaxSlippagePercentage","type": "uint256"},{"indexed": false,"internalType": "uint256","name": "_newMaxSlippagePercentage","type": "uint256"}],"name": "MaxWithdrawalDeviationUpdated","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "address","name": "_asset","type": "address"},{"indexed": false,"internalType": "address","name": "_pToken","type": "address"}],"name": "PTokenAdded","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "address","name": "_asset","type": "address"},{"indexed": false,"internalType": "address","name": "_pToken","type": "address"}],"name": "PTokenRemoved","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "address","name": "previousGovernor","type": "address"},{"indexed": true,"internalType": "address","name": "newGovernor","type": "address"}],"name": "PendingGovernorshipTransfer","type": "event"},{"anonymous": false,"inputs": [{"indexed": false,"internalType": "address[]","name": "_oldAddresses","type": "address[]"},{"indexed": false,"internalType": "address[]","name": "_newAddresses","type": "address[]"}],"name": "RewardTokenAddressesUpdated","type": "event"},{"anonymous": false,"inputs": [{"indexed": false,"internalType": "address","name": "recipient","type": "address"},{"indexed": false,"internalType": "address","name": "rewardToken","type": "address"},{"indexed": false,"internalType": "uint256","name": "amount","type": "uint256"}],"name": "RewardTokenCollected","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "address","name": "_asset","type": "address"},{"indexed": false,"internalType": "address","name": "_pToken","type": "address"},{"indexed": false,"internalType": "uint256","name": "_amount","type": "uint256"}],"name": "Withdrawal","type": "event"},{"inputs": [{"internalType": "address","name": "","type": "address"}],"name": "assetToPToken","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "auraRewardPoolAddress","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "balancerPoolId","outputs": [{"internalType": "bytes32","name": "","type": "bytes32"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "balancerVault","outputs": [{"internalType": "contract IBalancerVault","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "address","name": "_asset","type": "address"}],"name": "checkBalance","outputs": [{"internalType": "uint256","name": "amount","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "address","name": "_asset","type": "address"}],"name": "checkBalance2","outputs": [{"internalType": "uint256","name": "amount","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "address","name": "_asset","type": "address"}],"name": "checkBalance3","outputs": [{"internalType": "uint256","name": "amount","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "checkBalance","outputs": [{"internalType": "uint256","name": "value","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "claimGovernance","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "collectRewardTokens","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address","name": "_asset","type": "address"},{"internalType": "uint256","name": "_amount","type": "uint256"}],"name": "deposit","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address[]","name": "_assets","type": "address[]"},{"internalType": "uint256[]","name": "_amounts","type": "uint256[]"}],"name": "deposit","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "depositAll","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "frxETH","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "getRewardTokenAddresses","outputs": [{"internalType": "address[]","name": "","type": "address[]"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "governor","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "harvesterAddress","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "address[]","name": "_rewardTokenAddresses","type": "address[]"},{"internalType": "address[]","name": "_assets","type": "address[]"},{"internalType": "address[]","name": "_pTokens","type": "address[]"}],"name": "initialize","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "isGovernor","outputs": [{"internalType": "bool","name": "","type": "bool"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "maxDepositDeviation","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "maxWithdrawalDeviation","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "platformAddress","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "rETH","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "uint256","name": "_assetIndex","type": "uint256"}],"name": "removePToken","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "uint256","name": "","type": "uint256"}],"name": "rewardTokenAddresses","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "safeApproveAllTokens","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address","name": "_harvesterAddress","type": "address"}],"name": "setHarvesterAddress","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "uint256","name": "_maxDepositDeviation","type": "uint256"}],"name": "setMaxDepositDeviation","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "uint256","name": "_maxWithdrawalDeviation","type": "uint256"}],"name": "setMaxWithdrawalDeviation","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address","name": "_asset","type": "address"},{"internalType": "address","name": "_pToken","type": "address"}],"name": "setPTokenAddress","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address[]","name": "_rewardTokenAddresses","type": "address[]"}],"name": "setRewardTokenAddresses","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "sfrxETH","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "stETH","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "address","name": "_asset","type": "address"}],"name": "supportsAsset","outputs": [{"internalType": "bool","name": "","type": "bool"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "address","name": "_newGovernor","type": "address"}],"name": "transferGovernance","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address","name": "_asset","type": "address"},{"internalType": "uint256","name": "_amount","type": "uint256"}],"name": "transferToken","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "vaultAddress","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "address","name": "_recipient","type": "address"},{"internalType": "address","name": "_asset","type": "address"},{"internalType": "uint256","name": "_amount","type": "uint256"}],"name": "withdraw","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address","name": "_recipient","type": "address"},{"internalType": "address[]","name": "_assets","type": "address[]"},{"internalType": "uint256[]","name": "_amounts","type": "uint256[]"}],"name": "withdraw","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "withdrawAll","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "wstETH","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"}]

brownie/abi/wsteth.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"inputs":[{"internalType":"contract IStETH","name":"_stETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_wstETHAmount","type":"uint256"}],"name":"getStETHByWstETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stETHAmount","type":"uint256"}],"name":"getWstETHByStETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stETH","outputs":[{"internalType":"contract IStETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stEthPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensPerStEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_wstETHAmount","type":"uint256"}],"name":"unwrap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stETHAmount","type":"uint256"}],"name":"wrap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

brownie/addresses.py

+5
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@
6464
BUSD = '0x4Fabb145d64652a948d72533023f6E7A623C7C53'
6565
WETH = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'
6666
STETH = '0xae7ab96520de3a18e5e111b5eaab095312d7fe84'
67+
WSTETH = '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'
68+
SFRXETH = '0xac3E018457B222d93114458476f3E3416Abbe38F'
69+
FRXETH = '0x5e8422345238f34275888049021821e8e08caa1f'
70+
RETH = '0xae78736Cd615f374D3085123A210448E74Fc6393'
71+
6772

6873
THREEPOOL_LP = '0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490'
6974
OUSD_METAPOOL = '0x87650D7bbfC3A9F10587d7778206671719d9910D'

0 commit comments

Comments
 (0)