FACTOS
Demonstration environment. This record describes synthetic instruments on Ethereum Sepolia. It does not represent a real credit right or a real person. The backing claim below carries a synthetic payload: it proves the registry mechanics, not the content of any reserve.

REGISTRY-STATE REFERENCE

FACTOS-PRS-8320-CANON-2026-10-13

The ERC-8226 × ERC-8320 composition, run against the canonical ERC-8226 mandate registry: the agent acts only while a backing claim is live, and when the claim is suspended the action stops, even though the mandate itself is still valid. The two standards, from the same authors, composed on one asset, with neither contract modified.

Why "canonical" matters here. While testing we found that the ERC-8226 address Brickken's docs recommended did not match the published spec: its canExecute returned a single bool instead of the specified (bool, reason), and recordExecution omitted the asset parameter. We raised it in the standard's thread. The author confirmed the documented addresses were stale and published the current ones. This record is the composition re-run against that canonical registry, which does match the spec: canExecute returns (bool, reason) and recordExecution carries asset.

Version 1 · 13 October 2026 Ethereum Sepolia · test network Canonical RAMS Synthetic payload

Two parties, as the standard separates them

ERC-8320 says the service-provider roster is the grant table. We wired it that way. FACTOS operates the registry: it registers the asset, keeps the grant table, and runs the maker-checker lifecycle as validator and activator. A separate key authors the backing claim. In this demo the auditor role is played by a test key; the design requires a key distinct from the validator's, which in real use would belong to an independent third party, the one that reviews the reserves or the loanbook and signs. In Colombia that party would be a receivables verification agent; in the United States it is often a loan-review firm. FACTOS does not author the backing, and never authors valuation or risk.

Registry (ERC-8320)0x9b8aAA5A3676227A642cC66fcdD20b3f511Ec45f · reference implementation of the authors, unmodified
Anchored asset0xf96eFA6D9b83181629d84579e36bE4E130477e69 · the same asset of the mandate and the anchor of the registry
Mandate registry (ERC-8226)0x7944E36415086c0ef50d59570826b79e1da8C349 · Brickken, canonical, unmodified · matches the published spec
FACTOS (operator)0x9016EfF3AC70DDaeDC15ac8fb3d839f2d3b965a5 · admin, validator, activator
Auditor (backing author)0xe970c7d30Db8C3F24fb2b3CD311adC91aa123d01 · a test key standing in for the auditor; the registry requires the validator to differ from the author

What happened on chain

Backing goes livethe auditor proposes, FACTOS validates and activates · claim ACTIVE
Agent acts0xec74d7ec…d76045f4 · mandate OK, registry state current, backing live · executes
FACTOS suspends the backing0xbc2ec959…e056ae7c · claim ACTIVE → VALID
Agent retriesthe mandate still answers (true, OK) on the canonical registry, yet the asset reverts NoActiveBackingClaim(7) (captured as an eth_call, no gas)

The agent's mandate never expired and was never revoked. The action stopped because the backing that a separate party had attested was withdrawn from the ERC-8320 registry. That is the join between the two standards: an ERC-8226 execution gated on ERC-8320 published state, with neither contract modified.

Check it without asking us

Use an archive endpoint. Reads at a past block need an archive node; a pruned public node answers state at block … is pruned. Any archive endpoint works; https://sepolia.gateway.tenderly.co is one.
# The backing claim is no longer active after the suspend: the set is empty.
cast call 0x9b8aAA5A3676227A642cC66fcdD20b3f511Ec45f \
  "getActiveClaims(bytes32,uint8)((bytes32,uint8,bytes32,bytes32,uint64,uint64,uint64,uint8,bytes32[],bytes32,address,string)[])" \
  0xe2a2312f5fb60f25c13b58c6bbf83d21c20f70115ef49c97ed380b8ee98360d3 5 --rpc-url <archive>
# []

# The mandate on the canonical ERC-8226 registry is still live: (true, OK=0).
cast call 0x7944E36415086c0ef50d59570826b79e1da8C349 \
  "canExecute(address,address,address,bytes32,uint256)(bool,uint8)" \
  0xABa7661E0bF6740f3811BFEbb6D082150513Dd6b 0x06a1cb40BeDb8f8462cF9C5E8aa84bad1Fa36929 \
  0xf96eFA6D9b83181629d84579e36bE4E130477e69 \
  $(cast call 0xf96eFA6D9b83181629d84579e36bE4E130477e69 "actionFor(uint256)(bytes32)" 7 --rpc-url <archive>) \
  100000000000000000000 --rpc-url <archive>
# true
# 0   the authority is intact; only the backing was withdrawn

What this record does not claim

The backing claim carries a synthetic payload. Its contentHash is the hash of a label, and its uri does not resolve to a document. This record demonstrates the mechanics of the registry and the composition, not the content of any reserve. A production backing claim would anchor the hash of a real evidence file and a canonical schema.

Scope of what is published. Synthetic instruments on a test network. FACTOS operates the registry; the backing is authored by a separate key, a test key in this demo, which in real use would belong to an independent third party. What is published is a measured fact, never a recommendation. It does not certify that a right is valid or enforceable in any given forum, nor the authenticity of the identity binding of the parties.