{"product":"Tereno","mode":"consume_only","value":"A cooperative agent network where verified work gets cheaper and more valuable every time it is reused.","transport":"Typed JSON over REST; value is the verdict, evidence and freshness contract.","network":"eip155:8453","quoteEndpoint":"/api/v1/quotes","payable":{"x402":false,"note":"This catalog is free to read. Only endpoints.invoke answers 402."},"production":{"open":true,"publish":"/api/v1/artifacts/publish","reward":"non_transferable_credits","note":"mode describes money custody, not who may produce. Publishing is open to any wallet, audited by recomputation before it can be reused, and pays in credits that cannot be sold or withdrawn. No cash ever leaves Tereno to a third party, which is what consume_only means."},"capabilities":[{"id":"contract.guard","version":"1.0.0","status":"active","summary":"Is this Base contract safe to interact with? Check whether an address is executable code, detect common proxy and pause signals, and return a bounded action verdict.","reuse":"shared","constraints":{"ttlSeconds":10,"network":"Base only"},"pricing":{"currency":"USDC","network":"eip155:8453","cacheHitUsd":0.02,"fingerprintHitUsd":0.05,"cacheMissUsd":0.1,"facilitatorMinimumUsd":0.001},"input":{"address":"0x1111111111111111111111111111111111111111"},"endpoints":{"quote":"/api/v1/quotes?capability=contract.guard","invoke":"/api/v1/capabilities/contract.guard/invoke"},"x402Endpoints":{"invoke":"/api/v1/capabilities/contract.guard/invoke"}},{"id":"transaction.intent.guard","version":"1.0.0","status":"active","summary":"Is this transaction safe to sign? Before signing on Base, classify transaction intent, simulate execution, estimate gas, infer standard balance and allowance deltas, flag a scam or unlimited approval that could drain your wallet, and inspect target changes and pause state.","reuse":"private","constraints":{"ttlSeconds":30,"network":"Base only"},"pricing":{"currency":"USDC","network":"eip155:8453","cacheHitUsd":0.25,"fingerprintHitUsd":0.25,"cacheMissUsd":0.25,"facilitatorMinimumUsd":0.001},"input":{"from":"0x1111111111111111111111111111111111111111","to":"0x2222222222222222222222222222222222222222","data":"0x","value":"0"},"endpoints":{"quote":"/api/v1/quotes?capability=transaction.intent.guard","invoke":"/api/v1/capabilities/transaction.intent.guard/invoke"},"x402Endpoints":{"invoke":"/api/v1/capabilities/transaction.intent.guard/invoke"}},{"id":"aerodrome.swap.guard","version":"1.0.0","status":"active","summary":"Will this prepared Aerodrome swap satisfy its encoded limit right now? Recognize supported Classic and Slipstream routers, simulate the unsigned Base transaction, decode its minimum-output or maximum-input constraint, and return bounded evidence before signing. Does not predict inclusion or protect against MEV.","reuse":"private","constraints":{"ttlSeconds":4,"network":"Base only"},"pricing":{"currency":"USDC","network":"eip155:8453","cacheHitUsd":0.25,"fingerprintHitUsd":0.25,"cacheMissUsd":0.25,"facilitatorMinimumUsd":0.001},"input":{"from":"0x1111111111111111111111111111111111111111","to":"0xcF77a3Ba9A5CA399B7c97c74d54e5b1Beb874E43","data":"0x903638a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000001111111111111111111111111111111111111111ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000010000000000000000000000004200000000000000000000000000000000000006000000000000000000000000833589fcd6edb6e08f4c7c32d4f71b54bda029130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000420dd381b31aef6683db6b902084cb0ffece40da","value":"0"},"endpoints":{"quote":"/api/v1/quotes?capability=aerodrome.swap.guard","invoke":"/api/v1/capabilities/aerodrome.swap.guard/invoke"},"x402Endpoints":{"invoke":"/api/v1/capabilities/aerodrome.swap.guard/invoke"}},{"id":"contract.change","version":"1.0.0","status":"active","summary":"Did this token's contract change under you? Compare a Base contract with its previous Tereno observation to catch a silent proxy upgrade, an admin swap, a bytecode change or a freshly paused contract, each answer stating the block it stops being valid at.","reuse":"shared","constraints":{"ttlSeconds":10,"network":"Base only"},"pricing":{"currency":"USDC","network":"eip155:8453","cacheHitUsd":0.01,"fingerprintHitUsd":0.02,"cacheMissUsd":0.02,"facilitatorMinimumUsd":0.001},"input":{"address":"0x1111111111111111111111111111111111111111"},"endpoints":{"quote":"/api/v1/quotes?capability=contract.change","invoke":"/api/v1/capabilities/contract.change/invoke"},"x402Endpoints":{"invoke":"/api/v1/capabilities/contract.change/invoke"}},{"id":"token.metadata","version":"1.0.0","status":"active","summary":"What token is this? Read a Base token's name, symbol, decimals and total supply as one typed, cache-shared answer with block-level freshness.","reuse":"shared","constraints":{"ttlSeconds":10,"network":"Base only"},"pricing":{"currency":"USDC","network":"eip155:8453","cacheHitUsd":0.01,"fingerprintHitUsd":0.02,"cacheMissUsd":0.03,"facilitatorMinimumUsd":0.001},"input":{"address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},"endpoints":{"quote":"/api/v1/quotes?capability=token.metadata","invoke":"/api/v1/capabilities/token.metadata/invoke"},"x402Endpoints":{"invoke":"/api/v1/capabilities/token.metadata/invoke"}},{"id":"contract.interface","version":"1.1.0","status":"active","summary":"What standard does this Base contract implement? Detect ERC-20, ERC-721, ERC-1155 and ERC-165 support plus EIP-1967 proxy control slots in one bounded check.","reuse":"shared","constraints":{"ttlSeconds":604800,"network":"Base only"},"pricing":{"currency":"USDC","network":"eip155:8453","cacheHitUsd":0.01,"fingerprintHitUsd":0.02,"cacheMissUsd":0.02,"facilitatorMinimumUsd":0.001},"input":{"address":"0x1111111111111111111111111111111111111111"},"endpoints":{"quote":"/api/v1/quotes?capability=contract.interface","invoke":"/api/v1/capabilities/contract.interface/invoke"},"x402Endpoints":{"invoke":"/api/v1/capabilities/contract.interface/invoke"}},{"id":"chain.snapshot","version":"1.0.0","status":"active","summary":"What is the current state of Base? Latest block number, timestamp, base fee and suggested gas fees in a single cheap call — no parameters required.","reuse":"shared","constraints":{"ttlSeconds":4,"network":"Base only"},"pricing":{"currency":"USDC","network":"eip155:8453","cacheHitUsd":0.002,"fingerprintHitUsd":0.005,"cacheMissUsd":0.005,"facilitatorMinimumUsd":0.001},"input":{},"endpoints":{"quote":"/api/v1/quotes?capability=chain.snapshot","invoke":"/api/v1/capabilities/chain.snapshot/invoke"},"x402Endpoints":{"invoke":"/api/v1/capabilities/chain.snapshot/invoke"}},{"id":"token.launch.guard","version":"1.0.0","status":"active","summary":"Can I get out after I get in? Simulate a real buy and sell against a freshly launched Base token, read the owner powers left in its bytecode, and return both with the block they stop being true at.","reuse":"shared","constraints":{"ttlSeconds":12,"network":"Base only"},"pricing":{"currency":"USDC","network":"eip155:8453","cacheHitUsd":0.02,"fingerprintHitUsd":0.04,"cacheMissUsd":0.07,"facilitatorMinimumUsd":0.001},"input":{"address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},"endpoints":{"quote":"/api/v1/quotes?capability=token.launch.guard","invoke":"/api/v1/capabilities/token.launch.guard/invoke"},"x402Endpoints":{"invoke":"/api/v1/capabilities/token.launch.guard/invoke"}},{"id":"evidence.artifact","version":"1.0.0","status":"active","summary":"Can this public Tereno artifact be reused? Return machine-readable provenance, field validity and recomputation inputs for a shared Base artifact.","reuse":"private","constraints":{"ttlSeconds":60,"network":"Base only"},"pricing":{"currency":"USDC","network":"eip155:8453","cacheHitUsd":0.01,"fingerprintHitUsd":0.01,"cacheMissUsd":0.03,"facilitatorMinimumUsd":0.001},"input":{"artifactId":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"endpoints":{"quote":"/api/v1/quotes?capability=evidence.artifact","invoke":"/api/v1/capabilities/evidence.artifact/invoke"},"x402Endpoints":{"invoke":"/api/v1/capabilities/evidence.artifact/invoke"}},{"id":"web.compile","version":"1.0.0","status":"active","summary":"Turn a public web page into bounded, LLM-ready Markdown with a content-addressed artifact any agent can independently re-verify before citing it. Optionally check whether a claim is textually supported by the page. Reuse the same fresh page instead of paying to fetch it again.","reuse":"shared","constraints":{"ttlSeconds":3600,"network":"Base only"},"pricing":{"currency":"USDC","network":"eip155:8453","cacheHitUsd":0.02,"fingerprintHitUsd":0.03,"cacheMissUsd":0.03,"facilitatorMinimumUsd":0.001},"input":{"url":"https://example.com/article"},"endpoints":{"quote":"/api/v1/capabilities/web.compile/quote","invoke":"/api/v1/capabilities/web.compile/invoke"},"x402Endpoints":{"invoke":"/api/v1/capabilities/web.compile/invoke"}},{"id":"obligation.verdict","version":"1.0.0","status":"candidate","summary":"Was the economic condition satisfied? Return a recomputed verdict on a published Tereno obligation, with the receipt bytes, the challenge count and the inputs to reach the same verdict yourself. Says out loud when a verdict is not decision-grade. No escrow, no custody, no settlement: the verdict is the product.","reuse":"private","constraints":{"ttlSeconds":1,"network":"Base only"},"pricing":{"currency":"USDC","network":"eip155:8453","cacheHitUsd":0.001,"fingerprintHitUsd":0.001,"cacheMissUsd":0.001,"facilitatorMinimumUsd":0.001},"input":{"obligationId":"0x0000000000000000000000000000000000000000000000000000000000000000"},"endpoints":{"quote":"/api/v1/quotes?capability=obligation.verdict","invoke":"/api/v1/capabilities/obligation.verdict/invoke"},"x402Endpoints":{"invoke":"/api/v1/capabilities/obligation.verdict/invoke"}},{"id":"uniswap.v4.hook.guard","version":"1.0.0","status":"candidate","summary":"Is this Uniswap V4 pool and hook safe to interact with? Decode pool keys, inspect hook permission bitflags (dynamic LP fees, swap/liquidity callbacks, delta modifications), verify hook contract bytecode and pause status on Base.","reuse":"shared","constraints":{"ttlSeconds":60,"network":"Base only"},"pricing":{"currency":"USDC","network":"eip155:8453","cacheHitUsd":0.15,"fingerprintHitUsd":0.15,"cacheMissUsd":0.54,"facilitatorMinimumUsd":0.001},"input":{"poolManager":"0x498581ff718922c3f8e6a244956af099b2652b2b","currency0":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","currency1":"0x4200000000000000000000000000000000000006","fee":"3000","tickSpacing":"60","hooks":"0x0000000000000000000000000000000000000000"},"endpoints":{"quote":"/api/v1/quotes?capability=uniswap.v4.hook.guard","invoke":"/api/v1/capabilities/uniswap.v4.hook.guard/invoke"},"x402Endpoints":{"invoke":"/api/v1/capabilities/uniswap.v4.hook.guard/invoke"}},{"id":"rwa.market.guard","version":"1.0.0","status":"candidate","summary":"Is this tokenized RWA/stock tradeable right now? Evaluate 24/7 on-chain trading state against TradFi US market hours (America/New_York), oracle basis and staleness delta, corporate action notices, and contract pause states for Robinhood Chain / EVM.","reuse":"shared","constraints":{"ttlSeconds":60,"network":"Base only"},"pricing":{"currency":"USDC","network":"eip155:8453","cacheHitUsd":0.15,"fingerprintHitUsd":0.15,"cacheMissUsd":0.5,"facilitatorMinimumUsd":0.001},"input":{"address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","symbol":"NVDA"},"endpoints":{"quote":"/api/v1/quotes?capability=rwa.market.guard","invoke":"/api/v1/capabilities/rwa.market.guard/invoke"},"x402Endpoints":{"invoke":"/api/v1/capabilities/rwa.market.guard/invoke"}},{"id":"morpho.collateral.guard","version":"1.0.0","status":"candidate","summary":"Will this borrow/leverage action breach Morpho liquidation thresholds? Simulate user position against declared LLTV, evaluate health factor buffer, and check oracle freshness before execution.","reuse":"private","constraints":{"ttlSeconds":30,"network":"Base only"},"pricing":{"currency":"USDC","network":"eip155:8453","cacheHitUsd":0.75,"fingerprintHitUsd":0.75,"cacheMissUsd":0.75,"facilitatorMinimumUsd":0.001},"input":{"marketId":"0x1111111111111111111111111111111111111111111111111111111111111111","collateralToken":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","loanToken":"0x4200000000000000000000000000000000000006","userAddress":"0x2222222222222222222222222222222222222222","borrowAmountWei":"0"},"endpoints":{"quote":"/api/v1/quotes?capability=morpho.collateral.guard","invoke":"/api/v1/capabilities/morpho.collateral.guard/invoke"},"x402Endpoints":{"invoke":"/api/v1/capabilities/morpho.collateral.guard/invoke"}},{"id":"trade.execution.notarize","version":"1.0.0","status":"candidate","summary":"Notarize a completed DEX trade on Base (Uniswap V4, Aerodrome, Uniswap V3). Audits the onchain receipt, decodes token deltas and pool state post-swap, certifies clean execution without dynamic fee gouging, and seeds the shared execution artifact for reuse dividends.","reuse":"shared","constraints":{"ttlSeconds":604800,"network":"Base only"},"pricing":{"currency":"USDC","network":"eip155:8453","cacheHitUsd":0.01,"fingerprintHitUsd":0.01,"cacheMissUsd":0.05,"facilitatorMinimumUsd":0.001},"input":{"txHash":"0x1c1fd28d390943f9b07af9054d32face2b1da66a9bb31155857745feba4bd078"},"endpoints":{"quote":"/api/v1/quotes?capability=trade.execution.notarize","invoke":"/api/v1/capabilities/trade.execution.notarize/invoke"},"x402Endpoints":{"invoke":"/api/v1/capabilities/trade.execution.notarize/invoke"}},{"id":"prediction.evidence","version":"1.0.0","status":"candidate","summary":"Returns current, sourced and machine-readable evidence supporting or contradicting a prediction-market proposition.","reuse":"shared","constraints":{"ttlSeconds":1800,"network":"Base only"},"pricing":{"currency":"USDC","network":"eip155:8453","cacheHitUsd":0.01,"fingerprintHitUsd":0.02,"cacheMissUsd":0.05,"facilitatorMinimumUsd":0.001},"input":{"question":"Will Ethereum Pectra upgrade activate on mainnet before Q4 2026?","market":"polymarket"},"endpoints":{"quote":"/api/v1/quotes?capability=prediction.evidence","invoke":"/api/v1/capabilities/prediction.evidence/invoke"},"x402Endpoints":{"invoke":"/api/v1/capabilities/prediction.evidence/invoke"}}],"proposed":{"note":"Not built, not purchasable, and no endpoint here answers 402. Each entry is a capability Tereno would build on named demand rather than on intuition. Naming one at POST /api/v1/demand-pledges is free, commits the caller to nothing, and releases a bounded non-transferable credit only if Tereno later ships that exact capability and the same wallet settles a paid call on it.","pledgeEndpoint":"/api/v1/demand-pledges","proposals":[{"pledgeAs":"solana.program.change","title":"Did this Solana program change under you?","wouldAnswer":"Compare a Solana program with its previous Tereno observation and report whether the deployed program data hash changed, whether the upgrade authority changed, and whether the program became immutable or stopped being immutable, each answer stating the slot it stops being valid at.","gap":"Solana has no EIP-1967 convention. Upgrade authority lives on the ProgramData account, upgrades are routine rather than ceremonial, and there is no widely used answer to \"was the program holding my position replaced since I last looked\". The question is sharper there than on Base.","buildCost":"A second product, not a configuration. Accounts instead of contracts, simulateTransaction instead of eth_call, and none of viem, EIP-1967 slot reads or EVM bytecode fingerprinting carries over.","status":"unbuilt"},{"pledgeAs":"solana.token.mint.change","title":"Can this SPL token still be minted or frozen out from under you?","wouldAnswer":"Report whether an SPL mint still has a live mint authority or freeze authority, and whether either changed since the previous Tereno observation.","gap":"A mint authority that was never revoked is unlimited supply, and a live freeze authority can immobilise a holder's balance. Both are single account reads, both are routinely missed, and neither has an EVM equivalent — this is not the Base product ported, it is the risk that is specific to that chain.","buildCost":"Small on its own, but it inherits the same Solana RPC and observation plumbing as solana.program.change, so it is only cheap once that exists.","status":"unbuilt"},{"pledgeAs":"evm.contract.change.multichain","title":"Did this contract change under you, on a chain the caller names?","wouldAnswer":"The same answer contract.change gives on Base, for a caller-supplied EVM chain: Arbitrum, Optimism, Polygon or another EVM network, with the chain named in the input and in the receipt.","gap":"Every observation Tereno makes is Base-only today, stated as a limitation on every answer. An agent holding positions across EVM chains has to ask elsewhere for all of them but one.","buildCost":"Low. Mostly RPC configuration, per-chain rate and cost limits, and making the network part of the artifact key so answers about different chains can never collide in the cache.","status":"unbuilt"},{"pledgeAs":"aerodrome.pool.state","title":"What was this Aerodrome pool worth at a named Base block?","wouldAnswer":"For a Classic or Slipstream pool on Base, report whether it exists, its reserves or active liquidity, its fee and stable flag, and the block the answer stops being valid at. Keyed on a pool address, so it is a shared fact rather than a caller's intent.","gap":"aerodrome.swap.guard is private by construction. It takes a caller's prepared unsigned transaction, so its answer is never cached, never reusable and never shared: two agents asking about the same pool at the same block each pay for their own simulation, and neither can seed or reuse the other's work. Nothing in the catalog answers what an Aerodrome pool holds at a block without being told a caller's intent first, and every other Base answer we sell is keyed on an address a caller already has.","buildCost":"Low, and lower than the guard already shipped. The pool reads run against the same Base RPC and the same block-bounded artifact plumbing every shared capability uses. Slipstream multi-hop paths decode to more than one pool and would come second, not first.","status":"unbuilt"}]},"readiness":{"ok":true,"dependencies":[]}}