Skip to content

Commit

Permalink
Add getaddr
Browse files Browse the repository at this point in the history
  • Loading branch information
makoto committed Nov 13, 2023
1 parent 408df76 commit 75373f7
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 1 deletion.
15 changes: 14 additions & 1 deletion crosschain-resolver/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,18 @@ const l2resolverAddress = await DelegatableResolverFactory.predictAddress(OWNER_
await DelegatableResolverFactory.create(OWNER_ADDRESS)
await DelegatableResolverFactory['setAddr(bytes32,address)'](node, OWNER_ADDRESS)
// On L1
await L1Resolver['addr(bytes32)'](node, {enableCcipRead:true})
const abi = [
"function addr(bytes32) view returns (address)",
"function resolve(bytes,bytes) view returns (bytes)",
]
const i = new ethers.Interface(abi)
const calldata = i.encodeFunctionData("addr", [node])
const result2 = await l1resolver.resolve(encodedname, calldata, { enableCcipRead: true })
const address = i.decodeFunctionResult("addr", result2)[0]
```

NOTE: The l1 resolver must be queried through `resolve` function to handle subnames

Or run the script

```
Expand All @@ -121,4 +130,8 @@ DEPLOYER_PRIVATE_KEY=$DEPLOYER_PRIVATE_KEY L1_PROVIDER_URL=$L1_PROVIDER_URL L2_P
DEPLOYER_PRIVATE_KEY=$DEPLOYER_PRIVATE_KEY L1_PROVIDER_URL=$L1_PROVIDER_URL L2_PROVIDER_URL=$L2_PROVIDER_URL L1_ETHERSCAN_API_KEY=$L1_ETHERSCAN_API_KEY L2_ETHERSCAN_API_KEY=$L2_ETHERSCAN_API_KEY L2_PROVIDER_URL=$L2_PROVIDER_URL L2_RESOLVER_FACTORY_ADDRESS=$L2_RESOLVER_FACTORY_ADDRESS ENS_NAME=$ENS_NAME yarn setupl2
```

```
L1_PROVIDER_URL=$L1_PROVIDER_URL L1_ETHERSCAN_API_KEY=$L1_ETHERSCAN_API_KEY L2_ETHERSCAN_API_KEY=$L2_ETHERSCAN_API_KEY L2_PROVIDER_URL=$L2_PROVIDER_URL ENS_NAME=$ENS_NAME yarn getaddr
```

### Issue subname to L2
1 change: 1 addition & 0 deletions crosschain-resolver/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"clean": "rm -fr artifacts cache node_modules typechain-types",
"setupl1": "hardhat run scripts/setupl1.ts --network goerli",
"setupl2": "hardhat run scripts/setupl2.ts --network optimismGoerli",
"getaddr": "hardhat run scripts/getaddr.ts --network goerli",
"lint": "exit 0"
},
"devDependencies": {
Expand Down
46 changes: 46 additions & 0 deletions crosschain-resolver/scripts/getaddr.ts
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();

0 comments on commit 75373f7

Please sign in to comment.