Home

Embedded Signer

Pregenerating an embedded wallet

You can pregenerate self-custodial smart account associated with a given account, like an email address or social login, without requiring the user to login. You can even send assets to the wallet before the user logs in to your app for the first time.

Once the user associated with the account logs in, they will be able to access the pregenerated wallet and any assets sent to them.

To pregenerate embedded wallets, use one of the supported backend SDKs:

server.ts

_19
const Openfort = require('@openfort/openfort-node').default;
_19
const openfort = new Openfort(YOUR_SECRET_KEY);
_19
_19
const notifications = await openfort.iam.createAuthPlayer(
_19
{
_19
thirdPartyUserId: "user id",
_19
thirdPartyProvider: 'provider name', // Id of the provider of the user
_19
preGenerateEmbeddedAccount: true
_19
chainId: 4337,
_19
metadata: {
_19
name: "Jaume"
_19
}
_19
},
_19
{
_19
shieldAuthProvider: '', // ShieldAuthProvider.OPENFORT or ShieldAuthProvider.CUSTOM
_19
apiKey: '', // Shield publishable key
_19
apiSecret: '', // Shield secret key
_19
encryptionPart: '' // Shield encryption share
_19
})

In the body of the request:

  • Include a thirdPartyUserId array that contains the user's account to claim the wallet.
  • Include a thirdPartyProvider array that contains the provider used: Openfort, custom, supabase, etc.
  • Include a preGenerateEmbeddedAccount boolean with the value true.

A successful response will include the new user object along with their DID and embedded wallet address, like below:

json

_13
{
_13
"id": "pla_ff54b031-a878-4ca2-9cf5-ae190f921e9b",
_13
"object": "player",
_13
"createdAt": 1691658234,
_13
"linkedAccounts": [
_13
{
_13
"provider": "email",
_13
"email": "jaume@openfort.xyz",
_13
"disabled": false,
_13
"updatedAt": 1691658234
_13
}
_13
]
_13
}

Accessing a pregenerated smart account#

A user can easily claim their pregenerated account simply by logging into your app with one of its linked accounts.