프로젝트

일반

사용자정보

Actions

이슈 #421

진행중
JL JL

AGX 잔액을 Wallet 종속 → Account(GoTrue user_id) 종속으로 전환

이슈 #421: AGX 잔액을 Wallet 종속 → Account(GoTrue user_id) 종속으로 전환

James Lee이(가) 약 7시간 전에 추가함.

상태:
해결
우선순위:
보통
담당자:
목표버전:
시작일:
2026/04/27
완료일:
진척도:

0%

추정시간:

설명

배경

GoTrue 인증 전환(#411) 으로 사용자 정체성이 wallet_address → user_id (UUID) 로 바뀌었지만, AGX 잔액 / 보상 / 집계는 여전히 wallet_address 키 기반이다.

현재 상태 (audit 결과)

테이블 AGX 키 비고
job_receipts wallet_address user_id 컬럼 없음, 모든 잔액의 source of truth
aggregated_earnings wallet_address 일/월 집계
wallets.balance_agx wallet_address dead column (계산은 receipts 합산)

wallets 는 1 user → N wallets 구조라, 동일 사용자가 여러 wallet 을 가지면 잔액이 wallet 별로 분산된다.

목표

  • AGX 잔액 / 적립 / 차감의 단일 키를 GoTrue user_id 로 통일
  • wallet_address 는 payout destination metadata 로만 유지 (출금 경로 / 노드 서명 키)
  • 신규 wallet_adjustments ledger 테이블 (account-scope) 도입 — 리딤/관리자 조정/롤백 가능

변경 범위

DB

  • job_receipts.user_id UUID 컬럼 추가 + backfill (JOIN wallets ON wallet_address)
  • aggregated_earnings.user_id UUID 추가 + backfill
  • wallet_adjustments 신규 테이블 (user_id, delta_agx, reason, ref_code)
  • 인덱스: (user_id, completed_at DESC) 추가

잔액 계산

잔액 = SUM(job_receipts.reward_agx WHERE user_id=$1) + SUM(wallet_adjustments.delta_agx WHERE user_id=$1)

Store

  • store/wallets.rs::get_balance(user_id) — 시그니처 변경
  • store/receipts.rs 의 wallet 기반 함수들 → user_id 기반으로 신규 추가 (기존은 deprecate)
  • store/wallet_adjustments.rs 신설

Handler / Proto

  • WalletService 의 RPC 들에서 wallet_address 요청 필드 → user_id 기준 조회로 전환 (요청 필드는 호환 위해 당분간 wallet_address 유지하되, 서버에서 wallet → user_id 룩업 후 user_id 기준 응답)
  • 또는 신규 RPC 추가: GetMyEarnings, GetMyReceipts — JWT 의 user_id 자동 사용

마이그레이션 전략

  1. 컬럼 추가 (NULL 허용)
  2. backfill 스크립트로 기존 row 채우기
  3. 신규 인덱스 생성
  4. Store / handler 코드 user_id 기반으로 전환
  5. 추후 (별도 이슈): wallet 기반 RPC 필드 deprecate

의존 / 관련 이슈

  • #411 — GoTrue 인증 전환 (선행)
  • Redeem Code 이슈 — 본 작업이 선행되어야 리딤이 가능

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

다음 일감과 관련됨: 이슈 #411: Supabase GoTrue 인증 전환 — wallet-based auth 제거 및 GoTrue JWT 통합해결James Lee2026/04/24

Actions
다음 일감과 관련됨: 이슈 #432: Engine + ConnectNode 포팅 — Synth / Dispatcher / Scheduler / VNodeCreditor + bidi 스트림 완성해결James Lee2026/04/172026/04/17

Actions
다음 일감과 관련됨: 이슈 #433: VfsService 포팅 — per-account 가상 파일시스템 (Read/Write/List/Mkdir/Delete/Stat/Exists/Lock/Unlock)해결Henry Park2026/05/11

Actions
다음 일감과 관련됨: 이슈 #434: [Go backport] Supabase GoTrue 인증 전환 — Phase 1: 인프라 + 인증 코어해결Henry Park2026/05/11

Actions
다음 일감과 관련됨: 이슈 #435: [Go backport] AGX 회계 user_id 종속 전환 — Phase 2해결Henry Park2026/05/122026/05/12

Actions
다음에 진행할 일감: 이슈 #420: Redeem Code 시스템 — 사용권 발급/리딤/관리 (QR 코드 기반)해결James Lee2026/04/282026/04/29

Actions
Actions

내보내기 PDF Atom