Workspace IndexDev Notes › The wallet disappeared into the app

#27PoC

The wallet disappeared into the app

Embedded wallets and passkeys remove the seed phrase from onboarding, but the trust question moves into recovery, export, app signers, and transaction policies.

Build one login-to-first-transaction flow with an embedded wallet provider (e.g. Privy), then run the four failure paths — new device, lost authentication factor, key export, scoped app signer — and fill in the authority matrix before comparing click counts.

Why

The trend is not "wallets became easy." Wallet responsibilities moved into the application. The PoC measures whether the user has an exit and whether the app can act beyond what the UI implies.

Embedded wallets and passkeys remove the seed phrase from onboarding. They do not remove custody and authorization questions; those questions move into recovery, export, additional signers, and policies controlled through the application stack.

How it works

Build one login-to-first-transaction flow with an embedded wallet, then test device loss, key export, MFA recovery, and a scoped app signer. Draw the authority matrix before judging the UX.

PoC

Build login-to-first-transaction with an embedded wallet. Then test four paths: a new device, lost authentication factor, key export, and a scoped application signer. Produce the authority matrix before comparing click counts.

Actor Can sign? Can recover? Can export?
User Under configured authentication Test explicitly Verify the escape hatch
Application signer Only within policy — or the policy is cosmetic No No
Provider Depends on custody and key architecture Document the exact role Document the exact role

Reference: Privy embedded-wallet overview.

Notes — background for the PoC (2026-09-02)

What an embedded wallet is

A conventional wallet (MetaMask) is external: a separate app or extension the user installs, holding a seed phrase, that websites connect to. An embedded wallet lives inside the application. Logging in with email, Google, or a passkey silently provisions a real on-chain wallet — no extension, no seed-phrase ceremony, no visible "wallet" concept at all. The wallet becomes an implementation detail instead of a prerequisite, which is why this is now the default onboarding pattern for consumer crypto apps.

The technical trick is that no single place ever holds the whole private key: either MPC (the key never exists in one piece; parties co-sign) or Shamir key sharding (split into shares, reassembled briefly at signing time), with signing inside an isolated environment — a sandboxed iframe on the client, or a TEE on a server.

Privy specifically

  • Shamir 3-share model — a device share (browser/app storage), an auth share (held by Privy, released after login), and a recovery share. Any two reconstruct the key briefly inside an isolated iframe; Privy's servers never see the full key.
  • Recovery — the recovery share sits with Privy (default "automatic" mode) or is user-controlled (password-encrypted, or in iCloud/Google Drive). This choice is the custody decision — it is the answer to the lost-auth-factor path.
  • Export — users can export the full private key through a Privy-hosted flow; the app configures whether this is exposed.
  • Server wallets & session signers — TEE-based server-side wallets plus scoped signers with a policy engine ("this signer may only call this contract, up to this amount"). That is the fourth path.
  • Context — Stripe acquired Privy in June 2025 (paired with its stablecoin acquisition, Bridge): embedded wallets are becoming mainstream payments plumbing. Farcaster and Hyperliquid ship on it. Competitors — Dynamic, Web3Auth, Magic, Turnkey, Coinbase Embedded Wallets, thirdweb — differ exactly along the authority-matrix dimensions: who holds which share, how recovery works, who can change policy.

What each of the four paths measures

  1. New device — a fresh device has no device share, so login requires Privy's servers to participate. The uncomfortable question: if Privy is down or deplatforms you, can you sign at all? Expected answer: not without a prior export. Privy holds an availability veto — it cannot take the assets, but it can block access.
  2. Lost authentication factor — recovery is where the real custodian reveals itself: whoever can approve recovery can, in effect, take the wallet. If recovery is "email a support team," the custody story is weaker than the marketing.
  3. Key export — the exit door, and the strongest evidence for the self-custody claim. Test more than existence: the friction, whether the app developer can disable it, and whether the exported key is complete (it should reconstruct the same address in a vanilla wallet).
  4. Scoped app signer — the delegation boundary: what can the app do without the user, and who can widen that scope later? A policy the developer can rotate silently is a different object from one the user must re-approve.

The matrix before click counts

Click counts measure onboarding friction; the matrix measures the trust model. Comparing UX first is how "2 clicks to a wallet" hides that several parties can act on the funds. Expanded matrix — rows are actions, columns are actors; fill each cell as alone / needs cooperation / cannot, from observation, not docs. Expected values to verify:

Action User Privy App developer
Sign a transaction Alone, after login Cooperation — releases the auth share Within signer policy only
Export the key Alone, if exposed Cooperation — hosts the flow Can gate exposure — verify
Approve recovery Depends on recovery mode Default holder of the recovery share Chooses the recovery mode
Add / scope a signer Consent per config — verify Executes policy Initiates
Change policy Re-approval? — verify Enforces Often alone — verify
Block access (availability) Auth-share veto Can remove the UI

