Contract Reference

Deployed Contract

Network

Address

Deploy Block

Etherscan

Base mainnet

TBD

TBD

TBD

Sepolia testnet

0xE772B7f4eC4a92109b8b892Add205ede7c850DBa

10575629

View on Etherscan

Anchored Event

The Anchored event is emitted once per registration. It is the sole source of truth for reconstructing the registry from on-chain data.

event Anchored(
    string  indexed arId,           // AR-ID (keccak256 indexed)
    address indexed registrant,     // wallet that called anchor()
    uint8           artifactType,   // ArtifactType enum value (0–23)
    string          arIdPlain,      // AR-ID plain text (not indexed)
    string          descriptor,     // short descriptor / subtitle
    string          title,          // artifact title
    string          author,         // human-readable author / org name
    string          manifestHash,   // content hash (SHA-256 or IPFS CID)
    string          parentArId,     // parent AR-ID ("" if root)
    string  indexed treeId,         // tree identifier (keccak256 indexed)
    string          treeIdPlain,    // tree identifier plain text
    bytes32         tokenCommitment // keccak256(K || arId), bytes32(0) for governance
);

Field descriptions:

Field

Type

Description

arId

string

Unique AnchorRegistry identifier, e.g. AR-2026-x1llnO1. Indexed — stored as keccak256 in logs.

registrant

address

Ethereum address of the wallet that submitted the anchor() transaction.

artifactType

uint8

Integer index into the ArtifactType enum (0–22). See the type taxonomy below.

arIdPlain

string

Human-readable AR-ID. Identical to arId but not indexed — readable from log data.

descriptor

string

Short subtitle or descriptor for the artifact.

title

string

Full title of the artifact.

author

string

Human-readable author or organization name.

manifestHash

string

Content hash (SHA-256 hex or IPFS CID) proving the artifact’s content at registration time.

parentArId

string

AR-ID of the parent artifact. Empty string "" if this is a root anchor.

treeId

string

Identifier for the artifact tree this anchor belongs to. Indexed.

treeIdPlain

string

Human-readable tree identifier. Identical to treeId but not indexed.

tokenCommitment

bytes32

Ownership proof: keccak256(K || arId) for user-initiated anchors, bytes32(0) for governance anchors. K is the ownership token known only to the registrant.

Sealed Event

The Sealed event is emitted when a tree root is sealed via registerSeal. A sealed tree is authentic and complete — no new anchors may be appended. AR governance (VOID, REVIEW, AFFIRMED) can still target anchors within sealed trees.

event Sealed(
    string  indexed arId,            // root AR-ID being sealed
    string          newTreeRoot,      // optional continuation pointer
    string          reason,           // human-readable reason
    uint256         sealedAtBlock,    // block number of seal
    bytes32         tokenCommitment   // H(K || C_seal) — always non-zero
);

READ_ABI

The minimal ABI used by anchorregistry to read from the contract. This is the only ABI needed — the package never writes to the contract.

