Skip to content

Commit

Permalink
Deploy some wrappers on Optimism
Browse files Browse the repository at this point in the history
  • Loading branch information
ultrasecreth committed Aug 6, 2024
1 parent 6e877b1 commit e73615b
Show file tree
Hide file tree
Showing 5 changed files with 151 additions and 61 deletions.
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ repayment approval.
| Balancer + Moonwell | 0x6207ec38da68902CC60D3760c9fe3EB64B426207 | Base | 1183309 | 0 | [CompoundWrapper](src/compound/CompoundWrapper.sol) |
| Balancer + Pendle | 0xC1Ea6a6df39D991006b39706db7C51f5A1819da7 | Arbitrum One | 525422 | 0 | [BalancerPendleWrapper](src/pendle/BalancerPendleWrapper.sol) |
| Balancer + Silo | 0x0F9104Fec1a5C91e63632E215e8F5c57C8f32c77 | Arbitrum One | 1025824 | 1 | [SiloWrapper](src/silo/SiloWrapper.sol) |
| Balancer + Sonne | 0x6412183C579a276f467ad38468D19CC8f1F2b5cb | Optimism | 1040313 | 0 | [CompoundWrapper](src/compound/CompoundWrapper.sol) |
| Balancer + Silo | 0xAa8F3BF0C9e1aD581547D9803066084E57907a33 | Optimism | 1025824 | 1 | [SiloWrapper](src/silo/SiloWrapper.sol) |
| Camelot | 0x5E8820B2832aD8451f65Fa2CCe2F3Cef29016D0d | Arbitrum One | 80679 | 0.01% | [AlgebraWrapper](src/algebra/AlgebraWrapper.sol) |
| Camelot + Pendle | 0xC9d66F655b7B35A2B4958bE2FB58E472736Bbc47 | Arbitrum One | 506792 | 0.01% | [AlgebraPendleWrapper](src/pendle/AlgebraPendleWrapper.sol) |
| Dolomite | 0x54F1ce5E6bdf027C9a6016C9F52fC5A445b77ed6 | Arbitrum One | 459815 | 0 | [DolomiteWrapper](src/dolomite/DolomiteWrapper.sol) |
Expand All @@ -49,7 +49,9 @@ repayment approval.
| MorphoBlue | 0xd0953257A5a2603Bf9fCA8aF1F2ecdac60EB8F52 | Base | 132114 | 0 | [MorphoBlueWrapper](src/morpho/MorphoBlueWrapper.sol) |
| MorphoBlue + Pendle | 0xE1f9e06006B2592dDe5b1bBA3ae2DD34DF557007 | Ethereum | 558536 | 0 | [MorphoPendleWrapper](src/pendle/MorphoPendleWrapper.sol) |
| Spark | 0x8cB701df93f2Dae295aE8D7beE5Aa7e4D40CB397 | Ethereum, Gnosis | 212569 | 0 | [AaveWrapper](src/aave/AaveWrapper.sol) |
| Uniswap v3 | 0x319300462C37AD2D4f26B584C2b67De51F51f289 | Arbitrum One, Optimism, Polygon, Ethereum | 94720 | Variable | [UniswapV3Wrapper](src/uniswapV3/UniswapV3Wrapper.sol) |
| Uniswap v3 | 0x319300462C37AD2D4f26B584C2b67De51F51f289 | Arbitrum One, Polygon, Ethereum | 94720 | Variable | [UniswapV3Wrapper](src/uniswapV3/UniswapV3Wrapper.sol) |
| Uniswap v3 | 0xfFD51f0631E79c39646A09318B2E18432E788B75 | Optimism | 94720 | Variable | [UniswapV3Wrapper](src/uniswapV3/UniswapV3Wrapper.sol) |
| Canonical | 0x6962ba38D6493B9Ed7E0a4b74624c43D844E1438 | Optimism | 94720 | Variable | [UniswapV3Wrapper](src/uniswapV3/UniswapV3Wrapper.sol) |
| Uniswap v3 + Pendle | 0xa353Fd50210786F0E038ddD574A21d0CCefb3163 | Arbitrum One | 497567 | Variable | [UniswapV3PendleWrapper](src/pendle/UniswapV3PendleWrapper.sol) |
| Velodrome | 0xcF13CDdbA3aEf757c52466deC310F221e06238d6 | Optimism | 163919 | Variable | [SolidlyWrapper](src/solidly/SolidlyWrapper.sol) |
| ZeroLend | 0xA48Cc0e4159C51d73B42c824f1444D1C1cbdA531 | Ethereum | 212569 | 0 | [AaveWrapper](src/aave/AaveWrapper.sol) |
Expand Down
30 changes: 19 additions & 11 deletions script/Network.sol
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,25 @@ function currentNetwork() view returns (Network) {
return Network.wrap(block.chainid);
}

