Experimental - This page is intentionally not included in the sidebar navigation. The API is unstable and may change without notice.
Overview
The RawProviderService provides direct access to the EIP-1193 request method for custom RPCs or object-style params not covered by provider free functions.
RawProviderService
Direct access to the underlying transport for EIP-1193 requests:
import { Effect, Layer } from 'effect'
import { RawProviderService, RawProviderTransport, HttpTransport } from 'voltaire-effect'
// Compose layers first
const RawLayer = RawProviderTransport.pipe(
Layer.provide(HttpTransport('https://eth.llamarpc.com'))
)
const program = Effect.gen(function* () {
const raw = yield* RawProviderService
// Direct EIP-1193 request
const result = yield* raw.request({ method: 'eth_blockNumber', params: [] })
return result
}).pipe(Effect.provide(RawLayer))
Use Cases
Testing methods (evm_snapshot, evm_revert)
const program = Effect.gen(function* () {
const raw = yield* RawProviderService
// Take snapshot
const snapshotId = yield* raw.request({
method: 'evm_snapshot',
params: []
})
// ... make changes ...
// Revert to snapshot
yield* raw.request({
method: 'evm_revert',
params: [snapshotId]
})
})
Custom RPC methods
const program = Effect.gen(function* () {
const raw = yield* RawProviderService
// Call a custom method not covered by provider free functions
const traces = yield* raw.request({
method: 'debug_traceTransaction',
params: ['0x...', { tracer: 'callTracer' }]
})
return traces
})
Error Handling
All requests produce TransportError on failure:
import { TransportError } from 'voltaire-effect'
program.pipe(
Effect.catchTag('TransportError', (e) => {
console.error(`RPC failed [${e.code}]: ${e.message}`)
return Effect.succeed(null)
})
)
Layer Composition
RawProviderTransport requires TransportService:
import * as Layer from 'effect/Layer'
import { RawProviderTransport, HttpTransport } from 'voltaire-effect'
const RawLayer = RawProviderTransport.pipe(
Layer.provide(HttpTransport('https://eth.llamarpc.com'))
)
Service Interface
type RequestArguments = {
readonly method: string
readonly params?: readonly unknown[] | object
}
type RawProviderShape = {
readonly request: (args: RequestArguments) => Effect.Effect<unknown, TransportError>
}
class RawProviderService extends Context.Tag("RawProviderService")<
RawProviderService,
RawProviderShape
>() {}
Native Provider Transports (Bun only)
When using Bun, you can import native provider transports that wrap voltaire’s provider classes:
// Available only with Bun runtime
import { HttpProviderTransport } from 'voltaire-effect'
import { WebSocketProviderTransport } from 'voltaire-effect'
import { ForkProviderTransport } from 'voltaire-effect'
import { InMemoryProviderTransport } from 'voltaire-effect'
These transports wrap voltaire’s native EIP-1193 provider implementations.