gRPC 마이크로서비스로 구현된 Hyperledger Besu QBFT 네트워크용 Faucet 서비스입니다.
- ETH 전송: 테스트 ETH를 지갑 주소로 전송
- 잔액 조회: Faucet 또는 특정 주소의 잔액 확인
- 트랜잭션 히스토리: Faucet 사용 기록 조회
- Cooldown 관리: 중복 요청 방지 (기본 60분)
- Health Check: 서비스 상태 모니터링
npm install.env 파일을 생성하고 다음 내용을 설정:
# Besu RPC Configuration
BESU_RPC_URL=http://ing-besunetwork-besurpci-c2714-112134690-ab00043af5a6.kr.lb.naverncp.com
BESU_CHAIN_ID=1337
# Faucet Configuration
FAUCET_PRIVATE_KEY=0xc7e83582eaaea59b1a933eb6083e7d19c74612a773c7fbab19246ba511cc2ebd
FAUCET_DEFAULT_AMOUNT=100
FAUCET_MAX_AMOUNT=1000
FAUCET_COOLDOWN_MINUTES=60
# gRPC Configuration
GRPC_PORT=50054
GRPC_HOST=0.0.0.0# 개발 모드
npm run start:dev
# 프로덕션 빌드
npm run build
npm run start:prodAPI Gateway의 .env에 다음 추가:
FAUCET_SERVICE_URL=localhost:50054POST /faucet/request
Content-Type: application/json
{
"walletAddress": "0xYourAddress",
"amount": "100" // Optional, default 100 ETH
}GET /faucet/balance?address=0xYourAddressGET /faucet/history?address=0xYourAddress&limit=10GET /faucet/healthapiVersion: apps/v1
kind: Deployment
metadata:
name: faucet-service
namespace: petdid-network
spec:
replicas: 1
selector:
matchLabels:
app: faucet-service
template:
metadata:
labels:
app: faucet-service
spec:
containers:
- name: faucet-service
image: your-registry/faucet-service:latest
ports:
- containerPort: 50054
name: grpc
env:
- name: BESU_RPC_URL
value: "http://besu-rpc-external:8545"
- name: FAUCET_PRIVATE_KEY
valueFrom:
secretKeyRef:
name: faucet-secret
key: private-key
---
apiVersion: v1
kind: Service
metadata:
name: faucet-service
namespace: petdid-network
spec:
selector:
app: faucet-service
ports:
- port: 50054
targetPort: 50054
name: grpc- FAUCET_PRIVATE_KEY는 반드시 Kubernetes Secret으로 관리
- Production 환경에서는 Genesis 계정 대신 별도 Faucet 전용 계정 사용 권장
- Rate limiting 및 IP 화이트리스트 설정 권장
- Cooldown 시간을 적절히 조정하여 남용 방지
- Faucet 계정의 잔액 확인:
GET /faucet/balance - Genesis 계정에서 Faucet 계정으로 ETH 전송 필요
- Besu RPC URL이 올바른지 확인
- 네트워크 연결 상태 확인
- Health check 엔드포인트로 서비스 상태 확인