Extensions

Extensions are external smart contracts that can be added to the Paymaster contract. These extensions are used to enforce specific conditions or rules that must be met for a transaction to be eligible

createExtension

async function createExtension(
  name: string,
  type: ExtensionMethod,
  wallet: WalletClient,
  client: unknown,
  items?: ExtensionItems,
  restrictionFactoryABI?: Abi,
  restrictionFactoryContractAddress?: Address
): Promise<Address>

Deploys a new extension contract based on the provided parameters.

  • name: string - The name of the extension contract to be created.

  • type: ExtensionMethod - The type of extension contract to be created. It can be one of the following: CONTRACT, USER, or FUNCTION

  • wallet: WalletClient: A WalletClient instance used for signing transactions and interacting with the Restriction Factory contract.

  • client: PublicClient: A PublicClient instance used for writing public transactions.

  • items: ExtensionItems (optional) - An object containing the items (e.g., contract addresses, user addresses, function signatures with contract addresses) related to the extension being created.

  • restrictionFactoryABI: Abi (optional) - The ABI of the Restriction Factory contract. If not provided, it will be retrieved based on the chain ID.

  • restrictionFactoryContractAddress: Address (optional) - The address of the Restriction Factory contract. If not provided, it will be retrieved based on the chain ID.

  • Returns: Address: address of the deployed extension.

types

PaymasterParams

A tuple type representing the parameters for several methods of Paymaster instance, like sendPaymasterTransaction. Added for easier usage.

export type PaymasterParams = {
  /** The address of the paymaster. */
  paymaster: Address;
  /** The bytestream input for the paymaster. */
  paymasterInput: BytesLike;
};

PaymasterType

export enum PaymasterType {
  ERC20,
  SPONSORED,
}

ExtensionMethod

export enum ExtensionMethod {
  CONTRACT,
  USER,
  FUNCTION,
}

PaymasterOptions

export interface PaymasterOptions {
  innerInput?: BytesLike;
  minimalAllowance?: bigint;
}

PaymasterOverrides

export interface PaymasterOverrides
  extends Omit<TransactionRequest, 'from' | 'type' | 'gasPrice'> {
  paymasterOptions?: PaymasterOptions;
  gasLimit?: bigint;
  gasPrice?: bigint;
  customData?: PaymasterParams;
}

BaseRestrictionItem

export type BaseRestrictionItem = {
  address: Address;
};

AddressOrBaseRestrictionItem

export type AddressOrBaseRestrictionItem = Address | BaseRestrictionItem;

ContractItems

export type ContractItems = AddressOrBaseRestrictionItem[];

UserItems

export type UserItems = AddressOrBaseRestrictionItem[];

FunctionItems

export type FunctionItems = (BaseRestrictionItem & {
  functionSignature: string;
})[];

RestrictionItems

export type RestrictionItems = ContractItems | UserItems | FunctionItems;

Last updated