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 source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -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 source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
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