Skip to content

Commit

Permalink
Merge branch 'master' into clement/base_curve_amo
Browse files Browse the repository at this point in the history
  • Loading branch information
clement-ux committed Feb 4, 2025
2 parents e457e7f + abbccea commit 664408e
Show file tree
Hide file tree
Showing 11 changed files with 1,599 additions and 329 deletions.
160 changes: 160 additions & 0 deletions brownie/abi/oethb_zapper.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
[
{
"inputs": [
{
"internalType": "address",
"name": "_oethb",
"type": "address"
},
{
"internalType": "address",
"name": "_woethb",
"type": "address"
},
{
"internalType": "address",
"name": "_vault",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "minter",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "asset",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Zap",
"type": "event"
},
{
"inputs": [],
"name": "deposit",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "minReceived",
"type": "uint256"
}
],
"name": "depositETHForWrappedTokens",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "wethAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "minReceived",
"type": "uint256"
}
],
"name": "depositWETHForWrappedTokens",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "oethb",
"outputs": [
{
"internalType": "contract IERC20",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "vault",
"outputs": [
{
"internalType": "contract IVault",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "weth",
"outputs": [
{
"internalType": "contract IWETH9",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "woethb",
"outputs": [
{
"internalType": "contract IERC4626",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
]
1 change: 1 addition & 0 deletions brownie/abi/superbridge.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"localToken","type":"address"},{"indexed":true,"internalType":"address","name":"remoteToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extraData","type":"bytes"}],"name":"ERC20BridgeFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"localToken","type":"address"},{"indexed":true,"internalType":"address","name":"remoteToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extraData","type":"bytes"}],"name":"ERC20BridgeInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"l1Token","type":"address"},{"indexed":true,"internalType":"address","name":"l2Token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extraData","type":"bytes"}],"name":"ERC20DepositInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"l1Token","type":"address"},{"indexed":true,"internalType":"address","name":"l2Token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extraData","type":"bytes"}],"name":"ERC20WithdrawalFinalized","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":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extraData","type":"bytes"}],"name":"ETHBridgeFinalized","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":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extraData","type":"bytes"}],"name":"ETHBridgeInitiated","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":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extraData","type":"bytes"}],"name":"ETHDepositInitiated","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":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"extraData","type":"bytes"}],"name":"ETHWithdrawalFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"inputs":[],"name":"MESSENGER","outputs":[{"internalType":"contract CrossDomainMessenger","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OTHER_BRIDGE","outputs":[{"internalType":"contract StandardBridge","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_localToken","type":"address"},{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"bridgeERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_localToken","type":"address"},{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"bridgeERC20To","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"bridgeETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"bridgeETHTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_l1Token","type":"address"},{"internalType":"address","name":"_l2Token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"depositERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_l1Token","type":"address"},{"internalType":"address","name":"_l2Token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"depositERC20To","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"depositETHTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"deposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_localToken","type":"address"},{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"finalizeBridgeERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"finalizeBridgeETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_l1Token","type":"address"},{"internalType":"address","name":"_l2Token","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"finalizeERC20Withdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"finalizeETHWithdrawal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"contract CrossDomainMessenger","name":"_messenger","type":"address"},{"internalType":"contract SuperchainConfig","name":"_superchainConfig","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"l2TokenBridge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"messenger","outputs":[{"internalType":"contract CrossDomainMessenger","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"otherBridge","outputs":[{"internalType":"contract StandardBridge","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"superchainConfig","outputs":[{"internalType":"contract SuperchainConfig","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
7 changes: 6 additions & 1 deletion brownie/addresses.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
GOVERNOR_FIVE = "0x3cdd07c16614059e66344a7b579dab4f9516c0b6"
TIMELOCK = "0x35918cDE7233F2dD33fA41ae3Cb6aE0e42E0e69F"

BASE_TIMELOCK = "0xf817cb3092179083c48c014688D98B72fB61464f"

# OUSD Contracts
OUSD = '0x2A8e1E676Ec238d8A992307B495b45B3fEAa5e86'
AAVE_STRAT = '0x5e3646A1Db86993f73E6b74A57D8640B69F7e259'
Expand Down Expand Up @@ -91,6 +93,7 @@
VEAERO_BASE = '0xebf418fe2512e7e6bd9b87a8f0f294acdc67e6b4'

OETHB_WETH_BRIBE_CONTRACT = '0x685ce0e36ca4b81f13b7551c76143d962568f6dd'
OETHB_ZAPPER = "0x3b56c09543D3068f8488ED34e6F383c3854d2bC1"

# OGV Contracts
OGV = "0x9c354503C38481a7A7a51629142963F98eCC12D0"
Expand Down Expand Up @@ -156,4 +159,6 @@

EQUALIZER_SPECTRA_OETHB_BRIBE_CONTRACT = "0xaAbF246f6f4Fa87717690dE00896a49c18A944b9"

EQUALIZER_WETH_OETHB_BRIBE_CONTRACT = "0x4467B367c7EeF806E11756bFCD76D3801DFb942C"
EQUALIZER_WETH_OETHB_BRIBE_CONTRACT = "0x4467B367c7EeF806E11756bFCD76D3801DFb942C"

SUPERBRIDGE_ETH = "0x3154Cf16ccdb4C6d922629664174b904d80F2C35"
141 changes: 141 additions & 0 deletions brownie/runlogs/2025_02_strategist.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
# -------------------------------------
# Feb 3, 2025 - Remove from wOETH strategy
# -------------------------------------
from aerodrome_harvest import *
from brownie import accounts
import eth_abi
def main():
with TemporaryForkForReallocations() as txs:
strategist = accounts.at(MULTICHAIN_STRATEGIST, force=True)
gas_buffer = 0.03 * 10**18
eth_amount = strategist.balance() - gas_buffer

existing_oethb_amount = 322091947000000000000

# Update oracle price
txs.append(woeth_strat.updateWOETHOraclePrice({ 'from': OETHB_MULTICHAIN_STRATEGIST }))

# Rebase
txs.append(vault_core.rebase({ 'from': OETHB_MULTICHAIN_STRATEGIST }))

# Take Vault snapshot
txs.append(vault_value_checker.takeSnapshot({ 'from': OETHB_MULTICHAIN_STRATEGIST }))

# Mint OETHb with WETH
txs.append(zapper.deposit({'from': MULTICHAIN_STRATEGIST, 'value': eth_amount}))

woeth_amount_before = woeth.balanceOf(OETHB_MULTICHAIN_STRATEGIST)

# Approve wOETH to wOETH strategy (one-time)
txs.append(oethb.approve(woeth_strat.address, "115792089237316195423570985008687907853269984665640564039457584007913129639935", { 'from': OETHB_MULTICHAIN_STRATEGIST }))

# Withdraw from wOETH strategy
txs.append(woeth_strat.withdrawBridgedWOETH(eth_amount + existing_oethb_amount, { 'from': OETHB_MULTICHAIN_STRATEGIST }))

woeth_amount = woeth.balanceOf(OETHB_MULTICHAIN_STRATEGIST) - woeth_amount_before

# Check Vault Value against snapshot
vault_change = vault_core.totalValue() - vault_value_checker.snapshots(OETHB_MULTICHAIN_STRATEGIST)[0]
supply_change = oethb.totalSupply() - vault_value_checker.snapshots(OETHB_MULTICHAIN_STRATEGIST)[1]
profit = vault_change - supply_change

txs.append(vault_value_checker.checkDelta(profit, (0.1 * 10**18), vault_change, (1 * 10**18), {'from': OETHB_MULTICHAIN_STRATEGIST}))

print(to_gnosis_json(txs, OETHB_MULTICHAIN_STRATEGIST, "8453"))

print("--------------------")
print("Minted superOETHb ", c18(eth_amount), eth_amount)
print("Redeemed superOETHb ", c18(eth_amount + existing_oethb_amount), eth_amount + existing_oethb_amount)
print("Withdrawn wOETH ", c18(woeth_amount), woeth_amount)
print("--------------------")
print("Profit ", c18(profit), profit)
print("Vault Change ", c18(vault_change), vault_change)

# Bridge wOETH to Ethereum using CCIP
txs.append(woeth.approve(BASE_CCIP_ROUTER, woeth_amount, { 'from': OETHB_MULTICHAIN_STRATEGIST }))

eth_chain_selector = 5009297550715157269

ccip_message = [
eth_abi.encode(['address'], [MULTICHAIN_STRATEGIST]),
'0x',
[(BRIDGED_WOETH_BASE, woeth_amount)],
ADDR_ZERO,
'0x97a657c9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
]

ccip_fee = ccip_router.getFee(eth_chain_selector, ccip_message)

print("CCIP fee", c18(ccip_fee), ccip_fee)

txs.append(ccip_router.ccipSend(
eth_chain_selector,
ccip_message,
{'from': OETHB_MULTICHAIN_STRATEGIST, 'value': ccip_fee}
))


# -------------------------------------
# Feb 3, 2025 - Unwrap wOETH to OETH
# -------------------------------------
from world import *
def main():
with TemporaryForkForReallocations() as txs:
# Unwrap wOETH to OETH
woeth_amount = woeth.balanceOf(MULTICHAIN_STRATEGIST)

oeth_amount_before = oeth.balanceOf(MULTICHAIN_STRATEGIST)
txs.append(
woeth.redeem(woeth_amount, MULTICHAIN_STRATEGIST, MULTICHAIN_STRATEGIST, {'from': MULTICHAIN_STRATEGIST})
)

oeth_amount_to_redeem = oeth.balanceOf(MULTICHAIN_STRATEGIST) - oeth_amount_before

# Redeem OETH to WETH
txs.append(
oeth_vault_core.requestWithdrawal(
oeth_amount_to_redeem,
{'from': MULTICHAIN_STRATEGIST}
)
)

# -------------------------------------
# Feb 3, 2025 - Claim WETH and bridge to Base
# -------------------------------------
from world import *
from brownie import accounts
import brownie
def main():
with TemporaryForkForReallocations() as txs:
requestId = 187

# Hack to make weth.withdraw work
brownie.network.web3.provider.make_request('hardhat_setCode', [MULTICHAIN_STRATEGIST, '0x'])

weth_before = weth.balanceOf(MULTICHAIN_STRATEGIST)
# Claim withdrawal
txs.append(oeth_vault_core.claimWithdrawal(requestId, {'from': MULTICHAIN_STRATEGIST}))

weth_received = weth.balanceOf(MULTICHAIN_STRATEGIST) - weth_before

print("--------------")
print("WETH Received", c18(weth_received), weth_received)
print("--------------")

# Unwrap WETH
txs.append(
weth.withdraw(weth_received, {'from': MULTICHAIN_STRATEGIST})
)

# hex-encoded string for "originprotocol"
extra_data = "0x6f726967696e70726f746f636f6c"

# Bridge it
txs.append(
superbridge.bridgeETHTo(
MULTICHAIN_STRATEGIST,
200000, # minGasLimit
extra_data, # extraData
{'value': weth_received, 'from': MULTICHAIN_STRATEGIST}
)
)
2 changes: 2 additions & 0 deletions brownie/world.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@

oeth_arm = load_contract('oeth_arm', OETH_ARM)

superbridge = load_contract('superbridge', SUPERBRIDGE_ETH)

CONTRACT_ADDRESSES = {}
CONTRACT_ADDRESSES[VAULT_PROXY_ADDRESS.lower()] = {'name': 'Vault'}
CONTRACT_ADDRESSES[HARVESTER.lower()] = {'name': 'Harvester'}
Expand Down
Loading

0 comments on commit 664408e

Please sign in to comment.