The most interesting cells are usually "approve recovery" and "change policy" — that is where authority quietly concentrates in the app stack. Prediction to test: the app developer holds more authority than users assume, and Privy holds the availability veto. Neither appears in a click-count comparison.

The developer is the auditor

The end user never sees any of this — that is the point of embedded wallets, and the risk. Whatever the integrator configures becomes the custody reality users silently inherit. And the answers are configuration choices, not fixed properties: "Privy is non-custodial" is a marketing sentence, and two apps on the same Privy SDK can have genuinely different custody models. Run the four paths by hand because docs describe the design; the paths reveal deployed behavior — unnoticed defaults, failing flows, support-team backdoors. That is also why the matrix comes first: it forces "who can do what" onto paper as observed facts before any UX judgment.

← All Dev Notes · Workspace Index · Top ↑

지갑이 앱 속으로 사라졌다

임베디드 지갑과 패스키는 온보딩에서 시드 문구를 없애지만, 신뢰 문제는 복구·내보내기·앱 서명자·트랜잭션 정책으로 옮겨 갑니다.

임베디드 지갑 제공자(예: Privy)로 로그인부터 첫 트랜잭션까지 플로우 하나를 만들고, 네 가지 경로 — 새 기기, 인증수단 분실, 키 내보내기, 범위가 제한된 앱 서명자 — 를 실행합니다. 클릭 수를 비교하기 전에 권한표부터 채웁니다.

이 흐름의 본질은 "지갑이 쉬워졌다"가 아닙니다. 지갑의 책임이 애플리케이션 안으로 옮겨 간 것입니다. 이 PoC 는 사용자에게 출구가 있는지, 그리고 앱이 UI 가 암시하는 것 이상으로 행동할 수 있는지를 측정합니다.

임베디드 지갑과 패스키는 온보딩에서 시드 문구를 없앱니다. 하지만 수탁과 인가의 문제를 없애지는 않습니다 — 그 문제들은 복구, 내보내기, 추가 서명자, 애플리케이션 스택으로 제어되는 정책 속으로 옮겨 갑니다.

동작 방식

임베디드 지갑으로 로그인부터 첫 트랜잭션까지 플로우 하나를 만들고, 기기 분실, 키 내보내기, MFA 복구, 범위가 제한된 앱 서명자를 시험합니다. UX 를 평가하기 전에 권한표부터 그립니다.

PoC

임베디드 지갑으로 로그인→첫 트랜잭션을 만듭니다. 그다음 네 경로를 시험합니다: 새 기기, 인증수단 분실, 키 내보내기, 범위가 제한된 앱 서명자. 클릭 수를 비교하기 전에 권한표를 만듭니다.

행위자 서명 가능? 복구 가능? 내보내기 가능?
사용자 설정된 인증 아래에서 명시적으로 시험할 것 탈출구가 실재하는지 확인할 것
앱 서명자 정책 안에서만 — 아니면 그 정책은 장식 불가 불가
제공자 수탁·키 구조에 따라 다름 정확한 역할을 문서화할 것 정확한 역할을 문서화할 것

참고: Privy 임베디드 지갑 개요.

노트 — PoC 를 위한 배경 (2026-09-02)

임베디드 지갑이란

MetaMask 같은 일반 지갑은 외부형입니다: 사용자가 따로 설치하는 앱/확장 프로그램이 시드 문구를 보관하고, 웹사이트가 거기에 연결합니다. 임베디드 지갑은 애플리케이션 안에 삽입됩니다. 이메일·구글·패스키로 로그인하면 앱이 백그라운드에서 실제 온체인 지갑을 조용히 만들어 줍니다 — 확장 프로그램도, 시드 문구 의식도, 눈에 보이는 "지갑" 개념 자체도 없습니다. 지갑이 전제조건이 아니라 구현 세부사항이 되고, 그래서 지금 소비자용 크립토 앱의 기본 온보딩 패턴이 됐습니다.

기술적 핵심은 개인키 전체를 한 곳에 두지 않는 것: MPC(키가 한 조각으로 존재한 적 없이 여러 당사자가 공동 서명) 또는 Shamir 키 분할(조각으로 나눠 서명 순간에만 잠깐 재조합). 서명은 격리된 환경 — 클라이언트의 샌드박스 iframe 이나 서버의 TEE — 에서 일어납니다.

