프로젝트

일반

사용자정보

Actions

이슈 #443

진행중
HP HP

Phase 0.7 Wallet-as-Identity MVP — WalletChallenge/Verify + Reference Clients (sdktest wallet-login + Web Console 4섹션)

이슈 #443: Phase 0.7 Wallet-as-Identity MVP — WalletChallenge/Verify + Reference Clients (sdktest wallet-login + Web Console 4섹션)

Henry Park이(가) 약 7시간 전에 추가함.

상태:
진행
우선순위:
높음
담당자:
목표버전:
시작일:
2026/05/13
완료일:
진척도:

0%

추정시간:

설명

배경

로드맵(#440) 의 Phase 0.7 Wallet-as-Identity 를 MVP 형태로 구현한다. AI Agent / 자동화 / CI / headless entity 가 GoTrue 없이 secp256k1 지갑만으로 서버와 상호작용 가능하게 하고, 사람 흐름 (GoTrue) ↔ headless 흐름 (wallet) 을 같은 reference client 에서 비교 검증 할 수 있게 한다.

작업 순서 (완결 시점 순서)

  1. Web Console Test Client — Section A (User/GoTrue) 먼저 교체

    • webconsole_test_client.go 의 JS UI 에서 기존 MetaMask + AuthService.Challenge/Verify 흐름 제거
    • GoTrue URL / email / password 입력 + signup / login / refresh 버튼
    • 현재 서버 RPC 만으로 구현 가능 (서버 수정 없음)
  2. 서버 RPC 구현 — Phase 0.7 의 핵심

    • AuthService.WalletChallenge / WalletVerify 추가 (proto, handler, store/redis nonce)
    • Challenge payload 해석 명세 구현: JSON {domain, purpose, wallet, nonce, issued_at, expires_at}
    • wallet JWT 발급 — typ:"wallet", sub:<wallet_address>, 1h TTL, golang-jwt/jwt/v4
    • internal/server/interceptors.go::AuthInterceptor 가 wallet typ 수용 + AuthContext.PrincipalType/PrincipalID 채움 (Phase 0.5 의 Principal 모델 적용)
    • RegisterNode 확장 — user token 이면 owner_user_id = sub, wallet token 이면 owner_wallet_address = sub (owner_user_id = NULL). 자율 노드 생성
    • VerifySignature 보안 강화 (선행 필수): nonce 저장 (DB 또는 redis) + TTL (5분) + one-time use + domain/purpose 검증 + 서명에서 public key recover 후 address 비교
  3. Web Console Test Client — Section B (Wallet Identity, MVP)

    • local private key sign 먼저 (MetaMask 후속). 브라우저/extension 상태 무관, 프로토콜 안정화 우선
    • private key 입력 / wallet address 표시 / WalletChallenge → sign → WalletVerify → wallet token 표시
  4. sdktest 신규 명령 — cmd/sdktest

    • wallet-login --key <hex> (or --state 에 저장된 keypair 사용)
    • 같은 서버 RPC 사용. State 에 wallet_token 저장
  5. Web Console Test Client — Section C (Node Register)

    • auth mode toggle: user token | wallet token
    • 별도 node keypair 입력 / node_id
    • NodeChallenge → sign → RegisterNode — 선택한 auth mode 로 bearer 전송
    • RegisterNode 확장 검증 — user JWT 일 때 owner_user_id 채움, wallet JWT 일 때 owner_wallet_address 채움 확인
  6. (Optional) Section B 에 MetaMask personal_sign 을 signing method 옵션으로 추가

Section D (Smoke Calls) 신규 항목

  • Health / SystemInfo
  • GetNode / ListNodes
  • ConnectNode bidi — 노드 토큰으로 stream open 테스트
  • VFS smoke (Phase 1 후 dFS 로 교체)

DoD

  • AuthService.WalletChallenge + WalletVerify 동작 (machine-readable payload + nonce/TTL/one-time/domain/recover)
  • wallet token 을 수용하는 AuthInterceptor 에서 PrincipalType="wallet", PrincipalID=<address> 채움
  • RegisterNode 가 wallet token bearer 수용 (owner_user_id=NULL, owner_wallet_address=sub)
  • cmd/sdktest wallet-login 동작 검증
  • webconsole_test_client.go Section A/B/C/D 4개 섹션 모두 동작 — 한 화면에서 GoTrue 흐름·Wallet 흐름 비교 가능
  • wallet token 의 기본 scope 가 wallet://<자기주소>/ 로 제한됨 (다른 namespace 접근 거부)
  • user_wallets 테이블 시서마 (Phase 0.5 공통 모듈과 함께) 도입
  • VerifySignature 보안 강화 완료
  • wallet_delegations 테이블 자리만 잡힌 (실 구현은 후속 마일스톤)

관련 이슈

  • #440 — Phase 0.7 디자인 정리 (해결). 로드맵 원본
  • #441 — cmd/sdktest 초기 평애 (해결). wallet-login 명령 이 이슈에서 확장
  • #442 — dKernel / CLI / Lock Service spec 원본. WalletChallenge 구현 시 이 spec 의 challenge payload 정의 참조
  • #254 — DB 스키마 전용 (user_wallets, optionally wallet_delegations 추가 시 refs)

연결된 일감 1 (한 건 진행 중 — 모두 미완료)

다음 일감과 관련됨: 업무 #445: alphea-rpc next dev compose 및 admin devices v15 스키마 호환 수정해결James Lee2026/05/13

Actions
Actions

내보내기 PDF Atom