Skip to main content
A newly created smart account has a counterfactual address before it has contract code. Deployment is per chain: receiving assets at that address does not deploy it, and deployment on one chain does not deploy it everywhere. Use the account and transaction calls from Relay a transaction for the examples below.
Embedded wallets derive and store the account address and factory data during sign-up. Authentication does not submit an onchain deployment transaction.

Automatic deployment

Send the first real transaction with sendIntent(). If the account is undeployed on the execution chain, the wallet includes its factory setup in the intent. You do not need to construct or submit a factory call yourself.
This example uses the same-chain USDC transfer from Relay a transaction, including its clear-signing review. The completed intent deploys the account on Base Sepolia if necessary, then executes the calls.The deployment cost is part of the route. With sponsorshipMode: "required", your application must sponsor it. For a user-paid route, use "disabled" and fund the account with enough assets for both the calls and fees. See Sponsor fees for setup and fallback behavior.

Check deployment

Use a public RPC client for the chain you want to check. OneAuthClient does not expose an isDeployed() method:
Check the authenticated account’s address, not an account from another application or WebAuthn mode. See Accounts for the namespace boundaries.
@rhinestone/1auth does not expose a standalone deployment method. Deploy with the first real intent; the explicit deployment examples in the Custom signer tab are not embedded wallet APIs.