Files
metamask-integration/docs/SMART_ACCOUNTS_API_REFERENCE.md
2026-03-02 12:14:14 -08:00

5.7 KiB

Smart Accounts API Reference

Date: 2026-01-26
Network: ChainID 138 (SMOM-DBIS-138)


Overview

Complete API reference for Smart Accounts Kit integration.


SmartAccountsKit Class

Constructor

new SmartAccountsKit(options: SmartAccountsKitOptions)

Options:

interface SmartAccountsKitOptions {
  chainId: number;
  rpcUrl: string;
  entryPointAddress: string;
  accountFactoryAddress: string;
  paymasterAddress?: string;
}

Example:

const kit = new SmartAccountsKit({
  chainId: 138,
  rpcUrl: 'https://rpc.d-bis.org',
  entryPointAddress: '0x...',
  accountFactoryAddress: '0x...',
});

Methods

createAccount()

Creates a new Smart Account.

createAccount(options: CreateAccountOptions): Promise<SmartAccount>

Options:

interface CreateAccountOptions {
  owner: string;
  salt?: string;
}

Returns: Promise<SmartAccount>

Example:

const account = await kit.createAccount({
  owner: userAddress,
});

requestDelegation()

Requests delegation from user.

requestDelegation(options: DelegationOptions): Promise<DelegationResult>

Options:

interface DelegationOptions {
  target: string;
  permissions: string[];
  expiry: number;
  rules?: DelegationRules;
}

Returns: Promise<DelegationResult>

Example:

const delegation = await kit.requestDelegation({
  target: dAppAddress,
  permissions: ['execute_transactions'],
  expiry: Date.now() + 86400000,
});

getDelegationStatus()

Gets delegation status.

getDelegationStatus(options: DelegationStatusOptions): Promise<DelegationStatus>

Options:

interface DelegationStatusOptions {
  target: string;
  account: string;
}

Returns: Promise<DelegationStatus>

Example:

const status = await kit.getDelegationStatus({
  target: dAppAddress,
  account: smartAccountAddress,
});

revokeDelegation()

Revokes delegation.

revokeDelegation(options: RevokeDelegationOptions): Promise<void>

Options:

interface RevokeDelegationOptions {
  target: string;
  account: string;
}

Example:

await kit.revokeDelegation({
  target: dAppAddress,
  account: smartAccountAddress,
});

requestAdvancedPermission()

Requests Advanced Permission (ERC-7715).

requestAdvancedPermission(options: PermissionOptions): Promise<PermissionResult>

Options:

interface PermissionOptions {
  target: string;
  functionSelector: string;
  allowed: boolean;
  conditions?: PermissionConditions;
}

Returns: Promise<PermissionResult>

Example:

const permission = await kit.requestAdvancedPermission({
  target: contractAddress,
  functionSelector: '0xa9059cbb',
  allowed: true,
});

hasPermission()

Checks if permission is granted.

hasPermission(options: CheckPermissionOptions): Promise<boolean>

Options:

interface CheckPermissionOptions {
  account: string;
  target: string;
  functionSelector: string;
}

Returns: Promise<boolean>

Example:

const hasPermission = await kit.hasPermission({
  account: smartAccountAddress,
  target: contractAddress,
  functionSelector: '0xa9059cbb',
});

batchUserOperations()

Creates batch of user operations.

batchUserOperations(operations: UserOperation[]): Promise<UserOperation[]>

Operations:

interface UserOperation {
  to: string;
  data: string;
  value: string;
}

Returns: Promise<UserOperation[]>

Example:

const userOps = await kit.batchUserOperations([
  {
    to: tokenAddress,
    data: transferData,
    value: '0',
  },
]);

executeBatch()

Executes batch of user operations.

executeBatch(userOps: UserOperation[]): Promise<TransactionResult>

Returns: Promise<TransactionResult>

Example:

const result = await kit.executeBatch(userOps);
console.log('Transaction hash:', result.hash);

AccountWalletRegistryExtended Contract

linkSmartAccount()

Links Smart Account to fiat account.

function linkSmartAccount(
    bytes32 accountRefId,
    address smartAccount,
    bytes32 provider
) external onlyRole(ACCOUNT_MANAGER_ROLE)

Parameters:

  • accountRefId: Hashed account reference ID
  • smartAccount: Smart Account address
  • provider: Provider identifier (e.g., "METAMASK_SMART_ACCOUNT")

Events:

  • SmartAccountLinked(accountRefId, smartAccount, provider)

isSmartAccount()

Checks if wallet is Smart Account.

function isSmartAccount(bytes32 walletRefId) external view returns (bool)

Parameters:

  • walletRefId: Hashed wallet reference ID

Returns: bool


isSmartAccountAddress()

Checks if address is Smart Account.

function isSmartAccountAddress(address accountAddress) external view returns (bool)

Parameters:

  • accountAddress: Account address to check

Returns: bool


Error Handling

Common Errors

USER_REJECTED:

  • User rejected transaction
  • Handle gracefully

INSUFFICIENT_FUNDS:

  • Insufficient ETH for gas
  • Prompt user to add funds

PERMISSION_DENIED:

  • Permission not granted
  • Request permission first

DELEGATION_EXPIRED:

  • Delegation has expired
  • Request new delegation

Resources


Last Updated: 2026-01-26