무지개곰
article thumbnail
Published 2023. 5. 31. 11:29
[geth] RPC란 무엇인가? BlockChain/geth

Geth는 이더리움 클라이언트 중 하나로, 이더리움 네트워크와 상호작용하기 위한 도구입니다. 외부 애플리케이션이 Geth 클라이언트와 통신하여 이더리움 네트워크에 접근하고 상호작용할 수 있도록 해주는 Geth의 RPC대하여 알아보겠습니다.

목차

RPC란 무엇인가?

RPC를 통한 통신? 중앙화?

RPC 명령어


RPC란 무엇인가?

RPC는 Remote Procedure Call의 약자로 직역하자면 원격 절차 호출입니다. 즉 클라이언트 애플리케이션과 서버 사이의 통신 방식으로, 클라이언트가 서버의 특정 기능이나 프로시저를 원격으로 호출하고 그 결과를 받을 수 있게 해 줍니다. 이더리움에서는 JSON-RPC를 사용하여 클라이언트와 Geth 간에 통신합니다.

 

RPC주소란?

RPC 주소는 클라이언트 애플리케이션이 Geth의 RPC 기능에 접근하기 위해 사용하는 엔드포인트입니다. 일반적으로 HTTP 또는 IPC(Inter-Process Communication) 프로토콜을 통해 접근할 수 있습니다. RPC 주소는 클라이언트 애플리케이션이 Geth와 통신하고 명령을 보낼 수 있는 위치를 가리킵니다.

예를 들어, HTTP 기반의 RPC 주소는 `http://localhost:8545`와 같은 형식일 수 있습니다. 클라이언트 애플리케이션은 해당 주소로 HTTP 요청을 보내고, JSON-RPC 형식에 맞게 요청 메시지를 구성하여 Geth에 전달합니다. Geth는 해당 요청을 처리하고 결과를 클라이언트 애플리케이션에 응답으로 반환합니다.

이와 같이 RPC 주소는 애플리케이션과 Geth 간의 통신을 위한 목적으로 사용되며, 클라이언트 애플리케이션은 RPC를 통해 Geth의 다양한 기능을 활용할 수 있습니다.


RPC를 통한 통신? 중앙화?

RPC(Remote Procedure Call)는 클라이언트 애플리케이션이 블록체인 네트워크와 통신하기 위한 방법 중 하나입니다. 그러나 RPC를 통한 통신이 블록체인의 탈중앙화 원칙을 위반하는 것은 아닙니다. 여기에는 몇 가지 이유가 있습니다:

 

1. 분산 네트워크 - 블록체인은 분산 네트워크로 구성되어 있습니다. 여러 참여자들이 동시에 블록체인을 유지하고 운영하며, 각 노드는 독립적으로 동작합니다. RPC를 통해 애플리케이션이 블록체인 네트워크와 통신한다고 해도, 실제로는 여러 개의 노드와 상호작용하며 탈중앙화된 특성을 유지합니다.

 

2. 클라이언트 제어 - RPC는 클라이언트 애플리케이션이 블록체인 네트워크와 통신할 수 있는 인터페이스를 제공합니다. 하지만 실제 블록체인 네트워크는 여러 노드에 의해 운영되며, 클라이언트 애플리케이션은 네트워크 상태나 결정을 직접적으로 제어할 수 없습니다. 따라서 중앙화된 통제가 아니라 탈중앙화된 네트워크와 상호작용하는 수단으로 볼 수 있습니다.

 

3. 다양한 클라이언트 애플리케이션 - RPC를 사용하는 것은 블록체인 네트워크와 상호작용하기 위한 일반적인 방법 중 하나입니다. 하지만 블록체인 네트워크와 통신하는 유일한 방법은 아닙니다. 다른 방법으로는 블록체인 SDK, 블록체인 API, 이벤트 구독 등이 있습니다. 이러한 다양한 수단을 통해 다양한 클라이언트 애플리케이션들이 블록체인과 상호작용하며 탈중앙화 원칙을 유지합니다.

 

RPC는 블록체인과의 상호작용을 용이하게 해주는 도구 중 하나일 뿐입니다. 탈중앙화된 블록체인 네트워크 내에서 여러 노드와 상호작용하며, 애플리케이션 개발자들이 분산 시스템을 활용할 수 있도록 도와줍니다.


RPC 명령어

Geth의 몇 가지 주요 RPC(Remote Procedure Call) 메서드에 대해 소개해드리겠습니다.

eth

eth.blockNumber : 최신 블록 번호 가져오기

eth.getBalance(계정 주소, 블록 번호) : 계정 잔액 확인

eth.getBlock(블록 번호, 상세 정보 여부) : 특정 블록의 상세 정보 가져오기

eth.getTransaction(트랜잭션 해시) : 특정 트랜잭션의 상세 정보 가져오기

eth.sendTransaction({from: 보내는 계정 주소, to: 받는 계정 주소, value: 이더 금액}) : 트랜잭션 전송

eth.syncing : 노드 동기화 상태 확인

eth.estimateGas({from: 보내는 계정 주소, to: 계약 주소, data: 데이터}) : 가스 사용량 추정

eth.gasPrice : 가스 가격 추정

eth.call({to: 계약 주소, data: 데이터}, 블록 번호) : 스마트 계약 함수 호출 (읽기 전용)

personal

personal.newAccount(비밀번호) : 새 계정 생성

personal.unlockAccount(계정 주소, 비밀번호, 잠금 해제 기간) : 계정 잠금 해제

net

net.version : 네트워크 ID 확인

net.peerCount  : 네트워크에 연결된 peer의 수 확인

admin

admin.peers : 피어 정보 확인

admin.nodeInfo : node 정보 확인

miner

miner.start() : 마이닝 시작

miner.start(1) : 1개의 스레드를 이용하여 마이닝 시작

miner.stop() : 마이닝 중지

miner.setEtherbase(계좌) : coinbase를 매개변수로 넣은 계좌로 설정

txpool

txpool.inspect : 채굴을 기다리는 트랜잭션 pool 확인

txpool.status : 트랜잭션 pool 개수 확인

profile

무지개곰

@무지개곰

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!