메인 콘텐츠로 건너뛰기

목적 및 범위

이 문서는 go-stablenet 코드베이스에서 사용 가능한 개발 도구 전반에 대한 개요를 제공합니다.
여기서 다루는 도구들은 StableNet 노드 및 네트워크를 빌드, 테스트, 디버깅, 운영·유지보수하는 전 과정을 지원합니다.
개발 도구는 네 가지 주요 카테고리로 구성되며, 각 항목은 하위 문서에서 상세히 설명됩니다.
  • Building and CI/CD
    빌드 시스템, 크로스 컴파일, CI/CD 파이프라인에 대한 내용
  • devp2p CLI Tools
    DNS 기반 발견(discovery), P2P 네트워크 진단 및 테스트 도구
  • Data Import and Export Utilities
    블록체인 데이터(체인, 히스토리, 스냅샷) 관리 도구
  • Testing and Debugging
    테스트 프레임워크, 프로토콜 검증, 정적 분석 도구
이 문서는 개별 도구의 사용법보다는 도구 생태계의 전체 구조와 상호 관계를 이해하기 위한 상위 가이드 역할을 합니다.

도구 카테고리

개발 도구는 코드베이스 전반에 분산되어 있으며, 주요 진입점은 다음과 같습니다.
CategoryEntry PointPrimary Use Cases
Build Automationbuild/ci.go, MakefileExecutable 빌드, 크로스 컴파일, 릴리스 패키징
CI/CD Pipelines.travis.yml, appveyor.yml자동 테스트, 빌드, 배포
Network Toolscmd/devp2p/P2P 네트워크 진단, DNS 발견 관리
Chain Managementcmd/utils/cmd.go체인 Import/Export, Era1, 스냅샷 관리
Code Quality.golangci.yml, build/ci.go정적 분석, 린팅
Testinginternal/utesting/, cmd/devp2p/internal/v4test/유닛 테스트, P2P 프로토콜 테스트

빌드 시스템 아키텍처

빌드 시스템의 중심은 build/ci.go이며, 이는 모든 빌드·테스트·릴리스 작업의 단일 제어 지점 역할을 합니다.

주요 컴포넌트

  • build/ci.go
    빌드·테스트·아카이브·업로드를 담당하는 메인 오케스트레이터
  • build.GoToolchain
    크로스 컴파일을 포함한 Go 컴파일러 설정 관리
  • build.Environment
    CI 또는 로컬 Git 환경에서 커밋, 날짜, 브랜치, 태그 메타데이터 수집
  • build.ChecksumDB
    build/checksums.txt를 기반으로 외부 종속성 무결성 검증
이 빌드 시스템은 -arch, -cc 플래그를 통해 다음을 지원합니다.
  • 아키텍처: amd64, 386, arm, arm64
  • 플랫폼: linux, darwin, windows, freebsd

CI/CD 파이프라인 아키텍처

지속적 통합(CI)은 플랫폼별 특성에 따라 분리되어 운영됩니다.
  • Travis CI: Linux / macOS
  • AppVeyor: Windows
이를 통해 동일한 코드베이스에 대해 멀티 플랫폼 릴리스 품질을 보장합니다.

파이프라인 단계

  1. 코드 푸시 트리거
    master 브랜치 또는 버전 태그 푸시 시 실행
  2. 병렬 빌드
    플랫폼 및 아키텍처별 병렬 작업 수행
  3. 테스트 실행
    모든 빌드에서 기본 테스트 실행, cron 작업에서 레이스 디텍션 수행
  4. 아티팩트 생성
    zip / tar.gz 형식의 서명된 바이너리 아카이브 생성

개발 도구 호출 흐름

다음은 일반적인 개발자가 로컬 및 CI 환경에서 도구를 사용하는 흐름입니다.
CommandPurposeImplementation
make gstable메인 노드 빌드go run build/ci.go install ./cmd/gstable
make genesis_generator제네시스 생성기 빌드go run build/ci.go install ./cmd/genesis_generator
make all전체 실행 파일 빌드go run build/ci.go install
make test테스트 실행go run build/ci.go test
make lint정적 분석golangci-lint 실행
make devtools개발 도구 설치stringer, gencodec, abigen 등

빠른 참조: 사용 가능한 도구

빌드 및 릴리스 도구

ToolLocationCommandDescription
Main build scriptbuild/ci.gogo run build/ci.go <cmd>빌드 오케스트레이션
MakefileMakefilemake <target>개발자 편의 래퍼

네트워크 및 발견 도구

ToolLocationDescription
devp2pcmd/devp2p/P2P 네트워크 진단
DNS discoverycmd/devp2p/dnscmd.goDNS 기반 노드 발견 관리
Discovery v4/v5cmd/devp2p/discv4cmd.go, discv5cmd.goDHT 기반 발견 프로토콜 테스트
Node crawlercmd/devp2p/crawl.go네트워크 토폴로지 수집

체인 관리 도구

ToolLocationDescription
Chain import/exportcmd/utils/cmd.go체인 데이터 이동
Era1 archivecmd/utils/cmd.go히스토리 블록 관리
Preimage toolscmd/utils/cmd.go해시 프리이미지 관리
Snapshot exportcmd/utils/cmd.go상태 스냅샷 프리이미지

테스트 및 검증 도구

ToolLocationDescription
Unit tests전체 코드베이스Go 표준 테스트
P2P protocol testscmd/devp2p/internal/v4test/Discovery v4 규격 검증
Test utilitiesinternal/utesting/TAP 호환 테스트 러너
Linter.golangci.ymlgolangci-lint 기반 정적 분석

빌드 플래그 및 구성

크로스 컴파일 플래그

FlagDescription
-arch대상 아키텍처 지정
-cccgo용 C 컴파일러
-static정적 링크 바이너리
-dlgo지정 Go 버전 다운로드

CI 환경 변수

CI 환경에서는 커밋 정보, 서명 키, 업로드 토큰 등이 환경 변수로 주입됩니다.
  • TRAVIS_COMMIT, APPVEYOR_REPO_COMMIT
  • AZURE_BLOBSTORE_TOKEN
  • LINUX_SIGNING_KEY, OSX_SIGNING_KEY
  • AWS_ACCESS_KEY_ID (DNS 관리용)

도구 종속성 및 버전

모든 외부 도구 종속성은 build/checksums.txt버전과 SHA256 체크섬이 고정되어 있습니다.
ToolVersionPurpose
Go compiler1.21.6빌드 도구체인
golangci-lint1.55.2린팅
execution-spec-tests2.1.0실행 스펙 테스트
필요 시 build.ChecksumDB를 통해 자동 다운로드 및 검증이 수행됩니다.
개별 도구의 실제 사용법과 예제는 다음 하위 문서를 참고하세요.
  • Building and CI/CD
  • devp2p CLI Tools
  • Data Import and Export Utilities
  • Testing and Debugging