A signer is a digital identity authorized to approve actions on the wallet’s behalf.
When a transaction is initiated, the signer digitally signs it, thereby authorizing and enabling its execution.
Crossmint supports the following signer types:
Choosing a signer type
Signer types will define the custody and user experience of a wallet.
Signer type | Custody | User experience |
---|
Email, phone number, social login | Non-custodial | Users authenticate once per device the first time they are going to transact. Future transactions can happen without needing user interaction. |
Passkey | Non-custodial | Transactions need to be signed every time with the device biometrics or password manager. |
External Wallet | Non-custodial or custodial depending on who has access to the wallet. | Transactions need to be signed every time with the external wallet. |
API Key | Custodial | All transactions can happen without needing user interaction. |
If you use a non-custodial signer and a custodial signer at the same time, the wallet will be considered custodial.
Choose custodial signers if:
- You are licensed for custody
- You are building use cases that don’t require custody, such as collectibles or utility token management
- You want to handle asset management and transactions on behalf of users
- You need a simple, server-side solution without user interaction for blockchain operations
Choose non-custodial signers if:
- You are building use cases that require license (e.g. holding stablecoins) and you don’t have it
- Self custody is important to your users
Signer types
Email, phone number, and social login
Email signers are undergoing a security audit and will be production ready early July.
Phone number and social login signers are available under private access. Contact
us if you need access.
Email, phone number, and social login signers enable users to access their wallets and perform transactions seamlessly using their email address, phone number, or social account.
Users just need to verify their email address, phone number, or social account once per device to access their wallet.
Configuration
import { useWallet } from '@crossmint/client-sdk-react-ui';
const { getOrCreateWallet } = useWallet();
const wallet = await getOrCreateWallet({
chain: "<your-chain>",
signer: {
type: "email",
},
});
import { useWallet } from '@crossmint/client-sdk-react-ui';
const { getOrCreateWallet } = useWallet();
const wallet = await getOrCreateWallet({
chain: "<your-chain>",
signer: {
type: "email",
},
});
const wallet = await crossmintWallets.createWallet({
chain: "<your-chain>",
signer: {
type: "email",
},
});
import { useWallet } from '@crossmint/client-sdk-react-native-ui';
const { getOrCreateWallet } = useWallet();
const wallet = await getOrCreateWallet({
chain: "<your-chain>",
signer: {
type: "email",
},
});
Passkey
Passkeys enable users to access their wallets and perform transactions using their device biometrics or password manager.
They are built on top of the WebAuthn standard and are supported by most modern browsers.
Configuration
import { useWallet } from '@crossmint/client-sdk-react-ui';
const { getOrCreateWallet } = useWallet();
const wallet = await getOrCreateWallet({
chain: "solana",
signer: {
type: "passkey",
},
});
import { useWallet } from '@crossmint/client-sdk-react-ui';
const { getOrCreateWallet } = useWallet();
const wallet = await getOrCreateWallet({
chain: "solana",
signer: {
type: "passkey",
},
});
const wallet = await crossmintWallets.createWallet({
chain: "<your-chain>",
signer: {
type: "passkey",
},
});
import { useWallet } from '@crossmint/client-sdk-react-native-ui';
const { getOrCreateWallet } = useWallet();
const wallet = await getOrCreateWallet({
chain: "<your-chain>",
signer: {
type: "passkey",
},
});
External wallet
External wallets (or keypairs) can be used as signers to access and transact with a wallet. This includes also wallets
Configuration
import { useWallet } from '@crossmint/client-sdk-react-ui';
const { getOrCreateWallet } = useWallet();
const wallet = await getOrCreateWallet({
chain: "<your-chain>",
signer: {
type: "external-wallet",
address: "<your-wallet-address>",
},
});
import { useWallet } from '@crossmint/client-sdk-react-ui';
const { getOrCreateWallet } = useWallet();
const wallet = await getOrCreateWallet({
chain: "<your-chain>",
signer: {
type: "external-wallet",
address: "<your-wallet-address>",
},
});
const wallet = await crossmintWallets.createWallet({
chain: "<your-chain>",
signer: {
type: "external-wallet",
address: "<your-wallet-address>",
},
});
import { useWallet } from '@crossmint/client-sdk-react-native-ui';
const { getOrCreateWallet } = useWallet();
const wallet = await getOrCreateWallet({
chain: "<your-chain>",
signer: {
type: "external-wallet",
address: "<your-wallet-address>",
},
});
API key
A project’s API key can also be used as a signer for your wallet. This allows transacting with a wallet without needing the user to sign at any point.
Configuration
import { useWallet } from '@crossmint/client-sdk-react-ui';
const { getOrCreateWallet } = useWallet();
const wallet = await getOrCreateWallet({
chain: "<your-chain>",
signer: {
type: "api-key",
},
});
import { useWallet } from '@crossmint/client-sdk-react-ui';
const { getOrCreateWallet } = useWallet();
const wallet = await getOrCreateWallet({
chain: "<your-chain>",
signer: {
type: "api-key",
},
});
const wallet = await crossmintWallets.createWallet({
chain: "<your-chain>",
signer: {
type: "api-key",
},
});
import { useWallet } from '@crossmint/client-sdk-react-native-ui';
const { getOrCreateWallet } = useWallet();
const wallet = await getOrCreateWallet({
chain: "<your-chain>",
signer: {
type: "api-key",
},
});