Skip to main content

Setting up Cardano-db-sync

Partner Chain인 Midnight 노드는 Cardano blockchain의 스크립트를 추적해야 합니다. Cardano-db-sync는 이 목적으로 사용되는 도구로, Cardano 체인을 따라가면서 blockchain과 내부 ledger 상태에서 정보를 추출합니다. 추출된 데이터는 PostgreSQL 데이터베이스에 저장됩니다. PostgreSQL 인터페이스를 통해 Midnight 노드가 데이터베이스 스키마에 SQL 쿼리를 직접 실행하거나, SQL 라이브러리를 지원하는 언어로 Cardano 체인에 접근할 수 있습니다.

따라서 Midnight 노드에는 Cardano-db-sync 인스턴스와의 상시 연결이 필수입니다.

System Requirements

요구 사항Cardano MainnetPreview Testnet
운영체제일반적인 Linux 배포판일반적인 Linux 배포판
메모리32 GB 이상16 GB 이상
CPU 코어4개 이상4개 이상
IOPS60,000 IOPS 이상. 낮은 등급은 동기화가 느려지거나 체인 tip에 뒤처질 수 있습니다.30,000 IOPS 이상. 낮은 등급은 동기화가 느려질 수 있습니다.
디스크 스토리지320 GB, SSD40 GB (SSD 권장)

Installation

Cardano-db-sync는 정적 바이너리, Nix, 소스 빌드, Docker 등 다양한 방법으로 설치할 수 있습니다. 이 문서에서는 Docker 방법을 다룹니다.

note

자세한 정보는 공식 Cardano-db-sync 저장소를 참고하세요: https://github.com/IntersectMBO/cardano-db-sync

Install Docker

Docker Desktop 사용자

Docker Desktop은 그래픽 앱으로, 여기서 직접 docker --version 같은 명령어를 실행할 수는 없습니다. 백그라운드 Docker 엔진만 제공합니다. 모든 Midnight 명령어는 시스템 터미널에서 실행해야 합니다.

명령어 실행 전:

  1. Docker Desktop을 실행합니다
  2. **"Docker is running"**이 표시될 때까지 대기합니다
  3. Docker Desktop을 열어둔 채로 유지합니다 — UI에서 컨테이너를 실행하지 마세요
  4. 이 가이드의 모든 명령어를 터미널에서 그대로 실행합니다

Verify Docker is installed

  • Docker 버전과 설치 경로를 확인합니다:
docker --version # Docker 버전 출력
which docker # 실행 파일 경로 출력
  • Docker 데몬이 실행 중인지 확인합니다:
sudo systemctl status docker

Docker가 실행 중이면 다음과 같은 출력이 나타납니다:

● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-10-09 15:00:00 UTC; 1h 30min ago

Clone midnight-node-docker Repository:

midnight-node-docker 저장소에는 Preview Testnet에서 Cardano-db-sync/ PostgreSQL 인스턴스를 쉽게 시작할 수 있는 Docker Compose 파일이 포함되어 있습니다.

  • 저장소를 클론하고 해당 디렉토리로 이동합니다:
git clone https://github.com/midnightntwrk/midnight-node-docker
cd midnight-node-docker

Configure Cardano-db-sync/ PostgreSQL

Cardano-db-sync와 PostgreSQL 서비스는 compose-partner-chains.yml에 정의되어 있습니다.

important

보안을 위해 Cardano-db-sync와 PostgreSQL에 고유한 사용자명, 비밀번호, 포트를 설정하세요.

  • compose-partner-chains.yml을 에디터로 열고, 기본 사용자명, 비밀번호, 포트를 본인만 아는 고유한 값으로 변경합니다.
  • Ogmios 서비스를 주석 처리합니다 (블록 프로듀서로서 블록 생성 작업에 필요한 경우가 아니라면).
  • compose-partner-chains.yml을 저장합니다.

Start Cardano-db-sync/ PostgreSQL

  • compose-partner-chains.yml에 정의된 서비스를 시작합니다:
docker-compose -f compose-partner-chains.yml up -d
  • Cardano-db-sync 동기화 진행 상황을 조회합니다:

    • psql을 직접 사용하는 경우:

      sudo apt-get install postgresql-client # psql 클라이언트 설치
      • psql로 PostgreSQL 셸에 로그인합니다:
      psql -h localhost -U postgres -d cexplorer -p 5432
    • Docker를 통해 PostgreSQL 셸에 로그인할 수도 있습니다:

      docker exec -it db-sync-postgres psql -U postgres -d cexplorer

      PostgreSQL 셸에서 다음 쿼리를 실행하여 현재 동기화 상태를 확인합니다:

      SELECT 100 * (
      EXTRACT(EPOCH FROM (MAX(time) AT TIME ZONE 'UTC')) -
      EXTRACT(EPOCH FROM (MIN(time) AT TIME ZONE 'UTC'))
      ) / (
      EXTRACT(EPOCH FROM (NOW() AT TIME ZONE 'UTC')) -
      EXTRACT(EPOCH FROM (MIN(time) AT TIME ZONE 'UTC'))
      ) AS sync_percent
      FROM block;
    • SSH로 원격 조회하는 경우:

      원격으로 조회하려면 SSH를 통해 다음 명령어를 실행합니다:

      ssh user@x.x.x.x -C "psql -d cexplorer -h localhost -p 5432 -U postgres -c \"SELECT 100 * (EXTRACT(EPOCH FROM (MAX(time) AT TIME ZONE 'UTC')) - EXTRACT(EPOCH FROM (MIN(time) AT TIME ZONE 'UTC'))) / (EXTRACT(EPOCH FROM (NOW() AT TIME ZONE 'UTC')) - EXTRACT(EPOCH FROM (MIN(time) AT TIME ZONE 'UTC'))) AS sync_percent FROM block;\""

      user@x.x.x.x를 SSH 사용자명과 서버 IP 주소로 바꾸세요.

tip

Midnight 노드가 동작하려면 Cardano-db-sync가 완전히 동기화되어야 합니다.