Skip to content

Commit

Permalink
Make deployment and seed scripts configurable
Browse files Browse the repository at this point in the history
  • Loading branch information
makoto committed Jun 29, 2021
1 parent ec16250 commit c8fbcca
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 41 deletions.
4 changes: 3 additions & 1 deletion .env.org
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
PRIVATE_KEY=
ETHERSCAN_API_KEY=
INFURA_API_KEY=
SEED_NAME=
METADATA_ADDRESS=
WRAPPER_ADDRESS=
RESOLVER_ADDRESS=
102 changes: 69 additions & 33 deletions scripts/deploy.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,27 @@
const fs = require('fs')
const envfile = require('envfile')
const sourcePath = './env'
const ensAppSourcePath = '../ens-app/cypress.env.json'
const { network } = require("hardhat");
const parsedFile = envfile.parse(fs.readFileSync('./.env'));
const { network, run } = require("hardhat")
const parsedFile = envfile.parse(fs.readFileSync('./.env'))

async function verify(address, constructorArguments){
console.log(`verify ${address} with arguments ${constructorArguments.join(',')}`)
await run("verify:verify", {
address,
constructorArguments
})
}

async function main() {
let registryAddress, registrarAddress, metadataUrl
let registryAddress, registrarAddress, metadataAddress
,wrapperAddress,resolverAddress, metadataHost
,wrapperArguments, resolverArguments, metadataArguments
({
METADATA_ADDRESS:metadataAddress,
WRAPPER_ADDRESS:wrapperAddress,
RESOLVER_ADDRESS:resolverAddress,
METADATA_HOST:metadataHost = 'ens-metadata-service.appspot.com'
} = parsedFile)
if(network.name === 'localhost'){
const addresses = JSON.parse(fs.readFileSync(ensAppSourcePath, 'utf8'))
registryAddress = addresses.ensAddress
Expand All @@ -19,50 +34,71 @@ async function main() {
// Regisry and registrar addresses are same across all networks
registryAddress = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'
registrarAddress = '0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85'
metadataUrl = 'https://ens-metadata-service.appspot.com/name/0x{id}'
metadataUrl = `https://${metadataHost}/name/0x{id}`
}
const [deployer] = await ethers.getSigners();
const [deployer] = await ethers.getSigners()

console.log(`Deploying contracts to ${network.name} with the account:${deployer.address}`);
console.log(`Deploying contracts to ${network.name} with the account:${deployer.address}`)
const balance = (await deployer.getBalance()).toString()
console.log("Account balance:", balance, balance > 0);
console.log("Account balance:", balance, balance > 0)
if(balance === 0){
throw(`Not enough eth`)
}

const NameWrapper = await ethers.getContractFactory("NameWrapper");
const NameWrapper = await ethers.getContractFactory("NameWrapper")
console.log({
registryAddress, registrarAddress
})
const StaticMetadataService = await ethers.getContractFactory("StaticMetadataService");
const metadata = await StaticMetadataService.deploy(metadataUrl)
await metadata.deployTransaction.wait()
console.log("StaticMetadataService address:", metadata.address);
const wrapper = await NameWrapper.deploy(
registryAddress,
registrarAddress,
metadata.address
);
await wrapper.deployTransaction.wait()
console.log("Wrapper address:", wrapper.address);
ethers.ContractFactor
const PublicResolver = await ethers.getContractFactory("PublicResolver");
const metadata = {address:'0xecc5d54d2da9e23caa5c70cda83ecd6ea3be7345'}
const wrapper = {address:'0x9029c1574f91696026358d4edB0De773d0E04aeD'}
const resolver = await PublicResolver.deploy(registryAddress, wrapper.address)
await resolver.deployTransaction.wait()
console.log("Resolver address:", resolver.address);
const StaticMetadataService = await ethers.getContractFactory("StaticMetadataService")
console.log(`Setting metadata service to ${metadataUrl}`)
if(metadataAddress){
console.log(`Metadata address ${metadataAddress} is already set.`)
}else{
metadataArguments = [metadataUrl]
const metadata = await StaticMetadataService.deploy(...metadataArguments)
await metadata.deployTransaction.wait()
console.log("Metadata address:",metadata.address)
metadataAddress = metadata.address
}
if(wrapperAddress){
console.log(`Wrapper address ${wrapperAddress} is already set.`)
}else{
wrapperArguments = [registryAddress, registrarAddress, metadataAddress]
const wrapper = await NameWrapper.deploy(registryAddress, registrarAddress, metadataAddress)
await wrapper.deployTransaction.wait()
console.log("Wrapper address:", wrapper.address)
wrapperAddress = wrapper.address
}
if(resolverAddress){
console.log(`Resolver address ${resolverAddress} is already set.`)
}else{
const PublicResolver = await ethers.getContractFactory("PublicResolver")
resolverArguments = [registryAddress, wrapperAddress]
const resolver = await PublicResolver.deploy(...resolverArguments)
await resolver.deployTransaction.wait()
console.log("Resolver address:", resolver.address)
resolverAddress = resolver.address
}

if(network.name !== 'localhost'){
console.log('wait for 5 sec until bytecodes are uploaded into etherscan')
await new Promise(resolve => setTimeout(resolve, 5000));
if(metadataArguments) verify(metadataAddress, metadataArguments)
if(wrapperArguments) verify(wrapperAddress, wrapperArguments)
if(resolverArguments) verify(resolverAddress, resolverArguments)
}

parsedFile.REGISTRY_ADDRESS = registryAddress
parsedFile.REGISTRAR_ADDRESS = registrarAddress
parsedFile.METADATA_ADDRESS = metadata.address
parsedFile.WRAPPER_ADDRESS = wrapper.address
parsedFile.RESOLVER_ADDRESS = resolver.address
parsedFile.METADATA_ADDRESS = metadataAddress
parsedFile.WRAPPER_ADDRESS = wrapperAddress
parsedFile.RESOLVER_ADDRESS = resolverAddress
fs.writeFileSync('./.env', envfile.stringify(parsedFile))
}

main()
.then(() => process.exit(0))
.catch(error => {
console.error(error);
process.exit(1);
});
console.error(error)
process.exit(1)
})
18 changes: 11 additions & 7 deletions scripts/seed.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ use(solidity)
const namehash = n.hash
const labelhash = (label) => utils.keccak256(utils.toUtf8Bytes(label))

