Skip to main content
The Universal Accounts SDK lets you integrate Particle Network’s chain abstraction into your dApp. It provides your users with a unified address and balance across EVM chains and Solana.You can use this SDK to:
  • Allow users with assets on any chain to access your dApp.
  • Give your users a unified assets balance and identity across chains and ecosystems.
  • Execute transactions across chains without bridging or transferring assets.
The SDK is currently only available for Web.
Check out our SDK Reference for detailed platform-specific docs.
Primary Assets are tokens with deep liquidity, used by the Universal Accounts SDK as sources for cross-chain transactions. These assets are used for gas, swaps, and liquidity routing across chains.
Find a list of the supported Primary Assets in the Supported Chains & Primary Assets page.
Users can hold Primary assets on any supported chain. When a transaction (like a swap or transfer) is initiated, the SDK will:
  • Identify the most optimal Primary Asset from the user’s portfolio. For example, it may select USD on Polygon to allow a user to purchase a memecoin on Solana.
  • Route liquidity across all the chains the user holds this Primary Asset using Universal Liquidity.
  • Complete the transaction on the destination chain, even if the user holds no assets on that chain.
Yes. Universal Accounts are ERC-4337 smart account implementations, which means users must deposit assets into them before they can be used.However, if a user already holds funds on another app leveraging Universal Accounts, like UniversalX, those balances will be already available and usable within your dAppTo enable swaps, transfers, or contract calls:
  • Users must hold at least one Primary Asset on their Universal Account.
  • Once deposited, the SDK can route liquidity across supported chains.
No. Universal Accounts are ERC-4337 smart accounts—they don’t have private keys like traditional EOAs (Externally Owned Accounts).Instead, ownership and permissions are managed via a signer (such as a user’s wallet or social login) that authorizes transactions.
Each Universal Account (UA) transaction may include the following fees:
  • Gas fees: Required to execute the transaction on the destination chain.
  • Liquidity provider (LP) fee: A 0.20% fee applied only to cross-chain transactions, paid to the LP handling the transfer.
  • Swap fee: Applied only when swapping tokens, and varies based on token popularity:
    • 0.1% for tokens ranked in the top 500 on CoinGecko.
    • 1% for tokens ranked above 500.
These fees are automatically calculated and included in the transaction quote returned by the SDK. Users don’t need to manage gas tokens—Universal Liquidity handles routing and fee payments behind the scenes.Fees can be edited on a per-project basis. Reach out to Particle Support for assistance.
This error happens because Vite doesn’t polyfill Node.js globals like Buffer in the browser. However, some SDK dependencies (like ethers) may expect it to be available.To fix this, follow these steps:

1. Install required packages

npm install buffer
npm install --save-dev @esbuild-plugins/node-globals-polyfill @esbuild-plugins/node-modules-polyfill
  1. Update your vite.config.ts
vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { NodeGlobalsPolyfillPlugin } from '@esbuild-plugins/node-globals-polyfill'
import { NodeModulesPolyfillPlugin } from '@esbuild-plugins/node-modules-polyfill'

export default defineConfig({
  plugins: [react()],
  optimizeDeps: {
    esbuildOptions: {
      define: {
        global: 'globalThis'
      },
      plugins: [
        NodeGlobalsPolyfillPlugin({
          buffer: true
        }),
        NodeModulesPolyfillPlugin()
      ]
    }
  },
  resolve: {
    alias: {
      buffer: 'buffer'
    }
  }
})
You might get this error when using TypeScript. To fix it, you can add a declaration in tsconfig.json.Add ./node_modules/@particle-network/universal-account-sdk/dist/index.d.ts to the paths property in tsconfig.json.
{
  "paths": {
    "@/*": ["./*"],
    "@particle-network/universal-account-sdk": ["./node_modules/@particle-network/universal-account-sdk/dist/index.d.ts"]
  }
}
This will solve the declaration error.
Still need help?
Reach out via our Telegram support channel to get direct help from Particle’s Developer Relations team.
I