function _equals(Network a, Network b) pure returns (bool) {
return Network.unwrap(a) == Network.unwrap(b);
}

function _ne(Network a, Network b) pure returns (bool) {
return !_equals(a, b);
}

using { toString, _equals as ==, _ne as != } for Network global;

function toString(Network n) pure returns (string memory) {
if (Network.unwrap(n) == Network.unwrap(MAINNET)) return "Ethereum";
if (Network.unwrap(n) == Network.unwrap(OPTIMISM)) return "Optimism";
if (Network.unwrap(n) == Network.unwrap(GNOSIS)) return "Gnosis";
if (Network.unwrap(n) == Network.unwrap(POLYGON)) return "Polygon";
if (Network.unwrap(n) == Network.unwrap(BASE)) return "Base";
if (Network.unwrap(n) == Network.unwrap(ARBITRUM)) return "Arbitrum-One";
if (Network.unwrap(n) == Network.unwrap(BSC)) return "Binance Smart Chain";
if (Network.unwrap(n) == Network.unwrap(AVALANCHE)) return "Avalanche C-Chain";
if (Network.unwrap(n) == Network.unwrap(SCROLL)) return "Scroll";
if (n == MAINNET) return "Ethereum";
if (n == OPTIMISM) return "Optimism";
if (n == GNOSIS) return "Gnosis";
if (n == POLYGON) return "Polygon";
if (n == BASE) return "Base";
if (n == ARBITRUM) return "Arbitrum-One";
if (n == BSC) return "Binance Smart Chain";
if (n == AVALANCHE) return "Avalanche C-Chain";
if (n == SCROLL) return "Scroll";
revert("Unknown network");
}

using { toString } for Network global;
60 changes: 45 additions & 15 deletions script/SiloDeploy.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,62 @@ import { Script } from "forge-std/Script.sol";

import { console2 } from "forge-std/console2.sol";

import { Registry } from "src/Registry.sol";
import "./Network.sol";

import { SiloWrapper, IFlashLoaner, ISiloLens, IERC20 } from "../src/silo/SiloWrapper.sol";
import { IWETH9 } from "src/dependencies/IWETH9.sol";

import { SiloWrapper, IFlashLoaner, ISiloLens } from "../src/silo/SiloWrapper.sol";

