Skip to content

Commit 25ffd8b

Browse files
authored
Merge pull request Kwenta#56 from Kwenta/base-multicollateral
Base Multicollateral Engine
2 parents a154bcd + 49df397 commit 25ffd8b

File tree

158 files changed

+17346
-325
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

158 files changed

+17346
-325
lines changed

.env-example

+5-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ GOERLI_RPC_URL=https://eth-goerli.g.alchemy.com/v2/KEY
55
OPTIMISM_GOERLI_RPC_URL=https://opt-goerli.g.alchemy.com/v2/KEY
66
BASE_GOERLI_RPC_URL=https://base-goerli.g.alchemy.com/v2/KEY
77
BASE_SEPOLIA_RPC_URL=https://base-sepolia.g.alchemy.com/v2/KEY
8-
PRIVATE_KEY=0xKEY
8+
ARBITRUM_RPC_URL=https://arb-mainnet.g.alchemy.com/v2/KEY
9+
ARBITRUM_SEPOLIA_RPC_URL=https://arb-sepolia.g.alchemy.com/v2/KEY
10+
PRIVATE_KEY=KEY
911
ETHERSCAN_API_KEY=KEY
1012
OPTIMISM_ETHERSCAN_API_KEY=KEY
11-
BASESCAN_API_KEY=KEY
13+
BASESCAN_API_KEY=KEY
14+
ARBISCAN_API_KEY=KEY

.github/workflows/coverage.yml

+4-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: coverage
33
on: [push]
44

55
env:
6-
FOUNDRY_PROFILE: ci
6+
FOUNDRY_PROFILE: default
77

88
jobs:
99
check:
@@ -23,10 +23,12 @@ jobs:
2323

2424
- name: Report Coverage
2525
run: |
26-
forge coverage --fork-url ${{ secrets.BASE_RPC_URL }} --report lcov
26+
forge coverage --fork-url ${{ secrets.BASE_RPC_URL }} --etherscan-api-key ${{ secrets.BASESCAN_API_KEY }} --report lcov --ir-minimum
2727
2828
- name: Upload Coverage Report
2929
uses: codecov/codecov-action@v3
30+
env:
31+
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
3032
with:
3133
files: ./lcov.info
3234
name: codecov-unit

.github/workflows/lint.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: lint
33
on: [push]
44

55
env:
6-
FOUNDRY_PROFILE: ci
6+
FOUNDRY_PROFILE: default
77

88
jobs:
99
check:

.github/workflows/test.yml

+3-31
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: test
33
on: [push]
44

55
env:
6-
FOUNDRY_PROFILE: ci
6+
FOUNDRY_PROFILE: default
77

88
jobs:
99
check:
@@ -24,38 +24,10 @@ jobs:
2424
- name: Build Project
2525
run: |
2626
forge --version
27-
forge build --sizes
27+
forge build
2828
id: build
2929

3030
- name: Test Project
3131
run: |
3232
forge test --fork-url ${{ secrets.BASE_RPC_URL }} --etherscan-api-key ${{ secrets.BASESCAN_API_KEY }} -vvv
33-
id: test
34-
35-
hardhat_test:
36-
runs-on: ubuntu-latest
37-
steps:
38-
- uses: actions/checkout@v3
39-
with:
40-
submodules: recursive
41-
42-
- name: Check out repository code
43-
uses: actions/checkout@v2
44-
45-
- name: Building on Node.js
46-
uses: actions/setup-node@v2
47-
with:
48-
node-version: '18.12.0'
49-
50-
- name: Update NPM
51-
run: npm install -g [email protected]
52-
- uses: actions/cache@v2
53-
with:
54-
path: '**/node_modules'
55-
key: ${{ runner.os }}-modules-${{ hashFiles('**/package-lock.json') }}
56-
57-
- name: Install dependencies
58-
run: npm i --no-audit
59-
60-
- name: Execute contract tests
61-
run: npx hardhat test
33+
id: test

.gitmodules

-3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,3 @@
44
[submodule "lib/openzeppelin-contracts"]
55
path = lib/openzeppelin-contracts
66
url = https://github.com/OpenZeppelin/openzeppelin-contracts
7-
[submodule "lib/zap"]
8-
path = lib/zap
9-
url = https://github.com/JaredBorders/zap

deployments/Arbitrum.json

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"prod": {
3+
"EngineImplementation": "0x686336891f79AD83547D9B9Ccd66cd0904704343",
4+
"EngineProxy": "0x480381d10Ffb87359364308f2b160d06532e3a01",
5+
"MulticallerWithSender": "0xFCf78b0583c712a6B7ea6280e3aD72E508dA3a80",
6+
"Zap": "0xD1F129e0cDd3Cc5c65ea00041623841C3d709F83"
7+
},
8+
"test": {
9+
"EngineImplementation": "0xCFe66Bdac2Ebc15705210326dC2e0F87Fa874400",
10+
"EngineProxy": "0x3eBAEAD525a11872B60A3B53E13F17E3351c24e7",
11+
"MulticallerWithSender": "0x5f5b1c1b21E493EA646cd76FDd6a56A247DA3957"
12+
}
13+
}

