Skip to content

Commit

Permalink
Add Balancer weighted pool oracle deployment script (#17)
Browse files Browse the repository at this point in the history
* Add balancer price oracle

* Add Balancer weighted pool oracle deployment script
  • Loading branch information
fedgiac authored Feb 13, 2024
1 parent d050d08 commit 9a15237
Show file tree
Hide file tree
Showing 7 changed files with 99 additions and 4 deletions.
25 changes: 22 additions & 3 deletions script/DeployAllContracts.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,33 @@ import {Script} from "forge-std/Script.sol";

import {DeployUniswapV2PriceOracle, UniswapV2PriceOracle} from "./single-deployment/UniswapV2PriceOracle.s.sol";
import {DeployConstantProduct, ConstantProduct} from "./single-deployment/ConstantProduct.s.sol";
import {
DeployBalancerWeightedPoolPriceOracle,
BalancerWeightedPoolPriceOracle
} from "./single-deployment/BalancerWeightedPoolPriceOracle.s.sol";

contract DeployAllContracts is DeployConstantProduct, DeployUniswapV2PriceOracle {
function run() public override(DeployConstantProduct, DeployUniswapV2PriceOracle) {
contract DeployAllContracts is
DeployConstantProduct,
DeployUniswapV2PriceOracle,
DeployBalancerWeightedPoolPriceOracle
{
function run()
public
override(DeployConstantProduct, DeployUniswapV2PriceOracle, DeployBalancerWeightedPoolPriceOracle)
{
deployAll();
}

function deployAll() public returns (ConstantProduct constantProduct, UniswapV2PriceOracle uniswapV2PriceOracle) {
function deployAll()
public
returns (
ConstantProduct constantProduct,
UniswapV2PriceOracle uniswapV2PriceOracle,
BalancerWeightedPoolPriceOracle balancerWeightedPoolPriceOracle
)
{
constantProduct = deployConstantProduct();
uniswapV2PriceOracle = deployUniswapV2PriceOracle();
balancerWeightedPoolPriceOracle = deployBalancerWeightedPoolPriceOracle();
}
}
42 changes: 42 additions & 0 deletions script/single-deployment/BalancerWeightedPoolPriceOracle.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.0 <0.9.0;

import {Script, console} from "forge-std/Script.sol";

import {BalancerWeightedPoolPriceOracle, IVault} from "src/oracles/BalancerWeightedPoolPriceOracle.sol";

contract DeployBalancerWeightedPoolPriceOracle is Script {
string constant balancerVaultEnv = "BALANCER_VAULT";
IVault internal vault;

constructor() {
try vm.envAddress(balancerVaultEnv) returns (address vault_) {
vault = IVault(vault_);
} catch {
vault = defaultBalancerVault();
}
console.log("Balancer vault at %s.", address(vault));
// We assume that if there's code at that address, then it's a Balancer
// vault deployment. This isn't guaranteed because they don't use
// deterministic addresses and in theory there could be any contract
// there.
require(address(vault).code.length > 0, "no code at expected Balancer vault");
}

function run() public virtual {
deployBalancerWeightedPoolPriceOracle();
}

function deployBalancerWeightedPoolPriceOracle() internal returns (BalancerWeightedPoolPriceOracle) {
vm.broadcast();
return new BalancerWeightedPoolPriceOracle(vault);
}

function defaultBalancerVault() internal pure returns (IVault) {
// Balancer uses the same address on each supported chain until now:
// https://docs.balancer.fi/reference/contracts/deployment-addresses/mainnet.html
// Chains: Arbitrum, Avalanche, Base, Gnosis, Goerli, Mainnet, Optimism,
// Polygon, Sepolia, Zkevm
return IVault(0xBA12222222228d8Ba445958a75a0704d566BF2C8);
}
}
5 changes: 4 additions & 1 deletion test/script/DeployAllContracts.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,15 @@ pragma solidity >=0.8.0 <0.9.0;

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

import {BalancerSetUp} from "./single-deployment/balancer/BalancerSetUp.sol";

import {DeployAllContracts} from "script/DeployAllContracts.s.sol";

contract DeployAllContractsTest is Test {
contract DeployAllContractsTest is Test, BalancerSetUp {
DeployAllContracts script;

function setUp() public {
setUpBalancerVault();
script = new DeployAllContracts();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.0 <0.9.0;

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

import {BalancerSetUp} from "./balancer/BalancerSetUp.sol";

import {DeployBalancerWeightedPoolPriceOracle} from "script/single-deployment/BalancerWeightedPoolPriceOracle.s.sol";

contract DeployBalancerWeightedPoolPriceOracleTest is Test, BalancerSetUp {
DeployBalancerWeightedPoolPriceOracle script;

function setUp() public {
setUpBalancerVault();
script = new DeployBalancerWeightedPoolPriceOracle();
}

function testDoesNotRevert() public {
script.run();
}
}
10 changes: 10 additions & 0 deletions test/script/single-deployment/balancer/BalancerSetUp.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.0 <0.9.0;

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

abstract contract BalancerSetUp is Test {
function setUpBalancerVault() internal {
vm.etch(0xBA12222222228d8Ba445958a75a0704d566BF2C8, hex"1337");
}
}

0 comments on commit 9a15237

Please sign in to comment.