프로젝트

일반

사용자정보

Actions

이슈 #438

진행중
JL HP

[Go backport] Legacy wallet_address 컬럼 제거 — Phase 5 (final cleanup)

이슈 #438: [Go backport] Legacy wallet_address 컬럼 제거 — Phase 5 (final cleanup)

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

상태:
해결
우선순위:
보통
담당자:
목표버전:
시작일:
2026/05/15
완료일:
2026/05/15 (약 6달 지연)
진척도:

0%

추정시간:

설명

배경

Phase 1–4 를 통해 인증/AGX/Admin UI/Friends 가 전부 user_id 기반으로 전환되었으나, 다음 그룹들은 아직 wallet_address 컬럼을 소유권 키로 여전히 사용 또는 유지하고 있다:

  1. nodes.owner_wallet_address 이 backward-compat 컬럼 로 남아있다 (Phase 1에서 nullable + Phase 2에서 권한 판단 제외했으나 SELECT/INSERT 에서 여전히 채움)
  2. virtual_node_assignments / virtual_node_credits / virtual_node_packages 은 여전히 wallet_address 을 주 식별 키로 사용 — 현재 WalletService.ClaimVirtualNodes 가 PrimaryWalletForUser 로 우회해서 동작
  3. proto NodeInfo / VipNodeInfo / ClaimedWalletAddress 의 월렶에 너폄들은 wallet_address 응답 필드

Phase 5는 이 legacy 컬럼/필드를 제거하고 user_id 기반 파이프라인을 완결한다.

작업 범위

DB 스키마 v15 (clean rewrite)

  • ALTER TABLE nodes DROP COLUMN owner_wallet_address (필요에 따라 CASCADE)
  • virtual_node_assignments 재설계: wallet_address 컬럼 제거, user_id UUID NOT NULL 추가 + 인덱스
  • virtual_node_credits 재설계: 동일 (user_id UUID NOT NULL)
  • virtual_node_packages: claimed_wallet_address 제거, claimed_user_id UUID 추가 + 인덱스
  • virtual_node_claim_events: wallet_address → user_id
  • clean rewrite: 세 테이블 TRUNCATE

Store

  • store/nodes.go: Node.OwnerWalletAddress 제거, nodeColumns 조정. GetNodesByWallet / GetClientNodesByWallet / CountDeviceNodesByWallet 제거 또는 user_id 기반으로 이름 변경. RegisterNodeForUser(node_id, name, walletAddr, userID, ...) 의 walletAddr 인자 제거
  • store/virtual_node.go: VirtualNodeAssignment.WalletAddress → UserID. 모든 helper 이름 일괄 교체: ListActiveAssignmentsByUser, SumVirtualAgxByUser, SumVirtualAgxTodayByUser, GetCreditsByUser, ListVirtualCreditDayBucketsByUserAllTime 등
  • store/virtual_node_claims.go: ClaimVirtualNodePackage(userID, claimCode), ClaimedUserID *string, claimed_user_id 컬럼 사용
  • store/edge_node.go: EnsureEdgeNode(...) 에서 owner_wallet_address INSERT 제거

Proto

  • NodeInfo.owner_wallet_address 제거 안함 (owner_user_id 추가 — 응답에 노출). 다만 기존 wallet 필드는 그대로 두고 빈 값으로 대체 또는 제거 결정 필요. 이번에는 제거 + owner_user_id 필드 추가 로 결정
  • VipNodeInfo.owner_wallet_address 동일 적용
  • ClaimVirtualNodesRequest 은 이미 wallet_address 없음. ClaimVirtualNodesResponse 는 그대로.

Handler

  • handler/wallet.go::ClaimVirtualNodes: resolvePrimaryWallet 경로 제거, db.ClaimVirtualNodePackage(userID, claimCode) 로 직접 동작
  • handler/wallet.go::GetNodes / wallet_vip.go::GetNodesDetail: wallets 대신 user_id 로 직접 ListActiveAssignmentsByUser(userID)
  • handler/wallet.go::GetEarningsToday: virtual AGX 집계도 SumVirtualAgxByUser(userID)
  • handler/node.go::nodeToProto: OwnerWalletAddress 제거, OwnerUserId 추가
  • Admin api (/admin/api/virtual-node-packages/...): claimed_user_id 으로 응답 포맷 조정
  • engine / scheduler 의 wallet 기반 reward 경로: CreditWalletForReward(wallet,...) 는 Phase 2 에서 이미 wallet→user_id 자동 매핑, 그대로 유지 (래거시 node 호환)

Tests

  • 각 wallet 기반 고정 테스트(virtual_credit_overlap_test, virtual_node_claims_test, admin_cleanup_test, wallet_today_test, wallet_vip_test, wallet_virtual_nodes_test 등)를 user_id 인자로 재작성

마이그레이션 전략

Clean rewrite. dev/qa DB reset 필요. 운영(prod)은 next 브랜치에만 적용.

DoD

  • make build, make test 통과
  • DB 에서 wallet_address 컬럼이 소유권/identity 키로 사용되는 테이블: wallets(해당 wallet 그 자체 명세), job_receipts(경이 계정 metadata), aggregated_earnings(metadata) 만 남음
  • virtual_node_* 이 완전히 user_id 키로 동작
  • ClaimVirtualNodes 가 caller user_id 로 직접 동작 (wallet 등록 없이도 클레임 가능)
  • NodeInfo.owner_wallet_address 일괄 제거, owner_user_id 필드 응답

관련 이슈

  • 이전 phase: #434(Phase 1, 해결), #435(Phase 2, 해결), #436(Phase 3, 해결), #437(Phase 4, 해결)
  • DB 스키마 변경 — #254 refs 동반

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

다음 일감과 관련됨: 이슈 #254: 8-2. 데이터베이스 스키마 설계 (사용자. 앱. 일정)진행James Lee2026/04/282026/04/29

Actions
다음 일감을 우선 진행: 이슈 #437: [Go backport] FriendsService user_id 전환 — Phase 4해결Henry Park2026/05/142026/05/14

Actions
다음에 진행할 일감: 이슈 #439: [Go backport] Mobile SDK GoTrue 인증 전환 — Phase 6해결Henry Park2026/05/182026/05/18

Actions
Actions

내보내기 PDF Atom