Commit 0bb89f9b authored by Mark Tyneway's avatar Mark Tyneway Committed by GitHub

deployer: ledger support, no sequencer private key (#50)

parent 08455c2b
#!/usr/bin/env node #!/usr/bin/env node
const contracts = require('../build/src/contract-deployment/deploy'); const contracts = require('../build/src/contract-deployment/deploy');
const { providers, Wallet } = require('ethers'); const { providers, Wallet, utils } = require('ethers');
const { LedgerSigner } = require('@ethersproject/hardware-wallets');
const { JsonRpcProvider } = providers; const { JsonRpcProvider } = providers;
const env = process.env; const env = process.env;
const key = env.DEPLOYER_PRIVATE_KEY; const key = env.DEPLOYER_PRIVATE_KEY;
const sequencerKey = env.SEQUENCER_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 web3Url = env.L1_NODE_WEB3_URL || 'http://127.0.0.1:8545';
const MIN_TRANSACTION_GAS_LIMIT = env.MIN_TRANSACTION_GAS_LIMIT || 0; const MIN_TRANSACTION_GAS_LIMIT = env.MIN_TRANSACTION_GAS_LIMIT || 0;
const MAX_TRANSACTION_GAS_LIMIT = env.MAX_TRANSACTION_GAS_LIMIT || 1000000000; const MAX_TRANSACTION_GAS_LIMIT = env.MAX_TRANSACTION_GAS_LIMIT || 1000000000;
...@@ -16,17 +18,30 @@ let WHITELIST_OWNER = env.WHITELIST_OWNER; ...@@ -16,17 +18,30 @@ let WHITELIST_OWNER = env.WHITELIST_OWNER;
const WHITELIST_ALLOW_ARBITRARY_CONTRACT_DEPLOYMENT = env.WHITELIST_ALLOW_ARBITRARY_CONTRACT_DEPLOYMENT || true; const WHITELIST_ALLOW_ARBITRARY_CONTRACT_DEPLOYMENT = env.WHITELIST_ALLOW_ARBITRARY_CONTRACT_DEPLOYMENT || true;
const FORCE_INCLUSION_PERIOD_SECONDS = env.FORCE_INCLUSION_PERIOD_SECONDS || (30 * 60); const FORCE_INCLUSION_PERIOD_SECONDS = env.FORCE_INCLUSION_PERIOD_SECONDS || (30 * 60);
const CHAIN_ID = env.CHAIN_ID || 420; // layer 2 chainid const CHAIN_ID = env.CHAIN_ID || 420; // layer 2 chainid
const USE_LEDGER = env.USE_LEDGER || false;
const HD_PATH = env.HD_PATH || utils.defaultPath;
(async () => { (async () => {
if (typeof key === 'undefined') const provider = new JsonRpcProvider(web3Url);
throw new Error('Must pass deployer key as DEPLOYER_PRIVATE_KEY'); let signer;
if (typeof sequencerKey === 'undefined') if (USE_LEDGER) {
throw new Error('Must pass sequencer key as SEQUENCER_PRIVATE_KEY'); signer = new LedgerSigner(provider, 'default', HD_PATH);
} else {
if (typeof key === 'undefined')
throw new Error('Must pass deployer key as DEPLOYER_PRIVATE_KEY');
signer = new Wallet(key, provider);
}
const provider = new JsonRpcProvider(web3Url); if (SEQUENCER_ADDRESS) {
const signer = new Wallet(key, provider); if (!utils.isAddress(SEQUENCER_ADDRESS))
const sequencer = new Wallet(sequencerKey, provider); throw new Error(`Invalid Sequencer Address: ${SEQUENCER_ADDRESS}`)
} else {
if (!sequencerKey)
throw new Error('Must pass sequencer key as SEQUENCER_PRIVATE_KEY');
const sequencer = new Wallet(sequencerKey, provider);
SEQUENCER_ADDRESS = await sequencer.getAddress()
}
if (typeof WHITELIST_OWNER === 'undefined') if (typeof WHITELIST_OWNER === 'undefined')
WHITELIST_OWNER = signer; WHITELIST_OWNER = signer;
...@@ -35,7 +50,7 @@ const CHAIN_ID = env.CHAIN_ID || 420; // layer 2 chainid ...@@ -35,7 +50,7 @@ const CHAIN_ID = env.CHAIN_ID || 420; // layer 2 chainid
deploymentSigner: signer, deploymentSigner: signer,
transactionChainConfig: { transactionChainConfig: {
forceInclusionPeriodSeconds: FORCE_INCLUSION_PERIOD_SECONDS, forceInclusionPeriodSeconds: FORCE_INCLUSION_PERIOD_SECONDS,
sequencer, sequencer: SEQUENCER_ADDRESS,
}, },
ovmGlobalContext: { ovmGlobalContext: {
ovmCHAINID: CHAIN_ID ovmCHAINID: CHAIN_ID
...@@ -58,7 +73,7 @@ const CHAIN_ID = env.CHAIN_ID || 420; // layer 2 chainid ...@@ -58,7 +73,7 @@ const CHAIN_ID = env.CHAIN_ID || 420; // layer 2 chainid
const out = {}; const out = {};
out.AddressManager = AddressManager.address; out.AddressManager = AddressManager.address;
out.OVM_Sequencer = await sequencer.getAddress() out.OVM_Sequencer = SEQUENCER_ADDRESS;
out.Deployer = await signer.getAddress() out.Deployer = await signer.getAddress()
for (const [name, contract] of Object.entries(result.contracts)) { for (const [name, contract] of Object.entries(result.contracts)) {
out[name] = contract.address; out[name] = contract.address;
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
"deploy": "./bin/deploy.js" "deploy": "./bin/deploy.js"
}, },
"dependencies": { "dependencies": {
"@ethersproject/hardware-wallets": "^5.0.8",
"ethers": "5.0.0" "ethers": "5.0.0"
}, },
"devDependencies": { "devDependencies": {
......
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