프로젝트

일반

사용자정보

Actions

업무 #408

진행중
JL JL

gRPC test client (Python CLI) 추가

업무 #408: gRPC test client (Python CLI) 추가

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

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

0%

추정시간:

설명

개요

alphea-ai-edge gRPC 서버의 모든 서비스를 커맨드라인에서 직접 테스트할 수 있는 Python CLI 클라이언트를 추가한다.

목적

  • Dev Console(HTTP REST)과 별도로, gRPC endpoint 에 직접 접속하여 RPC 동작을 검증
  • 로컬 및 프로덕션 서버(edge.alphea.ai:443) 모두 지원
  • secp256k1 서명 기반 인증 플로우 전체를 CLI에서 재현

구현 내용

tools/client.py

인터랙티브 메뉴 방식의 gRPC 테스트 클라이언트.

지원 서비스 및 RPC:

메뉴 서비스 RPC
1 SystemService Health, Info
2 AuthService GenerateKeypair(local/server), Challenge→Sign→Verify, EmailRegister, Login
3 UserService GetUser
4 NodeService ListNodes, GetNode, NodeChallenge→RegisterNode, Heartbeat, GetNodeJobs, DeleteNode
5 WalletService GetJobs, GetNodes, GetNodesDetail, GetEarnings, GetEarningsToday, GetReceipts, GetEarningsByRange
6 ConnectNode bidi 스트림 연결 시뮬레이션

주요 특징:

  • 첫 실행 시 proto 파일 자동 컴파일 (tools/_gen/ 에 생성)
  • TLS 자동 감지 (port 443 → grpc.ssl_channel_credentials())
  • 세션 상태(wallet, private key, JWT token, node_id)를 tools/.client_state.json 에 자동 저장
  • secp256k1 서명은 eth-keys + pycryptodome 라이브러리로 로컬 생성

tools/requirements.txt

grpcio>=1.60.0
grpcio-tools>=1.60.0
eth-keys>=0.6.0
eth-hash[pycryptodome]>=0.5.0
pycryptodome>=3.20.0

사용 방법

pip3 install -r tools/requirements.txt
python3 tools/client.py                      # localhost:3000
python3 tools/client.py --host edge.alphea.ai:443

테스트 결과

edge.alphea.ai:443 프로덕션 서버에서 확인:

  • Health: status=ok, db=True
  • 전체 인증 플로우 (GenerateKeypair → Challenge → Sign → Verify) 성공, JWT 토큰 발급 확인

JL James Lee이(가) 6달 전에 변경 Actions #1

구현 완료 (commit:server|aae43da)

추가 파일

  • tools/client.py — 인터랙티브 메뉴 방식 gRPC CLI 테스트 클라이언트
  • tools/requirements.txt — Python 의존성 (grpcio, grpcio-tools, eth-keys, pycryptodome)
  • .gitignore — tools/_gen/, tools/.client_state.json 제외 항목 추가

주요 기능

  • 첫 실행 시 proto/ 파일 자동 컴파일 → tools/_gen/ 에 저장
  • TLS 자동 감지: port 443이면 grpc.ssl_channel_credentials() 사용
  • 세션 상태(wallet, private key, JWT token, node_id)를 tools/.client_state.json 에 자동 저장
  • secp256k1 서명: eth-keys + pycryptodome 로 로컬 생성 (keccak256 → recoverable ECDSA → 65-byte R‖S‖V)

지원 RPC

SystemService (Health, Info), AuthService (GenerateKeypair, Challenge/Sign/Verify, EmailRegister, Login), UserService (GetUser), NodeService (ListNodes, GetNode, NodeChallenge/RegisterNode, Heartbeat, GetNodeJobs, DeleteNode), WalletService (GetJobs, GetNodes, GetNodesDetail, GetEarnings, GetEarningsToday, GetReceipts, GetEarningsByRange), ConnectNode bidi 스트림

프로덕션 테스트 결과 (edge.alphea.ai:443)

  • SystemService.Health: status=ok, db=True ✓
  • 전체 인증 플로우 (GenerateKeypair → Challenge → Sign → Verify) 성공, JWT 발급 확인 ✓

사용 방법

pip3 install -r tools/requirements.txt
python3 tools/client.py                          # localhost:3000
python3 tools/client.py --host edge.alphea.ai:443

JL James Lee이(가) 6달 전에 변경 Actions #2

  • 상태을(를) 신규에서 진행(으)로 변경되었습니다.

JL James Lee이(가) 6달 전에 변경 Actions #3

  • 상태을(를) 진행에서 해결(으)로 변경되었습니다.

GoTrue 인증 적용 업데이트 (commit:server|442ebd1)

Supabase GoTrue 인증 전환(#411)에 맞춰 테스트 클라이언트의 Auth 플로우를 전면 교체했습니다.

변경 내용

Auth 메뉴 교체

기존 변경
Challenge → Sign → Verify (wallet 기반) GoTrue Sign up (email + password)
EmailRegister GoTrue Log in (email + password)
Login (password) JWT 직접 붙여넣기

GoTrue REST API 호출은 표준 urllib만 사용 (추가 패키지 불필요):

POST <gotrue_url>/signup                           {"email":"…","password":"…"}
POST <gotrue_url>/token?grant_type=password        {"email":"…","password":"…"}

--gotrue <url> 플래그 추가

  • 기본값: localhost → http://localhost:9011, 원격 TLS → https://<host>:9011
  • 세션 state에 _gotrue_url로 저장되어 재시작 시 유지

노드 등록 보호

  • user JWT 없이 노드 등록 시 차단 + 안내 메시지 출력
  • NodeChallengeRequest에서 owner_wallet_address 제거 (node_id만 전송)
  • RegisterNode 호출 시 user JWT를 metadata로 자동 첨부

상태 표시 개선

  • 메인 메뉴 상단: wallet=… → email (GoTrue 로그인 사용자 이메일) 표시
  • show_state: email, user_id, node_token 항목 추가

사용 흐름 (변경 후)

python3 tools/client.py --host edge.alphea.ai:443
# 1. Auth → 2 (Log in) → email + password → JWT 자동 저장
# 2. Auth → 4 (Generate Keypair) → 노드 서명용 키 생성
# 3. Node → 3 (Challenge → Register) → 노드 등록 (JWT 자동 첨부)
Actions

내보내기 PDF Atom