viem-effect
v0.0.1
Published
Effect-based Ethereum client built on ox
Maintainers
Readme
viem-effect
Effect-based Ethereum client built on ox.
Installation
pnpm add viem-effectUsage
import { Effect, Layer } from "effect";
import { PublicClient, Transport, erc20Abi } from "viem-effect";
const program = Effect.gen(function* () {
const client = yield* PublicClient.Service;
const blockNumber = yield* client.getBlockNumber();
const usdt = yield* PublicClient.getContract({
address: "0xdAC17F958D2ee523a2206206994597C13D831ec7",
abi: erc20Abi,
});
const symbol = yield* usdt.read.symbol();
return { blockNumber, symbol };
});
const layer = PublicClient.layer.pipe(Layer.provide(Transport.http("https://eth.drpc.org")));
const result = await Effect.runPromise(program.pipe(Effect.provide(layer)));
console.log(result);Wallet Usage
import { Effect, Layer } from "effect";
import { Transport, WalletClient, erc20Abi, privateKeyToAccount } from "viem-effect";
const account = privateKeyToAccount("0x...");
const program = Effect.gen(function* () {
const token = yield* WalletClient.getContract({
address: "0x...",
abi: erc20Abi,
});
const simulation = yield* token.simulate.transfer("0x...", 1n);
const hash = yield* token.write.transfer("0x...", 1n);
return { simulation, hash };
});
const layer = WalletClient.layer(account).pipe(
Layer.provide(Transport.http("https://eth.drpc.org")),
);
await Effect.runPromise(program.pipe(Effect.provide(layer)));Features
- Effect v4 services and layers
- HTTP JSON-RPC transport
- Public client reads, logs, transactions, receipts, multicall, fee estimation
- Wallet client local signing, raw transaction sending, contract writes, message signing
- Typed contract helpers:
read,getEvents,estimateGas,simulate,write - Built-in ERC-20 and ERC-4626 ABIs
- Typed transport and RPC errors
License
MIT
