PasskeyAccessVault contract.
The analogy is the way one seed shows up in both MetaMask and Trust, except here each origin gets
its own passkey access key, and the wallet stays fully self-custodial. A wallet created in a
wallet app can be used on a third-party dapp through the shared-origin path, and linked to further
origins by adding access keys.
Enrolling an access key
Adding a device or an origin runs a two-round enrollment ceremony between the existing wallet (the holder) and the new device (the enroller):- Invite round. The holder publishes its wallet address and anchor chain.
- Wrap round. The enroller mints a passkey, seals its own wrapping key, and sends it back.
login() after the holder’s write
confirms. For the full recipe, see Enroll a device.
Removing an access key
removeAccessSlot(slotId, { confirm: true }) destroys the ciphertext on chain: it deletes
the encrypted blob, rather than flagging the slot inactive. A removed passkey then has nothing
left to decrypt on a fresh session.
Removal is genuine revocation, and it is bounded. It cannot un-copy a key that a compromised
device already exfiltrated while it was in use, and the blob persists in public transaction
history. See Remove access for the exact guarantees and the guidance to
give users.