Actions
이슈 #421
진행중
JL
JL
AGX 잔액을 Wallet 종속 → Account(GoTrue user_id) 종속으로 전환
이슈 #421:
AGX 잔액을 Wallet 종속 → Account(GoTrue user_id) 종속으로 전환
설명
배경¶
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_adjustmentsledger 테이블 (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 자동 사용
마이그레이션 전략¶
- 컬럼 추가 (NULL 허용)
- backfill 스크립트로 기존 row 채우기
- 신규 인덱스 생성
- Store / handler 코드 user_id 기반으로 전환
- 추후 (별도 이슈): wallet 기반 RPC 필드 deprecate
의존 / 관련 이슈¶
- #411 — GoTrue 인증 전환 (선행)
- Redeem Code 이슈 — 본 작업이 선행되어야 리딤이 가능
Actions