function getOpenSeaUrl(contract, namehashedname){
const tokenId = ethers.BigNumber.from(namehashedname).toString()
return `https://testnets.opensea.io/assets/${contract}/${tokenId}`
}

async function main(a) {
const [deployer] = await ethers.getSigners();
const CAN_DO_EVERYTHING = 0
Expand All @@ -28,31 +33,30 @@ async function main(a) {
} = parsedFile
if(!(registryAddress && registrarAddress && wrapperAddress && resolverAddress)){
throw('Set addresses on .env')
}
}
console.log("Account balance:", (await deployer.getBalance()).toString());

console.log({
registryAddress,registrarAddress, wrapperAddress, resolverAddress,firstAddress, name
})
const EnsRegistry = await (await ethers.getContractFactory("ENSRegistry")).attach(registryAddress);
const BaseRegistrar = await (await ethers.getContractFactory("BaseRegistrarImplementation")).attach(registrarAddress);
const NameWrapper = await (await ethers.getContractFactory("NameWrapper")).attach(wrapperAddress);
const Resolver = await (await ethers.getContractFactory("PublicResolver")).attach(resolverAddress);
const namehashedname = namehash(`${name}.eth`)
const domain = `${name}.eth`
const namehashedname = namehash(domain)

await (await BaseRegistrar.setApprovalForAll(NameWrapper.address, true)).wait()
await (await EnsRegistry.setApprovalForAll(NameWrapper.address, true)).wait()
await (await NameWrapper.wrapETH2LD(name, firstAddress, CAN_DO_EVERYTHING)).wait()
console.log(`Wrapped NFT for ${domain} is available at ${getOpenSeaUrl(NameWrapper.address, namehashedname)}`)
await (await NameWrapper.setSubnodeOwnerAndWrap(namehash(`${name}.eth`), 'sub1', firstAddress, CAN_DO_EVERYTHING)).wait()
await (await NameWrapper.setSubnodeOwnerAndWrap(namehash(`${name}.eth`), 'sub2', firstAddress, CAN_DO_EVERYTHING)).wait()
await (await NameWrapper.setResolver(namehash(`sub2.${name}.eth`), resolverAddress)).wait()
await (await Resolver.setText(namehash(`sub2.${name}.eth`), 'domains.ens.nft.image', 'https://i.imgur.com/JcZESMp.png')).wait()
let text = await Resolver.text(namehash(`sub2.${name}.eth`), 'avatar')
console.log({text})
console.log(`Wrapped NFT for sub2.${name}.eth is available at ${getOpenSeaUrl(NameWrapper.address, namehash(`sub2.${name}.eth`))}`)
await (await NameWrapper.burnFuses(namehash(`sub2.${name}.eth`),CANNOT_UNWRAP)).wait()
await (await NameWrapper.burnFuses(namehash(`sub2.${name}.eth`),CANNOT_SET_RESOLVER)).wait()
await (await NameWrapper.unwrap(namehash(`${name}.eth`), labelhash('sub1'), firstAddress)).wait()
let tokenURI = await NameWrapper.uri(namehashedname)
console.log('owner', {tokenURI})
}

main()
Expand Down

0 comments on commit c8fbcca

Please sign in to comment.