/// @dev See the Solidity Scripting tutorial: https://book.getfoundry.sh/tutorials/solidity-scripting
contract SiloDeploy is Script {
bytes32 public constant SALT = keccak256("ultrasecr.eth");

struct Deployment {
Network network;
IWETH9 weth;
ISiloLens lens;
}

Deployment[] public deployments;

constructor() {
deployments.push(
Deployment({
network: ARBITRUM,
weth: IWETH9(0x82aF49447D8a07e3bd95BD0d56f35241523fBab1),
lens: ISiloLens(0x07b94eB6AaD663c4eaf083fBb52928ff9A15BE47)
})
);
deployments.push(
Deployment({
network: OPTIMISM,
weth: IWETH9(0x4200000000000000000000000000000000000006),
lens: ISiloLens(0xd3De080436b9d38DC315944c16d89C050C414Fed)
})
);
}

function run() public {
console2.log("Deploying as %s", msg.sender);

ISiloLens lens = ISiloLens(0x07b94eB6AaD663c4eaf083fBb52928ff9A15BE47);
IFlashLoaner balancer = IFlashLoaner(0xBA12222222228d8Ba445958a75a0704d566BF2C8);
IWETH9Arbitrum intermediateToken = IWETH9Arbitrum(0x82aF49447D8a07e3bd95BD0d56f35241523fBab1); // IWETH9
Network network = currentNetwork();

console2.log("lens: %s", address(lens));
console2.log("balancer: %s", address(balancer));
console2.log("intermediateToken: %s", address(intermediateToken));
for (uint256 i = 0; i < deployments.length; i++) {
Deployment memory deployment = deployments[i];
if (deployment.network != network) continue;

vm.startBroadcast();
SiloWrapper wrapper = new SiloWrapper{ salt: SALT }(lens, balancer, intermediateToken);
intermediateToken.depositTo{ value: 1e10 }(address(wrapper));
vm.stopBroadcast();
}
}
console2.log("lens: %s", address(deployment.lens));
console2.log("balancer: %s", address(balancer));
console2.log("weth: %s", address(deployment.weth));

interface IWETH9Arbitrum is IERC20 {
function depositTo(address to) external payable;
vm.startBroadcast();
SiloWrapper wrapper = new SiloWrapper{ salt: SALT }(deployment.lens, balancer, deployment.weth);
deployment.weth.deposit{ value: 1e10 }();
deployment.weth.transfer(address(wrapper), 1e10);
vm.stopBroadcast();

console2.log("Deployed SiloWrapper at %s", address(wrapper));
}
}
}
112 changes: 81 additions & 31 deletions script/UniswapV3Deploy.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -14,51 +14,101 @@ import { UniswapV3Wrapper } from "../src/uniswapV3/UniswapV3Wrapper.sol";
contract UniswapV3Deploy is Script {
bytes32 public constant SALT = keccak256("ultrasecr.eth");

mapping(Network network => mapping(bytes32 token => address)) public tokens;
struct Deployment {
string key;
Network network;
address factory;
address weth;
address usdc;
address usdt;
}

Deployment[] public deployments;

Registry internal registry = Registry(0xa348320114210b8F4eaF1b0795aa8F70803a93EA);
address internal factory = 0x1F98431c8aD98523631AE4a59f267346ea31F984;

constructor() {
tokens[MAINNET]["USDC"] = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
tokens[MAINNET]["USDT"] = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
tokens[MAINNET]["WETH"] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
tokens[ARBITRUM]["USDC"] = 0xaf88d065e77c8cC2239327C5EDb3A432268e5831;
tokens[ARBITRUM]["USDT"] = 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9;
tokens[ARBITRUM]["WETH"] = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1;
tokens[POLYGON]["USDC"] = 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174;
tokens[POLYGON]["USDT"] = 0xc2132D05D31c914a87C6611C10748AEb04B58e8F;
tokens[POLYGON]["WETH"] = 0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619;
tokens[OPTIMISM]["USDC"] = 0x7F5c764cBc14f9669B88837ca1490cCa17c31607;
tokens[OPTIMISM]["USDT"] = 0x94b008aA00579c1307B0EF2c499aD98a8ce58e58;
tokens[OPTIMISM]["WETH"] = 0x4200000000000000000000000000000000000006;
deployments.push(
Deployment({
key: "UniswapV3Wrapper",
network: MAINNET,
factory: 0x1F98431c8aD98523631AE4a59f267346ea31F984,
weth: 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,
usdc: 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48,
usdt: 0xdAC17F958D2ee523a2206206994597C13D831ec7
})
);
deployments.push(
Deployment({
key: "UniswapV3Wrapper",
network: ARBITRUM,
factory: 0x1F98431c8aD98523631AE4a59f267346ea31F984,
weth: 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1,
usdc: 0xaf88d065e77c8cC2239327C5EDb3A432268e5831,
usdt: 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9
})
);
deployments.push(
Deployment({
key: "UniswapV3Wrapper",
network: POLYGON,
factory: 0x1F98431c8aD98523631AE4a59f267346ea31F984,
weth: 0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619,
usdc: 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174,
usdt: 0xc2132D05D31c914a87C6611C10748AEb04B58e8F
})
);
deployments.push(
Deployment({
key: "UniswapV3Wrapper",
network: OPTIMISM,
factory: 0x1F98431c8aD98523631AE4a59f267346ea31F984,
weth: 0x4200000000000000000000000000000000000006,
usdc: 0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85,
usdt: 0x94b008aA00579c1307B0EF2c499aD98a8ce58e58
})
);
deployments.push(
Deployment({
key: "CanonicalWrapper",
network: OPTIMISM,
factory: 0xCc0bDDB707055e04e497aB22a59c2aF4391cd12F,
weth: 0x4200000000000000000000000000000000000006,
usdc: 0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85,
usdt: 0x94b008aA00579c1307B0EF2c499aD98a8ce58e58
})
);
}

function run() public {
console2.log("Deploying as %s", msg.sender);

Network network = currentNetwork();

bytes memory paramsBytes =
abi.encode(factory, tokens[network]["WETH"], tokens[network]["USDC"], tokens[network]["USDT"]);
for (uint256 i = 0; i < deployments.length; i++) {
Deployment memory deployment = deployments[i];
if (deployment.network != network) continue;

string memory key = "UniswapV3Wrapper";
bytes memory paramsBytes = abi.encode(deployment.factory, deployment.weth, deployment.usdc, deployment.usdt);

if (keccak256(registry.get(key)) != keccak256(paramsBytes)) {
console2.log("Updating registry");
vm.broadcast();
registry.set(key, paramsBytes);
}
string memory key = deployment.key;

(address _factory, address _weth, address _usdc, address _usdt) =
abi.decode(registry.get(key), (address, address, address, address));
console2.log("Factory: %s", _factory);
console2.log("WETH: %s", _weth);
console2.log("USDC: %s", _usdc);
console2.log("USDT: %s", _usdt);
if (keccak256(registry.get(key)) != keccak256(paramsBytes)) {
console2.log("Updating registry");
vm.broadcast();
registry.set(key, paramsBytes);
}

vm.broadcast();
UniswapV3Wrapper uniswapV3Wrapper = new UniswapV3Wrapper{ salt: SALT }(registry);
console2.log("UniswapV3Wrapper deployed at: %s", address(uniswapV3Wrapper));
(address _factory, address _weth, address _usdc, address _usdt) =
abi.decode(registry.get(key), (address, address, address, address));
console2.log("Factory: %s", _factory);
console2.log("WETH: %s", _weth);
console2.log("USDC: %s", _usdc);
console2.log("USDT: %s", _usdt);

vm.broadcast();
UniswapV3Wrapper uniswapV3Wrapper = new UniswapV3Wrapper{ salt: SALT }(key, registry);
console2.log("%s deployed at: %s", key, address(uniswapV3Wrapper));
}
}
}
4 changes: 2 additions & 2 deletions src/uniswapV3/UniswapV3Wrapper.sol
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,12 @@ contract UniswapV3Wrapper is BaseWrapper, IUniswapV3FlashCallback {
address public immutable usdt;

/// @param reg Registry storing constructor parameters
constructor(Registry reg) {
constructor(string memory name, Registry reg) {
// @param factory_ Uniswap v3 UniswapV3Factory address
// @param weth_ Weth contract used in Uniswap v3 Pairs
// @param usdc_ usdc contract used in Uniswap v3 Pairs
// @param usdt_ usdt contract used in Uniswap v3 Pairs
(factory, weth, usdc, usdt) = abi.decode(reg.getSafe("UniswapV3Wrapper"), (address, address, address, address));
(factory, weth, usdc, usdt) = abi.decode(reg.getSafe(name), (address, address, address, address));
}

/**
Expand Down

0 comments on commit e73615b

Please sign in to comment.