Commit 75fa053f authored by Mark Tyneway's avatar Mark Tyneway Committed by GitHub

Merge pull request #7631 from ethereum-optimism/fix-gen

fix(contracts-ts): Fix code gen
parents 7c068606 5ef67352
This diff is collapsed.
......@@ -7,6 +7,13 @@
"1": "0x15DdA60616Ffca20371ED1659dBB78E888f65556",
"10": "0x15DdA60616Ffca20371ED1659dBB78E888f65556"
},
"AttestationStation": {
"10": "0xEE36eaaD94d1Cc1d0eccaDb55C38bFfB6Be06C77",
"420": "0xEE36eaaD94d1Cc1d0eccaDb55C38bFfB6Be06C77"
},
"BaseFeeVault": {
"420": "0x4200000000000000000000000000000000000019"
},
"CheckBalanceHigh": {
"1": "0x7eC64a8a591bFf829ff6C8be76074D540ACb813F",
"5": "0x7eC64a8a591bFf829ff6C8be76074D540ACb813F",
......@@ -36,70 +43,83 @@
"Drippie_optimism-goerli": {
"420": "0x8D8d533C16D23847EB04EEB0925be8900Dd3af86"
},
"EAS": {
"10": "0x4E0275Ea5a89e7a3c1B58411379D1a0eDdc5b088",
"420": "0x5A633F1cc84B03F7588486CF2F386c102061E6e1"
},
"GasPriceOracle": {
"420": "0x420000000000000000000000000000000000000F"
},
"L1Block": {
"420": "0x4200000000000000000000000000000000000015"
},
"L1CrossDomainMessenger": {
"1": "0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1",
"1": "0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1"
},
"L1CrossDomainMessenger_goerli": {
"5": "0x5086d1eEF304eb5284A0f6720f79403b4e9bE294"
},
"L1ERC721Bridge": {
"1": "0x5a7749f83b81B301cAb5f48EB8516B986DAef23D",
"5": "0x8DD330DdE8D9898d43b4dc840Da27A07dF91b3c9"
"1": "0x5a7749f83b81B301cAb5f48EB8516B986DAef23D"
},
"L1StandardBridge": {
"1": "0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1",
"5": "0x636Af16bf2f682dD3109e60102b8E1A089FedAa8"
},
"L2OutputOracle": {
"1": "0xdfe97868233d1aa22e815a266982f2cf17685a27",
"5": "0xE6Dfba0953616Bacab0c9A8ecb3a9BBa77FC15c0"
"L1ERC721Bridge_goerli": {
"5": "0x8DD330DdE8D9898d43b4dc840Da27A07dF91b3c9"
},
"OptimismMintableERC20Factory": {
"1": "0x4200000000000000000000000000000000000012",
"5": "0x4200000000000000000000000000000000000012",
"420": "0x4200000000000000000000000000000000000012"
"L1FeeVault": {
"420": "0x420000000000000000000000000000000000001a"
},
"OptimismPortal": {
"1": "0xbEb5Fc579115071764c7423A4f12eDde41f106Ed",
"5": "0x5b47E1A08Ea6d985D6649300584e6722Ec4B1383"
"L1StandardBridge": {
"1": "0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1"
},
"PortalSender": {
"1": "0x0A893d9576b9cFD9EF78595963dc973238E78210",
"5": "0xe7FACd39531ee3C313330E93B4d7a8B8A3c84Aa4"
"L1StandardBridge_goerli": {
"5": "0x636Af16bf2f682dD3109e60102b8E1A089FedAa8"
},
"ProxyAdmin": {
"1": "0x4200000000000000000000000000000000000018",
"5": "0x4200000000000000000000000000000000000018"
"L2CrossDomainMessenger": {
"420": "0x4200000000000000000000000000000000000007"
},
"SystemConfig": {
"1": "0x229047fed2591dbec1eF1118d64F7aF3dB9EB290",
"5": "0xAe851f927Ee40dE99aaBb7461C00f9622ab91d60"
"L2ERC721Bridge": {
"10": "0x4200000000000000000000000000000000000014"
},
"SystemDictator": {
"1": "0xB4453CEb33d2e67FA244A24acf2E50CEF31F53cB"
"L2ERC721Bridge_optimism-goerli": {
"420": "0x4200000000000000000000000000000000000014"
},
"SystemDictator_goerli": {
"5": "0x1f0613A44c9a8ECE7B3A2e0CdBdF0F5B47A50971"
"L2OutputOracle": {
"1": "0xdfe97868233d1aa22e815a266982f2cf17685a27"
},
"TeleportrWithdrawer": {
"1": "0x78A25524D90E3D0596558fb43789bD800a5c3007"
"L2OutputOracle_goerli": {
"5": "0xE6Dfba0953616Bacab0c9A8ecb3a9BBa77FC15c0"
},
"AttestationStation": {
"10": "0xEE36eaaD94d1Cc1d0eccaDb55C38bFfB6Be06C77",
"420": "0xEE36eaaD94d1Cc1d0eccaDb55C38bFfB6Be06C77"
"L2StandardBridge": {
"420": "0x4200000000000000000000000000000000000010"
},
"L2ERC721Bridge": {
"10": "0x4200000000000000000000000000000000000014",
"420": "0x4200000000000000000000000000000000000014"
"L2ToL1MessagePasser": {
"420": "0x4200000000000000000000000000000000000016"
},
"MintManager": {
"10": "0x5C4e7Ba1E219E47948e6e3F55019A647bA501005",
"420": "0x038a8825A3C3B0c08d52Cc76E5E361953Cf6Dc76"
},
"OptimismMintableERC20Factory": {
"1": "0x4200000000000000000000000000000000000012"
},
"OptimismMintableERC20Factory_goerli": {
"5": "0x4200000000000000000000000000000000000012"
},
"OptimismMintableERC20Factory_optimism-goerli": {
"420": "0x4200000000000000000000000000000000000012"
},
"OptimismMintableERC721Factory": {
"10": "0x4200000000000000000000000000000000000017"
},
"OptimismMintableERC721Factory_optimism-goerli": {
"420": "0x4200000000000000000000000000000000000017"
},
"OptimismPortal": {
"1": "0xbEb5Fc579115071764c7423A4f12eDde41f106Ed"
},
"OptimismPortal_goerli": {
"5": "0x5b47E1A08Ea6d985D6649300584e6722Ec4B1383"
},
"Optimist": {
"10": "0x2335022c740d17c2837f9C884Bfe4fFdbf0A95D5",
"420": "0x2335022c740d17c2837f9C884Bfe4fFdbf0A95D5"
......@@ -112,28 +132,37 @@
"10": "0x073031A1E1b8F5458Ed41Ce56331F5fd7e1de929",
"420": "0x073031A1E1b8F5458Ed41Ce56331F5fd7e1de929"
},
"BaseFeeVault": {
"420": "0x4200000000000000000000000000000000000019"
"PortalSender": {
"1": "0x0A893d9576b9cFD9EF78595963dc973238E78210",
"5": "0xe7FACd39531ee3C313330E93B4d7a8B8A3c84Aa4"
},
"GasPriceOracle": {
"420": "0x420000000000000000000000000000000000000F"
"ProtocolVersions": {
"5": "0x0C24F5098774aA366827D667494e9F889f7cFc08"
},
"L1Block": {
"420": "0x4200000000000000000000000000000000000015"
"ProxyAdmin": {
"1": "0x4200000000000000000000000000000000000018",
"5": "0x4200000000000000000000000000000000000018"
},
"L1FeeVault": {
"420": "0x420000000000000000000000000000000000001a"
"SchemaRegistry": {
"10": "0x6232208d66bAc2305b46b4Cb6BCB3857B298DF13",
"420": "0x2545fa928d5d278cA75Fd47306e4a89096ff6403"
},
"L2CrossDomainMessenger": {
"420": "0x4200000000000000000000000000000000000007"
"SequencerFeeVault": {
"420": "0x4200000000000000000000000000000000000011"
},
"L2StandardBridge": {
"420": "0x4200000000000000000000000000000000000010"
"SystemConfig": {
"1": "0x229047fed2591dbec1eF1118d64F7aF3dB9EB290"
},
"L2ToL1MessagePasser": {
"420": "0x4200000000000000000000000000000000000016"
"SystemConfig_goerli": {
"5": "0xAe851f927Ee40dE99aaBb7461C00f9622ab91d60"
},
"SequencerFeeVault": {
"420": "0x4200000000000000000000000000000000000011"
"SystemDictator": {
"1": "0xB4453CEb33d2e67FA244A24acf2E50CEF31F53cB"
},
"SystemDictator_goerli": {
"5": "0x1f0613A44c9a8ECE7B3A2e0CdBdF0F5B47A50971"
},
"TeleportrWithdrawer": {
"1": "0x78A25524D90E3D0596558fb43789bD800a5c3007"
}
}
......@@ -78,6 +78,8 @@
},
"dependencies": {
"@testing-library/react": "^14.0.0",
"@types/change-case": "^2.3.1",
"change-case": "4.1.2",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"viem": "^1.16.3"
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
import { ContractConfig, defineConfig, Plugin } from '@wagmi/cli'
import { actions, react } from '@wagmi/cli/plugins'
import glob from 'glob'
import * as glob from 'glob'
import { readFileSync, writeFileSync } from 'fs'
import type { Abi, AbiFunction, Address } from 'abitype'
import type { Abi, Address } from 'abitype'
import { isDeepStrictEqual } from 'util'
import { camelCase, constantCase } from 'change-case'
/**
* Predeployed contract addresses
......@@ -158,22 +159,36 @@ Object.entries(deployments).forEach(([chain, deploymentFiles]) => {
}
})
const getWagmiContracts = (deploymentFiles: string[]) =>
const getWagmiContracts = (
deploymentFiles: string[],
filterDuplicates = false
) =>
deploymentFiles.map((artifactPath) => {
const deployment = JSON.parse(
readFileSync(artifactPath, 'utf8')
) as DeploymentJson
// There is a wagmi bug we need to filter out the MESSENGER method because it collides with messenger
// There is a known bug in the wagmi/cli repo where some contracts have FOO_CASE and fooCase in same contract causing issues
// This is a common pattern at OP
// @see https://github.com/wagmi-dev/wagmi/issues/2724
const filterOut = new Set([
'MESSENGER',
'OTHER_BRIDGE',
'VERSION',
'DECIMALS',
])
const abi = deployment.abi.filter(
(item) => !filterOut.has((item as AbiFunction).name)
)
const abi = filterDuplicates
? deployment.abi.filter((item) => {
if (item.type !== 'function') {
return true
}
if (item.name !== constantCase(item.name)) {
return true
}
// if constante case make sure it is not a duplicate
// e.g. make sure fooBar doesn't exist with FOO_BAR
return !deployment.abi.some(
(otherItem) =>
otherItem.type === 'function' &&
otherItem.name !== item.name &&
otherItem.name === camelCase(item.name)
)
})
: deployment.abi
const contractConfig = {
abi,
name: artifactPath.split('/').reverse()[0]?.replace('.json', ''),
......@@ -190,12 +205,12 @@ const getWagmiContracts = (deploymentFiles: string[]) =>
/**
* Returns the contracts for the wagmi cli config
*/
const getContractConfigs = () => {
const getContractConfigs = (filterDuplicates = false) => {
const contracts = {
1: getWagmiContracts(deployments[1]),
10: getWagmiContracts(deployments[10]),
5: getWagmiContracts(deployments[5]),
420: getWagmiContracts(deployments[420]),
1: getWagmiContracts(deployments[1], filterDuplicates),
10: getWagmiContracts(deployments[10], filterDuplicates),
5: getWagmiContracts(deployments[5], filterDuplicates),
420: getWagmiContracts(deployments[420], filterDuplicates),
}
const allContracts = Object.values(contracts).flat()
......@@ -341,6 +356,8 @@ const eslintIgnorePlugin: Plugin = {
}
const contracts = getContractConfigs()
// there is a known wagmi bug with contracts who have both FOO_BAR and fooBar method
const contractsWithFilteredDuplicates = getContractConfigs(true)
// @see https://wagmi.sh/cli
export default defineConfig([
{
......@@ -354,12 +371,12 @@ export default defineConfig([
},
{
out: 'src/actions.ts',
contracts,
contracts: contractsWithFilteredDuplicates,
plugins: [eslintIgnorePlugin, actions()],
},
{
out: 'src/react.ts',
contracts,
contracts: contractsWithFilteredDuplicates,
plugins: [eslintIgnorePlugin, react()],
},
])
......@@ -285,6 +285,12 @@ importers:
'@testing-library/react':
specifier: ^14.0.0
version: 14.0.0(react-dom@18.2.0)(react@18.2.0)
'@types/change-case':
specifier: ^2.3.1
version: 2.3.1
change-case:
specifier: 4.1.2
version: 4.1.2
react:
specifier: ^18.2.0
version: 18.2.0
......@@ -3885,6 +3891,13 @@ packages:
resolution: {integrity: sha512-/k+vesl92vMvMygmQrFe9Aimxi6oQXFUX9mA5HanTrKUSAMoLauSi6PNFOdRw0oeqilaW600GNx2vSaT2f8aIQ==}
dev: true
/@types/change-case@2.3.1:
resolution: {integrity: sha512-HYiGjhmGInNzJjtt6ciXEfl2s8ZQGUQpPiwgWSth1fycE69hXbV/RgWH7MvSq2QPhMBzi4SGhu1vE+cMx1xB8g==}
deprecated: This is a stub types definition for change-case (https://github.com/blakeembrey/change-case). change-case provides its own type definitions, so you don't need @types/change-case installed!
dependencies:
change-case: 4.1.2
dev: false
/@types/connect@3.4.35:
resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
dependencies:
......@@ -6103,7 +6116,6 @@ packages:
dependencies:
pascal-case: 3.1.2
tslib: 2.6.2
dev: true
/camelcase-keys@6.2.2:
resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
......@@ -6138,7 +6150,6 @@ packages:
no-case: 3.0.4
tslib: 2.6.2
upper-case-first: 2.0.2
dev: true
/cardinal@2.1.1:
resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==}
......@@ -6241,7 +6252,6 @@ packages:
sentence-case: 3.0.4
snake-case: 3.0.4
tslib: 2.6.2
dev: true
/character-entities-legacy@1.1.4:
resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==}
......@@ -6508,7 +6518,6 @@ packages:
no-case: 3.0.4
tslib: 2.6.2
upper-case: 2.0.2
dev: true
/content-disposition@0.5.4:
resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
......@@ -7030,7 +7039,6 @@ packages:
dependencies:
no-case: 3.0.4
tslib: 2.6.2
dev: true
/dotenv-expand@10.0.0:
resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==}
......@@ -8989,7 +8997,6 @@ packages:
dependencies:
capital-case: 1.0.4
tslib: 2.6.2
dev: true
/hexoid@1.0.0:
resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==}
......@@ -10322,7 +10329,6 @@ packages:
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
dependencies:
tslib: 2.6.2
dev: true
/lru-cache@10.0.1:
resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==}
......@@ -11066,7 +11072,6 @@ packages:
dependencies:
lower-case: 2.0.2
tslib: 2.6.2
dev: true
/node-addon-api@2.0.2:
resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==}
......@@ -11606,7 +11611,6 @@ packages:
dependencies:
dot-case: 3.0.4
tslib: 2.6.2
dev: true
/parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
......@@ -11663,7 +11667,6 @@ packages:
dependencies:
no-case: 3.0.4
tslib: 2.6.2
dev: true
/patch-package@8.0.0:
resolution: {integrity: sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==}
......@@ -11696,7 +11699,6 @@ packages:
dependencies:
dot-case: 3.0.4
tslib: 2.6.2
dev: true
/path-exists@2.1.0:
resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==}
......@@ -12808,7 +12810,6 @@ packages:
no-case: 3.0.4
tslib: 2.6.2
upper-case-first: 2.0.2
dev: true
/serialize-javascript@6.0.0:
resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
......@@ -12936,7 +12937,6 @@ packages:
dependencies:
dot-case: 3.0.4
tslib: 2.6.2
dev: true
/solc@0.4.26:
resolution: {integrity: sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==}
......@@ -14065,13 +14065,11 @@ packages:
resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==}
dependencies:
tslib: 2.6.2
dev: true
/upper-case@2.0.2:
resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==}
dependencies:
tslib: 2.6.2
dev: true
/uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment