Skip to content

Commit

Permalink
Merge pull request #56 from Kwenta/base-multicollateral
Browse files Browse the repository at this point in the history
Base Multicollateral Engine
  • Loading branch information
cmontecoding authored Dec 19, 2024
2 parents a154bcd + 49df397 commit 25ffd8b
Show file tree
Hide file tree
Showing 158 changed files with 17,346 additions and 325 deletions.
7 changes: 5 additions & 2 deletions .env-example
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@ GOERLI_RPC_URL=https://eth-goerli.g.alchemy.com/v2/KEY
OPTIMISM_GOERLI_RPC_URL=https://opt-goerli.g.alchemy.com/v2/KEY
BASE_GOERLI_RPC_URL=https://base-goerli.g.alchemy.com/v2/KEY
BASE_SEPOLIA_RPC_URL=https://base-sepolia.g.alchemy.com/v2/KEY
PRIVATE_KEY=0xKEY
ARBITRUM_RPC_URL=https://arb-mainnet.g.alchemy.com/v2/KEY
ARBITRUM_SEPOLIA_RPC_URL=https://arb-sepolia.g.alchemy.com/v2/KEY
PRIVATE_KEY=KEY
ETHERSCAN_API_KEY=KEY
OPTIMISM_ETHERSCAN_API_KEY=KEY
BASESCAN_API_KEY=KEY
BASESCAN_API_KEY=KEY
ARBISCAN_API_KEY=KEY
6 changes: 4 additions & 2 deletions .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: coverage
on: [push]

env:
FOUNDRY_PROFILE: ci
FOUNDRY_PROFILE: default

jobs:
check:
Expand All @@ -23,10 +23,12 @@ jobs:

- name: Report Coverage
run: |
forge coverage --fork-url ${{ secrets.BASE_RPC_URL }} --report lcov
forge coverage --fork-url ${{ secrets.BASE_RPC_URL }} --etherscan-api-key ${{ secrets.BASESCAN_API_KEY }} --report lcov --ir-minimum
- name: Upload Coverage Report
uses: codecov/codecov-action@v3
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
with:
files: ./lcov.info
name: codecov-unit
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: lint
on: [push]

env:
FOUNDRY_PROFILE: ci
FOUNDRY_PROFILE: default

jobs:
check:
Expand Down
34 changes: 3 additions & 31 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: test
on: [push]

env:
FOUNDRY_PROFILE: ci
FOUNDRY_PROFILE: default

jobs:
check:
Expand All @@ -24,38 +24,10 @@ jobs:
- name: Build Project
run: |
forge --version
forge build --sizes
forge build
id: build

- name: Test Project
run: |
forge test --fork-url ${{ secrets.BASE_RPC_URL }} --etherscan-api-key ${{ secrets.BASESCAN_API_KEY }} -vvv
id: test

hardhat_test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: recursive

- name: Check out repository code
uses: actions/checkout@v2

- name: Building on Node.js
uses: actions/setup-node@v2
with:
node-version: '18.12.0'

- name: Update NPM
run: npm install -g [email protected]
- uses: actions/cache@v2
with:
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ hashFiles('**/package-lock.json') }}

- name: Install dependencies
run: npm i --no-audit

- name: Execute contract tests
run: npx hardhat test
id: test
3 changes: 0 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,3 @@
[submodule "lib/openzeppelin-contracts"]
path = lib/openzeppelin-contracts
url = https://github.com/OpenZeppelin/openzeppelin-contracts
[submodule "lib/zap"]
path = lib/zap
url = https://github.com/JaredBorders/zap
13 changes: 13 additions & 0 deletions deployments/Arbitrum.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"prod": {
"EngineImplementation": "0x686336891f79AD83547D9B9Ccd66cd0904704343",
"EngineProxy": "0x480381d10Ffb87359364308f2b160d06532e3a01",
"MulticallerWithSender": "0xFCf78b0583c712a6B7ea6280e3aD72E508dA3a80",
"Zap": "0xD1F129e0cDd3Cc5c65ea00041623841C3d709F83"
},
"test": {
"EngineImplementation": "0xCFe66Bdac2Ebc15705210326dC2e0F87Fa874400",
"EngineProxy": "0x3eBAEAD525a11872B60A3B53E13F17E3351c24e7",
"MulticallerWithSender": "0x5f5b1c1b21E493EA646cd76FDd6a56A247DA3957"
}
}
6 changes: 6 additions & 0 deletions deployments/ArbitrumSepolia.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"EngineImplementation": "0x686336891f79AD83547D9B9Ccd66cd0904704343",
"EngineProxy": "0x480381d10Ffb87359364308f2b160d06532e3a01",
"MulticallerWithSender": "0xFCf78b0583c712a6B7ea6280e3aD72E508dA3a80",
"Zap": "0x3426B137D2b6a182EbEd358C6334D27D4CdCB363"
}
13 changes: 11 additions & 2 deletions deployments/Base.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,16 @@
"EngineProxy": "0xe331a7eeC851Ba702aA8BF43070a178451d6D28E"
},
"test": {
"EngineImplementation": "0x3eF73cD1B3B708ab1F2ccB4AcDA036Ac3FDc3615",
"EngineProxy": "0xA2dF816B2C5D8d799069d6a8a9f8464D402b5D25"
"EngineImplementation": "0x14cD85154508467B1b02eA7e94FbAB550631a71D",
"EngineProxy": "0xbEF1a26c76F4FcE3efbcE8Eff525c5925Cd75c1D",
"MulticallerWithSender": "0x45316C04257bA9bd8CA00587Fe74eCD74938C3a2",
"Zap": "0xaEd5977ed65d340b4B8e58Ec3EC3b04b19308f21"
},
"Multi Collateral": {
"Zap": "0x41AE8b823850D96088419992c9538198b72cA230",
"Pay": "0x067e8C201Cc9CF33e556f8A0d75b91276c9af3D6",
"EngineImplementation": "0x6b17Cfa48ee616C864e5310e4a04b863051CCCeA",
"EngineProxy": "0xe331a7eeC851Ba702aA8BF43070a178451d6D28E",
"MulticallerWithSender": "0x14fC2CAe096E5964Ffb408bf8aCC292FC78d4f7f"
}
}
1 change: 1 addition & 0 deletions deployments/abis/Engine.json

