Skip to content

Commit

Permalink
Merge pull request #127 from ensdomains/deployment/goerli
Browse files Browse the repository at this point in the history
Fix deployment script bugs and deploy on Goerli
  • Loading branch information
Arachnid committed Sep 21, 2022
2 parents 5842106 + 28f4a13 commit e5f7e72
Show file tree
Hide file tree
Showing 15 changed files with 5,549 additions and 181 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,9 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
args: [registry.address, namehash.hash('eth')],
log: true,
};
const { differences } = await fetchIfDifferent('BaseRegistrarImplementation', deployArgs);
if(!differences) return;

await deploy('BaseRegistrarImplementation', deployArgs)
const bri = await deploy('BaseRegistrarImplementation', deployArgs)
if(!bri.newlyDeployed) return;

const registrar = await ethers.getContract('BaseRegistrarImplementation')

Expand Down
37 changes: 26 additions & 11 deletions deploy/ethregistrar/03_deploy_eth_registrar_controller.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
import { Interface } from 'ethers/lib/utils';
import { ethers } from 'hardhat'
import { DeployFunction } from 'hardhat-deploy/types'
import { HardhatRuntimeEnvironment } from 'hardhat/types'

const { makeInterfaceId } = require('@openzeppelin/test-helpers')

function computeInterfaceId(iface: Interface) {
return makeInterfaceId.ERC165(Object.values(iface.functions).map((frag) => frag.format("sighash")));
}

const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
const { getNamedAccounts, deployments, network } = hre
const { deploy, fetchIfDifferent } = deployments
Expand All @@ -24,32 +31,40 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
],
log: true,
};
const { differences } = await fetchIfDifferent('ETHRegistrarController', deployArgs);
if(!differences) return;

const controller = await deploy('ETHRegistrarController', deployArgs)
if(!controller.newlyDeployed) return;

const tx1 = await registrar.addController(controller.address, {
// Only attempt to make controller etc changes directly on testnets
if(network.name === 'mainnet') return;

const tx1 = await nameWrapper.setController(controller.address, {
from: deployer,
})
console.log(
`Adding ETHRegistrarController as controller on BaseRegistrarImplementation (tx: ${tx1.hash})...`,
`Adding ETHRegistrarController as a controller of NameWrapper (tx: ${tx1.hash})...`,
)
await tx1.wait()

const tx2 = await nameWrapper.setController(controller.address, {
const tx2 = await reverseRegistrar.setController(controller.address, {
from: deployer,
})
console.log(
`Adding ETHRegistrarController as a controller of NameWrapper (tx: ${tx2.hash})...`,
`Adding ETHRegistrarController as a controller of ReverseRegistrar (tx: ${tx2.hash})...`,
)
await tx2.wait()

const tx3 = await reverseRegistrar.setController(controller.address, {
from: deployer,
})
const artifact = await deployments.getArtifact("IETHRegistrarController");
const interfaceId = computeInterfaceId(new Interface(artifact.abi));
const provider = await ethers.getDefaultProvider();
const resolver = await provider.getResolver("eth");
if(resolver === null) {
console.log("No resolver set for .eth; not setting interface for ETH Registrar Controller");
return;
}
const resolverContract = await ethers.getContractAt('PublicResolver', resolver.address);
const tx3 = await resolverContract.setInterface(ethers.utils.namehash('eth'), interfaceId, controller.address);
console.log(
`Adding ETHRegistrarController as a controller of ReverseRegistrar (tx: ${tx3.hash})...`,
`Setting ETHRegistrarController interface ID ${interfaceId} on .eth resolver (tx: ${tx3.hash})...`
)
await tx3.wait()
}
Expand Down
11 changes: 6 additions & 5 deletions deploy/registry/01_deploy_reverse_registrar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'
import { keccak256 } from 'js-sha3'

const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
const { getNamedAccounts, deployments } = hre
const { getNamedAccounts, deployments, network } = hre
const { deploy, fetchIfDifferent } = deployments
const { deployer, owner } = await getNamedAccounts()

Expand All @@ -16,10 +16,11 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
args: [registry.address],
log: true,
};
const { differences } = await fetchIfDifferent('ReverseRegistrar', deployArgs);
if(!differences) return;

const reverseRegistrar = await deploy('ReverseRegistrar', deployArgs);
if(!reverseRegistrar.newlyDeployed) return;

// Only attempt to make controller etc changes directly on testnets
if(network.name === 'mainnet') return;

const root = await ethers.getContract('Root')

Expand All @@ -43,7 +44,7 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
}

func.id = 'reverse-registrar'
func.tags = ['registry', 'ReverseRegistrar']
func.tags = ['ReverseRegistrar']
func.dependencies = ['root']

export default func
4 changes: 1 addition & 3 deletions deploy/resolvers/00_deploy_public_resolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,8 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
],
log: true,
};
const { differences } = await fetchIfDifferent('PublicResolver', deployArgs);
if(!differences) return;

const publicResolver = await deploy('PublicResolver', deployArgs)
if(!publicResolver.newlyDeployed) return;

