⚠️ Alpha · testnets only. ChainRender is in active alpha and deployed on testnets only — Ethereum Sepolia, the Robinhood Chain Testnet, and the Circle Arc Testnet — not on any mainnet. Contracts, addresses, and APIs may change. Do not use with real funds or production assets.
Reference

Reference: Every First-Party Resolver Kind

ChainRender ships 66 first-party resolver kinds — 61 resolve on-chain during the render eth_call, 5 reach an off-chain edge and therefore declare CLIENT_FETCH (grade ≤ C by Invariant R2). Each kind's details follow the table, in the same order. This page is generated from chainc/resolverkinds.ts, the same list vocabulary().resolverKinds, the builder and the MCP server's chainrender_search_kinds / chainrender_describe_kind read, so it cannot drift from them. For how resolvers work and how to write your own, see Resolvers and Writing a Resolver.

Encoding args. A slot's arg is the 0x-hex bytes the resolver receives. Encode them exactly as the kind says: abi.encode(...) of the listed args by default, or the raw concatenation when the kind is marked packed (for example ensName takes exactly the 20 address bytes and reverts bad args on a 32-byte abi.encode). test/resolverkind-args-drift.ts encodes the ENS kinds from these descriptors and resolves them against the real contracts.

Grades. Data edge on-chain means the read is part of the render eth_call; the app's grade still depends on everything else it declares (see The Trust Grade). A kind whose meaning is delegated to a mutable authority says so in its summary and grades ≤ C through the dependency axis.

All kinds

Kind Data edge Capability Args
uniV3Price on-chain READ_CHAIN pool, dec0, dec1, invert
uniV4Price on-chain READ_CHAIN stateView, poolId, dec0, dec1, invert
uniV3Position on-chain READ_CHAIN positionManager, tokenId, field
aavePosition on-chain READ_CHAIN pool, user, field
uniQuote on-chain READ_CHAIN quoter, tokenIn, tokenOut, amountIn, fee, outDecimals, field
approvalState on-chain READ_CHAIN token, owner, spender, needed, field
curvePool on-chain READ_CHAIN pool, i, j, dx, outDecimals, field
portfolio on-chain READ_CHAIN reads, outDecimals, field
cowOrder on-chain READ_CHAIN composableCow, owner, handler, salt, staticInput, offchainInput, proof, sellDec, buyDec, field
cowTwap on-chain READ_CHAIN staticInput, sellDec, buyDec, field
cowIntent on-chain READ_CHAIN fullAppData, expectedAppData, field
vault4626 on-chain READ_CHAIN vault, assetDec, shareDec, field
vault7540 on-chain READ_CHAIN vault, controller, requestId, assetDec, shareDec, field
oracle-feed on-chain READ_CHAIN feed, fracDigits, maxStaleSeconds
credential on-chain READ_CHAIN statementId, a, b, c, pub
credential-bound on-chain READ_CHAIN statementId, a, b, c, pub
ensText on-chain READ_CHAIN node, key
ensAddr on-chain READ_CHAIN node (packed)
ensName on-chain READ_CHAIN who (packed)
ensV2 on-chain READ_CHAIN resolver, inner, isText
ensApp on-chain READ_CHAIN node
ensNameChain on-chain READ_CHAIN who, coinType
identityVerified on-chain READ_CHAIN subject, schema, uid
identityClaim on-chain READ_CHAIN uid, schema, subject
por-coverage on-chain READ_CHAIN reserveFeed, token, fracDigits, maxStaleSeconds
por-reserves on-chain READ_CHAIN reserveFeed, token, fracDigits, maxStaleSeconds
por-supply on-chain READ_CHAIN reserveFeed, token, fracDigits, maxStaleSeconds
erc3643-status on-chain READ_CHAIN token, holder
erc3643-verified on-chain READ_CHAIN token, holder
erc3643-frozen on-chain READ_CHAIN token, holder
erc3643-can-transfer on-chain READ_CHAIN token, from, to, amount
cred-status on-chain READ_CHAIN registry, credentialId, expectedIssuer
cred-valid on-chain READ_CHAIN registry, credentialId, expectedIssuer
efp-follows on-chain READ_CHAIN listRecords, slot, target
efp-state on-chain READ_CHAIN listRecords, slot, target
efp-tag on-chain READ_CHAIN listRecords, slot, target, tag
efp-list-size on-chain READ_CHAIN listRecords, slot
rep-vouch on-chain READ_CHAIN registry, attester, subject, topic
rep-tally on-chain READ_CHAIN registry, attesters, subject, topic
rep-aggregate on-chain READ_CHAIN subject, sources, ctxs
ccip-supported on-chain READ_CHAIN router, destSelector
ccip-fee on-chain READ_CHAIN router, destSelector, feeToken, receiver, gasLimit, feeDecimals, fracDigits
sig-1271 on-chain READ_CHAIN account, hash, signature
stealth-meta on-chain READ_CHAIN registry, registrant, schemeId
shielded-root on-chain READ_CHAIN pool, callData
shielded-set on-chain READ_CHAIN pool, callData
shielded-nullifier on-chain READ_CHAIN pool, callData
msg-712 off-chain CLIENT_FETCH typedData
poster-feed off-chain READ_CHAIN + CLIENT_FETCH poster, tagTopic
stealth-scan off-chain READ_CHAIN + CLIENT_FETCH announcer, schemeId
clip-count on-chain READ_CHAIN registry, depHash
clip-slice on-chain READ_CHAIN registry, depHash, index
settle-status on-chain READ_CHAIN agreement, assetDecimals, fracDigits
settle-principal on-chain READ_CHAIN agreement, assetDecimals, fracDigits
settle-repaid on-chain READ_CHAIN agreement, assetDecimals, fracDigits
trust-facets on-chain READ_CHAIN subject
door-knocks on-chain READ_CHAIN registry, target, assetDecimals, fracDigits
door-feed off-chain READ_CHAIN + CLIENT_FETCH registry, target
proof-setup on-chain READ_CHAIN registry, id
artifact-verify off-chain CLIENT_FETCH expectedSha256, uri
compute-credit on-chain READ_CHAIN vault, playKey, assetDecimals, fracDigits
xchain-balance on-chain READ_CHAIN token, holder, maxAgeSeconds, fracDigits
xchain-snapshot-balance on-chain READ_CHAIN token, holder, maxAgeSeconds, fracDigits
xchain-adopted-balance on-chain READ_CHAIN claimId, holder, maxAgeSeconds, fracDigits
swap-lock on-chain READ_CHAIN id, maxAgeSeconds, fracDigits
scope-disclosure on-chain READ_CHAIN subject