READ_ABI = [
    # Anchored event
    {
        "anonymous": False,
        "name": "Anchored",
        "type": "event",
        "inputs": [
            {"indexed": True,  "internalType": "string",            "name": "arId",         "type": "string"},
            {"indexed": True,  "internalType": "address",           "name": "registrant",   "type": "address"},
            {"indexed": False, "internalType": "enum ArtifactType", "name": "artifactType", "type": "uint8"},
            {"indexed": False, "internalType": "string",            "name": "arIdPlain",    "type": "string"},
            {"indexed": False, "internalType": "string",            "name": "descriptor",   "type": "string"},
            {"indexed": False, "internalType": "string",            "name": "title",        "type": "string"},
            {"indexed": False, "internalType": "string",            "name": "author",       "type": "string"},
            {"indexed": False, "internalType": "string",            "name": "manifestHash", "type": "string"},
            {"indexed": False, "internalType": "string",            "name": "parentArId",   "type": "string"},
            {"indexed": True,  "internalType": "string",            "name": "treeId",       "type": "string"},
            {"indexed": False, "internalType": "string",            "name": "treeIdPlain",  "type": "string"},
            {"indexed": False, "internalType": "bytes32",           "name": "tokenCommitment", "type": "bytes32"},
        ],
    },
    # Sealed event
    {
        "anonymous": False,
        "name": "Sealed",
        "type": "event",
        "inputs": [
            {"indexed": True,  "internalType": "string",  "name": "arId",            "type": "string"},
            {"indexed": False, "internalType": "string",  "name": "newTreeRoot",      "type": "string"},
            {"indexed": False, "internalType": "string",  "name": "reason",           "type": "string"},
            {"indexed": False, "internalType": "uint256", "name": "sealedAtBlock",    "type": "uint256"},
            {"indexed": False, "internalType": "bytes32", "name": "tokenCommitment",  "type": "bytes32"},
        ],
    },
    # isSealed(arId) → bool
    {
        "type": "function",
        "name": "isSealed",
        "stateMutability": "view",
        "inputs":  [{"internalType": "string", "name": "", "type": "string"}],
        "outputs": [{"internalType": "bool",   "name": "", "type": "bool"}],
    },
    # sealContinuation(arId) → string
    {
        "type": "function",
        "name": "sealContinuation",
        "stateMutability": "view",
        "inputs":  [{"internalType": "string", "name": "", "type": "string"}],
        "outputs": [{"internalType": "string", "name": "", "type": "string"}],
    },
    # registered(arId) → bool
    {
        "type": "function",
        "name": "registered",
        "stateMutability": "view",
        "inputs":  [{"internalType": "string", "name": "", "type": "string"}],
        "outputs": [{"internalType": "bool",   "name": "", "type": "bool"}],
    },
    # getAnchorData(arId) → bytes
    {
        "type": "function",
        "name": "getAnchorData",
        "stateMutability": "view",
        "inputs":  [{"internalType": "string", "name": "arId", "type": "string"}],
        "outputs": [{"internalType": "bytes",  "name": "",     "type": "bytes"}],
    },
    # anchorTypes(arId) → uint8
    {
        "type": "function",
        "name": "anchorTypes",
        "stateMutability": "view",
        "inputs":  [{"internalType": "string",  "name": "",  "type": "string"}],
        "outputs": [{"internalType": "uint8",   "name": "",  "type": "uint8"}],
    },
]

Artifact Types

Twenty-four artifact types in eight logical groups. The artifact_type_name field in every record contains the string name. The artifactType field in the raw event contains the integer index.

Index

Name

Category

Type-specific data fields

0

CODE

Content

git_hash, license, language, version, url

1

RESEARCH

Content

doi, institution, co_authors, url

2

DATA

Content

data_version, format, row_count, schema_url, url

3

MODEL

Content

model_version, architecture, parameters, training_dataset, url

4

AGENT

Content

agent_version, runtime, capabilities, url

5

MEDIA

Content

media_type, platform, format, duration, isrc, url

6

TEXT

Content

text_type, isbn, publisher, language, url

7

POST

Content

platform, post_id, post_date, url

8

ONCHAIN

Content

chain_id, asset_type, contract_address, tx_hash, token_id, block_number, url

9

REPORT

Content

report_type, client, engagement, version, authors, institution, url, file_manifest_hash

10

NOTE

Content

note_type, date, participants, url, file_manifest_hash

11

WEBSITE

Content

url, platform, description

12

EVENT

Lifecycle

executor, event_type, event_date, location, orchestrator, url

13

RECEIPT

Transaction

receipt_type, merchant, amount, currency, order_id, platform, url, file_manifest_hash

14

LEGAL

Gated

doc_type, jurisdiction, parties, effective_date, url

15

ENTITY

Gated

entity_type, entity_domain, verification_method, verification_proof, canonical_url, document_hash

16

PROOF

Gated

proof_type, proof_system, circuit_id, vkey_hash, audit_firm, audit_scope, verifier_url, report_url, proof_hash

17

SEAL

Self-service

(registered via dedicated registerSeal function, not registerContent )

18

RETRACTION

Self-service

reason, replaced_by

19

REVIEW

Review

review_type, evidence_url

20

VOID

Review

review_ar_id, finding_url, evidence

21

AFFIRMED

Review

affirmed_by, finding_url

22

ACCOUNT

Billing

capacity (uint256)

23

OTHER

Catch-all

kind, platform, url, value, file_manifest_hash