AES Backup Security
How storage works
const backupKey = (address: string, chainId: number) =>
`coti-example:aes-backup:${chainId}:${address.toLowerCase()}`;
configureCotiPlugin({
onboardingServices: {
mode: 'custom',
fetchEncryptedAesBackup: async ({ address, chainId }) => {
const raw = localStorage.getItem(backupKey(address, chainId));
return raw ? JSON.parse(raw) : null;
},
saveEncryptedAesBackup: async ({ address, chainId, backup }) => {
localStorage.setItem(backupKey(address, chainId), JSON.stringify(backup));
},
replaceEncryptedAesBackup: async ({ address, chainId, backup }) => {
localStorage.setItem(backupKey(address, chainId), JSON.stringify(backup));
},
deleteEncryptedAesBackup: async ({ address, chainId }) => {
localStorage.removeItem(backupKey(address, chainId));
},
},
});Architectural priority
What possession of a backup means
Cross-app restore (crypto portability)
Domain separation is not origin binding
User-facing signing warning
What recovery is not
Determinism check (default on)
Outcome
Meaning
Wallet support policy
Officially supported (expected to work)
Not officially supported / treat as unsupported
keyEpoch (reserved for a future format)
Remote storage (deprecated)
Related docs
Last updated
Was this helpful?