Skip to main content
The @lifi/contract-types package includes TypeChain-generated factory classes for all LiFi contracts. These factories provide type-safe methods to deploy new contracts or connect to existing ones.

What are Factories?

Factories are TypeScript classes generated by TypeChain that provide:
  • Type Safety: Full TypeScript types for all contract methods, events, and parameters
  • Deployment: Methods to deploy new contract instances
  • Connection: Methods to connect to existing deployed contracts
  • ABI Access: Direct access to contract ABIs
  • Bytecode: Access to contract bytecode for deployment

Factory Naming Convention

All factories follow the naming pattern: {ContractName}__factory Examples:
  • GenericSwapFacetGenericSwapFacet__factory
  • ExecutorExecutor__factory
  • DiamondCutFacetDiamondCutFacet__factory

Available Factories

Bridge Facets

  • AcrossFacet__factory
  • AcrossFacetV3__factory
  • ArbitrumBridgeFacet__factory
  • HopFacet__factory
  • StargateFacet__factory
  • And many more…

Swap Facets

  • GenericSwapFacet__factory
  • GenericSwapFacetV3__factory
  • SwapperV2__factory

Utility Facets

  • Executor__factory
  • FeeCollector__factory
  • WithdrawFacet__factory
  • WhitelistManagerFacet__factory
  • AccessManagerFacet__factory

Diamond Standard

  • DiamondCutFacet__factory
  • DiamondLoupeFacet__factory
  • OwnershipFacet__factory

Interfaces

  • ILiFi__factory
  • IERC20__factory
  • IDiamondLoupe__factory

Common Factory Properties

All factories expose the following static properties:
class ContractName__factory {
  // Contract ABI
  static readonly abi: any[];
  
  // Contract bytecode (for deployable contracts)
  static readonly bytecode?: string;
  
  // Create type-safe contract instance
  static connect(
    address: string,
    signerOrProvider: Signer | Provider
  ): ContractName;
  
  // Deploy new contract (if bytecode available)
  static deploy(
    signer: Signer,
    ...constructorArgs: any[]
  ): Promise<ContractName>;
}

Import Patterns

Individual Import

import { GenericSwapFacet__factory } from '@lifi/contract-types';

Multiple Imports

import {
  GenericSwapFacet__factory,
  Executor__factory,
  DiamondCutFacet__factory
} from '@lifi/contract-types';

Factories Directory Import

import { GenericSwapFacet__factory } from '@lifi/contract-types/factories/GenericSwapFacet__factory';

Type Imports

Factories work with their corresponding contract types:
import {
  GenericSwapFacet,
  GenericSwapFacet__factory
} from '@lifi/contract-types';

const facet: GenericSwapFacet = GenericSwapFacet__factory.connect(
  address,
  provider
);

Next Steps

Build docs developers (and LLMs) love