Details

uniV3Price

Live Uniswap V3 pool spot price from slot0().sqrtPriceX96 (READ_CHAIN); fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x756e695633507269636500000000000000000000000000000000000000000000

Arg Type Note
pool address the V3 pool
dec0 uint8
dec1 uint8
invert bool

uniV4Price

Live Uniswap V4 pool spot price via StateView.getSlot0(poolId) (READ_CHAIN); additive to V3; fails closed.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x756e695634507269636500000000000000000000000000000000000000000000

Arg Type Note
stateView address the V4 StateView lens
poolId bytes32
dec0 uint8
dec1 uint8
invert bool

uniV3Position

Render a Uniswap V3 LP position (pair, fee, tick range, liquidity, fees owed) via positions(tokenId); fails closed.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x756e695633506f736974696f6e00000000000000000000000000000000000000

Arg Type Note
positionManager address
tokenId uint256
field uint8 0=summary 1=liquidity 2/3=feesOwed0/1 5/6=tickLower/Upper

aavePosition

Render an Aave V3 lending position (collateral, debt, borrowing power, health factor) via getUserAccountData(user); fails closed.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x61617665506f736974696f6e0000000000000000000000000000000000000000

Arg Type Note
pool address
user address
field uint8 0=summary 1=collateralUsd 2=debtUsd 3=availableUsd 4=healthFactor 5=liqThresholdPct 6=ltvPct

uniQuote

Render a Uniswap V3 swap quote (expected amountOut) via QuoterV2 before signing; ESTIMATE only (swap must carry min-out); fails closed.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x756e6951756f7465000000000000000000000000000000000000000000000000

Arg Type Note
quoter address
tokenIn address
tokenOut address
amountIn uint256
fee uint24
outDecimals uint8
field uint8 0=formatted amountOut 1=raw 2=gasEstimate

approvalState

Render whether an owner approved a spender for enough of a token (Approve vs Swap gating) via ERC-20 allowance; fails closed.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x617070726f76616c537461746500000000000000000000000000000000000000

Arg Type Note
token address
owner address
spender address
needed uint256
field uint8 0=word 1=raw allowance 2=bool covered

curvePool

Render Curve pool state (get_dy quote / balances) broadening AMM coverage beyond Uniswap; get_dy is an ESTIMATE; fails closed.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x6375727665506f6f6c0000000000000000000000000000000000000000000000

Arg Type Note
pool address
i int128
j int128
dx uint256
outDecimals uint8
field uint8 0=get_dy formatted 1=raw 2=balance(i) 3=coin(i)

portfolio

Render an aggregated TOTAL summing many on-chain numeric reads (complements multiread which joins); fail-closed per read (partial total).

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x706f7274666f6c696f0000000000000000000000000000000000000000000000

Arg Type Note
reads tuple(address target,bytes callData,uint8 mulScale,uint8 divScale)[]
outDecimals uint8
field uint8 0=formatted total 1=raw 2=count succeeded

cowOrder

Render the LIVE discrete order a CoW Protocol conditional/programmatic order (Composable CoW) would emit THIS block via getTradeableOrderWithSignature (READ_CHAIN); works for every order type (TWAP/StopLoss/GoodAfterTime/PerpetualStableSwap/TradeAboveThreshold); a revert means no valid order this block → fails closed to "not active".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x636f774f72646572000000000000000000000000000000000000000000000000

Arg Type Note
composableCow address the deployed ComposableCoW (caller-supplied; NEVER hardcoded)
owner address the order owner (smart-contract wallet / Safe)
handler address the conditional-order handler (e.g. the TWAP handler)
salt bytes32
staticInput bytes the handler's static params (the order definition)
offchainInput bytes optional off-chain input (empty for most)
proof bytes32[] merkle proof (empty for a single create()d order)
sellDec uint8
buyDec uint8
field uint8 0=status 1=sellAmount 2=buyAmount 3=validTo(unix) 4=partiallyFillable

First intent-DeFi resolver (doc 163). getTradeableOrderWithSignature is view but may revert BY DESIGN when no order is valid this block — the fail-closed floor renders that honestly. A live 'ready this block' badge / countdown is a ⚙ client enhancement, not this Grade-A read.

cowTwap

Decode a CoW TWAP order staticInput + block.timestamp into schedule progress — part X/N, next-slice countdown, per-part sell/min-limit, status pending/active/gap/finished (READ_CHAIN, pure); fails closed to "-".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x636f775477617000000000000000000000000000000000000000000000000000

Arg Type Note
staticInput bytes the TWAP.Data abi-encoded blob (order definition; caller-supplied)
sellDec uint8
buyDec uint8
field uint8 0=summary 1=partSellAmount 2=minPartLimit 3=currentPart(1-based) 4=totalParts 5=secondsToNext 6=status 7=interval(t)

Renders the schedule the staticInput ENCODES, projected against block.timestamp (deterministic, Grade A). It does NOT assert the order is registered/tradeable on ComposableCoW — pair with the cowOrder kind for that live proof.

cowIntent

Verify a presented CoW app-data document matches the order appData it committed to (keccak256(fullAppData), per the CoW app-data SDK) ON CHAIN (READ_CHAIN) — "verified" / "app-data mismatch"; the anti-phishing "verify what you sign" integrity anchor; fails closed.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x636f77496e74656e740000000000000000000000000000000000000000000000

