@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
text/typescript
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);
}