-
Notifications
You must be signed in to change notification settings - Fork 28
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
61 additions
and
1 deletion.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
import hre from 'hardhat'; | ||
import packet from 'dns-packet'; | ||
const abi = ['function name(bytes32) view returns(string)']; | ||
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); | ||
const resolver = await l1provider.getResolver(ENS_NAME) | ||
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(); |