Arg Type Note
fullAppData bytes the exact stringified app-data document bytes shown to the user (carries metadata + pre/post CoW Hooks)
expectedAppData bytes32 the order's on-chain appData (GPv2Order word 6; e.g. via cowOrder)
field uint8 0=verdict (verified/app-data mismatch) 1=computed appData hash (0x hex)

Integrity ANCHOR only (Grade A keccak): proves the document you are shown is the one the order committed to. The human-readable decode of the hooks {target,callData,gasLimit} into a step plan is a CLIENT layer over these hash-verified bytes (on-chain JSON parsing is impractical) — the msg-712/sig-1271 split. Pair with cowOrder for the full card.

vault4626

Render an ERC-4626 tokenized vault: NAV per share (convertToAssets of 1 share), total assets, share supply, shares-per-asset (READ_CHAIN); fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x7661756c74343632360000000000000000000000000000000000000000000000

Arg Type Note
vault address the ERC-4626 vault (caller-supplied; blesses no vault)
assetDec uint8
shareDec uint8
field uint8 0=NAV/share(asset units) 1=totalAssets 2=totalSupply(shares) 3=shares per 1 asset

convertToAssets/totalAssets are the vault's OWN valuation — a faithful render of what the vault reports, not a claim it is correct; the trust boundary is the vault's pricing logic. Composes with por-coverage + oracle-feed for a full vault panel.

vault7540

Render an ERC-7540 async vault request queue for a controller: pending/claimable redeem (shares) and pending/claimable deposit (assets) (READ_CHAIN); fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x7661756c74373534300000000000000000000000000000000000000000000000

Arg Type Note
vault address
controller address
requestId uint256 0 for the common single-slot flow
assetDec uint8
shareDec uint8
field uint8 0=pending redeem(shares) 1=claimable redeem(shares) 2=pending deposit(assets) 3=claimable deposit(assets)

The redemption/deposit queue tokenized-treasury products hide behind a dashboard, read trustlessly. Built for RWA/T-bill funds (async request/settle).

oracle-feed

Read an AggregatorV3-shaped oracle feed as on-chain state (READ_CHAIN); rendered with provenance (feed, round) and freshness (age, STALE past a caller bound); fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x6f7261636c652d66656564000000000000000000000000000000000000000000

Arg Type Note
feed address the AggregatorV3-shaped feed (caller-supplied; ChainRender blesses no oracle)
fracDigits uint8 display fractional digits
maxStaleSeconds uint256 0 = show age but never assert stale; >0 = flag STALE past this age

credential

Verify a zero-knowledge proof ON CHAIN (READ_CHAIN) and render only the proven statement, never the witness. Fails closed to "Unverified".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x63726564656e7469616c00000000000000000000000000000000000000000000

Arg Type Note
statementId bytes32 indexes the immutable StatementRegistry
a uint256[2] Groth16 proof point A
b uint256[2][2] Groth16 proof point B (EIP-197 order)
c uint256[2] Groth16 proof point C
pub uint256[] public inputs; for member-of-set, pub[0] is the set root

Statements: member-of-set

member-of-set: prove membership of a set (public root) revealing nothing about which member.

credential-bound

Verify a BOUND, single-use credential proof (READ_CHAIN): non-transferable (bound to its holder) and spendable once. Verifying is READ_CHAIN; consuming (spending the nullifier) is a separate WRITE_CHAIN action on the ownerless NullifierRegistry.

Data edge: on-chain · Capability: READ_CHAIN · Consume step: WRITE_CHAIN · Args encoding: abi.encode

Kind constant: 0x63726564656e7469616c2d626f756e6400000000000000000000000000000000

Arg Type Note
statementId bytes32
a uint256[2]
b uint256[2][2]
c uint256[2]
pub uint256[4] [nullifierHash, root, externalNullifier, signalHash]

Statements: member-bound

member-bound: consuming spends the nullifier; a copied proof cannot be replayed (bound to its holder).

ensText

Read an ENS text record (avatar, url, com.twitter, …) for a namehash node, live on-chain.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x656e735465787400000000000000000000000000000000000000000000000000

Arg Type Note
node bytes32 ENS namehash
key string text record key

ensAddr

Resolve an ENS namehash node to its address, live on-chain.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: packed — the raw bytes, concatenated (abi.encodePacked)

Kind constant: 0x656e734164647200000000000000000000000000000000000000000000000000

Arg Type Note
node bytes32 ENS namehash; exactly 32 raw bytes (the resolver checks args.length == 32)

ensName

Verified primary ENS name for an address, live on-chain: reads .addr.reverse, then forward-resolves the name and requires it to point back to the address; mismatch or no record falls back.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: packed — the raw bytes, concatenated (abi.encodePacked)

Kind constant: 0x656e734e616d6500000000000000000000000000000000000000000000000000

Arg Type Note
who address the account; exactly 20 raw bytes, NOT a 32-byte abi.encode and NOT a namehash (the resolver derives the reverse node itself and checks args.length == 20)

ensV2

ENSv2 record read live on-chain from the name's resolver (discovered once via the Universal Resolver at seed time): one lean staticcall that fits the render stipend. A CCIP-Read (EIP-3668 OffchainLookup) record renders "off-chain (CCIP)" — the floor detects the boundary but does not cross it; no resolver / empty → "—"; other revert → "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x656e735632000000000000000000000000000000000000000000000000000000

Arg Type Note
resolver address the name's resolver, discovered off-chain via the ENSv2 Universal Resolver at seed time (not hardcoded)
inner bytes the record call to staticcall on it: addr(node) = 0x3b3b57de ‖ node, or text(node,key) = 0x59d1d43c ‖ abi.encode(node,key)
isText bool true when inner returns a string (text); false for an address (addr)

