Skip to content

Commit

Permalink
Merge pull request #239 from blockful-io/wildcard-writing-v02
Browse files Browse the repository at this point in the history
Wildcard Writing based on IWriteDeferral w/ view call
  • Loading branch information
pikonha authored Jan 21, 2025
2 parents d43faf1 + 811a8a1 commit c843469
Show file tree
Hide file tree
Showing 18 changed files with 734 additions and 377 deletions.
276 changes: 231 additions & 45 deletions package-lock.json

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions packages/client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
"name": "@blockful/client",
"scripts": {
"test": "npm-run-all test:**",
"test:l1": "hardhat test ./test/arb.e2e.spec.ts --network localhost",
"test:arb": "hardhat test ./test/arb.e2e.spec.ts --network localhost",
"test:db": "hardhat test ./test/db.e2e.spec.ts --network localhost",
"test:metadata": "hardhat test ./test/metadata.e2e.spec.ts --network localhost",
"start:read": "ts-node src/read.ts",
"start:write": "ts-node src/write.ts",
"lint": "eslint . --ext .ts --fix"
},
"devDependencies": {
"@apollo/server": "^4.11.0",
"@apollo/server": "^4.11.2",
"@blockful/ccip-server": "*",
"@blockful/gateway": "*",
"@nomicfoundation/hardhat-toolbox": "^5.0.0",
Expand All @@ -22,12 +22,12 @@
"aes-js": "^3.1.2",
"chai": "^4.2.0",
"dotenv": "^16.4.5",
"hardhat": "^2.22.12",
"hardhat": "^2.22.15",
"npm-run-all": "^4.1.5",
"reflect-metadata": "^0.2.2",
"solidity-coverage": "^0.8.12",
"typeorm": "^0.3.20",
"viem": "^2.21.19"
"viem": "^2.21.42"
},
"peerDependencies": {
"@blockful/tsconfig": "*"
Expand Down
39 changes: 23 additions & 16 deletions packages/client/src/write.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,15 +93,17 @@ const _ = (async () => {
functionName: 'register',
abi: scAbi,
args: [
encodedName,
signer.address, // owner
duration,
zeroHash,
resolver,
data, // records calldata
false, // reverseRecord
0, // fuses
zeroHash,
{
name: encodedName,
owner: signer.address,
duration,
secret: zeroHash,
resolver,
data,
reverseRecord: false,
fuses: 0,
extraData: zeroHash,
},
],
account: signer,
}
Expand Down Expand Up @@ -154,13 +156,18 @@ const _ = (async () => {

let value = 0n
try {
const [_value /* commitTime */ /* extraData */, ,] =
(await client.readContract({
address: contractAddress,
abi: scAbi,
functionName: 'registerParams',
args: [encodedName, duration],
})) as [bigint, bigint, Hex]
const { price: _value } = (await client.readContract({
address: contractAddress,
abi: scAbi,
functionName: 'registerParams',
args: [encodedName, duration],
})) as {
price: bigint
commitTime: bigint
extraData: Hex
available: boolean
token: Hex
}
value = _value
} catch {
// interface not implemented by the resolver
Expand Down
100 changes: 55 additions & 45 deletions packages/client/test/db.e2e.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -190,15 +190,17 @@ describe('DatabaseResolver', async () => {
functionName: 'register',
abi: abiOffchainRegister,
args: [
encodedName,
owner.address,
300n,
zeroHash,
resolver,
[],
false,
0,
zeroHash,
{
name: encodedName,
owner: owner.address,
duration: 300n,
secret: zeroHash,
resolver,
data: [],
reverseRecord: false,
fuses: 0,
extraData: zeroHash,
},
],
universalResolverAddress,
signer: owner,
Expand Down Expand Up @@ -236,15 +238,17 @@ describe('DatabaseResolver', async () => {
functionName: 'register',
abi: abiOffchainRegister,
args: [
encodedName,
owner.address,
300n,
zeroHash,
resolver,
calldata,
false,
0,
zeroHash,
{
name: encodedName,
owner: owner.address,
duration: 300n,
secret: zeroHash,
resolver,
data: calldata,
reverseRecord: false,
fuses: 0,
extraData: zeroHash,
},
],
universalResolverAddress,
signer: owner,
Expand Down Expand Up @@ -287,15 +291,17 @@ describe('DatabaseResolver', async () => {
functionName: 'register',
abi: abiOffchainRegister,
args: [
encodedName,
owner.address,
300n,
zeroHash,
resolver,
[],
false,
0,
zeroHash,
{
name: encodedName,
owner: owner.address,
duration: 300n,
secret: zeroHash,
resolver,
data: [],
reverseRecord: false,
fuses: 0,
extraData: zeroHash,
},
],
universalResolverAddress,
signer: owner,
Expand All @@ -319,15 +325,17 @@ describe('DatabaseResolver', async () => {
functionName: 'register',
abi: abiOffchainRegister,
args: [
encodedName,
newOwner.address,
300n,
zeroHash,
resolver,
[],
false,
0,
zeroHash,
{
name: encodedName,
owner: newOwner.address,
duration: 300n,
secret: zeroHash,
resolver,
data: [],
reverseRecord: false,
fuses: 0,
extraData: zeroHash,
},
],
universalResolverAddress,
signer: newOwner,
Expand Down Expand Up @@ -360,15 +368,17 @@ describe('DatabaseResolver', async () => {
functionName: 'register',
abi: abiOffchainRegister,
args: [
encodedName,
newOwner,
300n,
zeroHash,
resolver,
[],
false,
0,
zeroHash,
{
name: encodedName,
owner: newOwner,
duration: 300n,
secret: zeroHash,
resolver,
data: [],
reverseRecord: false,
fuses: 0,
extraData: zeroHash,
},
],
universalResolverAddress,
signer: owner,
Expand Down
6 changes: 2 additions & 4 deletions packages/contracts/script/deploy/SubdomainController.sol
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,8 @@ contract SubdomainControllerScript is DeployHelper, ENSHelper {
vm.startBroadcast();

uint256 subdomainPrice = 0.001 ether;
uint256 commitTime = 0;
SubdomainController subdomainController = new SubdomainController(
address(nameWrapper), subdomainPrice, commitTime
);
SubdomainController subdomainController =
new SubdomainController(address(nameWrapper), subdomainPrice);
nameWrapper.setApprovalForAll(address(subdomainController), true);

vm.stopBroadcast();
Expand Down
41 changes: 22 additions & 19 deletions packages/contracts/script/local/L2ArbitrumResolver.sol
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,17 @@ import {ETHRegistrarController} from
"@ens-contracts/ethregistrar/ETHRegistrarController.sol";
import {DummyOracle} from "@ens-contracts/ethregistrar/DummyOracle.sol";
import {NameWrapper} from "@ens-contracts/wrapper/NameWrapper.sol";
import {StaticMetadataService} from
"@ens-contracts/wrapper/StaticMetadataService.sol";
import {MockMetadataService} from "../mocks/MetadataService.sol";
import {IMetadataService} from "@ens-contracts/wrapper/IMetadataService.sol";
import {PublicResolver} from "@ens-contracts/resolvers/PublicResolver.sol";
import {NameEncoder} from "@ens-contracts/utils/NameEncoder.sol";

import {ENSHelper} from "../ENSHelper.sol";
import {SubdomainController} from "../../src/SubdomainController.sol";
import {
OffchainRegister,
RegisterRequest
} from "../../src/interfaces/WildcardWriting.sol";

contract L2ArbitrumResolver is Script, ENSHelper {

Expand All @@ -48,12 +51,11 @@ contract L2ArbitrumResolver is Script, ENSHelper {
rootNode, labelhash("eth"), address(baseRegistrar)
);

StaticMetadataService metadata = new StaticMetadataService(
MockMetadataService metadata = new MockMetadataService(
"http://ens-metadata-service.appspot.com/name/0x{id}"
);
NameWrapper nameWrapper = new NameWrapper(
registry, baseRegistrar, IMetadataService(address(metadata))
);
NameWrapper nameWrapper =
new NameWrapper(registry, baseRegistrar, metadata);
baseRegistrar.addController(address(nameWrapper));

DummyOracle dummyOracle = new DummyOracle(16 gwei);
Expand All @@ -80,10 +82,8 @@ contract L2ArbitrumResolver is Script, ENSHelper {
nameWrapper.setController(msg.sender, true);

uint256 subdomainPrice = 0.001 ether;
uint256 commitTime = 0;
SubdomainController subdomainController = new SubdomainController(
address(nameWrapper), subdomainPrice, commitTime
);
SubdomainController subdomainController =
new SubdomainController(address(nameWrapper), subdomainPrice);
nameWrapper.setApprovalForAll(address(subdomainController), true);

PublicResolver arbResolver = new PublicResolver(
Expand All @@ -109,21 +109,24 @@ contract L2ArbitrumResolver is Script, ENSHelper {
);

subdomainController.register{value: subdomainController.price()}(
name,
msg.sender,
31556952000,
keccak256("secret"),
address(arbResolver),
data,
false,
0,
bytes("")
RegisterRequest(
name,
msg.sender,
31556952000,
keccak256(abi.encode("secret")),
address(arbResolver),
data,
false,
0,
bytes("")
)
);

vm.stopBroadcast();

console.log("Registry deployed at", address(registry));
console.log("NameWrapper deployed at", address(nameWrapper));
console.log("BaseRegistrar deployed at", address(baseRegistrar));
console.log(
"SubdomainController deployed at", address(subdomainController)
);
Expand Down
23 changes: 23 additions & 0 deletions packages/contracts/script/mocks/MetadataService.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// SPDX-License-Identifier: MIT
pragma solidity ~0.8.17;

import "@ens-contracts/wrapper/IMetadataService.sol";

contract MockMetadataService is IMetadataService {

string private _baseUri;

constructor(string memory baseUri) {
_baseUri = baseUri;
}

function uri(uint256 /* tokenId */ )
external
view
override
returns (string memory)
{
return _baseUri;
}

}
Loading

0 comments on commit c843469

Please sign in to comment.