# Voltaire

> Build Ethereum applications with typed errors, composable workflows, and testable code using Effect.ts. Use when this capability is needed.

- Skill: `tomevault-io/voltaire` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/voltaire`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/voltaire/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/voltaire

---

# voltaire-effect

Build Ethereum applications with typed errors, composable workflows, and testable code using Effect.ts.

## Capabilities

- **Schema Validation**: Parse and validate Ethereum data (addresses, transactions, blocks) with typed errors
- **Provider Operations**: Read blockchain state (blocks, balances, logs, transactions)
- **Transaction Signing**: Sign and send transactions with local or browser wallets
- **Contract Interaction**: Type-safe smart contract reads, writes, and event queries
- **Cryptography**: Keccak256, secp256k1, BLS12-381, HD wallets, BIP-39 mnemonics
- **Multicall**: Batch multiple RPC calls into a single request
- **Block/Event Streaming**: Real-time blockchain data with reorg detection

## Installation

```bash
pnpm add voltaire-effect @tevm/voltaire effect
```

## Usage Patterns

### Read Blockchain Data
```typescript
import { Effect } from 'effect'
import { getBlockNumber, getBalance, Provider, HttpTransport } from 'voltaire-effect'

// Compose layers first
const ProviderLayer = Provider.pipe(
  Layer.provide(HttpTransport('https://eth.llamarpc.com'))
)

const program = Effect.gen(function* () {
  const block = yield* getBlockNumber()
  const balance = yield* getBalance('0x...', 'latest')
  return { block, balance }
}).pipe(Effect.provide(ProviderLayer))
```

### Validate Address
```typescript
import * as Address from 'voltaire-effect/primitives/Address'
import * as S from 'effect/Schema'

const addr = S.decodeSync(Address.Hex)('0x742d35Cc6634C0532925a3b844Bc9e7595f251e3')
```

### Send Transaction
```typescript
import { SignerService, Signer, LocalAccount, Provider, HttpTransport } from 'voltaire-effect'

// Compose layers first
const TransportLayer = HttpTransport('https://eth.llamarpc.com')
const ProviderLayer = Provider.pipe(Layer.provide(TransportLayer))
const SignerLayer = Signer.Live.pipe(
  Layer.provide(LocalAccount(privateKey)),
  Layer.provide(ProviderLayer)
)

const program = Effect.gen(function* () {
  const signer = yield* SignerService
  return yield* signer.sendTransaction({ to: '0x...', value: 1000000000000000000n })
}).pipe(Effect.provide(SignerLayer))
```

### Read Contract
```typescript
import { Contract, Provider, HttpTransport } from 'voltaire-effect'

// Compose layers first
const ProviderLayer = Provider.pipe(
  Layer.provide(HttpTransport('https://eth.llamarpc.com'))
)

const program = Effect.gen(function* () {
  const token = yield* Contract(tokenAddress, erc20Abi)
  return yield* token.read.balanceOf(userAddress)
}).pipe(Effect.provide(ProviderLayer))
```

## When to Use

- Building dApps that need typed error handling
- Ethereum applications requiring testable service dependencies
- Complex workflows with retry, timeout, and fallback logic
- Projects already using Effect.ts
- When you need composable, functional Ethereum operations

## Related

- [Voltaire Core](https://voltaire.tevm.sh) - Base primitives and crypto
- [Effect.ts](https://effect.website) - Typed errors and services
- [Full Documentation](/) - Complete API reference

---
> Source: [evmts/voltaire](https://github.com/evmts/voltaire) — distributed by [TomeVault](https://tomevault.io).
<!-- tomevault:4.0:skill_md:2026-06-19 -->