Large diffs are not rendered by default.

67 changes: 67 additions & 0 deletions deployments/abis/EngineProxy.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
[
{
"inputs": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"stateMutability": "payable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
}
],
"name": "AddressEmptyCode",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "ERC1967InvalidImplementation",
"type": "error"
},
{
"inputs": [],
"name": "ERC1967NonPayable",
"type": "error"
},
{
"inputs": [],
"name": "FailedInnerCall",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"stateMutability": "payable",
"type": "fallback"
}
]
1 change: 1 addition & 0 deletions deployments/abis/Zap.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_usdc\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_usdx\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spotMarket\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_perpsMarket\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_referrer\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"_susdcSpotId\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"_aave\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_quoter\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"BuyFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotPermitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"OnlyAave\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"PullFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"PushFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum Reentrancy.Stage\",\"name\":\"actual\",\"type\":\"uint8\"},{\"internalType\":\"enum Reentrancy.Stage\",\"name\":\"expected\",\"type\":\"uint8\"}],\"name\":\"ReentrancyDetected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"SellFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"SwapFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"UnwrapFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"WrapFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AAVE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BURN_PERMISSION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_TIER\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MODIFY_PERMISSION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERPS_MARKET\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"QUOTER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REFERRAL_CODE\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REFERRER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROUTER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SPOT_MARKET\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUSDC_SPOT_ID\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"USDC\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"USDX\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"USDX_ID\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"_accountId\",\"type\":\"uint128\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_synthId\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tolerance\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"buy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"received\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"synth\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_flashloan\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_premium\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_params\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint24\",\"name\":\"_fee\",\"type\":\"uint24\"},{\"internalType\":\"uint160\",\"name\":\"_sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"name\":\"quoteSwapFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96After\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"initializedTicksCrossed\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"gasEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint24\",\"name\":\"_fee\",\"type\":\"uint24\"},{\"internalType\":\"uint160\",\"name\":\"_sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"name\":\"quoteSwapWith\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96After\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"initializedTicksCrossed\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"gasEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_synthId\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tolerance\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"sell\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"received\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tolerance\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"swapFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"deducted\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tolerance\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"swapWith\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"received\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_accountId\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"_collateralId\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"_collateralAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_collateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_zapTolerance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_unwrapTolerance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_swapTolerance\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"unwind\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"_synthId\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tolerance\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"unwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"unwrapped\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_synthId\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"_accountId\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"_synthId\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tolerance\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"wrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"wrapped\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tolerance\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"zapIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"zapped\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tolerance\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"zapOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"zapped\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
11 changes: 7 additions & 4 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@ src = 'src'
test = 'test/'
out = 'out'
libs = ['lib']
solc_version = "0.8.20"
solc_version = "0.8.27"
optimizer = true
optimizer_runs = 1_000_000
optimizer_runs = 1_000
via-ir = true
ffi = true
evm_version = "cancun"

[fmt]
line_length = 80
Expand All @@ -14,15 +17,15 @@ number_underscore = "thousands"
[rpc_endpoints]
mainnet = "${MAINNET_RPC_URL}"
optimism = "${OPTIMISM_RPC_URL}"
base = "${BASE_RPC_URL}"
arbitrum = "${ARBITRUM_RPC_URL}"
goerli = "${GOERLI_RPC_URL}"
optimismGoerli = "${OPTIMISM_GOERLI_RPC_URL}"
baseGoerli = "${BASE_GOERLI_RPC_URL}"

[etherscan]
mainnet = { key = "${ETHERSCAN_API_KEY}" }
optimism = { key = "${OPTIMISM_ETHERSCAN_API_KEY}" }
base = { key = "${BASESCAN_API_KEY}" }
arbitrum = { key = "${ARBISCAN_API_KEY}" }
goerli = { key = "${ETHERSCAN_API_KEY}" }
optimismGoerli = { key = "${OPTIMISM_ETHERSCAN_API_KEY}" }
baseGoerli = { key = "${BASESCAN_API_KEY}" }
Loading

0 comments on commit 25ffd8b

Please sign in to comment.