Skip to content

Conversation

@politas180
Copy link

Implements p/gnoland/antisquat, a pluggable anti-squatting library for gno.land namespace management.

Closes #2727

What this PR includes

1. Working p/gnoland/antisquat package (7 files, ~500 lines + tests):

  • errors.gno — Error constants
  • types.gno — NameRecord, ReservedCategory, rateLimitEntry
  • config.gno — Config, PricingTier, DefaultConfig()
  • validation.gno — Name validation and normalization
  • antisquat.gno — Main engine with 4 AVL trees, all O(log n) operations
  • antisquat_test.gno — 20+ test functions

2. Design document (docs/design/antisquat-design.md)

Key design decisions (addressing @notJoon's review on #5074)

Concern Our approach
Pricing Correct ugnot values (1 GNOT = 1,000,000 ugnot)
Performance O(log n) for ALL operations. No global iteration.
Pruning Per-address pruning only. No lazy global pruning.
Protected names Dynamic AddReservedName/RemoveReservedName via GovDAO
Auction penalties 50% deposit burn for non-revealers (configurable)
Fee handling CalculateFee() returns fee. Package never touches coins.

Pricing tiers

Length Annual Fee ugnot
1-3 chars 1,000 GNOT 1,000,000,000
4 chars 100 GNOT 100,000,000
5 chars 50 GNOT 50,000,000
6-10 chars 10 GNOT 10,000,000
11+ chars 5 GNOT 5,000,000

Related: #2727, #2827, #4937

Core implementation with:
- AVL tree-backed storage (O(log n) all operations)
- Rate limiting with per-address pruning
- Protected names with dynamic add/remove
- Length-based pricing (correct ugnot values)
- Name lifecycle (register, renew, resolve, expire)
Tests cover:
- Name validation (format, length, edge cases)
- Registration (success, duplicates, normalization)
- Reserved names (add, remove, check, normalization)
- Rate limiting (per-address, window-based)
- Pricing (all tiers, correct ugnot values)
- Name resolution and record retrieval
- Per-address name listing
- Expiry and grace period logic
Comprehensive design for p/gnoland/antisquat addressing all review
feedback from PR gnolang#5074. Includes three-tier namespace architecture,
Phase 1 implementation details, Phase 2 auction/identity roadmap,
security analysis, and deployment plan.

Ref: gnolang#2727
@github-actions github-actions bot added 📖 documentation Improvements or additions to documentation 🧾 package/realm Tag used for new Realms or Packages. labels Feb 5, 2026
@Gno2D2 Gno2D2 added the review/triage-pending PRs opened by external contributors that are waiting for the 1st review label Feb 5, 2026
@Gno2D2
Copy link
Collaborator

Gno2D2 commented Feb 5, 2026

🛠 PR Checks Summary

🔴 Pending initial approval by a review team member, or review from tech-staff

Manual Checks (for Reviewers):
  • IGNORE the bot requirements for this PR (force green CI check)
  • The pull request description provides enough details
Read More

🤖 This bot helps streamline PR reviews by verifying automated checks and providing guidance for contributors and reviewers.

✅ Automated Checks (for Contributors):

🟢 Maintainers must be able to edit this pull request (more info)
🔴 Pending initial approval by a review team member, or review from tech-staff

☑️ Contributor Actions:
  1. Fix any issues flagged by automated checks.
  2. Follow the Contributor Checklist to ensure your PR is ready for review.
    • Add new tests, or document why they are unnecessary.
    • Provide clear examples/screenshots, if necessary.
    • Update documentation, if required.
    • Ensure no breaking changes, or include BREAKING CHANGE notes.
    • Link related issues/PRs, where applicable.
☑️ Reviewer Actions:
  1. Complete manual checks for the PR, including the guidelines and additional checks if applicable.
📚 Resources:
Debug
Automated Checks
Maintainers must be able to edit this pull request (more info)

If

🟢 Condition met
└── 🟢 And
    ├── 🟢 The base branch matches this pattern: ^master$
    └── 🟢 The pull request was created from a fork (head branch repo: politas180/gno)

Then

🟢 Requirement satisfied
└── 🟢 Maintainer can modify this pull request

Pending initial approval by a review team member, or review from tech-staff

If

🟢 Condition met
└── 🟢 And
    ├── 🟢 The base branch matches this pattern: ^master$
    └── 🟢 Not (🔴 Pull request author is a member of the team: tech-staff)

Then

🔴 Requirement not satisfied
└── 🔴 If
    ├── 🔴 Condition
    │   └── 🔴 Or
    │       ├── 🔴 At least one of these user(s) reviewed the pull request: [jefft0 notJoon omarsy MikaelVallenet] (with state "APPROVED")
    │       ├── 🔴 At least 1 user(s) of the team tech-staff reviewed pull request
    │       └── 🔴 This pull request is a draft
    └── 🔴 Else
        └── 🔴 And
            ├── 🟢 This label is applied to pull request: review/triage-pending
            └── 🔴 On no pull request

Manual Checks
**IGNORE** the bot requirements for this PR (force green CI check)

If

🟢 Condition met
└── 🟢 On every pull request

Can be checked by

  • Any user with comment edit permission
The pull request description provides enough details

If

🟢 Condition met
└── 🟢 And
    ├── 🟢 Not (🔴 Pull request author is a member of the team: core-contributors)
    └── 🟢 Not (🔴 Pull request author is user: dependabot[bot])

Can be checked by

  • team core-contributors

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📖 documentation Improvements or additions to documentation 🧾 package/realm Tag used for new Realms or Packages. review/triage-pending PRs opened by external contributors that are waiting for the 1st review

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

Anti-squatting System for gno.land namespaces

2 participants