Start here

Surface status

Every surface marked live, partial, or not built - each with the transaction hash or the test that proves the state, so the label is checkable rather than asserted.

LIVE means it has settled on chain or a test holds it. PARTIAL means it works but the claim around it needs narrowing. NOT BUILT means it does not exist, stated plainly rather than omitted.

The table

SurfaceStateEvidence
Shield and holdLIVEFive mainnet pool transactions, all SUCCEEDED, the older ones finalised on L1, plus the full Sepolia loop.
Card swipe settles from shielded valueLIVESepolia 0x1f815361…fe5df, block 14,130,415. One transaction: sell shielded STRK, pay the merchant in USDC.
Swipe that also opens a lending positionLIVE0x4d94fa79…2639, block 14,109,923. Pool withdrew 10.24 STRK, 0.24 paid the merchant, 10 entered the vault; AuthorizationSettled and PositionOpened in the same receipt.
Pay a swipe by redeeming vault sharesLIVE0x45b8c5d7…f0e0, block 14,111,945. PositionRedeemed plus AuthorizationSettled; vault total_assets went 10 STRK to 0.
Funding in from Base over CCTP V2LIVESepolia 0x28b053d9…11fe2, block 14,139,603. Bridged USDC lands and shields in the same flow.
Viewing-key scoped statementsLIVEGET /api/card/statement?authorizationId=…&full=1 returns the settlement and the lend. Without the key it omits amounts.
Shadow spend identitiesPARTIALOne shadow spend settled on Sepolia, 0x48ccd889…cc111b, block 14,130,089. Addresses are deterministic per nonce, but this is not yet the default path for every swipe.
Card issuerPARTIALA Lithic sandbox issuer is wired to a live authorization-decisioning webhook. Tampered HMAC returns 401; a policy-blocked merchant never settles; a replayed authorization id returns confirmed without settling twice.
Contracts on mainnetNOT BUILTEvery Sealed contract is deployed on Sepolia only. Mainnet has the five pool transactions above and nothing else of ours. The sprint counts a mainnet transaction only when it runs through a contract the project itself deployed, if the project declares contracts at all, and it does not check which network those contracts live on. Declaring the Sepolia addresses therefore scored all four as touched the pool, but not through this project's contracts, i.e. verified_txs: 0. They now sit under sepolia_contracts in the manifest, which the hub ignores, so the entry is judged on the pool alone: the documented route for a project that deployed nothing on mainnet. Verified against mainnet RPC by npm run verify:claim, which reports 4 of 3 qualifying, SCOREABLE.
Private send between two accountsLIVESettled on mainnet: 0x6342cd9a…360e, block 15,768,124. One apply_actions proved by the STRK20 prover through Starkscan registered a viewing key, shielded 3 STRK, sent 1 STRK privately to a second registered account and kept 1 STRK as a shielded note, read back from the mainnet indexer with the sender's viewing key.
Unshield to your own addressLIVESettled on mainnet in the same transaction: 1 STRK withdrawn from the pool to the sender's own address. The same pool withdraw also runs inside Sepolia card settlements: 0x4d94fa79…2639 withdrew 10.24 STRK and 0x1f815361…fe5df settled a swipe.
Real money, real card networkNOT BUILTNo production issuer, no licence, no real funds. Test money throughout.

Known defects

These are open, and listed here rather than discovered by you. Vault tabs now show what each verb has already settled on chain before a wallet is connected, but the forms themselves still sit behind the connect wall, so you cannot exercise a spend or a send without Ready. Pool size and TVL figures disagree across sources, so no figure is published anywhere in this product.