04 · Mechanism
Soul Mirror, and the standard that moved
A companion contract per collection that a marketplace can see, that follows the original on every sale, and that works when the founders are gone. Then the September 4 update to ERC-8217 that reopens one settled design point.
The gap
Marketplaces index Transfer events. Anything attached to an NFT either has its own transfer history and can drift away from the original, or resolves ownership at read time and is invisible on marketplaces. Every live approach picks one side.
| Approach | Live example | Follows the NFT on sale | Visible on OpenSea | Works on renounced contracts |
|---|---|---|---|---|
| Adapter8004 (ERC-8217) | Normies, Compas, 26 more | Yes, read-time ownerOf | No. Agent shows as owned by the adapter | Yes |
| Per-collection agent registry | Goblinarinos Agents, Sproto Gremlins Agents | No. Separate transferable token | Yes | Yes |
| ERC-721T on-token metadata (ERC-8048) | Reference implementation, Loopers | Yes | Traits only | Needs the contract or its metadata JSON |
| Soul Mirror | Art DeCC0s first | Yes | Yes, own collection, current holder as owner | Yes |
How the companion works
One companion per collection, deployed lazily from a factory on the first embodiment, immutable once deployed. Same token ids as the source.
- Mirrored ownership.
ownerOfreturns the source's owner live. A cached owner backsbalanceOf; permissionlesssyncperforms an internal transfer and emits the event through the standard path when they differ. - Soulbound to the NFT. User-initiated transfers and approvals revert.
locked()is true. - Metadata surface. ERC-8048
metadata(tokenId, key)with the 721T keys plusplaybook[n],official,referrer. For collections that cannot carry keys, the companion is the 721T token. - Two tiers, one contract. Starts unaffiliated.
claim()by the source's owner, or by a MOCA-attested claimant where no owner exists, sets a co-signer and treasury and flips every token to official. That is accession. - Provenance. soulweaver's EIP-712 attestation is verified on every embodiment. A community running its own soulweaver sets its own signer.
- Chains. Identity everywhere, funds only where ownership is atomic. Satellite registrations on Base and Robinhood Chain carry declarations, not wallets.
What moved on September 4
Prem Makeig (nxt3d) added two lines to ERC-8217: any NFT registered as a master NFT under it may use the label 8004A, "regardless of the registration method used". In the same post he named 8004A/721T as the label for an NFT that carries ERC-8048 agent metadata: a context key, endpoint[mcp|a2a|web|x402], and address and account keys per chain. He quoted Loopers, a 7,777-piece collection minting September 10 to 17 on Base as 8004A/721T with token-bound wallets, through Bankr.
Consequence 1
Agent NFT is a labelled category
Normies and 27 other collections already qualify. New drops launch agent-native with off-the-shelf tooling. "Embodied" must read as 8004A/721T or it is a private dialect.
Consequence 2
Soul Mirror as drafted is a second binding contract
Draft 4 has each companion write agent-binding pointing at itself. The spec wants one binding contract per chain and calls more than one "NOT RECOMMENDED". Reopened.
Consequence 3
The Codex is a context key
721T gives the agent a standard place for who it is, where its MCP server is, and which account holds funds. The package's agent.json becomes a projection of those keys.
Proposed correction. Bind through the canonical per-chain 8217 singleton, with the source NFT (the DeCC0) as master NFT, not the companion. The companion keeps the jobs nobody else does: visibility of embodied status under the current holder, the attestation, the fee split and ledger, and the 721T surface for collections that cannot carry keys. It stops being the custodian of the identity.
The fork: Path A or Path B
DeCC0s is upgradeable. MOCA could make DeCC0s 8004A/721T natively: implement metadata() on the proxy, bind each token through the singleton, point a live trait at the agent. Then the companion is needed only for renounced and immutable follower collections.
Neither is chosen. Path B removes the largest unvalidated assumption for the opening; Path A keeps the product uniform. A hybrid is possible: native for DeCC0s first, the companion factory for followers when the first one is ready.
Who can adopt
| Collection | Example | On-token metadata | Path |
|---|---|---|---|
| Upgradeable, or owned with a swappable renderer | Art DeCC0s, Normies | Native | Implement ERC-8048 in the contract, add a transfer hook that calls sync. Companion for visibility if Path A. |
| Immutable contract, metadata served by a project API | Most 2021 to 2023 drops that never froze | Via one JSON field | Add ERC-8048's metadata_contract to the served JSON, pointing at the companion. Zero on-chain change. |
| Immutable, frozen metadata, no owner | Frozen blue chips, on-chain art | On the companion only | Everything works identically. Discovery runs from the agent, the factory, or soulweaver. |
Prem Makeig, this week
The outreach was planned as "co-author a standard". It is now "we adopt 8217 and 721T; here is how a visibility companion coexists with the singleton; two technical questions". The two questions decide whether embodiment fits in one transaction:
- Does the singleton let a contract bind on behalf of the NFT owner inside
embody()? - Where is the mainnet singleton deployed, and is it the Adapter8004 that carries the 13,252 existing bindings?
Governance of the DeCC0s keys
The ProxyAdmin is owned by a single EIP-7702-delegated EOA and owner() is a plain EOA. On September 3 the position was "Safe and timelock before anything launches". On September 4 it was reversed: the keys stay as they are while ERC-8217, 8048, 8154 and 8257 are drafts, so MOCA can upgrade the proxy as they move. The posture is published openly, a key hygiene review replaces the lock, and a Safe without timelock is available whenever MOCA wants key-loss protection. Path B makes the upgrade power the mechanism itself, which strengthens the case for keeping it.