Nodes/ripple/docker/RPC-TESTS

ripple

XRP Ledger (rippled) RPC 테스트 가이드

8분 읽기 · docker/RPC-TESTS

list목차(22)

XRP Ledger (rippled) RPC 테스트 가이드

rippled 노드가 정상 작동하는지 HTTP/JSON-RPC로 확인하는 방법입니다.
기본 포트는 80이며, .env에서 WS_PORT로 변경한 경우 해당 포트를 사용하세요.

참고: XRPL Public API Methods


1. 기본 연결 테스트

1.1 서버 정보 (server_info)

curl -s -H "Content-Type: application/json" \
  -X POST \
  -d '{"method":"server_info","params":[{}]}' \
  http://localhost:80

예상 응답 (요약):

{
  "result": {
    "info": {
      "build_version": "2.6.2",
      "server_state": "full",
      "complete_ledgers": "32570-82521701",
      "peers": 22,
      "validated_ledger": {
        "seq": 82521701,
        "hash": "...",
        "base_fee_xrp": 0.00001
      }
    },
    "status": "success"
  }
}
  • server_state: full 또는 proposing 이면 메인넷과 동기화된 상태입니다.
    syncing, connected, disconnected 등이면 아직 동기화 중입니다.
  • complete_ledgers: 보유한 원장 범위. empty면 동기화 초기 단계입니다.

1.2 서버 상태만 간단히 확인

curl -s -H "Content-Type: application/json" \
  -X POST \
  -d '{"method":"server_info","params":[{}]}' \
  http://localhost:80 | jq '.result.info.server_state'

2. 원장(Ledger) 조회

2.1 현재 작업 중인 원장 (ledger_current)

curl -s -H "Content-Type: application/json" \
  -X POST \
  -d '{"method":"ledger_current","params":[]}' \
  http://localhost:80

2.2 마지막으로 닫힌 원장 (ledger_closed)

curl -s -H "Content-Type: application/json" \
  -X POST \
  -d '{"method":"ledger_closed","params":[]}' \
  http://localhost:80

2.3 특정 원장 정보 (ledger)

# 최신 검증된 원장 (ledger_index: "validated")
curl -s -H "Content-Type: application/json" \
  -X POST \
  -d '{"method":"ledger","params":[{"ledger_index":"validated","transactions":false}]}' \
  http://localhost:80

3. 계정 조회 (account_info)

검증된 원장 기준으로 조회하려면 ledger_index: "validated"를 넣습니다.

3.1 Genesis 계정 (예시)

curl -s -H "Content-Type: application/json" \
  -X POST \
  -d '{
    "method": "account_info",
    "params": [{
      "account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
      "ledger_index": "validated"
    }]
  }' \
  http://localhost:80

예상 응답 (요약):

{
  "result": {
    "account_data": {
      "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
      "Balance": "100000000000000000",
      "Sequence": 1
    },
    "ledger_index": 82521701,
    "validated": true,
    "status": "success"
  }
}
  • Balance: 드롭(drop) 단위. 1 XRP = 1,000,000 drops → 100000000000000000 = 100B XRP.

3.2 특정 주소 잔액만 보기

curl -s -H "Content-Type: application/json" \
  -X POST \
  -d '{
    "method": "account_info",
    "params": [{"account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "ledger_index": "validated"}]
  }' \
  http://localhost:80 | jq '.result.account_data.Balance'

4. 수수료 조회 (fee)

curl -s -H "Content-Type: application/json" \
  -X POST \
  -d '{"method":"fee","params":[{}]}' \
  http://localhost:80

5. 트랜잭션 조회 (tx)

트랜잭션 해시로 조회합니다.

# YOUR_TX_HASH 를 실제 해시로 교체
curl -s -H "Content-Type: application/json" \
  -X POST \
  -d '{"method":"tx","params":[{"transaction":"YOUR_TX_HASH"}]}' \
  http://localhost:80

6. 배치 요청 (여러 메서드 한 번에)

curl -s -H "Content-Type: application/json" \
  -X POST \
  -d '[
    {"method":"server_info","params":[{}],"id":1},
    {"method":"ledger_current","params":[],"id":2},
    {"method":"fee","params":[{}],"id":3}
  ]' \
  http://localhost:80

7. Docker 컨테이너 안에서 CLI로 테스트

Admin RPC(5005)는 컨테이너 내부에서만 사용할 수 있으므로, docker execrippled CLI를 호출합니다.

# 서버 정보
docker exec ripple-node rippled server_info

# 원장 현재
docker exec ripple-node rippled ledger_current

# 계정 정보 (검증된 원장 기준)
docker exec ripple-node rippled account_info rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh validated

# 수수료
docker exec ripple-node rippled fee

8. WebSocket 테스트 (선택)

지속 연결이 필요하면 WebSocket을 사용합니다. 포트 80이 WS도 제공하는 경우:

# wscat 설치 (Node.js 필요)
npm install -g wscat

# 연결 (포트 80이 WS인 경우)
wscat -c ws://localhost:80

# 연결 후 서버 정보 요청 (WebSocket은 "command" 사용)
> {"id":1,"command":"server_info"}

9. jq로 결과 보기 좋게 보기

# jq 설치: Ubuntu sudo apt install jq / Mac brew install jq

# server_state, 원장 seq, 피어 수만 출력
curl -s -H "Content-Type: application/json" \
  -X POST \
  -d '{"method":"server_info","params":[{}]}' \
  http://localhost:80 | jq '{
    state: .result.info.server_state,
    ledger_seq: .result.info.validated_ledger.seq,
    peers: .result.info.peers
  }'

10. 외부에서 접근 (호스트 포트 노출 시)

RPC 포트를 0.0.0.0으로 열어두었다면:

curl -s -H "Content-Type: application/json" \
  -X POST \
  -d '{"method":"server_info","params":[{}]}' \
  http://YOUR_SERVER_IP:80

11. 문제 해결

RPC 연결 실패

증상: curl: (7) Failed to connect to localhost port 80

확인:

docker ps | grep ripple
docker compose logs --tail 50
# 포트 확인 (호스트)
netstat -tuln | grep 80
# 또는
lsof -i :80

status가 success가 아님

증상: "status": "error" 또는 "error": "noNetwork"

  • 노드가 아직 동기화 중일 수 있습니다. server_infoserver_state, complete_ledgers를 확인하세요.
  • rippled Server Doesn't Sync 참고.

account_info에서 ledger not found

  • ledger_index: "validated"를 넣었는지 확인하세요.
  • 노드가 아직 검증된 원장을 갖고 있지 않으면 실패할 수 있습니다. 동기화 완료 후 다시 시도하세요.

12. 참고

ripple 다른 챕터