블록체인/레벨 X · 한 바퀴를 돌아/10.3 비트코인으로 살기/수업 5
비트코인을 기반으로 함
레그테스트, 설명자, 그리고 공개 심사의 원칙
준비물비트코인 코어가 실행 중인 컴퓨터(다운로드 및 검증 완료)비트코인-클라이언트 참고 자료(비트코인-클라이언트 도움말)BIP 174 및 BIP 380에 대한 문서
호기심
- 비트코인 코어에서 단 한 줄의 코드가 변경되더라도 안정적인 버전이 출시되기까지 왜 수개월에 걸친 논의가 필요한가요?
- 개발자들은 실제 자금에 위험을 주거나 메인 네트워크를 손상시키지 않고 합의가 중요한 로직을 어떻게 테스트할까요?
- 디스크립터와 PSBT의 차이점은 무엇이며, 왜 둘 다 현대적인 지갑 개발에 필수적인가요?
탐구
- Bitcoin Core는 테스트를 위해 두 가지 주요 환경을 제공합니다: regtest와 Signet입니다. Regtest는 작업 증명 과정이 필요 없어 개발자들이 즉시 블록을 채굴할 수 있게 해주므로, 단위 테스트나 합의 규칙에 대한 신속한 반복 작업에 이상적입니다. Signet(BIP 325)은 공개 테스트 네트워크로, 블록에는 지정된 서명자의 서명이 반드시 포함되어야 하므로 일관된 블록 생성 주기를 유지할 수 있으며 해시레이트 공격으로 인한 문제도 발생하지 않습니다. 따라서 실제 돈을 사용하지 않고 다른 사람들의 소프트웨어와 함께 테스트를 진행하는 데 적합합니다.
- 원격 프로시저 호출(RPC) 인터페이스는 비트코인 코어의 내부 상태를 외부 스크립트에 노출합니다. 개발자들은 RPC 명령을 사용하여 체인을 조작하고, 트랜잭션을 검사하며, regtest 환경에서 채굴을 시작합니다. 그래픽 사용자 인터페이스를 완전히 우회하고 노드의 데이터 구조와 직접 상호작용해야 하는 지갑 소프트웨어를 개발하기 위해서는 이러한 프로그래밍 방식의 접근이 필수적입니다.
- 디스크립터는 키가 어떻게 지출 조건으로 변환되는지를 정의하는 반면, 부분 서명된 비트코인 트랜잭션(PSBT)은 다자간 서명 워크플로우를 용이하게 합니다. BIP 174는 PSBT 형식을 표준화하여 하드웨어 지갑, 모바일 기기, 서버와 같은 다양한 엔티티들이 개인 키를 노출시키지 않고도 트랜잭션에 서명을 추가할 수 있게 해주었습니다. 키 관리와 트랜잭션 구성의 이러한 분리는 안전한 멀티시그 설정에 매우 중요합니다.
- 비트코인 개발 키트(BDK)와 라이팅 개발 키트(LDK)는 애플리케이션 개발자들이 노드 관리의 복잡성을 간소화해 줍니다. BDK는 비트코인 코어, 엘렉트럼 서버 또는 에스플로라 API에서 체인 데이터를 읽을 수 있는 디스크립터 기반 지갑용 러스트 라이브러리이며, LDK는 모바일 기기에 적합한 경량형 라이팅 네트워크 프로토콜 구현체를 제공합니다. 이러한 라이브러리들 덕분에 깊은 시스템 프로그래밍 지식이 없어도 비트코인 전용 애플리케이션을 개발하는 문턱이 낮아집니다.
- 공개 리뷰는 비트코인의 보안 모델의 핵심입니다. 풀 리퀘스트를 통해 제안된 변경 사항들은 전 세계 개발자 커뮤니티의 철저한 검토를 거칩니다. PR Review Club은 기여자들이 코드의 차이점을 줄 단위로 분석하는 정기적인 회의를 주최함으로써 이 과정을 지원합니다. 이러한 집단 지성 덕분에 미세한 버그들도 발견될 수 있으며, 합의된 변경 사항들이 채택되기 전에 충분히 이해되도록 보장합니다. 이는 다른 소프트웨어 생태계에서 흔히 볼 수 있는 빠른 배포 주기와는 구별되는 과정입니다.
- 프라이빗 체인을 시작하려면 bitcoind -regtest -daemon를 실행한 다음, bitcoin-cli -regtest createwallet dev를 사용해 지갑을 생성합니다. 그런 다음 generatetoaddress 명령어를 사용하여 해당 주소 중 하나에 101개의 블록을 채굴함으로써 첫 번째 코인베이스가 성숙하도록 합니다. walletcreatefundedpsbt 명령어를 사용해 지불 거래를 만들고, decodepsbt 명령어로 그 내용을 읽은 뒤 walletprocesspsbt 및 sendrawtransaction 명령어를 사용해 서명하고 전송합니다. 그 다음 하나의 블록을 더 채굴하여 확인 과정을 지켜봅니다.
핵심 사실
- Regtest는 독립적인 테스트를 위해 작업 증명이 필요하지 않아 즉시 블록 채굴이 가능합니다.
- 시그넷(BIP 325) 블록은 지정된 키로 서명되어야 하며, 이를 통해 안정적인 공개 테스트 네트워크가 구축됩니다.
- BIP 174는 다자간 서명 워크플로우를 위한 부분적으로 서명된 비트코인 트랜잭션(PSBT) 형식을 정의합니다.
- BIP 380의 스크립트 설명자는 지갑을 위한 키 파생 경로와 지출 조건을 정의합니다.
- Bitcoin Dev Kit(BDK)은 여러 체인 백엔드에서 디스크립터 기반 지갑을 구축하기 위한 Rust 라이브러리입니다.
- 공개 풀 리퀘스트 검토를 통해 합의된 변경 사항들이 배포되기 전에 철저하고 다단계적인 심사를 거치도록 합니다.
연습 아홉, 여섯, 셋, 하나
9모으기비트코인 개발 생태계의 9가지 주요 구성 요소인 regtest, signet, mainnet, RPC 인터페이스, descriptors, PSBTs, BDK, LDK, PR Review Club을 식별하십시오. 각각에 대해 소프트웨어 라이프사이클에서의 주요 역할을 기술하십시오.
6묶기이 9개의 구성 요소를 기능에 따라 프라이빗 테스트, 퍼블릭 테스트, 노드 인터페이스, 월렛 표준, 개발 라이브러리, 리뷰의 6개 카테고리로 분류하세요.
3추리기6가지 원칙을 비트코인 소프트웨어 개발을 지배하는 3가지 핵심 원칙으로 줄이면 다음과 같습니다: 안전을 위한 분리, 호환성을 위한 표준화, 보안을 위한 투명성.
1결정화네트워크 노드에 직접 연결될 수 없는 하드웨어 지갑을 사용할 때 PSBT가 필요한 이유는 보안 강화를 위함입니다.
팩트 체크
날짜, 수치 및 주장은 아래에 명시된 출처들을 통해 확인되었습니다.