const tx = await reverseRegistrar.setDefaultResolver(publicResolver.address, {
from: deployer,
Expand Down
36 changes: 32 additions & 4 deletions deploy/wrapper/01_deploy_name_wrapper.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,34 @@
import { Interface } from 'ethers/lib/utils'
import { ethers } from 'hardhat'
import { DeployFunction } from 'hardhat-deploy/types'
import { HardhatRuntimeEnvironment } from 'hardhat/types'

const { makeInterfaceId } = require('@openzeppelin/test-helpers')

function computeInterfaceId(iface: Interface) {
return makeInterfaceId.ERC165(Object.values(iface.functions).map((frag) => frag.format("sighash")));
}

const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
const { getNamedAccounts, deployments } = hre
const { deploy } = deployments
const { getNamedAccounts, deployments, network } = hre
const { deploy, fetchIfDifferent } = deployments
const { deployer } = await getNamedAccounts()

const registry = await ethers.getContract('ENSRegistry')
const registrar = await ethers.getContract('BaseRegistrarImplementation')
const metadata = await ethers.getContract('StaticMetadataService')

const nameWrapper = await deploy('NameWrapper', {
const deployArgs = {
from: deployer,
args: [registry.address, registrar.address, metadata.address],
log: true,
})
};

const nameWrapper = await deploy('NameWrapper', deployArgs)
if(!nameWrapper.newlyDeployed) return;

// Only attempt to make controller etc changes directly on testnets
if(network.name === 'mainnet') return;

const tx = await registrar.addController(nameWrapper.address, {
from: deployer,
Expand All @@ -24,6 +37,21 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
`Adding NameWrapper as controller on registrar (tx: ${tx.hash})...`,
)
await tx.wait()

const artifact = await deployments.getArtifact("NameWrapper");
const interfaceId = computeInterfaceId(new Interface(artifact.abi));
const provider = await ethers.getDefaultProvider();
const resolver = await provider.getResolver("eth");
if(resolver === null) {
console.log("No resolver set for .eth; not setting interface for NameWrapper");
return;
}
const resolverContract = await ethers.getContractAt('PublicResolver', resolver.address);
const tx2 = await resolverContract.setInterface(ethers.utils.namehash('eth'), interfaceId, nameWrapper.address);
console.log(
`Setting NameWrapper interface ID ${interfaceId} on .eth resolver (tx: ${tx2.hash})...`
)
await tx2.wait()
}

func.id = 'name-wrapper'
Expand Down
95 changes: 95 additions & 0 deletions deployments/goerli/DummyOracle.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
{
"address": "0xeB5245aa9619D05BC2bAa1baa31c2876ad392E5e",
"abi": [
{
"inputs": [
{
"internalType": "int256",
"name": "_value",
"type": "int256"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "latestAnswer",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "int256",
"name": "_value",
"type": "int256"
}
],
"name": "set",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"transactionHash": "0x4935be779b08d881114527a60d1fed7656ce95d96ad37f74e3aedffc0306d8df",
"receipt": {
"to": null,
"from": "0xa303ddC620aa7d1390BACcc8A495508B183fab59",
"contractAddress": "0xeB5245aa9619D05BC2bAa1baa31c2876ad392E5e",
"transactionIndex": 2,
"gasUsed": "114009",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"blockHash": "0xf7f9a95e6604c96afcafd2e638aa56a25a17e78ffef540c39b8847cb6ec4de90",
"transactionHash": "0x4935be779b08d881114527a60d1fed7656ce95d96ad37f74e3aedffc0306d8df",
"logs": [],
"blockNumber": 7625497,
"cumulativeGasUsed": "337909",
"status": 1,
"byzantium": true
},
"args": [
"160000000000"
],
"numDeployments": 1,
"solcInputHash": "9ab134ee99f7410d077d71824d3e2f84",
"metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"_value\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"latestAnswer\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"_value\",\"type\":\"int256\"}],\"name\":\"set\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ethregistrar/DummyOracle.sol\":\"DummyOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"contracts/ethregistrar/DummyOracle.sol\":{\"content\":\"pragma solidity >=0.8.4;\\n\\ncontract DummyOracle {\\n int256 value;\\n\\n constructor(int256 _value) public {\\n set(_value);\\n }\\n\\n function set(int256 _value) public {\\n value = _value;\\n }\\n\\n function latestAnswer() public view returns (int256) {\\n return value;\\n }\\n}\\n\",\"keccak256\":\"0x8f0d88c42c074c3fb80710f7639cb455a582fa96629e26a974dd6a19c15678ff\"}},\"version\":1}",
"bytecode": "0x608060405234801561001057600080fd5b5060405161011138038061011183398101604081905261002f9161003e565b61003881600055565b50610057565b60006020828403121561005057600080fd5b5051919050565b60ac806100656000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806350d25bcd146037578063e5c19b2d14604c575b600080fd5b60005460405190815260200160405180910390f35b605c6057366004605e565b600055565b005b600060208284031215606f57600080fd5b503591905056fea2646970667358221220a8de3ba5e8615edab3cc4519b8f2c3736cd9eaaf1dad97bca592b10503c7a63864736f6c63430008110033",
"deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060325760003560e01c806350d25bcd146037578063e5c19b2d14604c575b600080fd5b60005460405190815260200160405180910390f35b605c6057366004605e565b600055565b005b600060208284031215606f57600080fd5b503591905056fea2646970667358221220a8de3ba5e8615edab3cc4519b8f2c3736cd9eaaf1dad97bca592b10503c7a63864736f6c63430008110033",
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
},
"storageLayout": {
"storage": [
{
"astId": 3,
"contract": "contracts/ethregistrar/DummyOracle.sol:DummyOracle",
"label": "value",
"offset": 0,
"slot": "0",
"type": "t_int256"
}
],
"types": {
"t_int256": {
"encoding": "inplace",
"label": "int256",
"numberOfBytes": "32"
}
}
}
}

0 comments on commit e5f7e72

Please sign in to comment.