JSON-RPC는 원격 프로시저 호출(Remote Procedure Call, RPC) 프로토콜 중 하나로, 클라이언트와 서버 간의 통신을 JSON 형식으로 주고받는 방식입니다. 이는 경량화된 프로토콜로, HTTP나 WebSocket과 같은 다양한 전송 프로토콜 위에서 사용할 수 있습니다.
경량화된 프로토콜:
언어 독립성:
전송 프로토콜 독립성:
JSON-RPC 메시지는 요청(request)과 응답(response) 형식으로 나뉩니다.
요청 형식:
{
"jsonrpc": "2.0",
"method": "subtract",
"params": [42, 23],
"id": 1
}
jsonrpc: 사용된 JSON-RPC의 버전 (일반적으로 "2.0" 사용)method: 호출하려는 메서드의 이름params: 메서드에 전달할 파라미터 (배열 또는 객체)id: 요청의 고유 식별자 (응답을 매칭하기 위해 사용)응답 형식:
{
"jsonrpc": "2.0",
"result": 19,
"id": 1
}
jsonrpc: 사용된 JSON-RPC의 버전result: 요청한 메서드 호출의 결과 값id: 요청 메시지의 식별자오류 응답 형식:
{
"jsonrpc": "2.0",
"error": {
"code": -32600,
"message": "Invalid Request"
},
"id": null
}
error: 오류 객체로, code와 message를 포함code: 오류 코드message: 오류 메시지id: 요청 메시지의 식별자 (요청이 유효하지 않을 경우 null)다음은 JSON-RPC를 사용하여 블록체인 노드와 상호작용하는 예입니다. 이 예는 이더리움 블록체인에서 JSON-RPC를 사용하여 현재 블록 번호를 가져오는 것입니다.
POST / HTTP/1.1
Host: localhost:8545
Content-Type: application/json
{
"jsonrpc": "2.0",
"method": "eth_blockNumber",
"params": [],
"id": 1
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"jsonrpc": "2.0",
"result": "0x5bad55",
"id": 1
}
여기서 eth_blockNumber 메서드는 현재 블록 번호를 반환하며, 결과는 16진수 문자열 "0x5bad55"로 표시됩니다.
블록체인에서 JSON-RPC는 클라이언트가 블록체인 노드와 상호작용하기 위해 자주 사용됩니다. 이더리움, 비트코인 등 대부분의 블록체인 노드는 JSON-RPC 인터페이스를 제공하여 다양한 작업(예: 트랜잭션 전송, 블록 조회, 계정 상태 확인 등)을 수행할 수 있습니다.
요청:
{
"jsonrpc": "2.0",
"method": "eth_getBalance",
"params": ["0x742d35Cc6634C0532925a3b844Bc454e4438f44e", "latest"],
"id": 1
}
응답:
{
"jsonrpc": "2.0",
"result": "0x0234c8a3397aab58",
"id": 1
}
여기서 eth_getBalance 메서드는 주어진 주소의 잔액을 반환합니다. 결과는 16진수 문자열로 표시됩니다.
JSON-RPC는 원격 프로시저 호출 프로토콜로, 클라이언트와 서버 간의 통신을 JSON 형식으로 주고받는 방식입니다. 블록체인에서는 노드와 상호작용하기 위해 자주 사용되며, 다양한 작업을 수행할 수 있는 인터페이스를 제공합니다. JSON-RPC는 경량화된 프로토콜로, 언어와 전송 프로토콜에 독립적으로 동작하여 다양한 환경에서 쉽게 사용할 수 있습니다.
프로토콜이다. 블록체인에서는 노드와 상호작용할 때 사용한다.