Commit 7f26667d authored by Mark Tyneway's avatar Mark Tyneway

contracts: add hardhat task for whitelisting addresses

This PR adds a hardhat task for whitelisting addresses. It can be used like so:

```
$ npx hardhat whitelist --address 0x.. --use-ledger true --contracts-rpc-url https://...
```
parent 01679a41
---
'@eth-optimism/contracts': patch
---
Add hardhat task for whitelisting addresses
...@@ -16,6 +16,7 @@ import '@eth-optimism/hardhat-ovm' ...@@ -16,6 +16,7 @@ import '@eth-optimism/hardhat-ovm'
import './tasks/deploy' import './tasks/deploy'
import './tasks/l2-gasprice' import './tasks/l2-gasprice'
import './tasks/set-owner' import './tasks/set-owner'
import './tasks/whitelist'
import 'hardhat-gas-reporter' import 'hardhat-gas-reporter'
// Load environment variables from .env // Load environment variables from .env
......
'use strict'
import { ethers } from 'ethers'
import { task } from 'hardhat/config'
import * as types from 'hardhat/internal/core/params/argumentTypes'
import { LedgerSigner } from '@ethersproject/hardware-wallets'
import { getContractFactory } from '../src/contract-defs'
import { predeploys } from '../src/predeploys'
// Add accounts the the OVM_DeployerWhitelist
// npx hardhat whitelist --address 0x..
task('whitelist')
.addParam('address', 'Address to whitelist', undefined, types.string)
.addOptionalParam('transactionGasPrice', 'tx.gasPrice', undefined, types.int)
.addOptionalParam(
'useLedger',
'use a ledger for signing',
false,
types.boolean
)
.addOptionalParam(
'ledgerPath',
'ledger key derivation path',
ethers.utils.defaultPath,
types.string
)
.addOptionalParam(
'contractsRpcUrl',
'Sequencer HTTP Endpoint',
process.env.CONTRACTS_RPC_URL,
types.string
)
.addOptionalParam(
'contractsDeployerKey',
'Private Key',
process.env.CONTRACTS_DEPLOYER_KEY,
types.string
)
.addOptionalParam(
'contractAddress',
'Address of Ownable contract',
predeploys.OVM_DeployerWhitelist,
types.string
)
.setAction(async (args, hre: any) => {
const provider = new ethers.providers.JsonRpcProvider(args.contractsRpcUrl)
let signer: ethers.Signer
if (!args.useLedger) {
if (!args.contractsDeployerKey) {
throw new Error('Must pass --contracts-deployer-key')
}
signer = new ethers.Wallet(args.contractsDeployerKey).connect(provider)
} else {
signer = new LedgerSigner(provider, 'default', args.ledgerPath)
}
const deployerWhitelist = getContractFactory('OVM_DeployerWhitelist')
.connect(signer)
.attach(args.contractAddress)
const addr = await signer.getAddress()
console.log(`Using signer: ${addr}`)
let owner = await deployerWhitelist.owner()
console.log(`OVM_DeployerWhitelist owner: ${owner}`)
if (owner === '0x0000000000000000000000000000000000000000') {
console.log(`Initializing whitelist`)
const response = await deployerWhitelist.initialize(addr, false, {
gasPrice: args.transactionGasPrice,
})
const receipt = await response.wait()
console.log(`Initialized whitelist: ${receipt.transactionHash}`)
owner = await deployerWhitelist.owner()
}
if (addr !== owner) {
throw new Error(`Incorrect key. Owner ${owner}, Signer ${addr}`)
}
const res = await deployerWhitelist.setWhitelistedDeployer(
args.address,
true,
{ gasPrice: args.transactionGasPrice }
)
await res.wait()
console.log(`Whitelisted ${args.address}`)
})
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