Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Crosschain resolver with reverse registrar with deploy script (#18)
* Update deploy scripts * Remove console.log * Remove blank space from the file * Add deployment script * Update deployment readme * Add getname * Add setname * Add setup script * Add getaddr * Add approve * Fix wildcard for subname * Update bun * Deploy l2 reverse registrar to base goerli * Add base deployment * Added instruction on subname registrar * Added instruction on how to register names
- Loading branch information
Showing
20 changed files
with
532 additions
and
39 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
import hre from 'hardhat'; | ||
import packet from 'dns-packet'; | ||
const ethers = hre.ethers; | ||
const encodeName = (name) => '0x' + packet.name.encode(name).toString('hex') | ||
const abi = [ | ||
"function predictAddress(address) view returns (address)" | ||
] | ||
|
||
export const main = async () => { | ||
const [signer] = await hre.ethers.getSigners(); | ||
if (!process.env.OPERATOR_ADDRESS || !process.env.L2_RESOLVER_FACTORY_ADDRESS || !process.env.L1_PROVIDER_URL || !process.env.L2_PROVIDER_URL || !process.env.ENS_SUBNAME) | ||
throw 'Set OPERATOR_ADDRESS L1_PROVIDER_URL, L2_PROVIDER_URL, L2_RESOLVER_FACTORY_ADDRESS, and ENS_SUBNAME'; | ||
|
||
const OPERATOR_ADDRESS = process.env.OPERATOR_ADDRESS | ||
const L2_RESOLVER_FACTORY_ADDRESS = process.env.L2_RESOLVER_FACTORY_ADDRESS | ||
const L1_PROVIDER_URL = process.env.L1_PROVIDER_URL; | ||
const L2_PROVIDER_URL = process.env.L2_PROVIDER_URL; | ||
const ENS_SUBNAME = process.env.ENS_SUBNAME; | ||
const ETH_ADDRESS = signer.address; | ||
const node = ethers.namehash(ENS_SUBNAME) | ||
const encodedName = encodeName(ENS_SUBNAME) | ||
console.log({L1_PROVIDER_URL, L2_PROVIDER_URL, L2_RESOLVER_FACTORY_ADDRESS, OPERATOR_ADDRESS, ENS_SUBNAME, encodedName,node}) | ||
const l2provider = new ethers.JsonRpcProvider(L2_PROVIDER_URL); | ||
const l2FactoryRead = new ethers.Contract(L2_RESOLVER_FACTORY_ADDRESS, abi, l2provider); | ||
const l2resolverAddress = await l2FactoryRead.predictAddress(ETH_ADDRESS) | ||
console.log(`l2 resolver address for ${ETH_ADDRESS} is ${l2resolverAddress}`) | ||
const l2Resolver = (await ethers.getContractFactory('DelegatableResolver', signer)).attach(l2resolverAddress); | ||
const tx2 = await l2Resolver.approve(encodedName, OPERATOR_ADDRESS, true, { | ||
gasPrice: "900000", | ||
gasLimit: 500000, | ||
}); | ||
console.log(`Approving ${OPERATOR_ADDRESS} to update ${ENS_SUBNAME}`, (await tx2.wait()).hash) | ||
}; | ||
|
||
main(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
import packet from 'dns-packet'; | ||
const encodeName = (name) => '0x' + packet.name.encode(name).toString('hex') | ||
const l1abi = [ | ||
"function getTarget(bytes,uint256) view returns (bytes32, address)", | ||
"function addr(bytes32) view returns (address)", | ||
"function resolve(bytes,bytes) view returns (bytes)", | ||
] | ||
|
||
const l2abi = [ | ||
"function addr(bytes32) view returns (address)" | ||
] | ||
|
||
import {ethers} from 'ethers'; | ||
export const main = async () => { | ||
if (!process.env.L1_PROVIDER_URL || !process.env.ENS_NAME) | ||
throw 'Set L1_PROVIDER_URL and ENS_NAME'; | ||
|
||
const L1_PROVIDER_URL = process.env.L1_PROVIDER_URL; | ||
const L2_PROVIDER_URL = process.env.L2_PROVIDER_URL; | ||
const ENS_NAME = process.env.ENS_NAME; | ||
const encodedname = encodeName(ENS_NAME) | ||
const node = ethers.namehash(ENS_NAME) | ||
|
||
const l1provider = new ethers.JsonRpcProvider(L1_PROVIDER_URL); | ||
const l2provider = new ethers.JsonRpcProvider(L2_PROVIDER_URL); | ||
let resolver = await l1provider.getResolver(ENS_NAME) | ||
// Wildcard seems not working. A workaround for now | ||
if(!resolver){ | ||
const parentName = ENS_NAME.split('.').slice(1).join('.') | ||
console.log(`Resolver not found on ${ENS_NAME}. Looking up ${parentName}`) | ||
resolver = await l1provider.getResolver(parentName) | ||
} | ||
console.log({ENS_NAME, resolver, encodedname, node}) | ||
const l1resolver = new ethers.Contract(resolver.address, l1abi, l1provider); | ||
const target = await l1resolver.getTarget(encodedname, 0) | ||
const l2resolverAddress = target[1] | ||
console.log('Target is set to ' + l2resolverAddress); | ||
const l2resolver = new ethers.Contract(l2resolverAddress, l2abi, l2provider); | ||
const l2address = await l2resolver['addr(bytes32)'](node) | ||
console.log('L2 query result ' + l2address); | ||
const i = new ethers.Interface(l1abi) | ||
const calldata = i.encodeFunctionData("addr", [node]) | ||
const result2 = await l1resolver.resolve(encodedname, calldata, { enableCcipRead: true }) | ||
const decoded = i.decodeFunctionResult("addr", result2) | ||
console.log('L1 query result ' + decoded[0]); | ||
// These should also work but somehow not working. Mabye some inconsistent resolver interface? | ||
console.log(await l1provider.resolveName(ENS_NAME)); | ||
console.log(await resolver.getAddress()); | ||
}; | ||
|
||
main(); |
Oops, something went wrong.