Ethereum JSON-RPC compatibility
Lasso is a standards-led compatibility and routing layer for EVM RPC. Applications use ordinary JSON-RPC while Lasso handles provider differences in transport behavior, error delivery, method coverage, history, limits, and chain-specific extensions. The goal is one predictable interface. It is not a claim that every provider implements every method identically.Compatibility target
Ethereum RPC is governed by a versioned set of specifications rather than one complete, immutable document. Lasso uses this precedence:- JSON-RPC 2.0 for request, response, notification, error, and batch envelopes.
- Applicable Final Ethereum Interface EIPs for specific wire contracts.
- The
ethereum/execution-apisschemas pinned to commit739f9e00806003d2204adca7595f704849b9be30. - The activated fork and official specification for the requested chain.
- Observed provider capabilities for what a particular endpoint can serve.
What Lasso unifies
JSON-RPC envelopes
Lasso validates client envelopes before routing.jsonrpc must be the exact
string "2.0", method must be a string, and present params must be an array
or object. IDs retain their JSON type and value. Valid notifications do not
receive a response, and malformed requests that cannot supply a valid ID use
id: null.
HTTP batches preserve every valid item, including duplicate IDs, and omit
notification responses. Use unique IDs because duplicate IDs remain ambiguous
for clients even when Lasso preserves them.
Provider results and errors
Successful upstream results pass through. Lasso does not rebuild blocks, transactions, receipts, or logs because doing so could remove new fork fields or chain extensions. Some providers return a valid JSON-RPC error with an HTTP 4xx or 5xx status. Lasso preserves a request-correlated upstreamcode, message, and data
object. HTML, gateway text, and other transport failures remain routing
evidence and may trigger safe failover.
Ethereum parameter conventions
Lasso validates standards-defined shapes that affect routing or remove genuine ambiguity:- EIP-1898 block selectors require exactly one of
blockNumberorblockHash.requireCanonicalis valid only withblockHash. - EIP-234
eth_getLogsfilters may useblockHash, but not together withfromBlockortoBlock. - Values authored by Lasso, including downstream subscription IDs, use canonical Ethereum quantity encoding.
Methods, extensions, and affinity
Lasso does not treat every method as interchangeable:- Reviewed replay-safe reads can use bounded failover.
eth_sendRawTransactionreceives one upstream dispatch because a lost response may still mean the transaction was applied.- Unknown and vendor methods remain forward-compatible, but receive one dispatch unless reviewed policy marks them replay-safe.
- Provider-local HTTP filter lifecycles are rejected until Lasso has an explicit affinity contract for creation, follow-up calls, owner loss, and expiry.
- WebSocket subscriptions use a connection-scoped continuity path. The launch
subset supports
newHeadsandlogswith bounded recovery.