Skip to content

Deployment script is missing registration and configuration for open.aragonpm.eth #639

Description

@spark8899

I wrote a script here. I deploy v4.4.0

deploy-openapm.js
`const namehash = require('eth-ens-namehash').hash
const keccak256 = require('js-sha3').keccak_256

const deployENS = require('./deploy-test-ens')
const deployDaoFactory = require('./deploy-daofactory')
const getAccounts = require('./helpers/get-accounts')

const globalArtifacts = this.artifacts // Not injected unless called directly via truffle
const globalWeb3 = this.web3 // Not injected unless called directly via truffle

const ZERO_ADDR = '0x0000000000000000000000000000000000000000'

const defaultOwner = process.env.OWNER
const defaultDaoFactoryAddress = process.env.DAO_FACTORY
const defaultENSAddress = process.env.ENS

module.exports = async (
truffleExecCallback,
{
artifacts = globalArtifacts,
web3 = globalWeb3,
ensAddress = defaultENSAddress,
owner = defaultOwner,
daoFactoryAddress = defaultDaoFactoryAddress,
verbose = true
} = {}
) => {
const log = (...args) => {
if (verbose) { console.log(...args) }
}

const APMRegistry = artifacts.require('APMRegistry')
const Repo = artifacts.require('Repo')
const ENSSubdomainRegistrar = artifacts.require('ENSSubdomainRegistrar')

const DAOFactory = artifacts.require('DAOFactory')
const APMRegistryFactory = artifacts.require('APMRegistryFactory')
const ENS = artifacts.require('ENS')
const Kernel = artifacts.require('Kernel')
const ACL = artifacts.require('ACL')

const tldName = 'eth'
const labelName = 'aragonpm'
const tldHash = namehash(tldName)
const labelHash = '0x'+keccak256(labelName)
const apmNode = namehash(${labelName}.${tldName})

const openTldName = 'aragonpm.eth'
const openLabelName = 'open'
const openTldHash = namehash(openTldName)
const openLabelHash = '0x'+keccak256(openLabelName)
const openApmNode = namehash(${openLabelName}.${openTldName})

const apmFactoryAddress = '0xc3eb5cb0574595e6cc20faa8a809ada5820db9c9'
const ANY_ENTITY = '0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF';
const CREATE_REPO_ROLE = '0x'+keccak256('CREATE_REPO_ROLE');

let ens

log('Deploying OPEN APM...')

const accounts = await getAccounts(web3)
if (!owner) {
owner = accounts[0]
log('OWNER env variable not found, setting APM owner to the provider's first account')
}
log('Owner:', owner)

if (!ensAddress) {
log('=========')
log('Missing ENS! Deploying a custom ENS...')
ens = (await deployENS(null, { artifacts, owner, verbose: false })).ens
ensAddress = ens.address
} else {
ens = ENS.at(ensAddress)
}

const registrar = await ens.owner(apmNode)
const ensSubdomainRegistrar = await ENSSubdomainRegistrar.at(registrar)
log('ensSubdomainRegistrar:', ensSubdomainRegistrar.address)

const kernelAddr = await ensSubdomainRegistrar.kernel()
const kernel = await Kernel.at(kernelAddr)
log('kernelAddr:', kernelAddr)

const aclAddr = await kernel.acl()
const acl = await ACL.at(aclAddr)
log('aclAddr:', aclAddr)

log('ENS:', ensAddress)
log('=========')
log(TLD: ${tldName} (${tldHash}))
log(Label: ${labelName} (${labelHash}))
log(ApmNode: ${labelName}.${tldName} (${apmNode}))
log('=========')
log(OPEN TLD: ${openTldName} (${openTldHash}))
log(OPEN Label: ${openLabelName} (${openLabelHash}))
log(OpenApmNode: ${openLabelName}.${openTldName} (${openApmNode}))

log('=========')
log('=========')
log('Deploying OPEN APM bases...')

//process.exit()

let daoFactory
if (daoFactoryAddress) {
daoFactory = DAOFactory.at(daoFactoryAddress)
const hasEVMScripts = await daoFactory.regFactory() !== ZERO_ADDR

log(`Using provided DAOFactory (with${hasEVMScripts ? '' : 'out' } EVMScripts):`, daoFactoryAddress)

} else {
log('Deploying DAOFactory with EVMScripts...')
daoFactory = (await deployDaoFactory(null, { artifacts, withEvmScriptRegistryFactory: true, verbose: false })).daoFactory
}

let apmFactory
log('Get APMRegistryFactory...')
apmFactory = await APMRegistryFactory.at(apmFactoryAddress)
log(apmFactory: ${apmFactoryAddress})

log('Create permission for root account on CREATE_NAME_ROLE')
await acl.grantPermission(
owner,
registrar,
await ensSubdomainRegistrar.CREATE_NAME_ROLE()
);

log('Creating open subdomain and assigning it to APMRegistryFactory')
await ensSubdomainRegistrar.createName(openLabelHash, apmFactory.address)

log(Assigning ENS name (${openLabelName}.${openTldName}) to factory...)
log('Deploying open APM...')
const receipt = await apmFactory.newAPM(openTldHash, openLabelHash, owner)

log('=========')
const apmOpenAddr = receipt.logs.filter(l => l.event == 'DeployAPM')[0].args.apm
log('# OPEN APM:')
log('Address:', apmOpenAddr)
log('Transaction hash:', receipt.tx)

log('Create permission for ANY_ENTITY on CREATE_REPO_ROLE')
let apmOpen = await APMRegistry.at(apmOpenAddr)
log('apmOpenAddr:', apmOpenAddr)

let kernelApmAddr = await apmOpen.kernel()
let kernelApmOpen = await Kernel.at(kernelApmAddr)
log('kernelApmAddr:', kernelApmAddr)

let aclApmAddr = await kernelApmOpen.acl()
let aclApmOpen = await ACL.at(aclApmAddr)
log('aclApmAddr:', aclApmAddr)

log('aclApmOpen gratPermission')
await aclApmOpen.grantPermission(
ANY_ENTITY,
apmOpenAddr,
CREATE_REPO_ROLE
)

log('=========')

if (typeof truffleExecCallback === 'function') {
// Called directly via truffle exec
truffleExecCallback()
} else {
return {
apmFactory,
ens,
apmOpen: APMRegistry.at(apmOpenAddr),
}
}
}
`

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions