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 over providers that differ.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:- Reads that are safe to repeat fail over within one deadline.
eth_sendRawTransactionreceives one upstream dispatch because a lost response may still mean the transaction was applied.- Unknown and vendor methods pass through, with one dispatch each.
- HTTP filter methods are rejected, because a filter ID belongs to one
provider; use
eth_getLogsor subscriptions. - WebSocket subscriptions support
newHeadsandlogs, with failover and backfill.