Commit e3300c42 authored by Mark Tyneway's avatar Mark Tyneway Committed by GitHub

Merge pull request #6148 from ethereum-optimism/feat/ctb-dead-ts

contracts-bedrock: delete dead typescript
parents ee058e41 d59ac98d
...@@ -130,8 +130,8 @@ jobs: ...@@ -130,8 +130,8 @@ jobs:
- persist_to_workspace: - persist_to_workspace:
root: "." root: "."
paths: paths:
- "packages/*/dist" - "packages/**/dist"
- "packages/*/artifacts" - "packages/contracts-bedrock/forge-artifacts"
docker-build: docker-build:
environment: environment:
...@@ -574,12 +574,12 @@ jobs: ...@@ -574,12 +574,12 @@ jobs:
steps: steps:
- checkout - checkout
- attach_workspace: { at: "." } - attach_workspace: { at: "." }
- check-changed:
patterns: sdk,contracts-bedrock,contracts
- restore_cache: - restore_cache:
name: Restore Yarn Package Cache name: Restore Yarn Package Cache
keys: keys:
- yarn-packages-v2-{{ checksum "yarn.lock" }} - yarn-packages-v2-{{ checksum "yarn.lock" }}
- check-changed:
patterns: sdk,contracts-bedrock,contracts
- run: - run:
name: anvil-l1 name: anvil-l1
background: true background: true
......
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
"configsProject": [ "configsProject": [
"{projectRoot}/foundry.toml", "{projectRoot}/foundry.toml",
"{projectRoot}/tsconfig.json", "{projectRoot}/tsconfig.json",
"{projectRoot}/hardhat.config.ts",
"{projectRoot}/package.json" "{projectRoot}/package.json"
], ],
"default": ["{projectRoot}/**/*", "configsWorkspace"], "default": ["{projectRoot}/**/*", "configsWorkspace"],
...@@ -38,8 +37,6 @@ ...@@ -38,8 +37,6 @@
], ],
"productionSrc": [ "productionSrc": [
"{projectRoot}/src/**/*", "{projectRoot}/src/**/*",
"!{projectRoot}/src/contract-artifacts.ts",
"!{projectRoot}/src/contract-deployed-artifacts.ts",
"!{projectRoot}/src/**/*.spec.ts" "!{projectRoot}/src/**/*.spec.ts"
], ],
"productionContracts": ["{projectRoot}/contracts/**/*"], "productionContracts": ["{projectRoot}/contracts/**/*"],
...@@ -63,16 +60,6 @@ ...@@ -63,16 +60,6 @@
"dependsOn": ["^build"], "dependsOn": ["^build"],
"outputs": ["{projectRoot}/artifacts", "{projectRoot}/forge-artifacts"] "outputs": ["{projectRoot}/artifacts", "{projectRoot}/forge-artifacts"]
}, },
"autogen:artifacts": {
"inputs": [
"configsWorkspace",
"configsProject",
"productionContracts",
"^productionContracts"
],
"dependsOn": ["^build", "build:contracts"],
"outputs": ["srcGenerated"]
},
"build": { "build": {
"inputs": [ "inputs": [
"configsWorkspace", "configsWorkspace",
...@@ -80,7 +67,7 @@ ...@@ -80,7 +67,7 @@
"production", "production",
"^production" "^production"
], ],
"dependsOn": ["^build", "autogen:artifacts", "build:contracts"], "dependsOn": ["^build", "build:contracts"],
"outputs": ["{projectRoot}/dist"] "outputs": ["{projectRoot}/dist"]
} }
} }
......
...@@ -45,7 +45,7 @@ version: ...@@ -45,7 +45,7 @@ version:
compile: compile:
cd ../packages/contracts-bedrock/ && \ cd ../packages/contracts-bedrock/ && \
yarn clean && \ yarn clean && \
npx hardhat compile yarn build
system-config-bindings: compile system-config-bindings: compile
./gen_bindings.sh contracts/L1/SystemConfig.sol:SystemConfig $(pkg) ./gen_bindings.sh contracts/L1/SystemConfig.sol:SystemConfig $(pkg)
......
...@@ -12,7 +12,8 @@ import ( ...@@ -12,7 +12,8 @@ import (
"text/template" "text/template"
"github.com/ethereum-optimism/optimism/op-bindings/ast" "github.com/ethereum-optimism/optimism/op-bindings/ast"
"github.com/ethereum-optimism/optimism/op-bindings/hardhat" "github.com/ethereum-optimism/optimism/op-bindings/solc"
"github.com/ethereum/go-ethereum/common/hexutil"
) )
type flags struct { type flags struct {
...@@ -33,14 +34,16 @@ type data struct { ...@@ -33,14 +34,16 @@ type data struct {
} }
type forgeArtifact struct { type forgeArtifact struct {
StorageLayout *solc.StorageLayout `json:"storageLayout"`
DeployedBytecode struct { DeployedBytecode struct {
SourceMap string `json:"sourceMap"` SourceMap string `json:"sourceMap"`
Object hexutil.Bytes `json:"object"`
} `json:"deployedBytecode"` } `json:"deployedBytecode"`
} }
func main() { func main() {
var f flags var f flags
flag.StringVar(&f.ArtifactsDir, "artifacts", "", "Comma-separated list of directories containing artifacts and build info") flag.StringVar(&f.ArtifactsDir, "artifacts", "", "Comma-separated list of directories build info")
flag.StringVar(&f.ForgeArtifacts, "forge-artifacts", "", "Forge artifacts directory, to load sourcemaps from, if available") flag.StringVar(&f.ForgeArtifacts, "forge-artifacts", "", "Forge artifacts directory, to load sourcemaps from, if available")
flag.StringVar(&f.OutDir, "out", "", "Output directory to put code in") flag.StringVar(&f.OutDir, "out", "", "Output directory to put code in")
flag.StringVar(&f.Contracts, "contracts", "", "Comma-separated list of contracts to generate code for") flag.StringVar(&f.Contracts, "contracts", "", "Comma-separated list of contracts to generate code for")
...@@ -64,25 +67,28 @@ func main() { ...@@ -64,25 +67,28 @@ func main() {
log.Fatalf("must define a list of contracts") log.Fatalf("must define a list of contracts")
} }
hh, err := hardhat.New("dummy", artifacts, nil)
if err != nil {
log.Fatalln("error reading artifacts:", err)
}
t := template.Must(template.New("artifact").Parse(tmpl)) t := template.Must(template.New("artifact").Parse(tmpl))
for _, name := range contracts { for _, name := range contracts {
art, err := hh.GetArtifact(name) forgeArtifactData, err := os.ReadFile(path.Join(f.ForgeArtifacts, name+".sol", name+".json"))
if err != nil { if errors.Is(err, os.ErrNotExist) {
log.Fatalf("error reading artifact %s: %v\n", name, err) log.Printf("cannot find forge-artifact with source-map data of %q\n", name)
} }
storage, err := hh.GetStorageLayout(name) var artifact forgeArtifact
if err := json.Unmarshal(forgeArtifactData, &artifact); err != nil {
log.Fatalf("failed to parse forge artifact of %q: %v\n", name, err)
}
if err != nil { if err != nil {
log.Fatalf("error reading storage layout %s: %v\n", name, err) log.Fatalf("error reading storage layout %s: %v\n", name, err)
} }
canonicalStorage := ast.CanonicalizeASTIDs(storage)
storage := artifact.StorageLayout
if storage == nil {
log.Fatalf("no storage layout for %s\n", name)
}
canonicalStorage := ast.CanonicalizeASTIDs(storage)
ser, err := json.Marshal(canonicalStorage) ser, err := json.Marshal(canonicalStorage)
if err != nil { if err != nil {
log.Fatalf("error marshaling storage: %v\n", err) log.Fatalf("error marshaling storage: %v\n", err)
...@@ -108,7 +114,7 @@ func main() { ...@@ -108,7 +114,7 @@ func main() {
d := data{ d := data{
Name: name, Name: name,
StorageLayout: serStr, StorageLayout: serStr,
DeployedBin: art.DeployedBytecode.String(), DeployedBin: artifact.DeployedBytecode.Object.String(),
Package: f.Package, Package: f.Package,
DeployedSourceMap: deployedSourceMap, DeployedSourceMap: deployedSourceMap,
} }
......
import { DeployConfig } from '../src/deploy-config'
import config from './devnetL1.json'
export default config satisfies DeployConfig
import { DeployConfig } from '../src/deploy-config'
import config from './getting-started.json'
export default config satisfies DeployConfig
import { DeployConfig } from '../src/deploy-config'
import config from './goerli-forked.json'
export default config satisfies DeployConfig
import { DeployConfig } from '../src/deploy-config'
import config from './goerli.json'
export default config satisfies DeployConfig
import { DeployConfig } from '../src/deploy-config'
import config from './hardhat.json'
export default config satisfies DeployConfig
import { DeployConfig } from '../src/deploy-config'
const config: DeployConfig = {
finalSystemOwner: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
controller: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
portalGuardian: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
proxyAdminOwner: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
l1StartingBlockTag:
'0x126e52a0cc0ae18948f567ee9443f4a8f0db67c437706e35baee424eb314a0d0',
l1ChainID: 1,
l2ChainID: 10,
l2BlockTime: 2,
maxSequencerDrift: 600,
sequencerWindowSize: 3600,
channelTimeout: 300,
p2pSequencerAddress: '0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65',
batchInboxAddress: '0xff00000000000000000000000000000000000010',
batchSenderAddress: '0x70997970C51812dc3A010C7d01b50e0d17dc79C8',
l2OutputOracleSubmissionInterval: 20,
l2OutputOracleStartingTimestamp: 1679069195,
l2OutputOracleStartingBlockNumber: 79149704,
l2OutputOracleProposer: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
l2OutputOracleChallenger: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',
finalizationPeriodSeconds: 2,
baseFeeVaultRecipient: '0x90F79bf6EB2c4f870365E785982E1f101E93b906',
l1FeeVaultRecipient: '0x90F79bf6EB2c4f870365E785982E1f101E93b906',
sequencerFeeVaultRecipient: '0x90F79bf6EB2c4f870365E785982E1f101E93b906',
baseFeeVaultMinimumWithdrawalAmount: '0x8ac7230489e80000',
l1FeeVaultMinimumWithdrawalAmount: '0x8ac7230489e80000',
sequencerFeeVaultMinimumWithdrawalAmount: '0x8ac7230489e80000',
baseFeeVaultWithdrawalNetwork: 0,
l1FeeVaultWithdrawalNetwork: 0,
sequencerFeeVaultWithdrawalNetwork: 0,
enableGovernance: true,
governanceTokenName: 'Optimism',
governanceTokenSymbol: 'OP',
governanceTokenOwner: '0x90F79bf6EB2c4f870365E785982E1f101E93b906',
l2GenesisBlockGasLimit: '0x17D7840',
l2GenesisBlockCoinbase: '0x4200000000000000000000000000000000000011',
l2GenesisBlockBaseFeePerGas: '0x3b9aca00',
gasPriceOracleOverhead: 2100,
gasPriceOracleScalar: 1000000,
eip1559Denominator: 50,
eip1559Elasticity: 10,
l2GenesisRegolithTimeOffset: '0x0',
}
export default config
import { DeployConfig } from '../src/deploy-config'
import mainnetJson from './mainnet.json'
// NOTE: The 'mainnet' network is currently being used for bedrock migration rehearsals.
// The system configured below is not yet live on mainnet, and many of the addresses used are
// unsafe for a production system.
// Re-export the mainnet json as a DeployConfig object.
//
// Notice, the following roles in the system are assigned to the:
// Optimism Foundation Mulitisig:
// - finalSystemOwner
// - controller
// - portalGuardian
// - proxyAdminOwner
// - l2OutputOracleChallenger
//
// The following roles are assigned to the same fee recipient:
// - baseFeeVaultRecipient
// - l1FeeVaultRecipient
// - sequencerFeeVaultRecipient
//
// The following role is assigned to the Mint Manager contract:
// - governanceTokenOwner
export default mainnetJson satisfies DeployConfig
import { ethers } from 'ethers'
import { HardhatUserConfig } from 'hardhat/config'
import dotenv from 'dotenv'
// Hardhat plugins
import '@eth-optimism/hardhat-deploy-config'
import '@foundry-rs/hardhat-forge'
import '@nomiclabs/hardhat-ethers'
import 'hardhat-deploy'
// Hardhat tasks
import './tasks'
// Deploy configuration
import { deployConfigSpec } from './src/deploy-config'
// Load environment variables
dotenv.config()
const config: HardhatUserConfig = {
networks: {
hardhat: {
live: false,
},
local: {
live: false,
url: 'http://localhost:8545',
saveDeployments: !!process.env.SAVE_DEPLOYMENTS || false,
accounts: [
'ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
],
},
// NOTE: The 'mainnet' network is currently being used for mainnet rehearsals.
mainnet: {
url: process.env.L1_RPC || 'https://mainnet-l1-rehearsal.optimism.io',
accounts: [
process.env.PRIVATE_KEY_DEPLOYER ||
'ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
],
},
devnetL1: {
live: false,
url: 'http://localhost:8545',
accounts: [
'ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
],
},
devnetL2: {
live: false,
url: process.env.RPC_URL || 'http://localhost:9545',
accounts: [
'ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
],
},
hivenet: {
chainId: Number(process.env.CHAIN_ID),
url: process.env.L1_RPC || '',
accounts: [process.env.PRIVATE_KEY_DEPLOYER || ethers.constants.HashZero],
},
goerli: {
chainId: 5,
url: process.env.L1_RPC || '',
accounts: [process.env.PRIVATE_KEY_DEPLOYER || ethers.constants.HashZero],
companionNetworks: {
l2: 'optimism-goerli',
},
},
'optimism-goerli': {
chainId: 420,
url: process.env.L2_RPC || '',
accounts: [process.env.PRIVATE_KEY_DEPLOYER || ethers.constants.HashZero],
companionNetworks: {
l1: 'goerli',
},
},
'alpha-1': {
chainId: 5,
url: process.env.L1_RPC || '',
accounts: [process.env.PRIVATE_KEY_DEPLOYER || ethers.constants.HashZero],
},
deployer: {
chainId: Number(process.env.CHAIN_ID),
url: process.env.L1_RPC || '',
accounts: [process.env.PRIVATE_KEY_DEPLOYER || ethers.constants.HashZero],
live: process.env.VERIFY_CONTRACTS === 'true',
},
'mainnet-forked': {
chainId: 1,
url: process.env.L1_RPC || '',
accounts: [process.env.PRIVATE_KEY_DEPLOYER || ethers.constants.HashZero],
live: false,
},
'goerli-forked': {
chainId: 5,
url: process.env.L1_RPC || '',
accounts: [process.env.PRIVATE_KEY_DEPLOYER || ethers.constants.HashZero],
live: true,
},
'internal-devnet': {
chainId: 5,
url: process.env.L1_RPC || '',
accounts: [process.env.PRIVATE_KEY_DEPLOYER || ethers.constants.HashZero],
live: true,
},
'getting-started': {
chainId: 5,
url: process.env.L1_RPC || '',
accounts: [process.env.PRIVATE_KEY_DEPLOYER || ethers.constants.HashZero],
live: true,
},
},
foundry: {
buildInfo: true,
},
paths: {
deploy: './deploy',
deployments: './deployments',
deployConfig: './deploy-config',
},
namedAccounts: {
deployer: {
default: 0,
},
},
deployConfigSpec,
external: {
contracts: [
{
artifacts: '../contracts/artifacts',
},
],
deployments: {
goerli: [
'../contracts/deployments/goerli',
'../contracts-periphery/deployments/goerli',
],
mainnet: [
'../contracts/deployments/mainnet',
'../contracts-periphery/deployments/mainnet',
],
'mainnet-forked': [
'../contracts/deployments/mainnet',
'../contracts-periphery/deployments/mainnet',
],
'goerli-forked': [
'../contracts/deployments/goerli',
'../contracts-periphery/deployments/goerli',
],
},
},
solidity: {
compilers: [
{
version: '0.8.15',
settings: {
optimizer: { enabled: true, runs: 10_000 },
},
},
{
version: '0.5.17', // Required for WETH9
settings: {
optimizer: { enabled: true, runs: 10_000 },
},
},
],
settings: {
metadata: {
bytecodeHash:
process.env.FOUNDRY_PROFILE === 'echidna' ? 'ipfs' : 'none',
},
outputSelection: {
'*': {
'*': ['metadata', 'storageLayout'],
},
},
},
},
}
export default config
...@@ -2,36 +2,28 @@ ...@@ -2,36 +2,28 @@
"name": "@eth-optimism/contracts-bedrock", "name": "@eth-optimism/contracts-bedrock",
"version": "0.15.0", "version": "0.15.0",
"description": "Contracts for Optimism Specs", "description": "Contracts for Optimism Specs",
"main": "dist/index",
"types": "dist/index",
"license": "MIT", "license": "MIT",
"files": [ "files": [
"dist/**/*.js", "forge-artifacts/**/*.json",
"dist/**/*.d.ts",
"dist/types/**/*.ts",
"artifacts/contracts/**/*.json",
"deployments/**/*.json", "deployments/**/*.json",
"contracts/**/*.sol" "contracts/**/*.sol"
], ],
"scripts": { "scripts": {
"bindings": "cd ../../op-bindings && make", "bindings": "cd ../../op-bindings && make",
"build:with-metadata": "FOUNDRY_PROFILE=echidna yarn build:forge", "build:with-metadata": "FOUNDRY_PROFILE=echidna yarn build:forge",
"build": "npx nx build:ts && npx nx typechain", "build": "npx nx build:contracts",
"prebuild:contracts": "./scripts/verify-foundry-install.sh", "prebuild:contracts": "./scripts/verify-foundry-install.sh",
"build:contracts": "yarn build:hardhat", "build:contracts": "yarn build:forge",
"build:forge": "forge build", "build:forge": "forge build",
"build:hardhat": "hardhat compile",
"build:ts": "tsc -p tsconfig.build.json",
"build:differential": "go build -o ./scripts/differential-testing/differential-testing ./scripts/differential-testing", "build:differential": "go build -o ./scripts/differential-testing/differential-testing ./scripts/differential-testing",
"build:fuzz": "(cd test-case-generator && go build ./cmd/fuzz.go)", "build:fuzz": "(cd test-case-generator && go build ./cmd/fuzz.go)",
"autogen:artifacts": "ts-node scripts/generate-artifacts.ts",
"autogen:invariant-docs": "ts-node scripts/invariant-doc-gen.ts", "autogen:invariant-docs": "ts-node scripts/invariant-doc-gen.ts",
"test": "yarn build:differential && yarn build:fuzz && forge test", "test": "yarn build:differential && yarn build:fuzz && forge test",
"coverage": "yarn build:differential && yarn build:fuzz && forge coverage", "coverage": "yarn build:differential && yarn build:fuzz && forge coverage",
"coverage:lcov": "yarn build:differential && yarn build:fuzz && forge coverage --report lcov", "coverage:lcov": "yarn build:differential && yarn build:fuzz && forge coverage --report lcov",
"gas-snapshot": "yarn build:differential && yarn build:fuzz && forge snapshot --no-match-test 'testDiff|testFuzz|invariant|generateArtifact'", "gas-snapshot": "yarn build:differential && yarn build:fuzz && forge snapshot --no-match-test 'testDiff|testFuzz|invariant|generateArtifact'",
"storage-snapshot": "./scripts/storage-snapshot.sh", "storage-snapshot": "./scripts/storage-snapshot.sh",
"validate-deploy-configs": "hardhat compile && hardhat generate-deploy-config && ./scripts/validate-deploy-configs.sh", "validate-deploy-configs": "./scripts/validate-deploy-configs.sh",
"validate-spacers": "forge build && npx ts-node scripts/validate-spacers.ts", "validate-spacers": "forge build && npx ts-node scripts/validate-spacers.ts",
"slither": "./scripts/slither.sh", "slither": "./scripts/slither.sh",
"slither:triage": "TRIAGE_MODE=1 ./scripts/slither.sh", "slither:triage": "TRIAGE_MODE=1 ./scripts/slither.sh",
...@@ -44,7 +36,6 @@ ...@@ -44,7 +36,6 @@
"lint:contracts:fix": "yarn solhint --fix 'contracts/**/!(DisputeTypes).sol' && yarn prettier --write 'contracts/**/!(DisputeTypes).sol'", "lint:contracts:fix": "yarn solhint --fix 'contracts/**/!(DisputeTypes).sol' && yarn prettier --write 'contracts/**/!(DisputeTypes).sol'",
"lint:fix": "yarn lint:contracts:fix && yarn lint:ts:fix", "lint:fix": "yarn lint:contracts:fix && yarn lint:ts:fix",
"lint": "yarn lint:fix && yarn lint:check", "lint": "yarn lint:fix && yarn lint:check",
"typechain": "typechain --target ethers-v5 --out-dir dist/types --glob 'artifacts/!(build-info)/**/+([a-zA-Z0-9_]).json'",
"echidna:aliasing": "echidna-test --contract EchidnaFuzzAddressAliasing --config ./echidna.yaml .", "echidna:aliasing": "echidna-test --contract EchidnaFuzzAddressAliasing --config ./echidna.yaml .",
"echidna:burn:gas": "echidna-test --contract EchidnaFuzzBurnGas --config ./echidna.yaml .", "echidna:burn:gas": "echidna-test --contract EchidnaFuzzBurnGas --config ./echidna.yaml .",
"echidna:burn:eth": "echidna-test --contract EchidnaFuzzBurnEth --config ./echidna.yaml .", "echidna:burn:eth": "echidna-test --contract EchidnaFuzzBurnEth --config ./echidna.yaml .",
...@@ -57,35 +48,19 @@ ...@@ -57,35 +48,19 @@
"@eth-optimism/core-utils": "^0.12.1", "@eth-optimism/core-utils": "^0.12.1",
"@openzeppelin/contracts": "4.7.3", "@openzeppelin/contracts": "4.7.3",
"@openzeppelin/contracts-upgradeable": "4.7.3", "@openzeppelin/contracts-upgradeable": "4.7.3",
"@rari-capital/solmate": "https://github.com/rari-capital/solmate.git#8f9b23f8838670afda0fd8983f2c41e8037ae6bc",
"clones-with-immutable-args": "https://github.com/Saw-mon-and-Natalie/clones-with-immutable-args.git#105efee1b9127ed7f6fedf139e1fc796ce8791f2",
"ethers": "^5.7.0" "ethers": "^5.7.0"
}, },
"devDependencies": { "devDependencies": {
"@eth-optimism/hardhat-deploy-config": "^0.2.6",
"@ethersproject/abstract-provider": "^5.7.0",
"@ethersproject/abstract-signer": "^5.7.0",
"ethereumjs-wallet": "^1.0.2",
"@defi-wonderland/smock": "^2.0.2",
"@foundry-rs/hardhat-forge": "^0.1.17",
"@nomiclabs/hardhat-ethers": "^2.0.0",
"@nomiclabs/hardhat-waffle": "^2.0.0",
"@rari-capital/solmate": "https://github.com/rari-capital/solmate.git#8f9b23f8838670afda0fd8983f2c41e8037ae6bc",
"clones-with-immutable-args": "https://github.com/Saw-mon-and-Natalie/clones-with-immutable-args.git#105efee1b9127ed7f6fedf139e1fc796ce8791f2",
"@typechain/ethers-v5": "^10.1.0",
"@typescript-eslint/eslint-plugin": "^5.45.1", "@typescript-eslint/eslint-plugin": "^5.45.1",
"@typescript-eslint/parser": "^5.45.1", "@typescript-eslint/parser": "^5.45.1",
"bip39": "^3.0.4",
"chai": "^4.2.0",
"dotenv": "^16.0.0",
"ds-test": "https://github.com/dapphub/ds-test.git#9310e879db8ba3ea6d5c6489a579118fd264a3f5", "ds-test": "https://github.com/dapphub/ds-test.git#9310e879db8ba3ea6d5c6489a579118fd264a3f5",
"ethereum-waffle": "^3.0.0",
"forge-std": "https://github.com/foundry-rs/forge-std.git#e8a047e3f40f13fa37af6fe14e6e06283d9a060e", "forge-std": "https://github.com/foundry-rs/forge-std.git#e8a047e3f40f13fa37af6fe14e6e06283d9a060e",
"glob": "^7.1.6", "glob": "^7.1.6",
"hardhat": "^2.9.6",
"hardhat-deploy": "^0.11.4",
"solhint": "^3.3.7", "solhint": "^3.3.7",
"solhint-plugin-prettier": "^0.0.5", "solhint-plugin-prettier": "^0.0.5",
"ts-node": "^10.9.1", "ts-node": "^10.9.1",
"typechain": "^8.1.0",
"typescript": "^4.9.3" "typescript": "^4.9.3"
} }
} }
import { ethers } from 'ethers'
/**
* Gets the hardhat artifact for the given contract name.
* Will throw an error if the contract artifact is not found.
*
* @param name Contract name.
* @returns The artifact for the given contract name.
*/
export const getContractDefinition = (name: string): any => {
// We import this using `require` because hardhat tries to build this file when compiling
// the contracts, but we need the contracts to be compiled before the contract-artifacts.ts
// file can be generated.
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { getContractArtifact } = require('./contract-artifacts')
const artifact = getContractArtifact(name)
if (artifact === undefined) {
throw new Error(`Unable to find artifact for contract: ${name}`)
}
return artifact
}
/**
* Gets an ethers Interface instance for the given contract name.
*
* @param name Contract name.
* @returns The interface for the given contract name.
*/
export const getContractInterface = (name: string): ethers.utils.Interface => {
const definition = getContractDefinition(name)
return new ethers.utils.Interface(definition.abi)
}
/**
* Gets an ethers ContractFactory instance for the given contract name.
*
* @param name Contract name.
* @param signer The signer for the ContractFactory to use.
* @returns The contract factory for the given contract name.
*/
export const getContractFactory = (
name: string,
signer?: ethers.Signer
): ethers.ContractFactory => {
const definition = getContractDefinition(name)
const contractInterface = getContractInterface(name)
return new ethers.ContractFactory(
contractInterface,
definition.bytecode,
signer
)
}
export * from './constants'
export * from './contract-defs'
import fs from 'fs'
import path from 'path'
import { task } from 'hardhat/config'
import { HardhatRuntimeEnvironment } from 'hardhat/types'
task(
'generate-deploy-config',
'generates a json config file for the current network'
).setAction(async ({}, hre: HardhatRuntimeEnvironment) => {
try {
const base = path.join(hre.config.paths.deployConfig, hre.network.name)
if (fs.existsSync(`${base}.ts`)) {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const config = require(`${base}.ts`).default
fs.writeFileSync(`${base}.json`, JSON.stringify(config, null, 2), 'utf8')
} else {
throw new Error('not found')
}
} catch (err) {
throw new Error(
`error while loading deploy config for network: ${hre.network.name}, ${err}`
)
}
})
import './solidity'
import './generate-deploy-config'
import { subtask } from 'hardhat/config'
import { TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS } from 'hardhat/builtin-tasks/task-names'
subtask(TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS).setAction(
async (_, __, runSuper) => {
const paths = await runSuper()
return paths.filter((p: string) => !p.endsWith('.t.sol'))
}
)
...@@ -4,10 +4,8 @@ ...@@ -4,10 +4,8 @@
"outDir": "./dist" "outDir": "./dist"
}, },
"include": [ "include": [
"src/**/*",
"deploy-config/**/*", "deploy-config/**/*",
"deploy-config/**/*.json", "deploy-config/**/*.json",
"tasks/**/*",
"scripts/**/*" "scripts/**/*"
] ]
} }
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
"url": "https://github.com/ethereum-optimism/optimism.git" "url": "https://github.com/ethereum-optimism/optimism.git"
}, },
"dependencies": { "dependencies": {
"ethers": "^5.7.0",
"@ethersproject/abi": "^5.7.0", "@ethersproject/abi": "^5.7.0",
"@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-provider": "^5.7.0",
"@ethersproject/address": "^5.7.0", "@ethersproject/address": "^5.7.0",
......
...@@ -9,3 +9,4 @@ export * from './deposit-transaction' ...@@ -9,3 +9,4 @@ export * from './deposit-transaction'
export * from './encoding' export * from './encoding'
export * from './hashing' export * from './hashing'
export * from './op-provider' export * from './op-provider'
export * from './constants'
...@@ -13,8 +13,10 @@ import { ...@@ -13,8 +13,10 @@ import {
BlockTag, BlockTag,
} from '@ethersproject/abstract-provider' } from '@ethersproject/abstract-provider'
import { predeploys } from '@eth-optimism/contracts' import { predeploys } from '@eth-optimism/contracts'
import { getContractInterface } from '@eth-optimism/contracts-bedrock'
import { hexStringEquals } from '@eth-optimism/core-utils' import { hexStringEquals } from '@eth-optimism/core-utils'
import l1StandardBridgeArtifact from '@eth-optimism/contracts-bedrock/forge-artifacts/L1StandardBridge.sol/L1StandardBridge.json'
import l2StandardBridgeArtifact from '@eth-optimism/contracts-bedrock/forge-artifacts/L2StandardBridge.sol/L2StandardBridge.json'
import optimismMintableERC20 from '@eth-optimism/contracts-bedrock/forge-artifacts/OptimismMintableERC20.sol/OptimismMintableERC20.json'
import { CrossChainMessenger } from '../cross-chain-messenger' import { CrossChainMessenger } from '../cross-chain-messenger'
import { import {
...@@ -50,12 +52,12 @@ export class StandardBridgeAdapter implements IBridgeAdapter { ...@@ -50,12 +52,12 @@ export class StandardBridgeAdapter implements IBridgeAdapter {
this.messenger = opts.messenger this.messenger = opts.messenger
this.l1Bridge = new Contract( this.l1Bridge = new Contract(
toAddress(opts.l1Bridge), toAddress(opts.l1Bridge),
getContractInterface('L1StandardBridge'), l1StandardBridgeArtifact.abi,
this.messenger.l1Provider this.messenger.l1Provider
) )
this.l2Bridge = new Contract( this.l2Bridge = new Contract(
toAddress(opts.l2Bridge), toAddress(opts.l2Bridge),
getContractInterface('L2StandardBridge'), l2StandardBridgeArtifact.abi,
this.messenger.l2Provider this.messenger.l2Provider
) )
} }
...@@ -157,7 +159,7 @@ export class StandardBridgeAdapter implements IBridgeAdapter { ...@@ -157,7 +159,7 @@ export class StandardBridgeAdapter implements IBridgeAdapter {
try { try {
const contract = new Contract( const contract = new Contract(
toAddress(l2Token), toAddress(l2Token),
getContractInterface('OptimismMintableERC20'), optimismMintableERC20.abi,
this.messenger.l2Provider this.messenger.l2Provider
) )
// Don't support ETH deposits or withdrawals via this bridge. // Don't support ETH deposits or withdrawals via this bridge.
...@@ -207,7 +209,7 @@ export class StandardBridgeAdapter implements IBridgeAdapter { ...@@ -207,7 +209,7 @@ export class StandardBridgeAdapter implements IBridgeAdapter {
const token = new Contract( const token = new Contract(
toAddress(l1Token), toAddress(l1Token),
getContractInterface('OptimismMintableERC20'), // Any ERC20 will do optimismMintableERC20.abi,
this.messenger.l1Provider this.messenger.l1Provider
) )
...@@ -274,7 +276,7 @@ export class StandardBridgeAdapter implements IBridgeAdapter { ...@@ -274,7 +276,7 @@ export class StandardBridgeAdapter implements IBridgeAdapter {
const token = new Contract( const token = new Contract(
toAddress(l1Token), toAddress(l1Token),
getContractInterface('OptimismMintableERC20'), // Any ERC20 will do optimismMintableERC20.abi,
this.messenger.l1Provider this.messenger.l1Provider
) )
......
import { import { predeploys } from '@eth-optimism/core-utils'
predeploys, import { ethers } from 'ethers'
getDeployedContractDefinition,
} from '@eth-optimism/contracts'
import { predeploys as bedrockPredeploys } from '@eth-optimism/contracts-bedrock'
import portalArtifactsMainnet from '@eth-optimism/contracts-bedrock/deployments/mainnet/OptimismPortalProxy.json' import portalArtifactsMainnet from '@eth-optimism/contracts-bedrock/deployments/mainnet/OptimismPortalProxy.json'
import portalArtifactsGoerli from '@eth-optimism/contracts-bedrock/deployments/goerli/OptimismPortalProxy.json' import portalArtifactsGoerli from '@eth-optimism/contracts-bedrock/deployments/goerli/OptimismPortalProxy.json'
import l2OutputOracleArtifactsMainnet from '@eth-optimism/contracts-bedrock/deployments/mainnet/L2OutputOracleProxy.json' import l2OutputOracleArtifactsMainnet from '@eth-optimism/contracts-bedrock/deployments/mainnet/L2OutputOracleProxy.json'
import l2OutputOracleArtifactsGoerli from '@eth-optimism/contracts-bedrock/deployments/goerli/L2OutputOracleProxy.json' import l2OutputOracleArtifactsGoerli from '@eth-optimism/contracts-bedrock/deployments/goerli/L2OutputOracleProxy.json'
import addressManagerArtifactMainnet from '@eth-optimism/contracts-bedrock/deployments/mainnet/AddressManager.json'
import addressManagerArtifactGoerli from '@eth-optimism/contracts-bedrock/deployments/goerli/AddressManager.json'
import l1StandardBridgeArtifactMainnet from '@eth-optimism/contracts-bedrock/deployments/mainnet/L1StandardBridgeProxy.json'
import l1StandardBridgeArtifactGoerli from '@eth-optimism/contracts-bedrock/deployments/goerli/L1StandardBridgeProxy.json'
import l1CrossDomainMessengerArtifactMainnet from '@eth-optimism/contracts-bedrock/deployments/mainnet/L1CrossDomainMessengerProxy.json'
import l1CrossDomainMessengerArtifactGoerli from '@eth-optimism/contracts-bedrock/deployments/goerli/L1CrossDomainMessengerProxy.json'
const portalAddresses = { const portalAddresses = {
mainnet: portalArtifactsMainnet, mainnet: portalArtifactsMainnet.address,
goerli: portalArtifactsGoerli, goerli: portalArtifactsGoerli.address,
} }
const l2OutputOracleAddresses = { const l2OutputOracleAddresses = {
mainnet: l2OutputOracleArtifactsMainnet, mainnet: l2OutputOracleArtifactsMainnet.address,
goerli: l2OutputOracleArtifactsGoerli, goerli: l2OutputOracleArtifactsGoerli.address,
}
const addressManagerAddresses = {
mainnet: addressManagerArtifactMainnet.address,
goerli: addressManagerArtifactGoerli.address,
}
const l1StandardBridgeAddresses = {
mainnet: l1StandardBridgeArtifactMainnet.address,
goerli: l1StandardBridgeArtifactGoerli.address,
}
const l1CrossDomainMessengerAddresses = {
mainnet: l1CrossDomainMessengerArtifactMainnet.address,
goerli: l1CrossDomainMessengerArtifactGoerli.address,
}
// legacy
const stateCommitmentChainAddresses = {
mainnet: '0xBe5dAb4A2e9cd0F27300dB4aB94BeE3A233AEB19',
goerli: '0x9c945aC97Baf48cB784AbBB61399beB71aF7A378',
}
// legacy
const canonicalTransactionChainAddresses = {
mainnet: '0x5E4e65926BA27467555EB562121fac00D24E9dD2',
goerli: '0x607F755149cFEB3a14E1Dc3A4E2450Cde7dfb04D',
} }
import { import {
...@@ -55,20 +85,19 @@ export const CHAIN_BLOCK_TIMES: { ...@@ -55,20 +85,19 @@ export const CHAIN_BLOCK_TIMES: {
/** /**
* Full list of default L2 contract addresses. * Full list of default L2 contract addresses.
* TODO(tynes): migrate to predeploys from contracts-bedrock
*/ */
export const DEFAULT_L2_CONTRACT_ADDRESSES: OEL2ContractsLike = { export const DEFAULT_L2_CONTRACT_ADDRESSES: OEL2ContractsLike = {
L2CrossDomainMessenger: predeploys.L2CrossDomainMessenger, L2CrossDomainMessenger: predeploys.L2CrossDomainMessenger,
L2ToL1MessagePasser: predeploys.OVM_L2ToL1MessagePasser, L2ToL1MessagePasser: predeploys.L2ToL1MessagePasser,
L2StandardBridge: predeploys.L2StandardBridge, L2StandardBridge: predeploys.L2StandardBridge,
OVM_L1BlockNumber: predeploys.OVM_L1BlockNumber, OVM_L1BlockNumber: predeploys.L1BlockNumber,
OVM_L2ToL1MessagePasser: predeploys.OVM_L2ToL1MessagePasser, OVM_L2ToL1MessagePasser: predeploys.L2ToL1MessagePasser,
OVM_DeployerWhitelist: predeploys.OVM_DeployerWhitelist, OVM_DeployerWhitelist: predeploys.DeployerWhitelist,
OVM_ETH: predeploys.OVM_ETH, OVM_ETH: predeploys.LegacyERC20ETH,
OVM_GasPriceOracle: predeploys.OVM_GasPriceOracle, OVM_GasPriceOracle: predeploys.GasPriceOracle,
OVM_SequencerFeeVault: predeploys.OVM_SequencerFeeVault, OVM_SequencerFeeVault: predeploys.SequencerFeeVault,
WETH: predeploys.WETH9, WETH: predeploys.WETH9,
BedrockMessagePasser: bedrockPredeploys.L2ToL1MessagePasser, BedrockMessagePasser: predeploys.L2ToL1MessagePasser,
} }
/** /**
...@@ -78,22 +107,15 @@ export const DEFAULT_L2_CONTRACT_ADDRESSES: OEL2ContractsLike = { ...@@ -78,22 +107,15 @@ export const DEFAULT_L2_CONTRACT_ADDRESSES: OEL2ContractsLike = {
* @returns The L1 contracts for the given network. * @returns The L1 contracts for the given network.
*/ */
const getL1ContractsByNetworkName = (network: string): OEL1ContractsLike => { const getL1ContractsByNetworkName = (network: string): OEL1ContractsLike => {
// TODO this doesn't code split and makes the sdk artifacts way too big
const getDeployedAddress = (name: string) => {
return getDeployedContractDefinition(name, network).address
}
return { return {
AddressManager: getDeployedAddress('Lib_AddressManager'), AddressManager: addressManagerAddresses[network],
L1CrossDomainMessenger: getDeployedAddress( L1CrossDomainMessenger: l1CrossDomainMessengerAddresses[network],
'Proxy__OVM_L1CrossDomainMessenger' L1StandardBridge: l1StandardBridgeAddresses[network],
), StateCommitmentChain: stateCommitmentChainAddresses[network],
L1StandardBridge: getDeployedAddress('Proxy__OVM_L1StandardBridge'), CanonicalTransactionChain: canonicalTransactionChainAddresses[network],
StateCommitmentChain: getDeployedAddress('StateCommitmentChain'), BondManager: ethers.constants.AddressZero,
CanonicalTransactionChain: getDeployedAddress('CanonicalTransactionChain'), OptimismPortal: portalAddresses[network],
BondManager: getDeployedAddress('BondManager'), L2OutputOracle: l2OutputOracleAddresses[network],
OptimismPortal: portalAddresses[network].address,
L2OutputOracle: l2OutputOracleAddresses[network].address,
} }
} }
......
import { getContractInterface, predeploys } from '@eth-optimism/contracts' import { getContractInterface, predeploys } from '@eth-optimism/contracts'
import { getContractInterface as getContractInterfaceBedrock } from '@eth-optimism/contracts-bedrock'
import { ethers, Contract } from 'ethers' import { ethers, Contract } from 'ethers'
import l1StandardBridge from '@eth-optimism/contracts-bedrock/forge-artifacts/L1StandardBridge.sol/L1StandardBridge.json'
import l2StandardBridge from '@eth-optimism/contracts-bedrock/forge-artifacts/L2StandardBridge.sol/L2StandardBridge.json'
import optimismMintableERC20 from '@eth-optimism/contracts-bedrock/forge-artifacts/OptimismMintableERC20.sol/OptimismMintableERC20.json'
import optimismPortal from '@eth-optimism/contracts-bedrock/forge-artifacts/OptimismPortal.sol/OptimismPortal.json'
import l1CrossDomainMessenger from '@eth-optimism/contracts-bedrock/forge-artifacts/L1CrossDomainMessenger.sol/L1CrossDomainMessenger.json'
import l2CrossDomainMessenger from '@eth-optimism/contracts-bedrock/forge-artifacts/L2CrossDomainMessenger.sol/L2CrossDomainMessenger.json'
import optimismMintableERC20Factory from '@eth-optimism/contracts-bedrock/forge-artifacts/OptimismMintableERC20Factory.sol/OptimismMintableERC20Factory.json'
import proxyAdmin from '@eth-optimism/contracts-bedrock/forge-artifacts/ProxyAdmin.sol/ProxyAdmin.json'
import l2OutputOracle from '@eth-optimism/contracts-bedrock/forge-artifacts/L2OutputOracle.sol/L2OutputOracle.json'
import l1ERC721Bridge from '@eth-optimism/contracts-bedrock/forge-artifacts/L1ERC721Bridge.sol/L1ERC721Bridge.json'
import l2ERC721Bridge from '@eth-optimism/contracts-bedrock/forge-artifacts/L2ERC721Bridge.sol/L2ERC721Bridge.json'
import l1Block from '@eth-optimism/contracts-bedrock/forge-artifacts/L1Block.sol/L1Block.json'
import l2ToL1MessagePasser from '@eth-optimism/contracts-bedrock/forge-artifacts/L2ToL1MessagePasser.sol/L2ToL1MessagePasser.json'
import gasPriceOracle from '@eth-optimism/contracts-bedrock/forge-artifacts/GasPriceOracle.sol/GasPriceOracle.json'
import { toAddress } from './coercion' import { toAddress } from './coercion'
import { DeepPartial } from './type-utils' import { DeepPartial } from './type-utils'
...@@ -32,6 +45,59 @@ const NAME_REMAPPING = { ...@@ -32,6 +45,59 @@ const NAME_REMAPPING = {
BedrockMessagePasser: 'L2ToL1MessagePasser' as const, BedrockMessagePasser: 'L2ToL1MessagePasser' as const,
} }
const getContractInterfaceBedrock = (name: string): ethers.utils.Interface => {
let artifact: any = ''
switch (name) {
case 'Lib_AddressManager':
case 'AddressManager':
artifact = ''
break
case 'L1CrossDomainMessenger':
artifact = l1CrossDomainMessenger
break
case 'L1ERC721Bridge':
artifact = l1ERC721Bridge
break
case 'L2OutputOracle':
artifact = l2OutputOracle
break
case 'OptimismMintableERC20Factory':
artifact = optimismMintableERC20Factory
break
case 'ProxyAdmin':
artifact = proxyAdmin
break
case 'L1StandardBridge':
artifact = l1StandardBridge
break
case 'L2StandardBridge':
artifact = l2StandardBridge
break
case 'OptimismPortal':
artifact = optimismPortal
break
case 'L2CrossDomainMessenger':
artifact = l2CrossDomainMessenger
break
case 'OptimismMintableERC20':
artifact = optimismMintableERC20
break
case 'L2ERC721Bridge':
artifact = l2ERC721Bridge
break
case 'L1Block':
artifact = l1Block
break
case 'L2ToL1MessagePasser':
artifact = l2ToL1MessagePasser
break
case 'GasPriceOracle':
artifact = gasPriceOracle
break
}
return new ethers.utils.Interface(artifact.abi)
}
/** /**
* Returns an ethers.Contract object for the given name, connected to the appropriate address for * Returns an ethers.Contract object for the given name, connected to the appropriate address for
* the given L2 chain ID. Users can also provide a custom address to connect the contract to * the given L2 chain ID. Users can also provide a custom address to connect the contract to
......
...@@ -5,11 +5,16 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types' ...@@ -5,11 +5,16 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'
import '@nomiclabs/hardhat-ethers' import '@nomiclabs/hardhat-ethers'
import 'hardhat-deploy' import 'hardhat-deploy'
import { Event, Contract, Wallet, providers, utils } from 'ethers' import { Event, Contract, Wallet, providers, utils } from 'ethers'
import { import { predeploys, sleep } from '@eth-optimism/core-utils'
predeploys, import Artifact__WETH9 from '@eth-optimism/contracts-bedrock/forge-artifacts/WETH9.sol/WETH9.json'
getContractDefinition, import Artifact__OptimismMintableERC20TokenFactory from '@eth-optimism/contracts-bedrock/forge-artifacts/OptimismMintableERC20Factory.sol/OptimismMintableERC20Factory.json'
} from '@eth-optimism/contracts-bedrock' import Artifact__OptimismMintableERC20Token from '@eth-optimism/contracts-bedrock/forge-artifacts/OptimismMintableERC20.sol/OptimismMintableERC20.json'
import { sleep } from '@eth-optimism/core-utils' import Artifact__L2ToL1MessagePasser from '@eth-optimism/contracts-bedrock/forge-artifacts/L2ToL1MessagePasser.sol/L2ToL1MessagePasser.json'
import Artifact__L2CrossDomainMessenger from '@eth-optimism/contracts-bedrock/forge-artifacts/L2CrossDomainMessenger.sol/L2CrossDomainMessenger.json'
import Artifact__L2StandardBridge from '@eth-optimism/contracts-bedrock/forge-artifacts/L2StandardBridge.sol/L2StandardBridge.json'
import Artifact__OptimismPortal from '@eth-optimism/contracts-bedrock/forge-artifacts/OptimismPortal.sol/OptimismPortal.json'
import Artifact__L1CrossDomainMessenger from '@eth-optimism/contracts-bedrock/forge-artifacts/L1CrossDomainMessenger.sol/L1CrossDomainMessenger.json'
import Artifact__L1StandardBridge from '@eth-optimism/contracts-bedrock/forge-artifacts/L1StandardBridge.sol/L1StandardBridge.json'
import { import {
CrossChainMessenger, CrossChainMessenger,
...@@ -26,10 +31,9 @@ const deployWETH9 = async ( ...@@ -26,10 +31,9 @@ const deployWETH9 = async (
const signers = await hre.ethers.getSigners() const signers = await hre.ethers.getSigners()
const signer = signers[0] const signer = signers[0]
const Artifact__WETH9 = await getContractDefinition('WETH9')
const Factory__WETH9 = new hre.ethers.ContractFactory( const Factory__WETH9 = new hre.ethers.ContractFactory(
Artifact__WETH9.abi, Artifact__WETH9.abi,
Artifact__WETH9.bytecode, Artifact__WETH9.bytecode.object,
signer signer
) )
...@@ -54,13 +58,6 @@ const createOptimismMintableERC20 = async ( ...@@ -54,13 +58,6 @@ const createOptimismMintableERC20 = async (
L1ERC20: Contract, L1ERC20: Contract,
l2Signer: Wallet l2Signer: Wallet
): Promise<Contract> => { ): Promise<Contract> => {
const Artifact__OptimismMintableERC20Token = await getContractDefinition(
'OptimismMintableERC20'
)
const Artifact__OptimismMintableERC20TokenFactory =
await getContractDefinition('OptimismMintableERC20Factory')
const OptimismMintableERC20TokenFactory = new Contract( const OptimismMintableERC20TokenFactory = new Contract(
predeploys.OptimismMintableERC20Factory, predeploys.OptimismMintableERC20Factory,
Artifact__OptimismMintableERC20TokenFactory.abi, Artifact__OptimismMintableERC20TokenFactory.abi,
...@@ -153,30 +150,6 @@ task('deposit-erc20', 'Deposits WETH9 onto L2.') ...@@ -153,30 +150,6 @@ task('deposit-erc20', 'Deposits WETH9 onto L2.')
} as OEContractsLike } as OEContractsLike
} }
const Artifact__L2ToL1MessagePasser = await getContractDefinition(
'L2ToL1MessagePasser'
)
const Artifact__L2CrossDomainMessenger = await getContractDefinition(
'L2CrossDomainMessenger'
)
const Artifact__L2StandardBridge = await getContractDefinition(
'L2StandardBridge'
)
const Artifact__OptimismPortal = await getContractDefinition(
'OptimismPortal'
)
const Artifact__L1CrossDomainMessenger = await getContractDefinition(
'L1CrossDomainMessenger'
)
const Artifact__L1StandardBridge = await getContractDefinition(
'L1StandardBridge'
)
const OptimismPortal = new hre.ethers.Contract( const OptimismPortal = new hre.ethers.Contract(
contractAddrs.l1.OptimismPortal, contractAddrs.l1.OptimismPortal,
Artifact__OptimismPortal.abi, Artifact__OptimismPortal.abi,
......
...@@ -4,11 +4,14 @@ import { task, types } from 'hardhat/config' ...@@ -4,11 +4,14 @@ import { task, types } from 'hardhat/config'
import '@nomiclabs/hardhat-ethers' import '@nomiclabs/hardhat-ethers'
import 'hardhat-deploy' import 'hardhat-deploy'
import { Deployment } from 'hardhat-deploy/types' import { Deployment } from 'hardhat-deploy/types'
import { import { predeploys } from '@eth-optimism/core-utils'
predeploys,
getContractDefinition,
} from '@eth-optimism/contracts-bedrock'
import { providers, utils, ethers } from 'ethers' import { providers, utils, ethers } from 'ethers'
import Artifact__L2ToL1MessagePasser from '@eth-optimism/contracts-bedrock/forge-artifacts/L2ToL1MessagePasser.sol/L2ToL1MessagePasser.json'
import Artifact__L2CrossDomainMessenger from '@eth-optimism/contracts-bedrock/forge-artifacts/L2CrossDomainMessenger.sol/L2CrossDomainMessenger.json'
import Artifact__L2StandardBridge from '@eth-optimism/contracts-bedrock/forge-artifacts/L2StandardBridge.sol/L2StandardBridge.json'
import Artifact__OptimismPortal from '@eth-optimism/contracts-bedrock/forge-artifacts/OptimismPortal.sol/OptimismPortal.json'
import Artifact__L1CrossDomainMessenger from '@eth-optimism/contracts-bedrock/forge-artifacts/L1CrossDomainMessenger.sol/L1CrossDomainMessenger.json'
import Artifact__L1StandardBridge from '@eth-optimism/contracts-bedrock/forge-artifacts/L1StandardBridge.sol/L1StandardBridge.json'
import { import {
CrossChainMessenger, CrossChainMessenger,
...@@ -142,30 +145,6 @@ task('deposit-eth', 'Deposits ether to L2.') ...@@ -142,30 +145,6 @@ task('deposit-eth', 'Deposits ether to L2.')
} }
} }
const Artifact__L2ToL1MessagePasser = await getContractDefinition(
'L2ToL1MessagePasser'
)
const Artifact__L2CrossDomainMessenger = await getContractDefinition(
'L2CrossDomainMessenger'
)
const Artifact__L2StandardBridge = await getContractDefinition(
'L2StandardBridge'
)
const Artifact__OptimismPortal = await getContractDefinition(
'OptimismPortal'
)
const Artifact__L1CrossDomainMessenger = await getContractDefinition(
'L1CrossDomainMessenger'
)
const Artifact__L1StandardBridge = await getContractDefinition(
'L1StandardBridge'
)
const OptimismPortal = new hre.ethers.Contract( const OptimismPortal = new hre.ethers.Contract(
contractAddrs.l1.OptimismPortal, contractAddrs.l1.OptimismPortal,
Artifact__OptimismPortal.abi, Artifact__OptimismPortal.abi,
......
import { task, types } from 'hardhat/config' import { task, types } from 'hardhat/config'
import { HardhatRuntimeEnvironment } from 'hardhat/types' import { HardhatRuntimeEnvironment } from 'hardhat/types'
import { Wallet, providers } from 'ethers' import { Wallet, providers } from 'ethers'
import { predeploys } from '@eth-optimism/contracts-bedrock' import { predeploys } from '@eth-optimism/core-utils'
import 'hardhat-deploy' import 'hardhat-deploy'
import '@nomiclabs/hardhat-ethers' import '@nomiclabs/hardhat-ethers'
......
This diff is collapsed.
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