atproto-wallet-mvp · attested-wallet-flow
A production smoke test of the fail-closed Vercel client and its measured dstack wallet workload on GCP Intel TDX, using satyam2.climateai.org.
The measured wallet works end to end. The production attestation route verified exact app, compose, and OS measurements; the browser enrolled a WebAuthn PRF request key, created a 2-of-3 wallet, signed an EIP-191 message, locally recovered the same EVM address, exported through a 200 response, and saved a passkey-protected recovery copy. One API mismatch found during the run was fixed and deployed before the successful rerun.
The 7m26s recording covers the final uninterrupted path from the authenticated dashboard through passkey enrollment, wallet creation, signing, export, and recovery protection. A CDP virtual authenticator exercised the real WebAuthn PRF code path.
0x8c94…6236 and matches the wallet locally.
a354b5ef24506a31adf86ffe4ad0792856d97d99
Composed4d4abd7761f79e8…d0f0d2fae30ba3b
OS image9f037b4919004c86…998f8814e13fe7ea
Service DIDdid:web:wallet.136-64-29-13.sslip.io
EVM address0x8c94a59B9fe27014bCe2fBAe724a35B325de6236
Public statewallet-public.json — active, version 1
Attestationattestation.json — fail-closed production route returned verified
Negative probesnegative-probes.txt — missing service auth: 401; malformed challenge: 400
The first wallet-creation attempt reached the measured service but failed with requestId is required. The MVP lagged the hardened wallet-service write contract. Commit 0d5825d now generates wallet-service-compatible request IDs for create, sign, export, recovery, and recovery-from-export. Seven tests, typecheck, build, and the live rerun passed.
After the test was paused for several hours, the dashboard surfaced "exp" claim timestamp check failed. Signing out and back in minted a fresh DPoP-bound session and restored operation. This is not a TDX or wallet clock failure, but the MVP should refresh OAuth tokens or convert this low-level error into a clear reauthentication prompt.
The deployment tooling previously proved that the workload disk is reused with autoDelete=false, and KMS identity stayed stable across this run's clean-state redeployment. The final stronger check—recreate the TDX VM after wallet creation and sign again—was blocked when the local GCP CLI demanded interactive reauthentication. The live instance remains healthy with deletion protection enabled.
The Vercel gate accepted only the pinned dstack evidence bundle and exact encryption JWK. Direct unauthenticated wallet-info access returned 401, while a malformed attestation challenge returned 400. Browser console and runtime error logs were empty during the final path.
The authorization allowlist is operator-managed static policy. TDX, measured boot, digest pinning, and external KMS reduce mutable workload risk, but this deployment is intentionally operator-trusted rather than decentralized or fully operator-proof.
curl https://atproto-wallet-mvp.vercel.app/api/wallet/attestation
Testsnpm test && npm run typecheck && npm run build
Videohappy-path-final.webm (2.0 MB)
Screenshotsassets/05-wallet-created.png through 07-passkey-backup.png
Accountsatyam2.climateai.org; password intentionally omitted