Following a CCIP-Read record is a client hook (CLIENT_FETCH → ≤ C by R2) and is NOT what this kind does; this kind only reads on-chain and marks the boundary. Resolver discovery is a seed-time step, so a name that later changes resolver keeps rendering from the old one until re-seeded.

ensApp

Read a name app-manifest text key (chainrender.app) and render the app reference it points to (READ_CHAIN); empty -> "-"; ENS as the naming layer for ChainRender apps (dogfood).

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x656e734170700000000000000000000000000000000000000000000000000000

Arg Type Note
node bytes32 ENS namehash; reads text(node, "chainrender.app")

ensNameChain

ENSIP-19 multichain verified primary name: the name an address resolves to ON A GIVEN CHAIN (per-coinType reverse), forward-verified via addr(node,coinType)==who (READ_CHAIN); reverts to slot fallback on mismatch.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x656e734e616d65436861696e0000000000000000000000000000000000000000

Arg Type Note
who address
coinType uint256 ENSIP-11: 0x80000000 | chainId (mainnet=60, default-EVM=0x80000000); picks the reverse namespace label

Chain-aware identity. Correct + self-verifying, but renders a live name only where an ENSIP-19 reverse registrar for that coinType is deployed/populated (e.g. L1 coinType 60) — resolver-ready elsewhere.

identityVerified

Read whether an EAS attestation is valid for (subject, schema, uid) → "verified" / "unverified". Reveals the claim, not the data (doc 17).

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x6964656e74697479566572696669656400000000000000000000000000000000

Arg Type Note
subject address
schema bytes32
uid bytes32

identityClaim

Read the claimed string a subject published under a valid EAS attestation; reverts to slot fallback otherwise.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x6964656e74697479436c61696d00000000000000000000000000000000000000

Arg Type Note
uid bytes32
schema bytes32
subject address

por-coverage

Proof-of-Reserve coverage% = attested reserves ÷ token totalSupply (READ_CHAIN), with provenance (feed, round) + freshness and a backed / under-collateralized badge; fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x706f722d636f7665726167650000000000000000000000000000000000000000

Arg Type Note
reserveFeed address AggregatorV3-shaped PoR feed (caller-supplied; ChainRender blesses no oracle)
token address tokenized-asset ERC-20 (totalSupply/decimals)
fracDigits uint8 display fractional digits
maxStaleSeconds uint256 0 = show age but never assert stale; >0 = flag STALE past this age

sibling kinds por-reserves / por-supply share the same args and return the reserve and supply figures.

por-reserves

Attested reserves from a Proof-of-Reserve feed, in feed units (READ_CHAIN); STALE-suffixed past the caller bound; fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x706f722d72657365727665730000000000000000000000000000000000000000

Arg Type Note
reserveFeed address
token address
fracDigits uint8
maxStaleSeconds uint256

por-supply

Token totalSupply in token units (READ_CHAIN); fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x706f722d737570706c7900000000000000000000000000000000000000000000

Arg Type Note
reserveFeed address
token address
fracDigits uint8
maxStaleSeconds uint256

erc3643-status

ERC-3643 holder compliance status " / " (verified / not verified, active / frozen) via the token's identity registry + isFrozen (READ_CHAIN). DISPLAY only — a value move re-checks on chain.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x657263333634332d737461747573000000000000000000000000000000000000

Arg Type Note
token address ERC-3643 token (caller-supplied)
holder address

DISPLAY, not enforcement; identity registry + compliance are agent-mutable → grades ≤ C (DEP_MUTABLE), never A. Sibling kinds erc3643-verified / erc3643-frozen share these args.

erc3643-verified

