Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.optimism.io/llms.txt

Use this file to discover all available pages before exploring further.

Actions SDK lets you choose which assets, markets, chains, protocols, and providers you want to support in your application via configuration file.
1

Install Actions SDK

Follow the quickstart guide to add Actions SDK as a dependency in your app.
2

Integrate an embedded wallet

Follow the integrating wallets guide, choose and install a Wallet Provider.
3

Create a config file

actions.ts - An accessible file that holds all of your configuration preference.
4

Configure a Wallet Provider

Let Actions SDK know which Wallet Provider you’ve chosen:
Select a wallet provider:
actions.ts
const walletConfig = {
  hostedWalletConfig: {
    provider: {
      type: "privy" as const,
    },
  },
  smartWalletConfig: {
    provider: {
      type: "default" as const,
      attributionSuffix: "actions",
    },
  },
};
5

Configure supported assets

Configure which assets you want to support across all lend providers:
actions.ts
// Additional config from previous steps...

// Import popular assets
import { USDC } from '@eth-optimism/actions-sdk/assets'
import type { Asset, AssetsConfig } from "@eth-optimism/actions-sdk";

// Or define custom assets
export const CustomToken: Asset = {
  address: {
    [mainnet.id]: '0x123...',
    [unichain.id]: '0x456...',
    [baseSepolia.id]: '0x789...',
  },
  metadata: {
    decimals: 6,
    name: 'Custom Token',
    symbol: 'CUSTOM',
  },
  type: 'erc20',
}

// Configure allowed/blocked assets
const assetsConfig: AssetsConfig = {
  allow: [USDC, CustomToken],
  block: [],  // Optional
}
6

Configure Markets

Define which markets you want to support or block within your app:
actions.ts
// Additional config from previous steps...

export const GauntletUSDC: LendMarketConfig = {
  address: '0xabc...',
  chainId: unichain.id,
  name: 'Gauntlet USDC',
  asset: USDC,
  lendProvider: 'morpho',
}
7

Configure Lend Providers

Configure which lend protocols you want to support. You can enable one or multiple providers:
actions.ts
// Additional config from previous steps...

import type { LendConfig } from "@eth-optimism/actions-sdk";

const lendConfig: LendConfig = {
  morpho: {
    marketAllowlist: [GauntletUSDC],
    marketBlocklist: [],  // Optional
  },
  aave: {
    marketAllowlist: [AaveWETH],
    marketBlocklist: [],  // Optional
  },
};
8

Configure supported chains

Configure supported chains:
actions.ts
// Additional config from previous steps...

import { optimism, base } from "viem/chains";

// Define any EVM chain
const OPTIMISM = {
  chainId: optimism.id,
  rpcUrls: env.OPTIMISM_RPC_URL,
  bundler: {
    // Bundle and sponsor txs with a gas paymaster
    type: "simple" as const,
    url: env.OPTIMISM_BUNDLER_URL,
  },
};

const BASE = {
  chainId: base.id,
  rpcUrls: env.BASE_RPC_URL,
  bundler: {
    // Bundle and sponsor txs with a gas paymaster
    type: "simple" as const,
    url: env.BASE_BUNDLER_URL,
  },
};

const chains = [OPTIMISM, BASE];
9

Initialize Actions

Finally bring it all together and initialize Actions:
actions.ts
// Additional config from previous steps...

export const actions = createActions({
  wallet: walletConfig,
  assets: assetsConfig,
  lend: lendConfig,
  chains,
});
10

Take Action

Once you’ve initialized your actions instance, import it anywhere you need to take action:
import { actions } from './actions';

// Use actions anywhere in your app
const market = await actions.lend.getMarket({ ... });
const wallet = await actions.wallet.createSmartWallet({ ... });
const receipt = await wallet.lend.openPosition({ ... });

Next Steps

For detailed API documentation and type definitions, see the Actions SDK Reference.