Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ DOTNS_TLD=dot
DEPLOYMENT_NETWORK=

# Optional. Address of a pre-deployed CREATE3 factory to reuse. When set,
# DeployCore adopts it instead of minting a new one, so every DotNS address is
# DeployCore adopts it instead of minting a new one, so every dotNS address is
# pinned to that factory and stays the same across chain resets. `bun run
# deploy:all` sets this automatically from the factory step; set it by hand only
# when running `bun run deploy` (the pipeline on its own).
Expand Down
1 change: 1 addition & 0 deletions .github/abi-contracts.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ IPopRules
IDotnsProtocolRegistry
IDotnsNameEscrow
IDotnsPopController
IDotnsPopControllerLegacy
IDotnsPopResolver
IDotnsPopLens
IDotnsController
Expand Down
2 changes: 1 addition & 1 deletion .github/labels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@

- name: "dotns-sdk"
color: "5319e7"
description: "DotNS SDK (UI, CLI, libraries)"
description: "dotNS SDK (UI, CLI, libraries)"

- name: "smartcontracts"
color: "e3a21a"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy-contracts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ jobs:
fi

# This CI deploy reproduces the expected address set. The canonical factory
# was deployed above, and every DotNS address is a pure function of that
# was deployed above, and every dotNS address is a pure function of that
# factory plus a fixed salt, so the freshly deployed manifest must equal the
# committed expected set. Assert that, print the expected-vs-actual table, then
# rerun the pipeline to prove the deploy is resumable: a rerun adopts every
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/issue-add-to-project.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Add Issues to DotNS Project
name: Add Issues to dotNS Project

on:
issues:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-prerelease.yml
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ jobs:
ASSET_BASE="$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/releases/download/$TAG"

cat > release-body.md << 'ENDOFBODY'
## DotNS ABI Package (Pre-release)
## dotNS ABI Package (Pre-release)

> **This is a pre-release.** ABIs may change before the stable release.

Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/publish-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ jobs:
FOUNDRY_DISABLE_NIGHTLY_WARNING: "1"
run: forge test -vv

# pallet-revive genesis, so a chain can carry DotNS from block zero rather than
# pallet-revive genesis, so a chain can carry dotNS from block zero rather than
# deploying it afterwards. Built here rather than downstream: this repo owns the
# contracts, the deploy scripts and the CREATE3 factory key that fixes every address,
# and the artifact then ships from the same commit as the ABIs beside it.
Expand Down Expand Up @@ -208,7 +208,7 @@ jobs:
ASSET_BASE="$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/releases/download/$TAG"

cat > release-body.md << 'ENDOFBODY'
## DotNS ABI Package
## dotNS ABI Package

**Contracts**
| Contract | ABI |
Expand Down Expand Up @@ -260,7 +260,7 @@ jobs:
echo ""
echo "### Genesis"
echo ""
echo "Pallet-revive genesis state, for a chain that should carry DotNS from block zero"
echo "Pallet-revive genesis state, for a chain that should carry dotNS from block zero"
echo "rather than deploying it afterwards."
echo ""
for tld in $DOTNS_TLDS; do
Expand Down
18 changes: 9 additions & 9 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Contributing to DotNS
# Contributing to dotNS

These guidelines apply to the DotNS repository ("dotns"). Contributions are welcome via issues, pull requests, reviews, and testing feedback. Protocol behaviour is documented in [README.md](./README.md) and network addresses in `deployments/<network>/<chain-id>.json`; this file is the contributor mechanics.
These guidelines apply to the dotNS repository ("dotns"). Contributions are welcome via issues, pull requests, reviews, and testing feedback. Protocol behaviour is documented in [README.md](./README.md) and network addresses in `deployments/<network>/<chain-id>.json`; this file is the contributor mechanics.

## Types of contributing

Expand Down Expand Up @@ -74,7 +74,7 @@ Before opening a pull request:

## Feature design

Treat the chain as the database. Assume no servers and no indexers. If a feature needs an offchain service to be usable, it is not a DotNS feature.
Treat the chain as the database. Assume no servers and no indexers. If a feature needs an offchain service to be usable, it is not a dotNS feature.

This has a practical implication: every feature must come with an explicit query path. A client should be able to start from a small set of known contracts and find everything it needs with a bounded number of calls. Every getter is `external view`; controllers and resolvers check authorisation on writes, never on reads; governance key rotation does not break existing read paths because consumers re-resolve their siblings through the protocol registry on every call.

Expand Down Expand Up @@ -118,12 +118,12 @@ Example query paths. Each row starts from a small set of known contracts; every

| Lookup | Path |
| --- | --- |
| Lite labelhash => full-person node | Protocol registry => PoP resolver => `fullClaim(liteLabelhash)` |
| Full-person node => lite labelhash | Protocol registry => PoP resolver => `liteLink(fullNode)` |
| Device-name labelhash => personhood-name node | Protocol registry => PoP resolver => `personhoodNodeOf(deviceLabelhash)` |
| Personhood-name node => device-name labelhash | Protocol registry => PoP resolver => `deviceLabelhashOf(personhoodNode)` |
| Node => chat key | Protocol registry => PoP resolver => `chatKey(node)` |
| Node or tokenId => registered label | Protocol registry => registrar => `labelOf(uint256(node))` |
| Base stem => gateway-reservation state | Protocol registry => PoP controller => `isReservedForClaim(baseLabel)` |
| Base stem => cross-flow reservation state | Protocol registry => PopRules => `isBaseNameReserved(baseLabel)` |
| Personhood name => gateway-reservation state | Protocol registry => PoP controller => `isReservedForClaim(label)` |
| Base name => cross-flow reservation state | Protocol registry => PopRules => `isBaseNameReserved(baseName)` |
| Node => ERC721 owner | Protocol registry => registrar => `ownerOf(uint256(node))` |
| Subnode => forward-registry owner | Protocol registry => registry => `owner(subnode)` |
| Node => forward address record | Protocol registry => forward resolver => address record |
Expand Down Expand Up @@ -191,7 +191,7 @@ Do not cache the new address in storage on the existing contract during the upgr

