Skip to content

Simplify GRE account logic #655

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jul 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions tasks/deployment/accounts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,22 @@ task('migrate:accounts', '[localhost] Creates protocol accounts and saves them i
throw new Error('This task can only be run on localhost network')
}

const { graphConfig, getNamedAccounts, getDeployer } = hre.graph({
const { graphConfig, getDeployer } = hre.graph({
graphConfig: taskArgs.graphConfig,
})

console.log('> Generating addresses')

const deployer = await getDeployer()
const {
const [
,
arbitrator,
governor,
authority,
availabilityOracle,
pauseGuardian,
allocationExchangeOwner,
} = await getNamedAccounts()
console.log(await getNamedAccounts())
] = await hre.ethers.getSigners()

console.log(`- Deployer: ${deployer.address}`)
console.log(`- Arbitrator: ${arbitrator.address}`)
Expand Down
8 changes: 4 additions & 4 deletions tasks/deployment/ownership.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ task(
console.log(`- Governor: ${governor.address}`)

const txs: ContractTransaction[] = []
txs.push(await contracts.GraphToken.connect(governor.signer).acceptOwnership())
txs.push(await contracts.Controller.connect(governor.signer).acceptOwnership())
txs.push(await contracts.GraphProxyAdmin.connect(governor.signer).acceptOwnership())
txs.push(await contracts.SubgraphNFT.connect(governor.signer).acceptOwnership())
txs.push(await contracts.GraphToken.connect(governor).acceptOwnership())
txs.push(await contracts.Controller.connect(governor).acceptOwnership())
txs.push(await contracts.GraphProxyAdmin.connect(governor).acceptOwnership())
txs.push(await contracts.SubgraphNFT.connect(governor).acceptOwnership())

await Promise.all(txs.map((tx) => tx.wait()))
console.log('Done!')
Expand Down
2 changes: 1 addition & 1 deletion tasks/deployment/unpause.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ task('migrate:unpause', 'Unpause protocol')
const { governor } = await getNamedAccounts()

console.log('> Unpausing protocol')
const tx = await contracts.Controller.connect(governor.signer).setPaused(false)
const tx = await contracts.Controller.connect(governor).setPaused(false)
await tx.wait()
console.log('Done!')
})
55 changes: 28 additions & 27 deletions tasks/gre.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import { lazyFunction, lazyObject } from 'hardhat/plugins'
import { getAddressBook } from '../cli/address-book'
import { loadContracts } from '../cli/contracts'
import { getItemValue, readConfig } from '../cli/config'
import { Account, GREOptions, NamedAccounts } from './type-extensions'
import { GREOptions, NamedAccounts } from './type-extensions'
import fs from 'fs'
import { Signer, VoidSigner } from 'ethers'
import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'

// Graph Runtime Environment (GRE) extensions for the HRE
extendEnvironment((hre: HardhatRuntimeEnvironment) => {
Expand All @@ -33,36 +33,40 @@ extendEnvironment((hre: HardhatRuntimeEnvironment) => {
'allocationExchangeOwner',
]

const getTestAccounts = async (): Promise<Account[]> => {
const accounts = []
const signers: Signer[] = await hre.ethers.getSigners()
const getTestAccounts = async (): Promise<SignerWithAddress[]> => {
// Get list of privileged accounts we don't want as test accounts
const namedAccounts = await getNamedAccounts()
const blacklist = namedAccountList.map((a) => {
const account = namedAccounts[a] as SignerWithAddress
return account.address
})
blacklist.push((await getDeployer()).address)

// Skip deployer and named accounts
for (let i = namedAccountList.length + 1; i < signers.length; i++) {
accounts.push({ signer: signers[i], address: await signers[i].getAddress() })
}
return accounts
// Get signers and filter out blacklisted accounts
let signers: SignerWithAddress[] = await hre.ethers.getSigners()
signers = signers.filter((s) => {
return !blacklist.includes(s.address)
})

return signers
}

// Returns void signers. Upgrades to signer on loca networks.
const getNamedAccounts = async (): Promise<NamedAccounts> => {
const namedAccounts = namedAccountList.reduce((acc, name) => {
const namedAccounts = namedAccountList.reduce(async (accountsPromise, name) => {
const accounts = await accountsPromise
const address = getItemValue(readConfig(graphConfigPath, true), `general/${name}`)

if (chainId === '1337') {
const signer = hre.ethers.provider.getSigner(address)
acc[name] = { signer, address: address }
} else {
const signer = new VoidSigner(address)
acc[name] = { signer, address: signer.address }
}

return acc
}, {} as NamedAccounts)
accounts[name] = await hre.ethers.getSigner(address)
return accounts
}, Promise.resolve({} as NamedAccounts))

return namedAccounts
}

const getDeployer = async () => {
const signer = hre.ethers.provider.getSigner(0)
return hre.ethers.getSigner(await signer.getAddress())
}

return {
addressBook: lazyObject(() => getAddressBook(addressBookPath, chainId)),
graphConfig: lazyObject(() => readConfig(graphConfigPath, true)),
Expand All @@ -71,10 +75,7 @@ extendEnvironment((hre: HardhatRuntimeEnvironment) => {
),
getNamedAccounts: lazyFunction(() => getNamedAccounts),
getTestAccounts: lazyFunction(() => getTestAccounts),
getDeployer: lazyFunction(() => async () => {
const signer = hre.ethers.provider.getSigner(0)
return { signer, address: await signer.getAddress() }
}),
getDeployer: lazyFunction(() => getDeployer),
}
}
})
23 changes: 9 additions & 14 deletions tasks/type-extensions.d.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Signer } from 'ethers'
import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'
import { AddressBook } from '../cli/address-book'
import { NetworkContracts } from '../cli/contracts'

Expand All @@ -7,18 +7,13 @@ export interface GREOptions {
graphConfig?: string
}

export interface Account {
readonly signer: Signer
readonly address: string
}

export interface NamedAccounts {
arbitrator: Account
governor: Account
authority: Account
availabilityOracle: Account
pauseGuardian: Account
allocationExchangeOwner: Account
arbitrator: SignerWithAddress
governor: SignerWithAddress
authority: SignerWithAddress
availabilityOracle: SignerWithAddress
pauseGuardian: SignerWithAddress
allocationExchangeOwner: SignerWithAddress
}

declare module 'hardhat/types/runtime' {
Expand All @@ -28,8 +23,8 @@ declare module 'hardhat/types/runtime' {
graphConfig: any
addressBook: AddressBook
getNamedAccounts: () => Promise<NamedAccounts>
getTestAccounts: () => Promise<Account[]>
getDeployer: () => Promise<Account>
getTestAccounts: () => Promise<SignerWithAddress[]>
getDeployer: () => Promise<SignerWithAddress>
}
}
}