Whether an address is a verified (KYC'd) ERC-3643 investor via identityRegistry.isVerified (READ_CHAIN). DISPLAY only; fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x657263333634332d766572696669656400000000000000000000000000000000

Arg Type Note
token address
holder address

agent-mutable source → grades ≤ C (DEP_MUTABLE).

erc3643-frozen

Whether an ERC-3643 holder is frozen via isFrozen (READ_CHAIN). DISPLAY only; fails closed.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x657263333634332d66726f7a656e000000000000000000000000000000000000

Arg Type Note
token address
holder address

agent-mutable source → grades ≤ C (DEP_MUTABLE).

erc3643-can-transfer

Whether a transfer from→to of amount would currently pass the token's modular compliance via canTransfer (READ_CHAIN). A PREVIEW computed against caller-claimed addresses — UX, never a security boundary; fails closed.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x657263333634332d63616e2d7472616e73666572000000000000000000000000

Arg Type Note
token address
from address
to address
amount uint256

DISPLAY / preview, not enforcement; agent-mutable compliance → grades ≤ C (DEP_MUTABLE).

cred-status

Credential lifecycle status VALID / EXPIRED / REVOKED / UNKNOWN (or "issuer mismatch") from a CredentialStatusRegistry (READ_CHAIN), with issuer-key provenance; fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x637265642d737461747573000000000000000000000000000000000000000000

Arg Type Note
registry address a CredentialStatusRegistry (caller-supplied)
credentialId bytes32
expectedIssuer address address(0) disables the issuer-key binding check

composes with the ZK credential kind: anonymous membership proof + revocable, issuer-bound validity. Sibling kind cred-valid returns valid/invalid.

cred-valid

"valid" iff the credential is VALID and (when expectedIssuer set) issued by that key — a single word for a gate binding (READ_CHAIN); else "invalid"; fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x637265642d76616c696400000000000000000000000000000000000000000000

Arg Type Note
registry address
credentialId bytes32
expectedIssuer address

efp-follows

Whether a caller-named EFP list currently follows a target address, by scanning the list's ops on chain (READ_CHAIN, last op wins, bounded scan); fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x6566702d666f6c6c6f7773000000000000000000000000000000000000000000

Arg Type Note
listRecords address EFP List Records contract (caller-supplied; ChainRender blesses no deployment)
slot uint256 the list's storage slot (from its List Storage Location)
target address the address whose relationship to the list to read

FORWARD read only (Grade A). Follower counts / reverse lookups are off-chain (EFP indexer) → grade ≤ C; not offered on chain. Sibling kind efp-state shares these args.

efp-state

Compact EFP relationship of a list to a target: following / blocked / muted / not following (READ_CHAIN, bounded scan); fails closed.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x6566702d73746174650000000000000000000000000000000000000000000000

Arg Type Note
listRecords address
slot uint256
target address

block/mute are reserved EFP tags; per EFP a tag only counts while the address is also followed.

efp-tag

Whether a caller-named EFP list currently tags a target with a given tag, e.g. "friend" / "phisher" (READ_CHAIN, bounded scan); fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x6566702d74616700000000000000000000000000000000000000000000000000

Arg Type Note
listRecords address
slot uint256
target address
tag string the tag to test for; reserved tags block/mute are also recognized

efp-list-size

The raw number of ops in a caller-named EFP list (READ_CHAIN); a list-size figure, NOT a follower count; fails closed.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x6566702d6c6973742d73697a6500000000000000000000000000000000000000

Arg Type Note
listRecords address
slot uint256

this is the list's own op count, not how many accounts follow the list owner (that is an off-chain indexer aggregate).

rep-vouch

A single attester's vouch status for a subject under a topic: vouched / expired / revoked / unknown (READ_CHAIN); fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x7265702d766f7563680000000000000000000000000000000000000000000000

Arg Type Note
registry address an AddressAttestationRegistry (caller-supplied)
attester address the attester key whose vouch to read
subject address the address being vouched for / flagged
topic bytes32 caller-chosen label, e.g. "trusted-builder" / "scammer"

delegated signal: an on-chain read, but its truth is only as good as the attester you trust → grades ≤ C (DEP_MUTABLE), never A. Topic is neutral to sign.

rep-tally

A transparent k-of-n tally: how many of a CALLER-SUPPLIED attester set currently hold a valid vouch for a subject under a topic (READ_CHAIN), rendered "k/n"; fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x7265702d74616c6c790000000000000000000000000000000000000000000000

Arg Type Note
registry address
attesters address[] the caller's chosen attester set — the tally is over exactly these
subject address
topic bytes32

NOT a global reputation score: every input is an attester the consumer chose; change the set, change the answer. A reverting attester read counts as not-valid (fail-closed per input). Grades ≤ C (delegated, DEP_MUTABLE).

rep-aggregate

Transparent k-of-n reputation across CALLER-supplied sources, rendered "k/n (grade X)" where X is the weakest source's grade ceiling (READ_CHAIN); fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x7265702d61676772656761746500000000000000000000000000000000000000

Arg Type Note
subject address
sources address[] IReputationSource adapters (caller-chosen); 1:1 with ctxs
ctxs bytes[] per-source abi-encoded context (e.g. EFP list/slot, or registry/attester/topic)

NOT a global score. Grade is capped at the weakest input (an A EFP follow can't launder a C vouch). Unreadable sources count as no-signal (fail-closed); all-unreadable → unavailable. New source types plug in via the IReputationSource adapter seam without changing this kind.

ccip-supported

Whether a Chainlink CCIP destination chain selector is currently supported by a caller-supplied Router, via isChainSupported (READ_CHAIN); fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x636369702d737570706f72746564000000000000000000000000000000000000

Arg Type Note
router address the CCIP Router on the local chain (caller-supplied; blesses no deployment)
destSelector uint64 the CCIP chain selector of the destination chain

on-chain fact of the router's current config (Grade A). The router is Chainlink-operated/upgradeable, so it is 'what the router currently reports,' the same honest posture as the oracle-feed price read.

ccip-fee

The CCIP fee QUOTE for a message to a destination selector, via Router.getFee, denominated in the feeToken (READ_CHAIN); a live quote (like a price); fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x636369702d666565000000000000000000000000000000000000000000000000

Arg Type Note
router address
destSelector uint64
feeToken address LINK or wrapped-native; address(0) = pay in native msg.value
receiver address destination receiver used only to shape the quote
gasLimit uint256 0 = router-default extraArgs; >0 = EVMExtraArgsV1 gas limit
feeDecimals uint8 0 = 18 (LINK / wrapped-native)
fracDigits uint8 display fractional digits

ESTIMATE/quote — the actual send (ccipSend) is a USER-declared action, decoded + value-gated, that ChainRender never performs. Delivery status is off-chain (CCIP indexer) → grade ≤ C, not a kind here.

sig-1271

Whether a message hash is validly signed by a CONTRACT ACCOUNT under ERC-1271, via isValidSignature (READ_CHAIN); "valid"/"invalid"; fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x7369672d31323731000000000000000000000000000000000000000000000000

Arg Type Note
account address the contract account (Safe / ERC-4337 / …); caller-supplied
hash bytes32 the message/typed-data digest that was signed
signature bytes

Validity ONLY — the human meaning of the message is rendered client-side (msg-712), never asserted here.

stealth-meta

A registrant's ERC-6538 stealth meta-address (private-payments discovery), via stealthMetaAddressOf (READ_CHAIN); "not registered" if none; fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x737465616c74682d6d6574610000000000000000000000000000000000000000

Arg Type Note
registry address the ERC-6538 registry (caller-supplied; blesses no deployment)
registrant address
schemeId uint256 1 = SECP256k1 with view tags (ERC-5564 default)

Discovery is the only on-chain (Grade A) part. The ERC-5564 announce SEND is a declared action; scanning announcements is off-chain (≤ C). ChainRender never custodies a key or derives the address server-side.

shielded-root

A shielded/note pool's current Merkle ROOT (bytes32) via caller-supplied view calldata (READ_CHAIN); a public invariant, never a balance; fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x736869656c6465642d726f6f7400000000000000000000000000000000000000

Arg Type Note
pool address the shielded pool (Aztec/Tornado-style/native); caller-supplied
callData bytes the pool's own view returning bytes32, e.g. getLastRoot()/currentRoot()

Render the privacy BOUNDARY honestly (doc 157 §7): only publicly-provable invariants. Decrypted balances are a client-side, viewing-key-gated enhancement (≤ C, local), never a chain read; shield/unshield/transfer leaks are labelled by the client-side privacy-leak decoder.

shielded-set

A shielded pool's commitment / ANONYMITY-SET size (uint256) via caller-supplied view calldata (READ_CHAIN); how private the pool actually is right now; fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x736869656c6465642d7365740000000000000000000000000000000000000000

Arg Type Note
pool address
callData bytes the pool's own view returning uint256, e.g. nextIndex()/commitmentCount()

A small anonymity set is WEAK privacy — the render says so (card grades it), never masks it.

shielded-nullifier

Whether a nullifier is spent in a shielded pool (bool) via caller-supplied view calldata (READ_CHAIN); "spent"/"unspent"; fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x736869656c6465642d6e756c6c69666965720000000000000000000000000000

Arg Type Note
pool address
callData bytes the pool's own view returning bool, e.g. isSpent(bytes32)/nullifierHashes(bytes32)

Double-spend / already-claimed check WITHOUT revealing identity — the on-chain half of the ZK/nullifier primitive we already ship (credential-bound + NullifierRegistry).

msg-712

Render the EIP-712/191 message you are ABOUT TO SIGN, honestly and fail-closed on opaque fields (anti-phishing "render what you sign"). Client-side render → grade ≤ C; the caller MUST show the warnings.

Data edge: off-chain · Capability: CLIENT_FETCH · Args encoding: abi.encode

Kind constant: 0x6d73672d37313200000000000000000000000000000000000000000000000000

Arg Type Note
typedData bytes the EIP-712 domain+types+message (client input; rendered by chainc/messaging.ts renderTyped712, NOT a chain read)

Not a chain read — it renders CLIENT INPUT (the to-be-signed message). Pairs with sig-1271 (the on-chain validity check). Fails closed: any field it cannot fully type is marked OPAQUE and warned; it never says 'safe to sign.'

poster-feed

An ERC-3722 Poster feed (public posts). Content lives only in NewPost EVENT LOGS (no state), so it is read via eth_getLogs — on-chain DATA but not a re-executable view → grade ≤ C, labeled off-chain.

Data edge: off-chain · Capability: READ_CHAIN + CLIENT_FETCH · Args encoding: abi.encode

Kind constant: 0x706f737465722d66656564000000000000000000000000000000000000000000

Arg Type Note
poster address the ERC-3722 Poster contract
tagTopic bytes32 optional keccak(tag) to filter the indexed tag; 0 = all

Event-log feed via the client-side posterFeedFilter() adapter — never dressed as Grade A. Declaring a post (post()) is a user action.

stealth-scan

Scan ERC-5564 Announcement logs to find stealth payments to you. Log data via eth_getLogs (not a view) + local recipient derivation → grade ≤ C, labeled off-chain; ownership derivation is client-side.

Data edge: off-chain · Capability: READ_CHAIN + CLIENT_FETCH · Args encoding: abi.encode

Kind constant: 0x737465616c74682d7363616e0000000000000000000000000000000000000000

Arg Type Note
announcer address the ERC-5564 Announcer singleton
schemeId uint256 1 = SECP256k1 with view tags

The scan is an off-chain log read; deciding which announcements are YOURS uses your viewing key, client-side. ChainRender never holds the key.

clip-count

The number of clips in an on-chain skeletal-animation library (a CRCL pack stored as a Dependency), via ClipLibraryResolver reassembling the pack from a caller-supplied registry (READ_CHAIN); fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x636c69702d636f756e7400000000000000000000000000000000000000000000

Arg Type Note
registry address the DependencyRegistry (caller-supplied; reuses the p5/three library mechanism)
depHash bytes32 the content hash the library is pinned by (compressedHash)

Motion is DATA, stored/hash-verified like p5.js/three.js. Additional clip libraries are additive (each a new content-addressed Dependency) — expandable without editing anything.

clip-slice

One clip's bytes (hex) from an on-chain skeletal-animation library, sliced by the pack's own directory, for the client FK player to decode + play as the deterministic floor (READ_CHAIN, Grade A); fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x636c69702d736c69636500000000000000000000000000000000000000000000

Arg Type Note
registry address
depHash bytes32
index uint16 clip index within the pack (0-based; see clip-count)

The clip bytes are the on-chain FLOOR: chainc/skeletalanim.ts decodes them and plays via forward kinematics (pure math, no GPU, reproducible → Grade A). A GPU-skinned mesh over the same rig/clip is an optional enhancement that fails closed to the SVG puppet floor. Inspired by UniMate's representation, NOT its neural model (doc 158).

settle-status

Settlement status word (funded / disbursed / settled / defaulted) read from a settlement agreement's on-chain state (READ_CHAIN); fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x736574746c652d73746174757300000000000000000000000000000000000000

Arg Type Note
agreement address the settlement agreement (AttestedLoanChannel / LoanChannel / any ISettlementView)
assetDecimals uint8 decimals of the escrowed asset (18 = native ETH, 6 = USDC …) for amount display
fracDigits uint8 display fractional digits

sibling kinds settle-principal / settle-repaid share the same args. The render honestly splits the trust: escrow + distribution are on-chain (A) while the disburse/repay legs are attested (≤ C) — the load-bearing rule of docs/172 §5.

settle-principal

Pooled principal of a settlement agreement, in asset units (READ_CHAIN); fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x736574746c652d7072696e636970616c00000000000000000000000000000000

Arg Type Note
agreement address
assetDecimals uint8
fracDigits uint8

settle-repaid

Total repaid ÷ principal as a percent string (READ_CHAIN); fails closed to "unavailable" (incl. zero principal).

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x736574746c652d72657061696400000000000000000000000000000000000000

Arg Type Note
agreement address
assetDecimals uint8
fracDigits uint8

trust-facets

Render a contract's self-declared TRUST FACETS (custody · user-only exit · relayer binding · artifact pinning) from its on-chain trustFacets() view (READ_CHAIN); a proof-/EIP-712-bound relayer is shown as "cannot alter", a mutable one is flagged. Fails closed to "unavailable". The shared honesty primitive other cards compose.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x74727573742d6661636574730000000000000000000000000000000000000000

Arg Type Note
subject address a contract implementing ITrustDisclosure.trustFacets() (agreement / pool / relay)

door-knocks

A door's PUBLIC TRIBUTE aggregate (total burned, knock count, loudest knock) read from a DoorRegistry's on-chain state via a view (READ_CHAIN) → Grade A. The message history is NOT here (see door-feed, ≤C). Fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x646f6f722d6b6e6f636b73000000000000000000000000000000000000000000

Arg Type Note
registry address the DoorRegistry
target bytes32 door key — bytes32(uint160(addr)) for an address, or an ENS namehash
assetDecimals uint8 decimals of the burned token (for amount display)
fracDigits uint8 display fractional digits

The on-chain half of a door. Pairs with door-feed (the ≤C message list). knock() is a user action, not a render.

door-feed

A door's MESSAGE history. Content lives only in Knock EVENT LOGS (no state), read via eth_getLogs — on-chain DATA but not a re-executable view → grade ≤ C, labeled off-chain. Weight-sorted client-side by chainc/door.ts rankKnocks().

Data edge: off-chain · Capability: READ_CHAIN + CLIENT_FETCH · Args encoding: abi.encode

Kind constant: 0x646f6f722d666565640000000000000000000000000000000000000000000000

Arg Type Note
registry address the DoorRegistry
target bytes32 optional door key to scope the feed; 0 = every door on this registry

Event-log feed via the client-side doorFeedFilter() adapter — never dressed as Grade A. The Grade-A half is door-knocks.

proof-setup

That a client artifact's SHA-256 is PINNED on-chain in a SetupPinRegistry (content-addressed, append-only), with pinner + uri — read via a view → Grade A for the READ. Whether the digest is the real setup rests on the pinner; the teeth are the ≤C artifact-verify. Fails closed to "unavailable"/"not pinned".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x70726f6f662d7365747570000000000000000000000000000000000000000000

Arg Type Note
registry address the SetupPinRegistry
id bytes32 content-addressed pin id = keccak256(abi.encode(sha256, uri))

Pairs with artifact-verify (≤C): fetch the artifact, SHA-256 it, compare to this pinned digest.

artifact-verify

Verify a FETCHED client artifact against an on-chain-pinned SHA-256: fetch the bytes + hash them client-side and compare → ≤ C, labeled off-chain (CLIENT_FETCH). The teeth behind proof-setup; never says 'trusted', only 'matches the on-chain pin' (or not).

Data edge: off-chain · Capability: CLIENT_FETCH · Args encoding: abi.encode

Kind constant: 0x61727469666163742d7665726966790000000000000000000000000000000000

Arg Type Note
expectedSha256 bytes32 the pinned digest (from proof-setup)
uri string where the client fetches the artifact bytes to hash

Pure client check (chainc/proof-badge.ts verifyArtifact) over fetched bytes — not a chain read, never Grade A.

compute-credit

A play-key's compute credit (funded / spent / remaining) in a ComputeCreditVault, read via a view → Grade A. The provider draws down only against the play-key's EIP-712-signed usage receipts (cannot overcharge) and the play-key withdraws unspent anytime. The COMPUTE paid for is off-chain (attested, ≤C) — the card says so. Fails closed to "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x636f6d707574652d637265646974000000000000000000000000000000000000

Arg Type Note
vault address the ComputeCreditVault
playKey address the scoped play-key whose credit to render
assetDecimals uint8
fracDigits uint8

RelayerBinding = Eip712Bound (provider bound to signed receipts). Sign receipts with chainc/compute-credit.ts usageReceiptTypedData.

xchain-balance

A home-token balance proven by storage proof (header -> state root -> token account -> balance slot) and cached PER ROOT SOURCE by an immutable XchainBalanceCache; renders the highest-grade fresh entry as " · proven @ block N · s old · Grade (on )". Age is seconds since the proven header timestamp. Grade = min(root source ceiling, the grade the token record was proven at): same-chain root -> A (relative to the host chain), relay root -> C, Arbitrum parent root (arb-retryable) -> A relative to the host, always shown with the host facet (XchainBalanceResolverV2). Fails closed to "unavailable"; with no fresh entry renders "stale (proven @ block N · Grade )" (V2 with a host facet: "stale (proven @ block N · Grade · on · )"). Malformed args render "unavailable". Symbols are [A-Za-z0-9]{1,11}, decimals <= 77.

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x78636861696e2d62616c616e6365000000000000000000000000000000000000

Arg Type Note
token address the home CanonicalToken (registered in the cache by a proven factory record)
holder address
maxAgeSeconds uint64 older than this renders stale (X2); dated further than this into the future renders unavailable
fracDigits uint8

Cross-chain root sources and grade ceilings: same-chain → A, relay → C, arb-retryable → A. Off the home chain the value is shown with the host facet (enforced by XchainBalanceResolverV2).

Does not establish:

  • anything beyond the host chain's own consensus (host-chain grade)
  • the balance now - only as of the proven block
  • anything the cache or its root source does not establish (see those)

Refresh with chainc/xchain.ts buildBalanceProof -> XchainBalanceCache.refresh (permissionless, monotone per root source). Register a token once with buildRecordProof -> registerToken.

xchain-snapshot-balance

What an already-deployed home token's own balanceOf returned during a transaction (BalanceSnapshotter.snapshot, gas-floored, code hash and decimals committed), proven by storage proof against the SNAPSHOTTER's storage (header -> state root -> snapshotter account, code hash pinned -> commitment slot) and cached PER ROOT SOURCE by an immutable SnapshotBalanceCache; renders " <0x full address> · balanceOf @ block N (in-transaction) · s old · Grade (on [ · ])". Metadata (name/symbol) is proven separately and used only under the same token code hash and no later than the snapshot block, else "unavailable (no metadata)" / "unavailable (code changed)". Grade = min(entry source ceiling, metadata source ceiling, A): same-chain -> A, relay -> C, arb-retryable -> A relative to the host with the host facet (FacetRequired off home). Stale: "stale ( <0x address> · balanceOf @ block N · Grade [ · on · ])". Display only; malformed args render "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x78636861696e2d736e617073686f742d62616c616e6365000000000000000000

Arg Type Note
token address any existing home ERC-20 whose metadata was recorded and proven (registerToken)
holder address
maxAgeSeconds uint64 older than this renders stale; dated further than this into the future is skipped
fracDigits uint8

Cross-chain root sources and grade ceilings: same-chain → A, relay → C, arb-retryable → A. Off the home chain the value is shown with the host facet (enforced by SnapshotBalanceResolver).

Does not establish:

  • anything beyond the host chain's own consensus (host-chain grade)
  • the balance now - only what balanceOf returned during a transaction in the snapshot block
  • that the holder held this balance outside that call - mid-transaction state can be temporary (flash loans)
  • anything the cache, the home BalanceSnapshotter or the root source does not establish (see those)

Snapshot on home with BalanceSnapshotter.snapshot(token, holders) (permissionless) and recordMetadata(token) once; then chainc/xchain-snapshot.ts buildMetadataProof -> SnapshotBalanceCache.registerToken and buildSnapshotProof -> refresh (monotone per root source).

xchain-adopted-balance

A holder's balance of an already-deployed home token under ONE adoption claim (TokenAdoptionRegistry: the claim names a pinning adapter and a layout adapter by address + code hash; structural code checks at adoption; a witness balance confirmed by a same-chain proof of the adoption block), proven by storage proof under the claim's layout and cached PER ROOT SOURCE by an immutable AdoptedBalanceCache keyed by claim id; renders " <0x full address> · proven @ block N · s old · Grade C (adopted · claim <0x8…8> · on [ · ])". Always Grade C: the layout rests on published evidence the chain does not check (a client that verifies the evidence bundle may show B; nothing shows A). Stale: "stale ( <0x address> · proven @ block N · Grade C · adopted · claim <0x8…8>[ · on · ])". A proxy upgrade makes every later proof revert. Malformed args or an unregistered claim render "unavailable".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x78636861696e2d61646f707465642d62616c616e636500000000000000000000

Arg Type Note
claimId bytes32 the CONFIRMED adoption claim the app binds (content-addressed; never 'the' record of a token)
holder address
maxAgeSeconds uint64 older than this renders stale; dated further than this into the future is skipped
fracDigits uint8

Cross-chain root sources and grade ceilings: same-chain → C, relay → C, arb-retryable → C. Off the home chain the value is shown with the host facet (enforced by AdoptedBalanceResolver). Rests on an adoption claim, so every ceiling is C.

Does not establish:

  • anything beyond the host chain's own consensus (host-chain grade)
  • the balance now - only as of the proven block
  • that the claimed storage layout is the token's real one (Grade C) - see the claim's evidence
  • anything the cache, the home registry or the root source does not establish (see those)

Adopt on home with TokenAdoptionRegistry.adopt(claim), confirm with chainc/xchain-adopted.ts buildAdoptedStateProof at the adoption block -> confirmWitness; then buildRegistryProof -> AdoptedBalanceCache.register and buildAdoptedStateProof -> refresh (monotone per root source).

swap-lock

A home-chain HashTimelockSwap lock's state (open / claimed / refunded), proven by storage proof (header -> state root -> swap account, code hash pinned -> stateOf[id] slot; the id is content-addressed, so the proof covers every term) and cached by an immutable SwapLockProofCache, which also guards the counterpart lock on its own chain; renders " lock · · to 0x8…8[ · ends in h m | past deadline] · proven @ block N · s old · Grade (on [ · ])". The amount uses the token's PROVEN symbol and decimals when it is registered in the pinned XchainBalanceCache, else " base units of 0x8…8". Grade = the root source ceiling: same-chain -> A, arb-retryable -> A relative to the host with the host facet (FacetRequired off home). Stale: "stale (proven @ block N · Grade [ · on · ])". Malformed args or an unproven id render "unavailable". The swap itself is <= C (inclusion before each deadline).

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x737761702d6c6f636b0000000000000000000000000000000000000000000000

Arg Type Note
id bytes32 the home lock id: keccak256(abi.encode(homeChainId, homeSwap, terms))
maxAgeSeconds uint64 older than this renders stale; dated further than this into the future renders unavailable
fracDigits uint8

Cross-chain root sources and grade ceilings: same-chain → A, arb-retryable → A. Off the home chain the value is shown with the host facet (enforced by SwapLockResolver).

Does not establish:

  • anything beyond the host chain's own consensus (host-chain grade)
  • the lock's state now - only as of the proven block
  • that 'ends in' is exact - it compares the home chain's deadline with this chain's clock
  • anything the lock cache or its root source does not establish (see those)

Lock on home with HashTimelockSwap.lock(terms); after a home root covering the lock block is delivered, chainc/xchain-swap.ts buildLockProof -> SwapLockProofCache.proveLock (permissionless, monotone). The second party locks on the host with guard = the cache and guardData = the home lock id.

scope-disclosure

What a subject's trust grade does NOT establish (doc 175 X7), read from its IScopeDisclosure via a view -> Grade A for the READ (the list is self-declared text). Renders "does not establish: a · b"; fails closed to "scope not disclosed".

Data edge: on-chain · Capability: READ_CHAIN · Args encoding: abi.encode

Kind constant: 0x73636f70652d646973636c6f7375726500000000000000000000000000000000

Arg Type Note
subject address any contract implementing IScopeDisclosure (ERC-165-checked)