{"schema":{"type":"object","required":["chains"],"additionalProperties":false,"properties":{"name":{"type":"string","maxLength":100,"minLength":1},"chains":{"type":"object","description":"Keyed by chain name or decimal chain ID from /agent.json chains.","additionalProperties":{"type":"object","required":["providers"],"additionalProperties":false,"properties":{"providers":{"type":"array","description":"In preference order: the priority strategy tries the first provider first.","items":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9_-]{0,126}$"},"url":{"type":"string","format":"uri","description":"HTTPS endpoint, credentials included. Required for a new provider; omit to keep the stored URL."},"headers":{"type":"object","description":"Secret headers shared by HTTP and WebSocket. Omit to retain stored headers; {} clears them.","additionalProperties":{"type":"string"},"writeOnly":true,"maxProperties":32},"ws_url":{"type":["string","null"],"format":"uri","description":"WebSocket endpoint, for subscriptions."},"limits":{"type":"object","description":"Overrides for limits you know better than Lasso has learned. Omit to let Lasso learn them.","additionalProperties":false,"properties":{"archival":{"type":"boolean","description":"false keeps historical requests off this provider."},"logs_span":{"type":"integer","description":"Largest eth_getLogs block span the provider accepts.","minimum":1},"methods_blocked":{"type":"array","description":"Methods the provider refuses.","items":{"type":"string"},"maxItems":100}}}}},"maxItems":50,"minItems":1},"max_lag_blocks":{"maximum":100,"type":"integer","description":"Blocks a provider may trail the chain head and still serve.","minimum":1},"block_protection":{"default":false,"type":"boolean","description":"Each Lasso node never serves a latest block older than one it already served for this chain. The floor is per node, not global across regions or restarts."},"health_checks":{"default":"standard","type":"string","enum":["standard","light"],"description":"light spends less of the provider's quota on Lasso's checks."}}},"maxProperties":25,"minProperties":1},"error_interpretation":{"default":false,"type":"boolean","description":"Allow masked error interpretation for this profile's providers."}}},"recipes":[{"profile":"Two or more providers; block_protection: true","strategy":"latency-weighted","workload":"user-facing reads"},{"profile":"Fast providers first; block_protection: true; max_lag_blocks: 1","strategy":"fastest","workload":"latency-critical trading"},{"profile":"Include an archive-capable provider; default lag","strategy":"load-balanced","workload":"indexer or backfill"},{"profile":"Preferred broadcast provider first","strategy":"priority","workload":"transaction submission"},{"profile":"ws_url on at least two providers","strategy":"any","workload":"subscriptions"}]}