## Static analysis and security tooling

DotNS uses automated checks (including static analysis) on pull requests.
dotNS uses automated checks (including static analysis) on pull requests.

Important caveats:

Expand Down Expand Up @@ -284,4 +284,4 @@ forge test --no-match-path 'test/fork/**'
Be respectful and constructive.

- Harassment, abuse, or aggressive behaviour is not acceptable.
- Spam issues/PRs, or contributions unrelated to DotNS, may be closed.
- Spam issues/PRs, or contributions unrelated to dotNS, may be closed.
4 changes: 2 additions & 2 deletions DEPLOYMENTS.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# DotNS Deployments
# dotNS Deployments

Current deployment addresses and developer deployment notes for dotNS contracts.

## What this file is for

This file is the operational companion to the README. It explains how to run the local ETH-RPC adapter, how to deploy DotNS, where deployment manifests are written, and which addresses are currently live on the supported Paseo environments.
This file is the operational companion to the README. It explains how to run the local ETH-RPC adapter, how to deploy dotNS, where deployment manifests are written, and which addresses are currently live on the supported Paseo environments.

> For a short, do-this-in-order checklist (including how to target **any** Polkadot chain, not just the Paseo environments), see [`DEPLOYMENT_CHECKLIST.md`](./DEPLOYMENT_CHECKLIST.md).

Expand Down
4 changes: 2 additions & 2 deletions DEPLOYMENT_CHECKLIST.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# DotNS Deployment Checklist
# dotNS Deployment Checklist

A step-by-step, copy/paste checklist for deploying DotNS to **any** Polkadot
A step-by-step, copy/paste checklist for deploying dotNS to **any** Polkadot
chain (any PolkaVM / `revive`-backed Asset Hub-style chain that exposes an
ETH-RPC adapter).

Expand Down
8 changes: 4 additions & 4 deletions KNOWN_ISSUES.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Known issues

DotNS carries a small set of constraints worth knowing before deploying or building against it. Most stem from the current pallet-revive runtime rather than from protocol design, and collapse to a no-op once the runtime gains the corresponding capability. Each is described in full where the relevant contract is documented in the [README](./README.md#contracts); this file is the consolidated index.
dotNS carries a small set of constraints worth knowing before deploying or building against it. Most stem from the current pallet-revive runtime rather than from protocol design, and collapse to a no-op once the runtime gains the corresponding capability. Each is described in full where the relevant contract is documented in the [README](./README.md#contracts); this file is the consolidated index.

For the security and audit status of the codebase, see [SECURITY.md](./SECURITY.md).

Expand All @@ -13,9 +13,9 @@ For the security and audit status of the codebase, see [SECURITY.md](./SECURITY.

**Type:** runtime limitation.

Substrate Root cannot deploy a contract on behalf of an account it does not control, so a per-user `LabelStore` cannot be created at the moment a Pop-gateway issuance writes the name. The controller stamps a pending-claim entry instead, and the user settles it later by calling `claimLabelStore` once from their own address. Pending-claim entries carry a bounded TTL and `expirePendingClaim` is permissionless, so the slot frees itself if a user never claims.
Substrate Root cannot deploy a contract on behalf of an account it does not control, so a per-user `LabelStore` cannot be created at the moment a gateway-path issuance writes the name. The controller stamps a pending-claim entry instead, and the user settles it later by calling `claimLabelStore` from their own address. Settlement is permissionless: `settlePendingClaims` lets anyone settle a given owner's entries and pay the cost, and settlement always writes the label, so a pending name is never stranded.

**Workaround:** `claimLabelStore` (user-signed) settles the whole pending pile and deploys the store.
**Workaround:** `claimLabelStore` (user-signed) settles a bounded batch of the caller's pending claims, deploying the store on the first write; the caller calls it again while it reports `moreRemaining`.

**Resolution:** when the runtime supports root-origin contract deployment, the deferred path collapses to a no-op and issuance becomes one transaction end-to-end.

Expand All @@ -25,7 +25,7 @@ See [README → DotnsPopController](./README.md#early-testnet-quirk-labelstore-d

**Type:** current implementation.

The Pop gateway does not write a dedicated user-status mapping. It materialises the PoP flow through gateway-issued labels, PoP resolver records, and reservation queue state; user tier checks for public pricing read status from the personhood precompile and context, not from stored state.
The gateway path does not write a dedicated user-status mapping. It materialises that path through gateway-issued labels, PoP resolver records, and reservation queue state; user tier checks for public pricing read status from the personhood precompile and context, not from stored state.

**Resolution:** a dedicated status mapping could be added if a use case requires it; the current design is deliberate, not a defect.

Expand Down
Loading
Loading