Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
655af32
standalone reverse registrar
TateB Jan 20, 2026
ff11214
LibISO8601
TateB Jan 20, 2026
63e15d4
L2ReverseRegistrar
TateB Jan 20, 2026
19840c3
l2 reverse registrar
TateB Jan 21, 2026
81878b3
simplify
TateB Jan 21, 2026
d822f8d
add LibString
TateB Jan 21, 2026
40791ce
resolve stack too deep
TateB Jan 21, 2026
ba37e9f
update matchers v
TateB Jan 21, 2026
70f2301
L2ReverseRegistrarWithMigration
TateB Jan 21, 2026
f4a3ab7
Merge branch 'main' into feat/l2-reverse-registrar
TateB Jan 22, 2026
467334f
path fixes
TateB Jan 22, 2026
0b1a6ac
descriptive errors
TateB Jan 22, 2026
1ee0c82
remove nonce
TateB Jan 22, 2026
bb5fd6c
validator removed from sig
TateB Jan 29, 2026
cb424e6
chain ids ascending
TateB Jan 29, 2026
20c6346
signedAt
TateB Jan 29, 2026
1eace02
public inceptionOf
TateB Feb 11, 2026
67e69e1
chainidbuilderlib
TateB Feb 12, 2026
589d87d
dedupe
TateB Feb 12, 2026
ec18172
libiso8601 algo ref
TateB Feb 12, 2026
afa11cf
Merge branch 'main' into feat/l2-reverse-registrar
TateB Feb 18, 2026
3c7b27e
paths fix
TateB Feb 24, 2026
161ae1f
Merge branch 'main' into feat/l2-reverse-registrar
TateB Feb 24, 2026
4c46e2c
Merge branch 'main' into feat/l2-reverse-registrar
TateB Feb 25, 2026
d99863c
lint
TateB Feb 25, 2026
138bfab
feat: interface finalisations
TateB Feb 27, 2026
552506e
new solhint plugins
TateB Feb 27, 2026
b4a2bf5
plugin fix
TateB Feb 27, 2026
19ba3bb
plugin fix + erc1155singleton
TateB Mar 2, 2026
7344e09
category sections
TateB Mar 2, 2026
54bca0e
update erc1155singleton
TateB Mar 3, 2026
6ef4af3
Add `IPermissionedResolver` (#231)
adraffy Mar 10, 2026
e88b2eb
Add `IContractName` to `L2ReverseRegistrar` (#225)
adraffy Mar 10, 2026
911fa0a
Merge branch 'main' into feat/interface-finalisations
TateB Mar 11, 2026
89a751d
resolve
TateB Mar 11, 2026
6f5aec0
propagate to other contracts
TateB Mar 11, 2026
e2d1780
Merge pull request #226 from ensdomains/feat/interface-finalisations
TateB Mar 11, 2026
89c6f7f
Merge branch 'main' into chore/documentation-consistency
TateB Mar 11, 2026
edd89c8
re-add
TateB Mar 11, 2026
822f39c
Update deployment scripts and README for role management
Arachnid Mar 11, 2026
32e286c
Update README to clarify role management and permissions
Arachnid Mar 11, 2026
5a01fd3
fix interfaceImplementer (#241)
adraffy Mar 12, 2026
adc4b70
BET 559: add pre migration script back into new v2 (#213)
hiddentao Mar 12, 2026
a4e84af
more natspec consistencies
TateB Mar 13, 2026
10b0d31
applied natspec consistencies
TateB Mar 13, 2026
3461d48
final natspec changes...
TateB Mar 13, 2026
ef59dde
applied linter + resolved unfixable errors
TateB Mar 13, 2026
7ac71bf
Merge branch 'main' into chore/documentation-consistency
TateB Mar 13, 2026
71644ae
apply to batchregistrar
TateB Mar 13, 2026
5abe22b
better standardrentpriceoracle format
TateB Mar 13, 2026
a9ade51
ascii unmangle
TateB Mar 13, 2026
0d9bd50
Merge pull request #229 from ensdomains/chore/documentation-consistency
TateB Mar 13, 2026
3bfdc8a
Merge branch 'main' into feat/l2-reverse-registrar
TateB Mar 13, 2026
246ad88
Remove IENSIP16 + lint fixes
TateB Mar 13, 2026
8410dc2
Fix constants to use ADMIN bits
Arachnid Mar 13, 2026
5c26522
Fix CAN_TRANSFER_ADMIN role type
Arachnid Mar 13, 2026
544d167
Fix deploy-constants.ts
Arachnid Mar 13, 2026
287973d
Merge pull request #215 from ensdomains/feat/l2-reverse-registrar
TateB Mar 13, 2026
5750aae
More Migration Tests (#235)
adraffy Mar 13, 2026
bf6f4ad
fix merge
adraffy Mar 13, 2026
e2f5993
fix devnet ens.eth
adraffy Mar 13, 2026
754f1ff
Merge pull request #238 from ensdomains/feat/scoped-permissions
Arachnid Mar 13, 2026
87d3b1a
Fix `PermissionedRegistry._getSettableRoles()` to allow `grantRootRol…
adraffy Mar 13, 2026
cbaf4e1
Fix `LockedWrapperReceiver._migrateWrapped()` to reject non-null froz…
adraffy Mar 13, 2026
3376b49
Remove LibRegistry.findResolverFromParent() (#247)
adraffy Mar 16, 2026
732f7b9
Fix `PermissionedRegistry.{grant|revoke}Roles()` to make token roles …
adraffy Mar 16, 2026
248811c
Fix DNSTXTParserLib to support balanced square brackets inside of key…
adraffy Mar 16, 2026
41b67f1
Update ens-contracts submodule to v1.7.0 (#249)
makoto Mar 16, 2026
e6b0711
Create AUDIT_README.md (#237)
makoto Mar 17, 2026
4ac5517
Modify test names (#234)
makoto Mar 17, 2026
b1d7ecd
add fix and tests, add receiver fix to singleton
adraffy Mar 18, 2026
9e5b67d
add StrictERC1155Holder
adraffy Mar 18, 2026
e8696c6
Merge pull request #252 from ensdomains/fix/permreg-transfer-0
Arachnid Mar 19, 2026
f7d4ef5
feat(premigration): improve security, performance, and reliability (#…
hiddentao Apr 14, 2026
70dc1af
Use `DEPLOYMENT_ROLES` for Migration Controllers (#250)
adraffy Apr 15, 2026
725a18d
feat(premigration): add grace period to expiries (#270)
hiddentao Apr 15, 2026
9b80b8d
Fix/bet 601 fix unused code (#280)
makoto Apr 23, 2026
544daa8
feat(prepareMigration): add post-pre-migration role-swap script (#271)
hiddentao Apr 23, 2026
c289299
Assert `resource != 0` during `PermissionedRegistry.register()` (#268)
adraffy Apr 24, 2026
f52cca0
Fix `LockedMigrationReceiver` to support Unlocked Emancipated 3LD+ (#…
adraffy Apr 24, 2026
2667b37
Fix `EAC` and `PermissionedRegistry` onRoles callback event ordering …
adraffy Apr 24, 2026
42f2016
Add Missing Migration Tests (#284)
adraffy Apr 24, 2026
9e8042d
Fix transfer of expired `PermissionedRegistry` tokens (#278)
adraffy Apr 24, 2026
9f26a8f
Fix refactor PermissionedRegistry.register() permission avoidance (#281)
adraffy Apr 24, 2026
f3576f5
Fix `ResolverProfileRewriterLib` memory overflow [Again] (#283)
adraffy Apr 27, 2026
376a0c3
Fix revoke of fine-grained `PermissionedResolver` roles (#279)
adraffy Apr 27, 2026
53f1482
Remove `StorageTester` (#288)
adraffy Apr 28, 2026
602dd8e
fix: advance reverse registrar inception on direct writes
TateB Apr 29, 2026
4ee4218
fix: gate wrapper registry upgrades
TateB Apr 29, 2026
cf14658
Add configurable devnet chain ID (#291)
adraffy Apr 30, 2026
26e034c
Merge branch 'main' into fix/wrapper-registry-upgrade-gate
TateB Apr 30, 2026
db72f19
Merge pull request #290 from ensdomains/fix/wrapper-registry-upgrade-…
TateB Apr 30, 2026
2d1346f
Merge branch 'main' into fix/l2-reverse-registrar-inception
TateB Apr 30, 2026
580c60a
Merge pull request #289 from ensdomains/fix/l2-reverse-registrar-ince…
TateB Apr 30, 2026
9f0e226
chore: update verifiable factory
TateB May 1, 2026
b682ca4
Fix `PermissionedRegistry` Batch Transfer Behavior (#296)
adraffy May 4, 2026
b323dcd
Merge branch 'main' into chore/update-verifiable-factory
TateB May 6, 2026
b8c0947
Add Storage Gaps (#295)
adraffy May 6, 2026
51e88f8
Merge branch 'main' into chore/update-verifiable-factory
TateB May 6, 2026
ffe4a73
Merge pull request #294 from ensdomains/chore/update-verifiable-factory
TateB May 6, 2026
69bde1b
Update AUDIT_README.md (#300)
makoto May 7, 2026
5677359
Fix `ResolverProfileRewriterLib` memory underflow (#312)
adraffy May 19, 2026
48b3e2d
Post Audit Changes (#301)
adraffy Jul 3, 2026
b799dd1
feat: port ENSv2 deployment to .dos
JOY Aug 4, 2026
30681c7
merge: integrate legacy DOS branch
JOY Aug 4, 2026
d534826
chore: remove stale deployment manifest
JOY Aug 4, 2026
875624f
fix: make fork CI portable
JOY Aug 4, 2026
b675170
Fix phased migration test isolation
JOY Aug 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .github/codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,10 @@ flag_management:
- type: project
target: auto
threshold: 1%
informational: true
- type: patch
target: 90%
informational: true

comment:
layout: "header, diff, flags, components, files"
Expand Down
67 changes: 51 additions & 16 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
name: CI

on:
"on":
push:
branches: [main]
tags: ["v*"]
pull_request:
workflow_dispatch:

jobs:
check-types:
Expand Down Expand Up @@ -53,11 +54,17 @@ jobs:
bun run coverage:reports

- name: Upload coverage
run: cd contracts && bun run coverage:upload
run: |
if [ -z "$CC_TOKEN" ]; then
echo "CODECOV_TOKEN is not configured; skipping coverage upload."
exit 0
fi
cd contracts && bun run coverage:upload
env:
CC_TOKEN: ${{ secrets.CODECOV_TOKEN }}
CC_GIT_SERVICE: github
CC_SHA: ${{ github.sha }}
CC_SHA: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
CC_PR: ${{ github.event_name == 'pull_request' && github.event.pull_request.number || '' }}

hardhat-tests:
name: Hardhat Tests
Expand All @@ -80,14 +87,20 @@ jobs:
bun run coverage:reports

- name: Upload coverage
run: cd contracts && bun run coverage:upload
run: |
if [ -z "$CC_TOKEN" ]; then
echo "CODECOV_TOKEN is not configured; skipping coverage upload."
exit 0
fi
cd contracts && bun run coverage:upload
env:
CC_TOKEN: ${{ secrets.CODECOV_TOKEN }}
CC_GIT_SERVICE: github
CC_SHA: ${{ github.sha }}
CC_SHA: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
CC_PR: ${{ github.event_name == 'pull_request' && github.event.pull_request.number || '' }}

lint:
name: Lint
name: Lint and Format
runs-on: ubuntu-latest
steps:
# setup
Expand All @@ -97,10 +110,13 @@ jobs:
- name: Lint
run: bun --filter contracts lint

- name: Format
run: bun --filter contracts format:check

publish-docker:
name: Publish Docker Image
if: github.ref == 'refs/heads/main'
needs: [check-types, forge-tests, hardhat-tests, lint]
if: github.ref == 'refs/heads/main' || (github.event_name == 'workflow_dispatch' && github.ref_type == 'branch')
needs: [check-types, e2e-tests, forge-tests, hardhat-tests, lint]
runs-on: ubuntu-latest
permissions:
contents: read
Expand All @@ -126,24 +142,43 @@ jobs:

- name: Get branch name and short SHA for tagging
id: branch
env:
EVENT_NAME: ${{ github.event_name }}
HEAD_REF: ${{ github.head_ref }}
REF_NAME: ${{ github.ref_name }}
GITHUB_SHA_VALUE: ${{ github.sha }}
PR_HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
echo "name=${{ github.head_ref }}" >> $GITHUB_OUTPUT
SHORT_SHA=$(echo "${{ github.event.pull_request.head.sha }}" | cut -c1-7)
if [ "$EVENT_NAME" = "pull_request" ]; then
BRANCH_NAME="$HEAD_REF"
SOURCE_SHA="$PR_HEAD_SHA"
else
echo "name=${{ github.ref_name }}" >> $GITHUB_OUTPUT
SHORT_SHA=$(echo "${{ github.sha }}" | cut -c1-7)
BRANCH_NAME="$REF_NAME"
SOURCE_SHA="$GITHUB_SHA_VALUE"
fi
echo "short_sha=$SHORT_SHA" >> $GITHUB_OUTPUT

SHORT_SHA=$(printf '%s' "$SOURCE_SHA" | cut -c1-7)
DOCKER_TAG=$(printf '%s' "$BRANCH_NAME" | sed -E 's/[^A-Za-z0-9_.-]+/-/g; s/^[.-]+//; s/[.-]+$//')

if [ -z "$DOCKER_TAG" ]; then
DOCKER_TAG="branch"
fi

DOCKER_TAG=$(printf '%s' "$DOCKER_TAG" | cut -c1-128)
DOCKER_TAG_PREFIX=$(printf '%s' "$DOCKER_TAG" | cut -c1-120)

echo "tag=$DOCKER_TAG" >> "$GITHUB_OUTPUT"
echo "sha_tag=$DOCKER_TAG_PREFIX-$SHORT_SHA" >> "$GITHUB_OUTPUT"

- name: Extract metadata for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}
tags: |
type=raw,value=${{ steps.branch.outputs.name }}-${{ steps.branch.outputs.short_sha }}
type=raw,value=latest,enable=${{ github.ref_name == github.event.repository.default_branch }}
type=raw,value=${{ steps.branch.outputs.sha_tag }}
type=raw,value=${{ steps.branch.outputs.tag }},enable=${{ github.event_name == 'workflow_dispatch' && github.ref_type == 'branch' && github.ref != 'refs/heads/main' }}
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
type=ref,event=tag

- name: Build and push Docker image
Expand Down
6 changes: 1 addition & 5 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,10 @@
.env

node_modules/
.solgrid_cache/

.DS_Store

.claude/settings.local.json

.devdocs/

# for now
deployments/
!deployments/testnet-*.json
!deployments/mainnet-*.json
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,6 @@
[submodule "contracts/lib/unruggable-gateways"]
path = contracts/lib/unruggable-gateways
url = https://github.com/unruggable-labs/unruggable-gateways
[submodule "contracts/lib/solady"]
path = contracts/lib/solady
url = https://github.com/vectorized/solady
15 changes: 0 additions & 15 deletions .prettierrc.json

This file was deleted.

28 changes: 24 additions & 4 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,34 @@
"solidity.packageDefaultDependenciesContractsDirectory": "./contracts/src",
"solidity.packageDefaultDependenciesDirectory": "./contracts/lib",
"solidity.compileUsingRemoteVersion": "v0.8.25+commit.b61c2a91",
"solidity.solhintPackageDirectory": "./node_modules/solhint",
"solidity.formatter": "prettier",
"[javascript]": {
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true
},
"[javascriptreact]": {
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true
},
"[json]": {
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true
},
"[jsonc]": {
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true
},
"[solidity]": {
"editor.defaultFormatter": "JuanBlanco.solidity",
"editor.formatOnSave": false
},
"[typescript]": {
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true
},
"[typescriptreact]": {
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true
},
"editor.formatOnSave": true,
"prettier.configPath": "./.prettierrc.json",
"search.exclude": {
"**/node_modules": true,
"**/cache": true,
Expand Down
8 changes: 6 additions & 2 deletions CLAUDE.md → AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

- When running tests they should be run from the contracts/ subfolder.
- See package.json for the test commands.
- When testing for event emission never use vm.expectEmit, always use vm.recordLogs and actually check the logs properly.
- When testing for event emission, always check logs properly. Use either `vm.recordLogs` with explicit log assertions, or `vm.expectEmit` paired with an `emit Event(...)` expectation before the call under test.
- Do not use --via-ir when compiling contracts and tests. If there are Solidity stack too deep errors then fix them through code refactoring.
- When doing vm.prank and vm.expectRevert together for a call, always place the vm.expectRevert call before the vm.prank call.

Expand Down Expand Up @@ -37,4 +37,8 @@ Do what has been asked; nothing more, nothing less.
NEVER create files unless they're absolutely necessary for achieving your goal.
ALWAYS prefer editing an existing file to creating a new one.
NEVER proactively create documentation files (*.md) or README files. Only create documentation files if explicitly requested by the User.
- when writing tests that involve constants already defined in the source (e.g contracts/src/registry/libraries/RegistryRolesLib.sol) use those defined constants directly instead of hardcoding their values in the tests.
- when writing tests that involve constants already defined in the source (e.g contracts/src/registry/libraries/RegistryRolesLib.sol) use those defined constants directly instead of hardcoding their values in the tests.

# Documentation

The `contracts/docs/` folder contains operational documentation for scripts and tools. When making changes to code that is covered by documentation in `contracts/docs/`, the corresponding documentation MUST be kept up-to-date alongside the code changes.
2 changes: 0 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,6 @@ COPY package.json bun.lock ./
# Copy the package.json for each workspace.
COPY contracts/package.json ./contracts/

COPY solhint-plugins/package.json ./solhint-plugins/

# Copy patches for post script execution
#COPY /patches ./patches

Expand Down
30 changes: 30 additions & 0 deletions biome.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"$schema": "https://biomejs.dev/schemas/2.4.11/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
},
"files": {
"ignoreUnknown": true
},
"formatter": {
"enabled": true,
"indentStyle": "space",
"indentWidth": 2,
"lineEnding": "lf",
"lineWidth": 80
},
"linter": {
"enabled": false
},
"assist": {
"enabled": false
},
"javascript": {
"formatter": {
"quoteStyle": "double",
"trailingCommas": "all"
}
}
}
Loading
Loading