use-user-controlled-wallets

Build non-custodial wallets with Circle's user-controlled wallets SDK using PIN, email OTP, or social login.

Updated Mar 18, 2026
One-click install
npx skills add https://github.com/Surojit012/CMO --skill use-user-controlled-wallets-surojit012
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: use-user-controlled-wallets
Source: https://github.com/Surojit012/CMO/tree/main/.agents/skills/use-user-controlled-wallets
Command: npx skills add https://github.com/Surojit012/CMO --skill use-user-controlled-wallets-surojit012

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires @circle-fin/user-controlled-wallets, @circle-fin/w3s-pw-web-sdk, vite-plugin-node-polyfills, and includes references (resource) components.

What problem does it solve? Integrating non-custodial crypto wallets into an application requires coordinating backend SDK calls, frontend challenge execution, and multiple authentication methods, which is error-prone without a clear implementation guide. ## Core Features & Use Cases - Wallet Creation with Multiple Auth Methods: Create user-controlled wallets via PIN, email OTP, or Google/Facebook/Apple social login using Circle's challenge-response model. - Transactions and Signing: Send token transfers, sign messages (EIP-191, EIP-712), execute smart contracts, and estimate, accelerate, or cancel transactions. - Use Case: A developer building a consumer fintech app can let users sign in with Google, automatically provision an MPC-based wallet on an L2 chain, and send USDC transfers that users approve through Circle's hosted UI. ## Quick Start Ask the AI to create a user-controlled wallet with PIN authentication using Circle's SDKs on a testnet.

Frequently Asked Questions about use-user-controlled-wallets

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I create a non-custodial wallet with Circle's SDK?

Create a user-controlled wallet by initializing the backend client with your API key, creating a user and session token, then calling createUserPinWithWallets to get a challengeId. The frontend Web SDK executes that challenge so the user approves wallet creation through Circle's hosted UI.

How do I add social login wallets with Google or Apple?

Configure your OAuth client ID in the Circle Developer Console, create a device token via createDeviceTokenForSocialLogin, then initialize the W3SSdk with a login callback and call performLogin. After OAuth redirect, the callback returns userToken and encryptionKey for wallet creation.

What is the difference between EOA and SCA account types in Circle wallets?

EOA accounts have no creation fees, broader chain support including Solana and Aptos, but require native tokens for gas. SCA accounts use ERC-4337 account abstraction with gas sponsorship and batching, but are EVM-only and costly on Ethereum mainnet.

Why does sdk.execute fail silently in Circle's Web SDK?

The execute method silently fails if sdk.getDeviceId() was not called after SDK initialization, since that call establishes a session with Circle's service. Also ensure sdk.setAuthentication with userToken and encryptionKey is called before execute.

Can developers access or recover users' private keys?

No. Developers can read wallet data and transaction history but cannot access private keys or act on a user's behalf. Account recovery depends entirely on the user re-authenticating with their original PIN, email, or social account.

How do I track a Circle transaction until it completes?

Poll circleClient.getTransaction with the userToken and transaction ID until a terminal state is reached. The happy path moves from INITIATED through CLEARED, QUEUED, SENT, and CONFIRMED to COMPLETE, while FAILED, DENIED, and CANCELLED are terminal failure states.