UNPKG

@owlprotocol/contracts-account-abstraction

Version:

ERC4337 Account Abstraction support for deploying relevant smart contracts and interacting with UserOps.

42 lines (37 loc) 1.6 kB
import { Address, Chain, Client, ClientConfig, createClient, LocalAccount, Prettify, Transport } from "viem"; import { BackendPaymasterActions, backendPaymasterActions } from "./decorators/paymaster.js"; export type BackendPaymasterConfig< transport extends Transport = Transport, chain extends Chain | undefined = Chain | undefined, account extends LocalAccount = LocalAccount, > = Prettify< Pick< ClientConfig<transport, chain, account, undefined>, "cacheTime" | "key" | "name" | "pollingInterval" | "transport" | "chain" | "account" > & { account: account; paymaster: Address } >; export type BackendPaymaster< transport extends Transport = Transport, chain extends Chain | undefined = Chain | undefined, account extends LocalAccount = LocalAccount, > = Prettify<Client<transport, chain, account, undefined, BackendPaymasterActions>> & { paymaster: Address }; export function createBackendPaymaster< transport extends Transport = Transport, chain extends Chain | undefined = Chain | undefined, account extends LocalAccount = LocalAccount, >(parameters: BackendPaymasterConfig<transport, chain, account>): BackendPaymaster { const { key = "paymaster-backend", name = "Paymaster Backend", transport, paymaster } = parameters; const client = Object.assign( createClient({ ...parameters, key, name, transport, type: "PaymasterBackend", }), { paymaster, }, ) as any; return client.extend(backendPaymasterActions); }