Contract Reference
Deployed Contract
Network |
Address |
Deploy Block |
Etherscan |
|---|---|---|---|
Base mainnet |
TBD |
TBD |
TBD |
Sepolia testnet |
|
10575629 |
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 |
|---|---|---|
|
|
Unique AnchorRegistry identifier, e.g. |
|
|
Ethereum address of the wallet that submitted the |
|
|
Integer index into the |
|
|
Human-readable AR-ID. Identical to |
|
|
Short subtitle or descriptor for the artifact. |
|
|
Full title of the artifact. |
|
|
Human-readable author or organization name. |
|
|
Content hash (SHA-256 hex or IPFS CID) proving the artifact’s content at registration time. |
|
|
AR-ID of the parent artifact. Empty string |
|
|
Identifier for the artifact tree this anchor belongs to. Indexed. |
|
|
Human-readable tree identifier. Identical to |
|
|
Ownership proof: |
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 |
|---|---|---|---|
0 |
|
Content |
|
1 |
|
Content |
|
2 |
|
Content |
|
3 |
|
Content |
|
4 |
|
Content |
|
5 |
|
Content |
|
6 |
|
Content |
|
7 |
|
Content |
|
8 |
|
Content |
|
9 |
|
Content |
|
10 |
|
Content |
|
11 |
|
Content |
|
12 |
|
Lifecycle |
|
13 |
|
Transaction |
|
14 |
|
Gated |
|
15 |
|
Gated |
|
16 |
|
Gated |
|
17 |
|
Self-service |
(registered via dedicated |
18 |
|
Self-service |
|
19 |
|
Review |
|
20 |
|
Review |
|
21 |
|
Review |
|
22 |
|
Billing |
|
23 |
|
Catch-all |
|