Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deploy dnssec registrar #304

Merged
merged 26 commits into from
Jan 23, 2024
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
76768cc
fix offchain-resolver resolution over offchain dns
mdtanrikulu Nov 15, 2023
9ef4bcb
update tests, add universal + dns resolver test
mdtanrikulu Dec 6, 2023
84ecab8
fix test flow
mdtanrikulu Dec 6, 2023
74de256
Merge pull request #296 from ensdomains/mdt/fix-testflow
jefflau Dec 18, 2023
822e4e6
Remove log
jefflau Dec 18, 2023
06d956c
Merge pull request #298 from ensdomains/mdt/fix-testflow
jefflau Dec 18, 2023
67bf365
Merge pull request #291 from ensdomains/mdt/offchain-resolver-fix
mdtanrikulu Dec 18, 2023
4e73ef9
Redeploy DNSRegistrar to Sepolia
jefflau Jan 3, 2024
8b76224
convert bn to string
mdtanrikulu Jan 11, 2024
fcc06ca
revert bn to string
mdtanrikulu Jan 11, 2024
1a88d61
try different action runner image
mdtanrikulu Jan 13, 2024
656160a
try mac runner
mdtanrikulu Jan 13, 2024
2015531
revert runner os, try different node version
mdtanrikulu Jan 13, 2024
bde22f8
revert node version, add tmate
mdtanrikulu Jan 14, 2024
831e1cf
revert tmate
mdtanrikulu Jan 14, 2024
53f64de
Deploy to mainnet
Arachnid Jan 16, 2024
7d091bd
New DNSRegistrar deployment with correct previous version address
Arachnid Jan 17, 2024
03b4775
Use owner instead of isOwner
Arachnid Jan 17, 2024
3d2f538
Use explicit public suffix list
Arachnid Jan 17, 2024
0d99f42
Remove accidentally added contract
Arachnid Jan 17, 2024
160919f
New deployment
Arachnid Jan 17, 2024
e5391f7
Merge pull request #310 from ensdomains/feature/public-suffixes
Arachnid Jan 17, 2024
992dc9d
deploy SimplePublicSuffixList to Sepolia
mdtanrikulu Jan 18, 2024
9fe938e
Merge branch 'staging' into deploy-dnssec-registrar
mdtanrikulu Jan 18, 2024
c5eb51e
remove unused interface "commitments" from IETHRegistrarController
mdtanrikulu Jan 19, 2024
322c326
Merge pull request #312 from ensdomains/mdt/update-IETHRegistrarContr…
Arachnid Jan 22, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
148 changes: 85 additions & 63 deletions contracts/dnsregistrar/OffchainDNSResolver.sol
Original file line number Diff line number Diff line change
Expand Up @@ -61,23 +61,36 @@ contract OffchainDNSResolver is IExtendedResolver, IERC165 {
bytes calldata name,
bytes calldata data
) external view returns (bytes memory) {
return
callWithOffchainLookupPropagation(
msg.sender,
name,
data,
abi.encodeCall(IExtendedResolver.resolve, (name, data))
);
revertWithDefaultOffchainLookup(name, data);
}

function resolveCallback(
bytes calldata response,
bytes calldata extraData
) external view returns (bytes memory) {
(bytes memory name, bytes memory query) = abi.decode(
(bytes memory name, bytes memory query, bytes4 selector) = abi.decode(
extraData,
(bytes, bytes)
(bytes, bytes, bytes4)
);

if (selector != bytes4(0)) {
(bytes memory targetData, address targetResolver) = abi.decode(
query,
(bytes, address)
);
return
callWithOffchainLookupPropagation(
targetResolver,
name,
query,
abi.encodeWithSelector(
selector,
response,
abi.encode(targetData, address(this))
)
);
}

DNSSEC.RRSetWithSignature[] memory rrsets = abi.decode(
response,
(DNSSEC.RRSetWithSignature[])
Expand Down Expand Up @@ -251,64 +264,73 @@ contract OffchainDNSResolver is IExtendedResolver, IERC165 {
bytes memory innerdata,
bytes memory data
) internal view returns (bytes memory) {
if (target.isContract()) {
bool result = LowLevelCallUtils.functionStaticCall(
address(target),
data
);
uint256 size = LowLevelCallUtils.returnDataSize();
if (result) {
bytes memory returnData = LowLevelCallUtils.readReturnData(
0,
size
if (!target.isContract()) {
revertWithDefaultOffchainLookup(name, innerdata);
}

bool result = LowLevelCallUtils.functionStaticCall(
address(target),
data
);
uint256 size = LowLevelCallUtils.returnDataSize();
if (result) {
bytes memory returnData = LowLevelCallUtils.readReturnData(0, size);
return abi.decode(returnData, (bytes));
}
// Failure
if (size >= 4) {
bytes memory errorId = LowLevelCallUtils.readReturnData(0, 4);
if (bytes4(errorId) == OffchainLookup.selector) {
// Offchain lookup. Decode the revert message and create our own that nests it.
bytes memory revertData = LowLevelCallUtils.readReturnData(
4,
size - 4
);
return abi.decode(returnData, (bytes));
handleOffchainLookupError(revertData, target, name);
}
// Failure
if (size >= 4) {
bytes memory errorId = LowLevelCallUtils.readReturnData(0, 4);
if (bytes4(errorId) == OffchainLookup.selector) {
// Offchain lookup. Decode the revert message and create our own that nests it.
bytes memory revertData = LowLevelCallUtils.readReturnData(
4,
size - 4
);
(
address sender,
string[] memory urls,
bytes memory callData,
bytes4 innerCallbackFunction,
bytes memory extraData
) = abi.decode(
revertData,
(address, string[], bytes, bytes4, bytes)
);
}
LowLevelCallUtils.propagateRevert();
}

if (sender != target) {
revert InvalidOperation();
}
function revertWithDefaultOffchainLookup(
bytes memory name,
bytes memory data
) internal view {
string[] memory urls = new string[](1);
urls[0] = gatewayURL;

revert OffchainLookup(
address(this),
urls,
callData,
OffchainDNSResolver.resolveCallback.selector,
abi.encode(sender, innerCallbackFunction, extraData)
);
}
}
LowLevelCallUtils.propagateRevert();
} else {
string[] memory urls = new string[](1);
urls[0] = gatewayURL;

revert OffchainLookup(
address(this),
urls,
abi.encodeCall(IDNSGateway.resolve, (name, TYPE_TXT)),
OffchainDNSResolver.resolveCallback.selector,
abi.encode(name, innerdata)
);
revert OffchainLookup(
address(this),
urls,
abi.encodeCall(IDNSGateway.resolve, (name, TYPE_TXT)),
OffchainDNSResolver.resolveCallback.selector,
abi.encode(name, data, bytes4(0))
);
}

function handleOffchainLookupError(
bytes memory returnData,
address target,
bytes memory name
) internal view {
(
address sender,
string[] memory urls,
bytes memory callData,
bytes4 innerCallbackFunction,
bytes memory extraData
) = abi.decode(returnData, (address, string[], bytes, bytes4, bytes));

if (sender != target) {
revert InvalidOperation();
}

revert OffchainLookup(
address(this),
urls,
callData,
OffchainDNSResolver.resolveCallback.selector,
abi.encode(name, extraData, innerCallbackFunction)
);
}
}
52 changes: 26 additions & 26 deletions deployments/sepolia/DNSRegistrar.json

Large diffs are not rendered by default.

35 changes: 17 additions & 18 deletions deployments/sepolia/OffchainDNSResolver.json

Large diffs are not rendered by default.

Loading
Loading