Privy 는 구체적으로

  • Shamir 3조각 모델기기 조각(브라우저/앱 저장소), 인증 조각(Privy 보관, 로그인 후 제공), 복구 조각. 셋 중 둘만 있으면 격리된 iframe 안에서 키가 잠깐 재조합되고, Privy 서버는 전체 키를 본 적이 없습니다.
  • 복구 — 복구 조각을 Privy 가 보관(기본 "자동" 모드)하거나 사용자가 통제(비밀번호 암호화, iCloud/Google Drive)합니다. 이 선택이 수탁 결정 — 인증수단 분실 경로의 답이 여기 있습니다.
  • 내보내기 — Privy 가 호스팅하는 절차로 전체 개인키를 내보낼 수 있고, 이 기능의 노출 여부는 앱이 설정합니다.
  • 서버 지갑과 세션 서명자 — TEE 기반 서버 지갑, 그리고 정책 엔진이 붙은 범위 제한 서명자("이 서명자는 이 컨트랙트만, 이 금액까지만"). 네 번째 경로가 이것입니다.
  • 맥락 — 2025년 6월 Stripe 가 Privy 를 인수했습니다(스테이블코인 회사 Bridge 인수와 짝): 임베디드 지갑이 주류 결제 인프라가 되고 있다는 신호. Farcaster, Hyperliquid 가 사용 중입니다. 경쟁사 — Dynamic, Web3Auth, Magic, Turnkey, Coinbase Embedded Wallets, thirdweb — 의 차이가 정확히 권한표의 차원들입니다: 누가 어떤 조각을 쥐고, 복구가 어떻게 되고, 정책을 누가 바꾸는가.

네 경로가 각각 측정하는 것

  1. 새 기기 — 새 기기에는 기기 조각이 없으므로 로그인에 Privy 서버의 참여가 필수입니다. 불편한 질문: Privy 가 다운되거나 나를 차단하면 서명이 가능한가? 예상 답: 사전에 내보내기를 하지 않았다면 불가능. Privy 는 가용성 거부권을 쥡니다 — 자산을 뺏을 수는 없지만 접근을 막을 수는 있습니다.
  2. 인증수단 분실 — 복구야말로 진짜 수탁자가 드러나는 지점: 복구를 승인할 수 있는 자가 사실상 지갑을 가져갈 수 있습니다. 복구가 "지원팀에 이메일" 수준이라면 수탁 스토리는 마케팅보다 약한 겁니다.
  3. 키 내보내기 — 비상구이자 셀프 커스터디 주장의 가장 강력한 증거. 존재 여부만이 아니라 마찰의 정도, 앱 개발자가 비활성화할 수 있는지, 내보낸 키가 완전한지(일반 지갑에서 같은 주소가 복원되는지)까지 시험합니다.
  4. 범위 제한 앱 서명자 — 위임의 경계: 앱이 사용자 없이 무엇을 할 수 있고, 그 범위를 누가 나중에 넓힐 수 있는가? 개발자가 조용히 바꿀 수 있는 정책과 사용자가 재승인해야 하는 정책은 전혀 다른 물건입니다.

클릭 수보다 권한표가 먼저인 이유

클릭 수는 온보딩 마찰을 재고, 권한표는 신뢰 모델을 잽니다. UX 부터 비교하면 "2클릭이면 지갑 생성"이 여러 당사자가 자금에 손댈 수 있다는 사실을 가립니다. 확장된 권한표 — 행은 행위, 열은 주체, 각 칸은 단독 가능 / 협조 필요 / 불가 를 문서가 아니라 관찰로 채웁니다. 검증할 예상값:

행위 사용자 Privy 앱 개발자
트랜잭션 서명 로그인 후 단독 협조 — 인증 조각 제공 서명자 정책 안에서만
키 내보내기 노출돼 있다면 단독 협조 — 절차 호스팅 노출 차단 가능 — 검증
복구 승인 복구 모드에 따라 다름 복구 조각의 기본 보관자 복구 모드를 선택
서명자 추가/범위 지정 설정에 따른 동의 — 검증 정책 실행 주도
정책 변경 재승인 필요? — 검증 집행 단독인 경우 많음 — 검증
접근 차단 (가용성) 인증 조각 거부권 UI 제거 가능

가장 흥미로운 칸은 보통 "복구 승인"과 "정책 변경" — 권한이 앱 스택 쪽으로 조용히 집중되는 지점입니다. 시험할 예측: 앱 개발자는 사용자 생각보다 많은 권한을 쥐고, Privy 는 가용성 거부권을 쥔다. 둘 다 클릭 수 비교에는 나타나지 않습니다.

개발자가 곧 감사인이다

최종 사용자는 이 어떤 것도 보지 못합니다 — 그게 임베디드 지갑의 존재 이유이자 위험입니다. 도입자가 설정한 그대로가 사용자들이 조용히 물려받는 수탁 현실이 됩니다. 그리고 답들은 고정된 성질이 아니라 설정 선택입니다: "Privy 는 논커스터디얼"은 마케팅 문장이고, 같은 Privy SDK 로 만든 두 앱이 진짜로 다른 수탁 모델을 가질 수 있습니다. 문서는 설계를 설명할 뿐이므로 네 경로를 직접 실행합니다 — 미처 못 본 기본값, 실패하는 플로우, 지원팀 뒷문은 배포된 동작에서만 드러납니다. 권한표를 먼저 만드는 이유도 같습니다: UX 판단에 앞서 "누가 무엇을 할 수 있는가"를 관찰된 사실로 종이에 강제하는 산출물이기 때문입니다.

← 전체 개발 노트 · 워크스페이스 인덱스 · 맨 위 ↑