Commit 3cadef55 authored by Karl Floersch's avatar Karl Floersch Committed by GitHub

Wait for deploy transactions (#180)

* Remove buggy batch validation

* Add deploy overrides and wait for txs

* Wait for more afterDeploy txs

* Wait for more receipts

* Make wait for receipt optional

* Fix WAIT_FOR_RECEIPT config parsing

* Fix lint

* Use wait for receipt for deployment
Co-authored-by: default avatarben-chain <ben@pseudonym.party>
parent 7759fe6e
......@@ -10,10 +10,12 @@ const key = env.DEPLOYER_PRIVATE_KEY;
const sequencerKey = env.SEQUENCER_PRIVATE_KEY;
let SEQUENCER_ADDRESS = env.SEQUENCER_ADDRESS;
const web3Url = env.L1_NODE_WEB3_URL || 'http://127.0.0.1:8545';
const DEPLOY_TX_GAS_LIMIT = env.DEPLOY_TX_GAS_LIMIT || 5000000;
const MIN_TRANSACTION_GAS_LIMIT = env.MIN_TRANSACTION_GAS_LIMIT || 50000;
const MAX_TRANSACTION_GAS_LIMIT = env.MAX_TRANSACTION_GAS_LIMIT || 9000000;
const MAX_GAS_PER_QUEUE_PER_EPOCH = env.MAX_GAS_PER_QUEUE_PER_EPOCH || 250000000;
const SECONDS_PER_EPOCH = env.SECONDS_PER_EPOCH || 0;
const WAIT_FOR_RECEIPTS = env.WAIT_FOR_RECEIPTS === 'true';
let WHITELIST_OWNER = env.WHITELIST_OWNER;
const WHITELIST_ALLOW_ARBITRARY_CONTRACT_DEPLOYMENT = env.WHITELIST_ALLOW_ARBITRARY_CONTRACT_DEPLOYMENT || true;
const FORCE_INCLUSION_PERIOD_SECONDS = env.FORCE_INCLUSION_PERIOD_SECONDS || 2592000; // 30 days
......@@ -95,6 +97,10 @@ const RELAYER_PRIVATE_KEY = env.RELAYER_PRIVATE_KEY;
ethConfig: {
initialAmount: 0,
},
deployOverrides: {
gasLimit: DEPLOY_TX_GAS_LIMIT
},
waitForReceipts: WAIT_FOR_RECEIPTS,
});
const { failedDeployments, AddressManager } = result;
......
......@@ -30,6 +30,7 @@
},
"dependencies": {
"@eth-optimism/solc": "^0.6.12-alpha.1",
"@ethersproject/abstract-provider": "^5.0.8",
"@ethersproject/contracts": "^5.0.5",
"@ethersproject/hardware-wallets": "^5.0.8",
"@openzeppelin/contracts": "^3.3.0",
......
/* External Imports */
import { Signer, ContractFactory, Contract } from 'ethers'
import { TransactionResponse } from '@ethersproject/abstract-provider'
import { Overrides } from '@ethersproject/contracts'
/* Internal Imports */
......@@ -37,8 +38,9 @@ export interface RollupDeployConfig {
allowArbitraryContractDeployment: boolean
}
addressManager?: string
deployOverrides?: Overrides
dependencies?: string[]
deployOverrides: Overrides
waitForReceipts: boolean
}
export interface ContractDeployParameters {
......@@ -55,6 +57,16 @@ export const makeContractDeployConfig = async (
config: RollupDeployConfig,
AddressManager: Contract
): Promise<ContractDeployConfig> => {
const _sendTx = async (
txPromise: Promise<TransactionResponse>
): Promise<TransactionResponse> => {
const res = await txPromise
if (config.waitForReceipts) {
await res.wait()
}
return res
}
return {
OVM_L2CrossDomainMessenger: {
factory: getContractFactory('OVM_L2CrossDomainMessenger'),
......@@ -68,7 +80,9 @@ export const makeContractDeployConfig = async (
const relayer = config.l1CrossDomainMessengerConfig.relayerAddress
const address =
typeof relayer === 'string' ? relayer : await relayer.getAddress()
await AddressManager.setAddress('OVM_L2MessageRelayer', address)
await _sendTx(
AddressManager.setAddress('OVM_L2MessageRelayer', address)
)
}
},
},
......@@ -81,10 +95,18 @@ export const makeContractDeployConfig = async (
)
.connect(config.deploymentSigner)
.attach(contracts.Proxy__OVM_L1CrossDomainMessenger.address)
await xDomainMessenger.initialize(AddressManager.address)
await AddressManager.setAddress(
'OVM_L2CrossDomainMessenger',
config.ovmGlobalContext.L2CrossDomainMessengerAddress
await _sendTx(
xDomainMessenger.initialize(
AddressManager.address,
config.deployOverrides
)
)
await _sendTx(
AddressManager.setAddress(
'OVM_L2CrossDomainMessenger',
config.ovmGlobalContext.L2CrossDomainMessengerAddress,
config.deployOverrides
)
)
},
},
......@@ -102,12 +124,16 @@ export const makeContractDeployConfig = async (
typeof sequencer === 'string'
? sequencer
: await sequencer.getAddress()
await AddressManager.setAddress(
'OVM_DecompressionPrecompileAddress',
'0x4200000000000000000000000000000000000005'
await _sendTx(
AddressManager.setAddress(
'OVM_DecompressionPrecompileAddress',
'0x4200000000000000000000000000000000000005'
)
)
await _sendTx(
AddressManager.setAddress('OVM_Sequencer', sequencerAddress)
)
await AddressManager.setAddress('OVM_Sequencer', sequencerAddress)
await AddressManager.setAddress('Sequencer', sequencerAddress)
await _sendTx(AddressManager.setAddress('Sequencer', sequencerAddress))
},
},
OVM_StateCommitmentChain: {
......@@ -146,8 +172,11 @@ export const makeContractDeployConfig = async (
factory: getContractFactory('OVM_StateManager'),
params: [await config.deploymentSigner.getAddress()],
afterDeploy: async (contracts): Promise<void> => {
await contracts.OVM_StateManager.setExecutionManager(
contracts.OVM_ExecutionManager.address
await _sendTx(
contracts.OVM_StateManager.setExecutionManager(
contracts.OVM_ExecutionManager.address,
config.deployOverrides
)
)
},
},
......
......@@ -33,6 +33,9 @@ export const deploy = async (
config.deploymentSigner
).deploy()
}
if (config.waitForReceipts) {
await AddressManager.deployTransaction.wait()
}
const contractDeployConfig = await makeContractDeployConfig(
config,
......@@ -56,9 +59,15 @@ export const deploy = async (
.connect(config.deploymentSigner)
.deploy(
...(contractDeployParameters.params || []),
config.deployOverrides || {}
config.deployOverrides
)
await AddressManager.setAddress(name, contracts[name].address)
if (config.waitForReceipts) {
await contracts[name].deployTransaction.wait()
}
const res = await AddressManager.setAddress(name, contracts[name].address)
if (config.waitForReceipts) {
await res.wait()
}
} catch (err) {
console.error(`Error deploying ${name}: ${err}`)
failedDeployments.push(name)
......
......@@ -156,6 +156,8 @@ export const makeStateDump = async (cfg: RollupDeployConfig): Promise<any> => {
'OVM_ETH',
'mockOVM_ECDSAContractAccount',
],
deployOverrides: {},
waitForReceipts: false,
}
config = { ...config, ...cfg }
......
......@@ -156,6 +156,19 @@
"@ethersproject/transactions" "^5.0.5"
"@ethersproject/web" "^5.0.6"
"@ethersproject/abstract-provider@^5.0.8":
version "5.0.8"
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.0.8.tgz#880793c29bfed33dff4c2b2be7ecb9ba966d52c0"
integrity sha512-fqJXkewcGdi8LogKMgRyzc/Ls2js07yor7+g9KfPs09uPOcQLg7cc34JN+lk34HH9gg2HU0DIA5797ZR8znkfw==
dependencies:
"@ethersproject/bignumber" "^5.0.13"
"@ethersproject/bytes" "^5.0.9"
"@ethersproject/logger" "^5.0.8"
"@ethersproject/networks" "^5.0.7"
"@ethersproject/properties" "^5.0.7"
"@ethersproject/transactions" "^5.0.9"
"@ethersproject/web" "^5.0.12"
"@ethersproject/abstract-signer@5.0.6", "@ethersproject/abstract-signer@^5.0.0", "@ethersproject/abstract-signer@^5.0.4":
version "5.0.6"
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.6.tgz#c01211665ab9c9e93988c4783b789712fd93a388"
......@@ -190,6 +203,17 @@
"@ethersproject/rlp" "^5.0.3"
bn.js "^4.4.0"
"@ethersproject/address@^5.0.9":
version "5.0.9"
resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.9.tgz#347ef30dc8243c682574a3f23ff63f73c8f8cbf1"
integrity sha512-gKkmbZDMyGbVjr8nA5P0md1GgESqSGH7ILIrDidPdNXBl4adqbuA3OAuZx/O2oGpL6PtJ9BDa0kHheZ1ToHU3w==
dependencies:
"@ethersproject/bignumber" "^5.0.13"
"@ethersproject/bytes" "^5.0.9"
"@ethersproject/keccak256" "^5.0.7"
"@ethersproject/logger" "^5.0.8"
"@ethersproject/rlp" "^5.0.7"
"@ethersproject/base64@5.0.4", "@ethersproject/base64@^5.0.0", "@ethersproject/base64@^5.0.3":
version "5.0.4"
resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.4.tgz#b0d8fdbf3dda977cf546dcd35725a7b1d5256caa"
......@@ -197,6 +221,13 @@
dependencies:
"@ethersproject/bytes" "^5.0.4"
"@ethersproject/base64@^5.0.7":
version "5.0.7"
resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.7.tgz#d5da73699b4a33dc92bd8e5056ad1880b262057d"
integrity sha512-S5oh5DVfCo06xwJXT8fQC68mvJfgScTl2AXvbYMsHNfIBTDb084Wx4iA9MNlEReOv6HulkS+gyrUM/j3514rSw==
dependencies:
"@ethersproject/bytes" "^5.0.9"
"@ethersproject/basex@5.0.4", "@ethersproject/basex@^5.0.3":
version "5.0.4"
resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.0.4.tgz#93e1cd11f9a47281da2389de24f88e13e9d90847"
......@@ -214,6 +245,15 @@
"@ethersproject/logger" "^5.0.5"
bn.js "^4.4.0"
"@ethersproject/bignumber@^5.0.13":
version "5.0.13"
resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.13.tgz#a5466412b3b80104097b9c694f6ae827df4353fe"
integrity sha512-b89bX5li6aK492yuPP5mPgRVgIxxBP7ksaBtKX5QQBsrZTpNOjf/MR4CjcUrAw8g+RQuD6kap9lPjFgY4U1/5A==
dependencies:
"@ethersproject/bytes" "^5.0.9"
"@ethersproject/logger" "^5.0.8"
bn.js "^4.4.0"
"@ethersproject/bytes@5.0.5", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.0", "@ethersproject/bytes@^5.0.4":
version "5.0.5"
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.5.tgz#688b70000e550de0c97a151a21f15b87d7f97d7c"
......@@ -221,6 +261,13 @@
dependencies:
"@ethersproject/logger" "^5.0.5"
"@ethersproject/bytes@^5.0.9":
version "5.0.9"
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.9.tgz#2748247402ad20df69f3a3e935dc7b58c0d75c08"
integrity sha512-k+17ZViDtAugC0s7HM6rdsTWEdIYII4RPCDkPEuxKc6i40Bs+m6tjRAtCECX06wKZnrEoR9pjOJRXHJ/VLoOcA==
dependencies:
"@ethersproject/logger" "^5.0.8"
"@ethersproject/constants@5.0.5", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.0", "@ethersproject/constants@^5.0.4":
version "5.0.5"
resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.5.tgz#0ed19b002e8404bdf6d135234dc86a7d9bcf9b71"
......@@ -228,6 +275,13 @@
dependencies:
"@ethersproject/bignumber" "^5.0.7"
"@ethersproject/constants@^5.0.8":
version "5.0.8"
resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.8.tgz#50f2e23f48c0d1d0de3759ea79b68ec3e06435a1"
integrity sha512-sCc73pFBsl59eDfoQR5OCEZCRv5b0iywadunti6MQIr5lt3XpwxK1Iuzd8XSFO02N9jUifvuZRrt0cY0+NBgTg==
dependencies:
"@ethersproject/bignumber" "^5.0.13"
"@ethersproject/contracts@5.0.5", "@ethersproject/contracts@^5.0.0", "@ethersproject/contracts@^5.0.5":
version "5.0.5"
resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.0.5.tgz#64831a341ec8ca225e83ff3e9437c26b970fd5d7"
......@@ -324,11 +378,24 @@
"@ethersproject/bytes" "^5.0.4"
js-sha3 "0.5.7"
"@ethersproject/keccak256@^5.0.7":
version "5.0.7"
resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.7.tgz#2eedb5e4c160fcdf0079660f8ae362d7855ea943"
integrity sha512-zpUBmofWvx9PGfc7IICobgFQSgNmTOGTGLUxSYqZzY/T+b4y/2o5eqf/GGmD7qnTGzKQ42YlLNo+LeDP2qe55g==
dependencies:
"@ethersproject/bytes" "^5.0.9"
js-sha3 "0.5.7"
"@ethersproject/logger@5.0.6", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.0", "@ethersproject/logger@^5.0.5":
version "5.0.6"
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.6.tgz#faa484203e86e08be9e07fef826afeef7183fe88"
integrity sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==
"@ethersproject/logger@^5.0.8":
version "5.0.8"
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.8.tgz#135c1903d35c878265f3cbf2b287042c4c20d5d4"
integrity sha512-SkJCTaVTnaZ3/ieLF5pVftxGEFX56pTH+f2Slrpv7cU0TNpUZNib84QQdukd++sWUp/S7j5t5NW+WegbXd4U/A==
"@ethersproject/networks@5.0.4", "@ethersproject/networks@^5.0.0", "@ethersproject/networks@^5.0.3":
version "5.0.4"
resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.4.tgz#6d320a5e15a0cda804f5da88be0ba846156f6eec"
......@@ -336,6 +403,13 @@
dependencies:
"@ethersproject/logger" "^5.0.5"
"@ethersproject/networks@^5.0.7":
version "5.0.7"
resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.7.tgz#8d06e41197b27c2404d89a29ca21f741a01acbfc"
integrity sha512-dI14QATndIcUgcCBL1c5vUr/YsI5cCHLN81rF7PU+yS7Xgp2/Rzbr9+YqpC6NBXHFUASjh6GpKqsVMpufAL0BQ==
dependencies:
"@ethersproject/logger" "^5.0.8"
"@ethersproject/pbkdf2@5.0.4", "@ethersproject/pbkdf2@^5.0.0", "@ethersproject/pbkdf2@^5.0.3":
version "5.0.4"
resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.0.4.tgz#a0841d53f5ce9a2b52a65a349d2dc15910b0a767"
......@@ -351,6 +425,13 @@
dependencies:
"@ethersproject/logger" "^5.0.5"
"@ethersproject/properties@^5.0.7":
version "5.0.7"
resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.7.tgz#951d11ba592ff90bbe8ec34c5a03a5157e3b3360"
integrity sha512-812H1Rus2vjw0zbasfDI1GLNPDsoyX1pYqiCgaR1BuyKxUTbwcH1B+214l6VGe1v+F6iEVb7WjIwMjKhb4EUsg==
dependencies:
"@ethersproject/logger" "^5.0.8"
"@ethersproject/providers@5.0.12", "@ethersproject/providers@^5.0.0":
version "5.0.12"
resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.0.12.tgz#de05e865e130709ea1e0870511eb892bda7d41cb"
......@@ -417,6 +498,14 @@
"@ethersproject/bytes" "^5.0.4"
"@ethersproject/logger" "^5.0.5"
"@ethersproject/rlp@^5.0.7":
version "5.0.7"
resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.7.tgz#cfa4fa6415960a435b7814e1a29bdfea657e2b6e"
integrity sha512-ulUTVEuV7PT4jJTPpfhRHK57tkLEDEY9XSYJtrSNHOqdwMvH0z7BM2AKIMq4LVDlnu4YZASdKrkFGEIO712V9w==
dependencies:
"@ethersproject/bytes" "^5.0.9"
"@ethersproject/logger" "^5.0.8"
"@ethersproject/sha2@5.0.4", "@ethersproject/sha2@^5.0.0", "@ethersproject/sha2@^5.0.3":
version "5.0.4"
resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.0.4.tgz#40f639721a27dbe034b3dee021ba20b054586fec"
......@@ -436,6 +525,16 @@
"@ethersproject/properties" "^5.0.3"
elliptic "6.5.3"
"@ethersproject/signing-key@^5.0.8":
version "5.0.8"
resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.8.tgz#156522e542916b9aa9135527b40c5b6f9235af02"
integrity sha512-YKxQM45eDa6WAD+s3QZPdm1uW1MutzVuyoepdRRVmMJ8qkk7iOiIhUkZwqKLNxKzEJijt/82ycuOREc9WBNAKg==
dependencies:
"@ethersproject/bytes" "^5.0.9"
"@ethersproject/logger" "^5.0.8"
"@ethersproject/properties" "^5.0.7"
elliptic "6.5.3"
"@ethersproject/solidity@5.0.5", "@ethersproject/solidity@^5.0.0":
version "5.0.5"
resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.0.5.tgz#97a7d8a67f2d944f208c948fed0d565512bcc2be"
......@@ -456,6 +555,15 @@
"@ethersproject/constants" "^5.0.4"
"@ethersproject/logger" "^5.0.5"
"@ethersproject/strings@^5.0.8":
version "5.0.8"
resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.8.tgz#11a1b0ed1e8417408693789839f0b5f4e323c0c9"
integrity sha512-5IsdXf8tMY8QuHl8vTLnk9ehXDDm6x9FB9S9Og5IA1GYhLe5ZewydXSjlJlsqU2t9HRbfv97OJZV/pX8DVA/Hw==
dependencies:
"@ethersproject/bytes" "^5.0.9"
"@ethersproject/constants" "^5.0.8"
"@ethersproject/logger" "^5.0.8"
"@ethersproject/transactions@5.0.6", "@ethersproject/transactions@^5.0.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.0.5":
version "5.0.6"
resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.6.tgz#b8b27938be6e9ed671dbdd35fe98af8b14d0df7c"
......@@ -471,6 +579,21 @@
"@ethersproject/rlp" "^5.0.3"
"@ethersproject/signing-key" "^5.0.4"
"@ethersproject/transactions@^5.0.9":
version "5.0.9"
resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.9.tgz#ccfcc1d395b5e3ce7342545fa28bfe5541182fd6"
integrity sha512-0Fu1yhdFBkrbMjenEr+39tmDxuHmaw0pe9Jb18XuKoItj7Z3p7+UzdHLr2S/okvHDHYPbZE5gtANDdQ3ZL1nBA==
dependencies:
"@ethersproject/address" "^5.0.9"
"@ethersproject/bignumber" "^5.0.13"
"@ethersproject/bytes" "^5.0.9"
"@ethersproject/constants" "^5.0.8"
"@ethersproject/keccak256" "^5.0.7"
"@ethersproject/logger" "^5.0.8"
"@ethersproject/properties" "^5.0.7"
"@ethersproject/rlp" "^5.0.7"
"@ethersproject/signing-key" "^5.0.8"
"@ethersproject/units@5.0.6", "@ethersproject/units@^5.0.0":
version "5.0.6"
resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.0.6.tgz#e1169ecffb7e8d5eab84e1481a4e35df19045708"
......@@ -533,6 +656,17 @@
"@ethersproject/properties" "^5.0.3"
"@ethersproject/strings" "^5.0.4"
"@ethersproject/web@^5.0.12":
version "5.0.12"
resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.0.12.tgz#f123397c107f863c31fce5f31a97c66ec155e755"
integrity sha512-gVxS5iW0bgidZ76kr7LsTxj4uzN5XpCLzvZrLp8TP+4YgxHfCeetFyQkRPgBEAJdNrexdSBayvyJvzGvOq0O8g==
dependencies:
"@ethersproject/base64" "^5.0.7"
"@ethersproject/bytes" "^5.0.9"
"@ethersproject/logger" "^5.0.8"
"@ethersproject/properties" "^5.0.7"
"@ethersproject/strings" "^5.0.8"
"@ethersproject/wordlists@5.0.5", "@ethersproject/wordlists@^5.0.0", "@ethersproject/wordlists@^5.0.4":
version "5.0.5"
resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.0.5.tgz#a935b7fdb86c96b44ea8391fed94b3fa2f33c606"
......
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