Embedded smart wallets (also known as Account Abstraction wallets) are now available to developers on Solana. This means that apps can offer users simpler onboarding and user experience.

At the same time, developers benefit from better flexibility, security, and compliance — ultimately leading us to safer and more user-friendly onchain experiences. 

https://x.com/i/web/status/1892647731568550007

Unlike non-executable accounts (data accounts) and traditional embedded wallets, smart wallets are programmable, which unlocks a whole new generation of features: gas sponsorship, having multiple signers per wallet, spend limits, etc.

In this write-up, you will learn the key differences between embedded smart wallets on Solana and other wallet solutions.

You’ll also understand how smart wallets work on Solana, and how to implement embedded smart wallets into your application.

What is a smart wallet?

Smart wallets are executable program accounts which contain executable code. Unlike traditional wallets which are simple keypairs controlled by a single private key, smart wallets on Solana are implemented as programs, with special logic and features.  

What are the benefits of smart wallets?

Smart wallets eliminate the need for seed phrases and their associated risk of loss. Instead, they allow users to designate one or more “signers” or keys to control the wallet.

This flexibility enables more user-friendly key management options like biometrics (e.g., Face ID, Touch ID, or passkeys), as well as advanced security schemes (e.g., multisig) or enterprise-level controls (e.g., a server-side admin key).

Smart wallets make feeless transactions possible by enabling developers to sponsor fees with SOL or other SPL tokens like USDC and easily abstract them away from the end user — leading to a more familiar web2-like user experience.  

This means you can build apps without transaction approval prompts, without seed or private keys to lose, and with programmable security enforced by programs (smart contracts).

Embedded Smart Wallets vs. Embedded Wallets vs. Non-Executable Accounts

Embedded Smart WalletsEmbedded WalletsNon-Executable
ImplementationSmart contract with custom logicNon-smart contract account embedded in appStandalone application or browser extension
Account ControlFlexible - users can designate one or multiple signers (ranging from EOAs like Phantom to passkeys and social login wallets) with optional programmatic rulesKeypair guarded by social log-in (usually in TEE or MPC cluster)Controlled directly by user-owned keypair
Custody ModelFlexible. They can be set to be self-custodial by the user, custodial by the developer, and even hybrid, with both modes in oneTypically non-custodial - but some recovery methods can convert them into becoming custodialSelf-custody by the end user
Key ManagementMultiple authorization methods (MPC, social recovery, etc.)Typically managed by the applicationUser-managed seed phrase/private key
Transaction AuthorizationCustom verification logic (multisig, time-locks, limits)Application signs with embedded private keyUser explicitly approves each transaction
Fee PaymentSupports fee abstraction and sponsorship, allowing payments in other SPL tokens like USDC or USDTUser pays all transaction fees. Requires onramp on every appUser pays all transaction fees
Security ModelSecurity enforced in open-source smart contract code, with optional programmable constraintsSecurity dependent on closed source code by the embedded wallet providerSecurity dependent on client-side, closed source code
Recovery OptionsProgrammable recovery (social, guardian keys)Application-provided recovery methodsSeed phrase-based recovery only
Spending ControlsProgrammable spending limits, approval workflowsSome embedded wallets support server-side transaction policies (caution - if improperly implemented, it can create a custodial architecture)None
Regulatory ConsiderationsFlexible - custody can be programmed and allows to adapt wallets to evolving regulatory changesConsult with specific wallet providerLower scrutiny - user-controlled
Enterprise FeaturesRole-based access control, approval workflowsSome embedded wallets have limited server-side controlsNone
Vendor lock-inLow. Smart wallets are based on open source programs. It is possible to migrate users from an infrastructure provider without changing their address.High. The only way to leave embedded wallets is to have each user do a private key recovery - which can be insecure and may require users to perform manual stepsLow. User dependent

Typical Smart Wallet Use Cases

Solana Smart Wallets are useful when you require flexible custodial architectures, such as:

  • Company treasury wallets managed by multiple employees
  • AI agent wallets in agentic finance use cases, where the agent owner needs a key, and the agent itself needs another one
  • Neobanks and financial apps where the user is self-custodial but opts to allow the bank to pull funds (e.g. recurring payments)

A key characteristic of delegated signers is that they can be scoped to limit their permissions over the wallet, such as with spend or asset class restrictions.

How do smart wallets work specifically on Solana?

Smart wallets on Solana operate through a combination of onchain programs and offchain infrastructure with some unique Solana-specific characteristics:

Program-based Architecture

Unlike non-executable accounts (data accounts), Solana smart wallets (or executable program accounts) are typically implemented as on-chain programs that control one or more accounts (PDAs).

Transaction Authorization

Instead of a single private key, smart wallets use custom auth logic:

  • Multiple signers can be required (multisig functionality)
  • Various auth methods can be supported (keys, biometrics, social)
  • Time locks and spending limits can be enforced programmatically

Account Delegation

