Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,6 @@
"solhint": "^4.5.2",
"solhint-plugin-defi-wonderland": "^1.1.3",
"sort-package-json": "^2.8.0"
}
},
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
}
4 changes: 3 additions & 1 deletion script/Common.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@ import {IERC20Metadata} from '@algebra-periphery/interfaces/IERC20Metadata.sol';
import {IAlgebraPool} from '@algebra-core/interfaces/IAlgebraPool.sol';
import {IAuthorizable} from '@interfaces/utils/IAuthorizable.sol';
import {CamelotRelayerFactory} from '@contracts/factories/CamelotRelayerFactory.sol';
import {CamelotV2RelayerFactory} from '@contracts/factories/CamelotV2RelayerFactory.sol';
import {ChainlinkRelayerFactory} from '@contracts/factories/ChainlinkRelayerFactory.sol';
import {DenominatedOracleFactory} from '@contracts/factories/DenominatedOracleFactory.sol';
import {IDelayedOracleFactory} from '@interfaces/factories/IDelayedOracleFactory.sol';

abstract contract CommonMainnet is Script {
ChainlinkRelayerFactory public chainlinkRelayerFactory = ChainlinkRelayerFactory(MAINNET_CHAINLINK_RELAYER_FACTORY);
CamelotRelayerFactory public camelotRelayerFactory = CamelotRelayerFactory(MAINNET_CAMELOT_RELAYER_FACTORY);
CamelotV2RelayerFactory public camelotV2RelayerFactory = CamelotV2RelayerFactory(MAINNET_CAMELOT_V2_RELAYER_FACTORY);
CamelotRelayerFactory public camelotRelayerFactory = CamelotRelayerFactory(MAINNET_CAMELOT_V3_RELAYER_FACTORY);
DenominatedOracleFactory public denominatedOracleFactory =
DenominatedOracleFactory(MAINNET_DENOMINATED_ORACLE_FACTORY);
IDelayedOracleFactory public delayedOracleFactory = IDelayedOracleFactory(MAINNET_DELAYED_ORACLE_FACTORY);
Expand Down
41 changes: 39 additions & 2 deletions script/DeployOracle.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ import {Script} from 'forge-std/Script.sol';
import {CommonMainnet} from '@script/Common.s.sol';
import 'forge-std/console2.sol';

import {CamelotRelayerFactory} from '@contracts/factories/CamelotRelayerFactory.sol';
import {DenominatedOracleFactory} from '@contracts/factories/DenominatedOracleFactory.sol';

import {IBaseOracle} from '@interfaces/oracles/IBaseOracle.sol';

// BROADCAST
Expand Down Expand Up @@ -128,7 +131,7 @@ contract DeployCamelotOdUsdOracle is Script, CommonMainnet {
vm.startBroadcast();

_odEthCamelotRelayer = camelotRelayerFactory.deployAlgebraRelayer(
MAINNET_ALGEBRA_FACTORY, MAINNET_SYSTEM_COIN, MAINNET_WETH, uint32(MAINNET_CAMELOT_QUOTE_PERIOD)
MAINNET_ALGEBRA_V3_FACTORY, MAINNET_SYSTEM_COIN, MAINNET_WETH, uint32(MAINNET_CAMELOT_QUOTE_PERIOD)
);

_odUsdOracle = denominatedOracleFactory.deployDenominatedOracle(
Expand All @@ -155,7 +158,7 @@ contract DeployCamelotOdgUsdOracle is Script, CommonMainnet {
vm.startBroadcast();

_odgEthCamelotRelayer = camelotRelayerFactory.deployAlgebraRelayer(
MAINNET_ALGEBRA_FACTORY, MAINNET_PROTOCOL_TOKEN, MAINNET_WETH, uint32(MAINNET_CAMELOT_QUOTE_PERIOD)
MAINNET_ALGEBRA_V3_FACTORY, MAINNET_PROTOCOL_TOKEN, MAINNET_WETH, uint32(MAINNET_CAMELOT_QUOTE_PERIOD)
);

_odgUsdOracle = denominatedOracleFactory.deployDenominatedOracle(
Expand All @@ -167,3 +170,37 @@ contract DeployCamelotOdgUsdOracle is Script, CommonMainnet {
vm.stopBroadcast();
}
}

// BROADCAST
// source .env && forge script DeployCamelotPendleUsdOracle --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_MAINNET_RPC --broadcast --verify --etherscan-api-key $ARB_ETHERSCAN_API_KEY --sender $DEFAULT_KEY_PUBLIC_ADDRESS --account defaultKey

// SIMULATE
// source .env && forge script DeployCamelotPendleUsdOracle --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_MAINNET_RPC --sender $DEFAULT_KEY_PUBLIC_ADDRESS

contract DeployCamelotPendleUsdOracle is Script, CommonMainnet {
IBaseOracle public _PendleEthOracleRelayer;
IBaseOracle public _PendleUsdOracleRelayer;

address public MAINNET_PENDLE = 0x0c880f6761F1af8d9Aa9C466984b80DAb9a8c9e8;
CamelotRelayerFactory public _camelotRelayerFactory =
CamelotRelayerFactory(0xC4E3cE2941476faCC2447497731A6050eEfa25C8);
DenominatedOracleFactory public _denominatedOracleFactory =
DenominatedOracleFactory(0x7028f637d5340da4bC8D3Ef9DfeC5D4D79dE8116);

function run() public {
vm.startBroadcast();

_PendleEthOracleRelayer = _camelotRelayerFactory.deployAlgebraRelayer(
MAINNET_ALGEBRA_V3_FACTORY, MAINNET_PENDLE, MAINNET_WETH, uint32(MAINNET_CAMELOT_QUOTE_PERIOD)
);

_PendleUsdOracleRelayer = _denominatedOracleFactory.deployDenominatedOracle(
_PendleEthOracleRelayer, IBaseOracle(MAINNET_CHAINLINK_L2VALIDITY_ETH_USD_RELAYER), false
);

_PendleUsdOracleRelayer.symbol();
_PendleUsdOracleRelayer.getResultWithValidity();

vm.stopBroadcast();
}
}
11 changes: 9 additions & 2 deletions script/Registry.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ address constant SEPOLIA_ALGEBRA_FARM_CENTER = 0x04e4A5A4E4D2A5a0fb48ECde0bbD555

// -- Mainnet --

// DAO
address constant MAINNET_TIMELOCK_CONTROLLER = 0x7A528eA3E06D85ED1C22219471Cf0b1851943903;

////////// CONSTANTS //////////
address constant MAINNET_DEPLOYER = 0xF78dA2A37049627636546E0cFAaB2aD664950917;
uint256 constant MAINNET_ORACLE_DELAY = 1 hours;
Expand All @@ -73,12 +76,16 @@ address constant ARB = 0x912CE59144191C1204E64559FE8253a0e49E6548;
address constant ETH_ARB_POOL = 0xe51635ae8136aBAc44906A8f230C2D235E9c195F;

////////// FACTORIES //////////
address constant MAINNET_CAMELOT_RELAYER_FACTORY = 0x36645830479170265A154Acb726780fdaE41A28F;
address constant MAINNET_CAMELOT_V3_RELAYER_FACTORY = 0x36645830479170265A154Acb726780fdaE41A28F;
address constant MAINNET_CAMELOT_V2_RELAYER_FACTORY = address(0); // Not yet deployed
address constant MAINNET_CHAINLINK_RELAYER_FACTORY = 0x06C32500489C28Bd57c551afd8311Fef20bFaBB5;
address constant MAINNET_DENOMINATED_ORACLE_FACTORY = 0xBF760b23d2ef3615cec549F22b95a34DB0F8f5CD;
address constant MAINNET_ALGEBRA_FACTORY = 0x1a3c9B1d2F0529D97f2afC5136Cc23e58f1FD35B;
address constant MAINNET_DELAYED_ORACLE_FACTORY = 0x9Dd63fA54dEfd8820BCAb3e3cC39aeEc1aE88098;

// External
address constant MAINNET_ALGEBRA_V3_FACTORY = 0x1a3c9B1d2F0529D97f2afC5136Cc23e58f1FD35B;
address constant MAINNET_CAMELOT_V2_FACTORY = 0x6EcCab422D763aC031210895C81787E87B43A652;

////////// RELAYERS //////////
// Camelot
address constant MAINNET_CAMELOT_ODG_WETH_RELAYER = 0x10ef7FEcf888Bc4B1F64757B77317946fFBc5873;
Expand Down
28 changes: 23 additions & 5 deletions script/predeployment/DeployFactories.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ pragma solidity 0.7.6;
import '@script/Registry.s.sol';
import {Script} from 'forge-std/Script.sol';
import {CamelotRelayerFactory} from '@contracts/factories/CamelotRelayerFactory.sol';
import {CamelotV2RelayerFactory} from '@contracts/factories/CamelotV2RelayerFactory.sol';
import {ChainlinkRelayerFactory} from '@contracts/factories/ChainlinkRelayerFactory.sol';
import {DenominatedOracleFactory} from '@contracts/factories/DenominatedOracleFactory.sol';

Expand All @@ -14,14 +15,14 @@ import {DenominatedOracleFactory} from '@contracts/factories/DenominatedOracleFa
// source .env && forge script DeployFactoriesMain --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_MAINNET_RPC

contract DeployFactoriesMain is Script {
CamelotRelayerFactory internal _camelotRelayerFactory;
ChainlinkRelayerFactory internal _chainlinkRelayerFactory;
// CamelotRelayerFactory internal _camelotRelayerFactory;
// ChainlinkRelayerFactory internal _chainlinkRelayerFactory;
DenominatedOracleFactory internal _denominatedOracleFactory;

function run() public {
vm.startBroadcast(vm.envUint('ARB_MAINNET_DEPLOYER_PK'));
_camelotRelayerFactory = new CamelotRelayerFactory();
_chainlinkRelayerFactory = new ChainlinkRelayerFactory();
vm.startBroadcast();
// _camelotRelayerFactory = new CamelotRelayerFactory();
// _chainlinkRelayerFactory = new ChainlinkRelayerFactory();
_denominatedOracleFactory = new DenominatedOracleFactory();

//_camelotRelayerFactory.addAuthorization(MAINNET_DEPLOYER);
Expand Down Expand Up @@ -50,3 +51,20 @@ contract DeployFactoriesSepolia is Script {
vm.stopBroadcast();
}
}

// BROADCAST
// source .env && forge script DeployCamelotFactoryMain --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_MAINNET_RPC --broadcast --verify --etherscan-api-key $ARB_ETHERSCAN_API_KEY

// SIMULATE
// source .env && forge script DeployCamelotFactoryMain --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_MAINNET_RPC

contract DeployCamelotFactoryMain is Script {
CamelotRelayerFactory internal _camelotRelayerFactory;

function run() public {
vm.startBroadcast();
_camelotRelayerFactory = new CamelotRelayerFactory();

vm.stopBroadcast();
}
}
14 changes: 7 additions & 7 deletions script/predeployment/DeployRelayers.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ import {IBaseOracle} from '@interfaces/oracles/IBaseOracle.sol';
// source .env && forge script DeployODGCamelotRelayerMainnet --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_MAINNET_RPC

contract DeployODGCamelotRelayerMainnet is CommonMainnet {
IAlgebraFactory public algebraFactory = IAlgebraFactory(MAINNET_ALGEBRA_FACTORY);
IAlgebraFactory public algebraFactory = IAlgebraFactory(MAINNET_ALGEBRA_V3_FACTORY);

function run() public {
vm.startBroadcast(vm.envUint('ARB_MAINNET_DEPLOYER_PK'));
camelotRelayerFactory.deployAlgebraRelayer(
MAINNET_ALGEBRA_FACTORY, MAINNET_PROTOCOL_TOKEN, MAINNET_WETH, uint32(MAINNET_ORACLE_DELAY)
MAINNET_ALGEBRA_V3_FACTORY, MAINNET_PROTOCOL_TOKEN, MAINNET_WETH, uint32(MAINNET_ORACLE_DELAY)
);
vm.stopBroadcast();
}
Expand All @@ -33,7 +33,7 @@ contract DeployODGCamelotRelayerMainnet is CommonMainnet {
// source .env && forge script DeployOdgUsdRelayerMainnet --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_MAINNET_RPC

contract DeployOdgUsdRelayerMainnet is CommonMainnet {
IAlgebraFactory public algebraFactory = IAlgebraFactory(MAINNET_ALGEBRA_FACTORY);
IAlgebraFactory public algebraFactory = IAlgebraFactory(MAINNET_ALGEBRA_V3_FACTORY);

function run() public {
vm.startBroadcast(vm.envUint('ARB_MAINNET_DEPLOYER_PK'));
Expand All @@ -53,7 +53,7 @@ contract DeployOdgUsdRelayerMainnet is CommonMainnet {
// source .env && forge script DeployEthUsdChainlinkRelayerMainnet --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_MAINNET_RPC

contract DeployEthUsdChainlinkRelayerMainnet is CommonMainnet {
IAlgebraFactory public algebraFactory = IAlgebraFactory(MAINNET_ALGEBRA_FACTORY);
IAlgebraFactory public algebraFactory = IAlgebraFactory(MAINNET_ALGEBRA_V3_FACTORY);

function run() public {
vm.startBroadcast(vm.envUint('ARB_MAINNET_DEPLOYER_PK'));
Expand All @@ -69,7 +69,7 @@ contract DeployEthUsdChainlinkRelayerMainnet is CommonMainnet {
// source .env && forge script DeployRethEthChainlinkRelayerMainnet --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_MAINNET_RPC

contract DeployRethEthChainlinkRelayerMainnet is CommonMainnet {
IAlgebraFactory public algebraFactory = IAlgebraFactory(MAINNET_ALGEBRA_FACTORY);
IAlgebraFactory public algebraFactory = IAlgebraFactory(MAINNET_ALGEBRA_V3_FACTORY);

function run() public {
vm.startBroadcast(vm.envUint('ARB_MAINNET_DEPLOYER_PK'));
Expand All @@ -92,7 +92,7 @@ contract DeployRethEthChainlinkRelayerMainnet is CommonMainnet {
// source .env && forge script DeployWstethEthChainlinkRelayerMainnet --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_MAINNET_RPC

contract DeployWstethEthChainlinkRelayerMainnet is CommonMainnet {
IAlgebraFactory public algebraFactory = IAlgebraFactory(MAINNET_ALGEBRA_FACTORY);
IAlgebraFactory public algebraFactory = IAlgebraFactory(MAINNET_ALGEBRA_V3_FACTORY);

function run() public {
vm.startBroadcast(vm.envUint('ARB_MAINNET_DEPLOYER_PK'));
Expand Down Expand Up @@ -140,7 +140,7 @@ contract DeployEzEthUSDPriceFeed is CommonMainnet {
// source .env && forge script DeployArbUsdChainlinkRelayerMainnet --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_MAINNET_RPC

contract DeployArbUsdChainlinkRelayerMainnet is CommonMainnet {
IAlgebraFactory public algebraFactory = IAlgebraFactory(MAINNET_ALGEBRA_FACTORY);
IAlgebraFactory public algebraFactory = IAlgebraFactory(MAINNET_ALGEBRA_V3_FACTORY);

function run() public {
vm.startBroadcast(vm.envUint('ARB_MAINNET_DEPLOYER_PK'));
Expand Down
4 changes: 2 additions & 2 deletions src/contracts/factories/CamelotRelayerChild.sol
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ import {FactoryChild} from '@contracts/factories/FactoryChild.sol';
contract CamelotRelayerChild is CamelotRelayer, FactoryChild {
// --- Init ---
constructor(
address _algebraV3Factory,
address _algebraFactory,
address _baseToken,
address _quoteToken,
uint32 _quotePeriod
) CamelotRelayer(_algebraV3Factory, _baseToken, _quoteToken, _quotePeriod) {}
) CamelotRelayer(_algebraFactory, _baseToken, _quoteToken, _quotePeriod) {}
}
4 changes: 2 additions & 2 deletions src/contracts/factories/CamelotRelayerFactory.sol
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ contract CamelotRelayerFactory is Authorizable {
// --- Methods ---

function deployAlgebraRelayer(
address _algebraV3Factory,
address _algebraFactory,
address _baseToken,
address _quoteToken,
uint32 _quotePeriod
) external isAuthorized returns (IBaseOracle _relayer) {
_relayer = IBaseOracle(address(new CamelotRelayerChild(_algebraV3Factory, _baseToken, _quoteToken, _quotePeriod)));
_relayer = IBaseOracle(address(new CamelotRelayerChild(_algebraFactory, _baseToken, _quoteToken, _quotePeriod)));
relayerId++;
relayerById[relayerId] = address(_relayer);
emit NewAlgebraRelayer(address(_relayer), _baseToken, _quoteToken, _quotePeriod);
Expand Down
15 changes: 15 additions & 0 deletions src/contracts/factories/CamelotV2RelayerChild.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.7.6;

import {CamelotV2Relayer} from '@contracts/oracles/CamelotV2Relayer.sol';
import {FactoryChild} from '@contracts/factories/FactoryChild.sol';

contract CamelotV2RelayerChild is CamelotV2Relayer, FactoryChild {
// --- Init ---
constructor(
address _camelotV2Factory,
address _baseToken,
address _quoteToken,
uint32 _quotePeriod
) CamelotV2Relayer(_camelotV2Factory, _baseToken, _quoteToken, _quotePeriod) {}
}
35 changes: 35 additions & 0 deletions src/contracts/factories/CamelotV2RelayerFactory.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.7.6;

import {IBaseOracle} from '@interfaces/oracles/IBaseOracle.sol';
import {ICamelotV2Relayer} from '@interfaces/oracles/ICamelotV2Relayer.sol';
import {CamelotV2RelayerChild} from '@contracts/factories/CamelotV2RelayerChild.sol';
import {Authorizable} from '@contracts/utils/Authorizable.sol';

contract CamelotV2RelayerFactory is Authorizable {
uint256 public relayerId;

// --- Events ---
event NewCamelotV2Relayer(address indexed _relayer, address _baseToken, address _quoteToken, uint32 _quotePeriod);

// --- Data ---
mapping(uint256 => address) public relayerById;

// --- Init ---
constructor() Authorizable(msg.sender) {}

// --- Methods ---

function deployCamelotV2Relayer(

Check warning on line 23 in src/contracts/factories/CamelotV2RelayerFactory.sol

View check run for this annotation

Codecov / codecov/patch

src/contracts/factories/CamelotV2RelayerFactory.sol#L23

Added line #L23 was not covered by tests
address _camelotV2Factory,
address _baseToken,
address _quoteToken,
uint32 _quotePeriod
) external isAuthorized returns (IBaseOracle _relayer) {
_relayer =

Check warning on line 29 in src/contracts/factories/CamelotV2RelayerFactory.sol

View check run for this annotation

Codecov / codecov/patch

src/contracts/factories/CamelotV2RelayerFactory.sol#L29

Added line #L29 was not covered by tests
ICamelotV2Relayer(address(new CamelotV2RelayerChild(_camelotV2Factory, _baseToken, _quoteToken, _quotePeriod)));
relayerId++;
relayerById[relayerId] = address(_relayer);
emit NewCamelotV2Relayer(address(_relayer), _baseToken, _quoteToken, _quotePeriod);

Check warning on line 33 in src/contracts/factories/CamelotV2RelayerFactory.sol

View check run for this annotation

Codecov / codecov/patch

src/contracts/factories/CamelotV2RelayerFactory.sol#L31-L33

Added lines #L31 - L33 were not covered by tests
}
}
4 changes: 2 additions & 2 deletions src/contracts/oracles/CamelotRelayer.sol
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ contract CamelotRelayer {
// --- Data ---
string public symbol;

constructor(address _algebraV3Factory, address _baseToken, address _quoteToken, uint32 _quotePeriod) {
algebraPool = IAlgebraFactory(_algebraV3Factory).poolByPair(_baseToken, _quoteToken);
constructor(address _algebraFactory, address _baseToken, address _quoteToken, uint32 _quotePeriod) {
algebraPool = IAlgebraFactory(_algebraFactory).poolByPair(_baseToken, _quoteToken);
require(algebraPool != address(0));

address _token0 = IAlgebraPool(algebraPool).token0();
Expand Down
Loading