The two roles
- Holder (export role): the device that already has the wallet.
- Enroller (import role): the new device joining the wallet.
The two rounds
- Invite. The holder publishes its wallet address and anchor chain.
- Wrap. The enroller mints a passkey, seals its own wrapping key, and sends it back.
The write is atomic: it lands, or the enrollment fails. There is no queued access slot.
Drive it with the React hook
usePairingCeremony runs the phase machine. Provide a transport that moves the codes between the
two devices. On the web this defaults to a browser QR transport (camera plus on-screen QR):
transport is required there), for example
createExpoCameraTransport(Camera). See React Native setup.
After enrollment
The enroller is not logged in by the ceremony. It was never handed the wallet key. After the holder’s write confirms, calllogin() (or useLogin) on the new device to start a session.