Users can delegate specific permissions to different addresses, allowing for more granular control over what each key/device can do.

Work with Versioned Transactions

Smart wallets use Solana’s standard versioned transaction format.

What is account abstraction?

Account Abstraction (AA) enables developers to create customizable smart contract accounts that go beyond Non-Executable Accounts tied to a single keypair, allowing for more flexible user experiences.

AA allows for custom validation logic, meaning accounts can implement security features such as social recovery, multisig requirements, or spending limits without relying on the blockchain’s default rules. 

The primary goal of AA is to make blockchain technology invisible to users by removing technical barriers (like transaction fees and seed phrases) while maintaining self-custody benefits.

How do feeless transactions work on Solana?

The key advantage of smart wallets for feeless transactions is that the abstraction happens at the account level rather than requiring dApp-specific implementations, creating a more seamless experience where users may not even realize transaction fees exist.

This means developers can implement:

Built-in Fee Abstraction

Smart wallets can incorporate fee sponsorship directly into their architecture. The wallet contract itself can define rules about who pays for fees and under what circumstances.

Flexible Fee Currency

If you don’t wish to sponsor a user’s transaction fees, they can pay with SOL or tokens such as USDC or USDT.

Approval Mechanisms

Smart wallets can implement custom verification logic to determine when sponsored transactions are allowed, such as rate limiting or restricting to specific apps.

How to Add Solana Smart Wallets to your App with Crossmint

There are many ways to integrate Smart Wallets into your app: client side, server side, or with dual key architectures for AI agents.

In the tutorial below, you will learn how to deploy your first smart wallet server-side.

Prerequisites

First, create a developer account in the Crossmint Staging Console

Then, navigate to project Settings > General and change the wallet type to “Smart Wallets”.

Select “Smart Wallets” in your Crossmint dashboard

You can get an API Key by going to Integrate > API Keys and selecting “Create new key” in the “Server-side keys” section.

Under the Wallets API category, select the following scopes:

  • wallets.create
  • wallets.read
  • wallets:signatures.create
  • wallets:transactions.create
  • wallets:transactions.read
  • wallets:transactions.sign

Click “Create server key” to save the key for the next step.

Create Your First Smart Wallet

Create a file (e.g., createWallet.ts) and enter this code:

const apiKey = "YOUR_API_KEY";
const walletType = "solana-smart-wallet";
const adminSigner = {
  // In production, you may want to use an MPC solution, like
  // crossmint-managed MPC keys
  type: "solana-keypair",
};

async function createWallet() {
  const response = await fetch("https://staging.crossmint.com/api/2022-06-09/wallets", {
    method: "POST",
    headers: {
      "X-API-KEY": apiKey,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      type: walletType,
      config: {
        adminSigner,
      },
    }),
  });

  return await response.json();
}

createWallet()
  .then((json) => console.log(json))
  .catch((err) => console.error(`error: ${err}`));

Before running it, fill in YOUR_API_KEY with the key obtained in the previous step.

Now, run the script:

npx tsx createWallet.ts

The API will return a response with your new wallet details.

Save the wallet address, as you’ll use it in the next step.

Interact with Your Wallet

Now that we have wallets set up on your server, let’s interact with them.

Start by visiting Crossmint Testnet USDXM Faucet and paste your wallet address from the step above to receive test USDXM on Solana.

Now that you have some tokens, let’s check the wallet’s balance (checkBalance.ts):

const apiKey = "YOUR_API_KEY";
const walletAddress = "YOUR_WALLET_ADDRESS"; // From previous step
const tokens = ["sol", "usdc", "usdxm"]; // Tokens to fetch balances for
const chains = ["solana"]; // Chains to query balances from

async function getWalletBalance() {
  const url = new URL(`https://staging.crossmint.com/api/v1-alpha2/wallets/${walletAddress}/balances`);
  url.search = new URLSearchParams({
    tokens: tokens.join(","),
    chains: chains.join(","),
  }).toString();

  const response = await fetch(url, {
    method: "GET",
    headers: {
      "X-API-KEY": apiKey,
      "Content-Type": "application/json",
    },
  });

  return await response.json();
}

getWalletBalance()
  .then((json) => console.log(json))
  .catch((err) => console.error(`error: ${err}`));

Congratulations, you now have smart wallets deployed on your server!

You can explore the documentation from here to learn how to make your first transaction, add delegated signers, and more.

Conclusion

Smart Wallets will usher in a new generation of apps built on Solana that improve onboarding, user experience, security, and compliance.

At Crossmint, we’re excited to power a wide array of use cases from IP to loyalty programs to AI agents with our simple API and no-code tools for wallets, payments, and tokenization that can scale reliably to millions of users, and now, powering fintechs and AI agent apps with the launch of Solana Embedded Smart Wallets.

If you want to learn more about how Solana Smart Wallets can be implemented within your project, contact us, and we’ll be happy to help.

Additional Resources