Actions
업무 #408
진행중
JL
JL
gRPC test client (Python CLI) 추가
업무 #408:
gRPC test client (Python CLI) 추가
설명
개요¶
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달 전에 변경
구현 완료 (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달 전에 변경
- 상태을(를) 진행에서 해결(으)로 변경되었습니다.
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