@mayflower-sys/evm-contract-kit
v0.0.1
Published
Shared transport types for generated contract bindings: a read-only Caller (read + sim) and viem adapter.
Readme
evm-contract-kit
Shared, read-only transport types for generated contract bindings. The generated
Reader classes (see @mayflower-sys/evm-avm-interfaces-gen) submit through a
Caller; this package owns that contract plus a viem adapter, so the pattern is
reusable across interface sets.
Caller
interface SimOptions {
from?: Address // msg.sender for the simulated call
value?: bigint // native value for payable functions
}
interface Caller {
read(address, data): Promise<Hex> // view/pure -> raw return data
sim(address, data, opts?): Promise<Hex> // simulate a write -> raw return data
}Both are eth_call. The split is intent: read is a plain current-state view
call; sim simulates a state-changing call with caller context (from/value),
so you can predict a write's return value or preflight a revert. Neither signs or
sends — submission stays the SDK's job.
viem adapter
import { viemCaller } from "@mayflower-sys/evm-contract-kit/viem"
const caller = viemCaller(publicClient)A generated Reader decodes for you:
const reader = new IAvmDirectory.Reader(address, caller)
const admin = await reader.protocolAdmin() // view -> Address
const market = await reader.simulateCreateMarket(args, { from: owner }) // sim -> AddressThe core depends on viem only for Address/Hex types (erased at build); the
single runtime touchpoint is the ./viem adapter — swap it to target anything.