deployments/ArbitrumSepolia.json

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"EngineImplementation": "0x686336891f79AD83547D9B9Ccd66cd0904704343",
3+
"EngineProxy": "0x480381d10Ffb87359364308f2b160d06532e3a01",
4+
"MulticallerWithSender": "0xFCf78b0583c712a6B7ea6280e3aD72E508dA3a80",
5+
"Zap": "0x3426B137D2b6a182EbEd358C6334D27D4CdCB363"
6+
}

deployments/Base.json

+11-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,16 @@
44
"EngineProxy": "0xe331a7eeC851Ba702aA8BF43070a178451d6D28E"
55
},
66
"test": {
7-
"EngineImplementation": "0x3eF73cD1B3B708ab1F2ccB4AcDA036Ac3FDc3615",
8-
"EngineProxy": "0xA2dF816B2C5D8d799069d6a8a9f8464D402b5D25"
7+
"EngineImplementation": "0x14cD85154508467B1b02eA7e94FbAB550631a71D",
8+
"EngineProxy": "0xbEF1a26c76F4FcE3efbcE8Eff525c5925Cd75c1D",
9+
"MulticallerWithSender": "0x45316C04257bA9bd8CA00587Fe74eCD74938C3a2",
10+
"Zap": "0xaEd5977ed65d340b4B8e58Ec3EC3b04b19308f21"
11+
},
12+
"Multi Collateral": {
13+
"Zap": "0x41AE8b823850D96088419992c9538198b72cA230",
14+
"Pay": "0x067e8C201Cc9CF33e556f8A0d75b91276c9af3D6",
15+
"EngineImplementation": "0x6b17Cfa48ee616C864e5310e4a04b863051CCCeA",
16+
"EngineProxy": "0xe331a7eeC851Ba702aA8BF43070a178451d6D28E",
17+
"MulticallerWithSender": "0x14fC2CAe096E5964Ffb408bf8aCC292FC78d4f7f"
918
}
1019
}

deployments/abis/Engine.json

+1
Large diffs are not rendered by default.

deployments/abis/EngineProxy.json

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
[
2+
{
3+
"inputs": [
4+
{
5+
"internalType": "address",
6+
"name": "implementation",
7+
"type": "address"
8+
},
9+
{
10+
"internalType": "bytes",
11+
"name": "_data",
12+
"type": "bytes"
13+
}
14+
],
15+
"stateMutability": "payable",
16+
"type": "constructor"
17+
},
18+
{
19+
"inputs": [
20+
{
21+
"internalType": "address",
22+
"name": "target",
23+
"type": "address"
24+
}
25+
],
26+
"name": "AddressEmptyCode",
27+
"type": "error"
28+
},
29+
{
30+
"inputs": [
31+
{
32+
"internalType": "address",
33+
"name": "implementation",
34+
"type": "address"
35+
}
36+
],
37+
"name": "ERC1967InvalidImplementation",
38+
"type": "error"
39+
},
40+
{
41+
"inputs": [],
42+
"name": "ERC1967NonPayable",
43+
"type": "error"
44+
},
45+
{
46+
"inputs": [],
47+
"name": "FailedInnerCall",
48+
"type": "error"
49+
},
50+
{
51+
"anonymous": false,
52+
"inputs": [
53+
{
54+
"indexed": true,
55+
"internalType": "address",
56+
"name": "implementation",
57+
"type": "address"
58+
}
59+
],
60+
"name": "Upgraded",
61+
"type": "event"
62+
},
63+
{
64+
"stateMutability": "payable",
65+
"type": "fallback"
66+
}
67+
]

deployments/abis/Zap.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
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\"}]"

foundry.toml

+7-4
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@ src = 'src'
33
test = 'test/'
44
out = 'out'
55
libs = ['lib']
6-
solc_version = "0.8.20"
6+
solc_version = "0.8.27"
77
optimizer = true
8-
optimizer_runs = 1_000_000
8+
optimizer_runs = 1_000
9+
via-ir = true
10+
ffi = true
11+
evm_version = "cancun"
912

1013
[fmt]
1114
line_length = 80
@@ -14,15 +17,15 @@ number_underscore = "thousands"
1417
[rpc_endpoints]
1518
mainnet = "${MAINNET_RPC_URL}"
1619
optimism = "${OPTIMISM_RPC_URL}"
17-
base = "${BASE_RPC_URL}"
20+
arbitrum = "${ARBITRUM_RPC_URL}"
1821
goerli = "${GOERLI_RPC_URL}"
1922
optimismGoerli = "${OPTIMISM_GOERLI_RPC_URL}"
2023
baseGoerli = "${BASE_GOERLI_RPC_URL}"
2124

2225
[etherscan]
2326
mainnet = { key = "${ETHERSCAN_API_KEY}" }
2427
optimism = { key = "${OPTIMISM_ETHERSCAN_API_KEY}" }
25-
base = { key = "${BASESCAN_API_KEY}" }
28+
arbitrum = { key = "${ARBISCAN_API_KEY}" }
2629
goerli = { key = "${ETHERSCAN_API_KEY}" }
2730
optimismGoerli = { key = "${OPTIMISM_ETHERSCAN_API_KEY}" }
2831
baseGoerli = { key = "${BASESCAN_API_KEY}" }

0 commit comments

Comments
 (0)