이더리움 프라이빗 네트워크에서 블록 익스플로, 로컬 노드 설정을 실습해보자.
...
커토시스(Kurtosis) 를 실습에 활용할 것인데, 개념정리가 필요하다.
1) 커토시스(Kurtosis)는 컨테이너 기반의 분산 시스템을 로컬 환경이나 CI 환경에서 쉽게 구성하고 테스트할 수 있도록 돕는 툴이다.
2) 이더리움, IPFS, Cosmos 같은 Web3 인프라를 실험하고 검증할 수 있게 설계되어 있으며,
3) 핵심은 복잡한 노드 환경을 한 줄 명령어로 자동화해주는 데 있다.
이더리움 클라이언트는 크게 두 가지로 나뉜다:
1) 실행 클라이언트 (Execution Client): Geth, Nethermind 등
2) 컨센서스 클라이언트 (Consensus Client): Lighthouse, Prysm 등
커토시스를 사용하면 이러한 클라이언트를 포함한 여러 구성요소를 Docker 컨테이너로 자동 배치해, 프라이빗 네트워크를 구성하고 그 위에서 스마트컨트랙트 테스트, 장애 주입 실험, 데이터 시각화 등을 효율적으로 진행할 수 있다.
더 쉬운 말로 하면, 커토시스는 "블록체인 실험실 자동 설치기"다. 게임 개발자가 게임 테스트용 서버를 띄우듯, 블록체인 개발자도 테스트용 이더리움 네트워크가 필요한데, 그 과정은 생각보다 복잡하다.
Geth, Lighthouse, 컨센서스 엔진, RPC 노출, 지갑 연동, 익스플로러까지 각각 따로 설치하고 설정해야 한다.
커토시스를 사용하면 이러한 복잡한 설정을 한 번에 구성할 수 있다. 명령어 한 줄로 전체 노드 클러스터가 구성되며, 블록 익스플로러까지 연결 가능하다. 또한 다중 노드를 활용한 테스트넷, 프라이빗 체인, 시뮬레이션, 장애 주입 등 다양한 실험이 가능하도록 설계되어 있다.
아래는 각 구성 요소의 설명이다:
구성 요소 | 설명 |
Geth | - 이더리움의 실행 클라이언트. - EVM(스마트컨트랙트 실행), 트랜잭션 처리 등을 담당한다. |
Lighthouse | - 이더리움의 컨센서스 클라이언트. - 블록 생성 및 검증, 네트워크 합의를 담당한다. |
consensus | - 여러 노드가 네트워크에서 어떤 블록이 진짜인지 동의하는 과정. - PoS에서는 검증자들이 투표하여 합의를 이끈다. |
RPC | - 외부 앱이나 지갑이 이더리움 노드와 통신할 수 있게 해주는 인터페이스. - JSON-RPC를 통해 트랜잭션 전송, 블록 조회 등이 가능하다. |
wallet | - 사용자가 개인 키를 보관하고 트랜잭션을 서명할 수 있게 해주는 도구. - 로컬 RPC와 연동하면 프라이빗 네트워크 상에서도 작동 가능하다. |
Blockscout | - 블록, 트랜잭션, 주소 등을 시각적으로 조회할 수 있는 웹 인터페이스. - 프라이빗 네트워크의 상태를 눈으로 확인할 수 있어 디버깅에 유용하다. |
결론적으로, 커토시스는 블록체인 개발자에게 있어 다음과 같은 장점을 가진다:
- 로컬/CI 환경에서 이더리움 프라이빗 네트워크를 손쉽게 구성 가능
- 도커 기반이기 때문에 환경 재현성과 확장성 우수
- 블록 익스플로러와 지갑 연동까지 자동화 가능
- 스마트컨트랙트 테스트, 장애 실험, 노드 클러스터 구성 등이 쉬움
...
[1] 우선 도커를 설치하자.
https://docs.docker.com/desktop/setup/install/mac-install/
[2] mac terminal 통해, 정상 설치 되었는지 확인
docker --version
[3] 커토시스(Kurtosis) 설치
brew install kurtosis-tech/tap/kurtosis-cli
[4] mkdir private-network && cd private-network 설정
[5] vi network_params.yaml 설정
participants:
- el_type: geth
cl_type: lighthouse
count: 2
- el_type: geth
cl_type: teku
network_params:
network_id: "695874"
additional_services:
- dora
participants 항목을 보면, "geth + lighthouse" 조합으로 2개의 노드를 띄우고 "geth + teku" 조합으로 1개의 노드를 띄운다.
총 3개의 노드가 프라이빗 네트워크에 참여하게 되는것이다.
이더리움은 PoS 지분증명 기반으로 컨센서스 클라이언트 간 합의가 핵심이다.
- 노드 1개만 구성하면 "혼자 노는 체인"이 되지만,
- 2개 이상 구성하면 실제 블록 합의, 트랜잭션 전파, 장애 상황 등을 실험할 수 있다.
- 또한 다양한 클라이언트(teku, lighthouse 등)를 조합하면 실제 메인넷과 유사한 환경을 재현할 수 있다.
정리하자면,
1) participants는 노드 조합을 정의하는 설정이며,
2) 다양한 조합과 노드 수 설정을 통해 실제 메인넷에 가까운 실험 환경을 만들 수 있다.
network_id는
1) 이더리움 네트워크를 구분하는 고유번호이며,
2) 블록체인은 전부가 연결된 네트워크 이기에 서로 다른 체인끼리 트랜잭션이 섞이면 안된다.
2) 그래서 네트워크는 고유한 network_id 값을 가지고 자신을 식별한다.
대표적인 네트워크 ID
- Ethereum Mainnet 1
- Goerli Testnet 5
- Sepolia 11155111 등
프라이빗 네트워크에선 내가 원하는 값으로 설정해도 무방하다. (1은 쓰지말자. 메인넷과 혼동될 수 있다.)
additional_service는
Ethereum 프라이빗 네트워크를 보조해주는 부가 도구 (서비스)들을 선택적으로 추가하는 설정이다.
이 값에 특정 도구 이름을 넣으면, 커토스시(Kurtosis)가 자동으로 관리하는 docker 컨테이너로 실행된다.
단순히 노드만 띄우면 블록이 생성되고 트랜잭션이 처리되긴 하지만 가독성은 떨어진다.
dora 라는 블록 익스플로러를 활용하여 블록 상태, 트랜잭션 시각화를 해보자.
[6] 네트워크 띄우기
kurtosis run github.com/ethpandaops/ethereum-package --args-file./network_params.yaml --image-download always
성공적으로 띄워졌다면 각 서비스들이 Running 상태인 것을 확인할 수 있다.
커토시스로 셋업을 하면 미리 펀딩되어있는 계정들을 사용할 수 있다. 서버를 띄울때 다수의 account 정보들이 제공되므로 하나를 골라 사용하자.
curl -X POST http://127.0.0.1:50397 \
-H "Content-Type: application/json" \
--data '{
"jsonrpc":"2.0",
"method":"eth_getBalance",
"params":["0x8943545177806ED17B9F23F0a21ee5948eCaa776", "latest"],
"id":1
}'
{"jsonrpc":"2.0","id":1,"result":"0x33b2e3c9fd0803ce8000000"}
해당 결과가 나오는데, 0x33b2e3c9fd0803ce8000000 해당 16진수 값으로 계산된다. 10진수로 환산해보면 1000000000000000000000000000 즉 28자리이고, wei 단위이기에 10의 18승이니 28-18을 하면 10이 나온다.
0이 9개이니 1억 이더리움이 입금된 계정임을 확인할 수 있다.
마지막으로, dora 가 잘 띄워졌는지 확인해보자.
...
다음은 블록 스카우트 셋업을 해야한다. dora 는 컨센서스 클라이언트의 상태를 보는 것라면, 블록 스카우트(blockscout) 는 이더리움의 익스큐션 레이어의 상태를 볼 수 있다.
우리가 날리는 트랜잭션은 블록 스카우터에서 볼 수 있기 떄문 우리에겐 더 중요한 툴이다. 셋업 과정은 업로드가 불가하다.
블록 스카우터 키워드로 검색을 통해 띄워보도록 하자.
...
잘 동작하는지는,
1) dora 최신 슬롯에서 Execution payload > Block Number 를 확인한 후
2) blockscout > latest block 에 잘 반영되었는지 확인하면 된다.
'블록체인 > 개발' 카테고리의 다른 글
ERC-20 solidity setup 및 abi, bytecode Compile 실습 (0) | 2025.07.04 |
---|