Signet은 Bitcoin 소프트웨어를 공동으로 테스트하는 데 쓰이며 자체 체인과 테스트 코인을 가집니다. 새 블록은 일반 규칙과 Proof of Work 외에 특별한 네트워크 조건을 충족해야 합니다. 기본 Signet에서는 서명이 그 조건의 바탕입니다. 테스트 관리에 도움이 되지만 메인넷과는 신뢰 모델이 다릅니다.
안나는 새 지갑에서 지급을 보낸 뒤, 그리고 그것이 블록에서 확인된 뒤 무엇이 표시되는지 알고 싶습니다. 지갑은 비트코인을 받고 보내는 앱이나 기기입니다. 블록은 공동 기록에 추가하는 거래 묶음입니다. Signet에서는 테스트 코인을 쓸 수 있습니다. 예를 들어 faucet은 실험용 코인을 나눠 주는 서비스입니다. 이 코인은 실제 주 네트워크인 mainnet의 BTC가 아니며, 프로토콜이 실제 비트코인으로 바꿔 주지도 않습니다. 주소도 주의해야 합니다. Signet은 일부 테스트 주소 형식을 Testnet과 공유하므로, 모양만 보고 올바른 네트워크를 확정할 수 없습니다. [1] [2] [8]
Karl-Johan Alm과 Anthony Towns가 BIP 325 (Signet을 설명하는 기술 문서)를 작성했고, Bitcoin Core v0.21.0에서 Signet 지원이 도입되었습니다. 프로그램은 기본 공개 네트워크를 제공하지만, 팀이 별도의 블록 생성 조건과 참여자를 정할 수도 있습니다. 따라서 “Signet을 쓴다”는 말만으로는 부족합니다. 양쪽이 같은 네트워크를 사용해야 합니다. 네트워크 메시지 식별자는 프로젝트 이름이 아니라 그 조건에서 도출됩니다. [1] [3] [4]
Full Node는 규칙을 독립적으로 검사하는 노드입니다. 여전히 거래와 Proof of Work, 즉 블록 생성에 필요한 계산 작업의 결과를 검증하며, Signet의 추가 조건도 확인합니다. 그래서 기본 네트워크에서는 채굴만으로 충분하지 않고 적절한 서명도 필요합니다. 블록의 간략한 개요인 헤더만으로 이 검사를 대신할 수는 없습니다. 필요한 데이터가 블록 내부에 있기 때문입니다. [1] [9]
디지털 서명으로 해당 개인 키의 보유자가 메시지를 승인했는지 검증할 수 있습니다. 개인 키는 비밀 숫자 값이며, 검증을 위해 공개할 필요가 없습니다. 서명 조건을 충족할 수 있는 사람은 블록 생성에 영향을 줍니다. 서명을 늦추거나 포함할 거래를 제한할 수 있습니다. 그렇다고 안나의 개인 키를 얻거나, 임의의 무효 거래를 안나의 노드가 받아들이도록 강제할 수는 없습니다. 다른 규칙은 계속 적용됩니다. 이렇게 관리되는 참여는 테스트에 유용하며, 동시에 Signet이 mainnet 보안 모델의 복제본이 아닌 이유이기도 합니다. [1] [9]
개발에는 한 번의 성공적인 지급만으로 충분하지 않습니다. 블록 생성이 멈추거나, 노드가 최근 블록을 다른 유효한 분기로 바꾸는 재구성이 발생했을 때 앱이 어떻게 반응하는지도 알아야 합니다. 조율한 테스트로 이 상황을 만들어 지갑이 확인 상태를 올바르게 갱신하는지 볼 수 있습니다. Signet은 무중단 서비스를 약속하지 않습니다. 실패 상황까지 더 예측 가능하게 시험하도록 돕습니다. [1] [5] [6]
Testnet에서는 블록 생성이 개방되어 있어 생성 속도의 변동이 공동 실험을 복잡하게 만들 수 있습니다. Regtest는 필요할 때 쉽게 블록을 만들 수 있으므로 자체 자동 테스트에 알맞습니다. 여러 컴퓨터를 연결할 수도 있어 반드시 혼자 실행하는 프로그램은 아닙니다. Signet은 다른 요구, 즉 독립 참여자들이 합의한 블록 생성 조건 아래 오래 협업하는 데 쓰입니다. 어느 모드도 다른 모든 시험을 대체하지 않습니다. [1] [2]
Challenge는 블록이 무엇을 입증해야 하는지 정하는 짧은 프로그램인 스크립트입니다. 단일 서명이나 Multisig, 여러 키 가운데 합의된 수의 서명을 요구할 수 있습니다. 자체 Signet은 서명 없이 충족되는 조건인 OP_TRUE를 사용할 수도 있습니다. 이때는 빈 해답으로 충분합니다. 그러므로 모든 Signet에 항상 서명자가 필요하다고 하기보다, 추가 스크립트 조건이 있다고 설명하는 것이 정확합니다. [1] [9]
BIP 325는 비어 있지 않은 해답을 블록의 첫 거래인 Coinbase Transaction의 특별 데이터에 넣습니다. 여기서 이 명칭은 같은 이름의 거래소와 무관합니다. 데이터는 서명 등을 담은 witness 데이터에 블록을 연결하는 BIP 141 커밋먼트를 확장하며, 0xecc7daa2 표식으로 식별됩니다. 서명자에게 보내는 별도의 일반 지급이 아닙니다. 쉽게 충족되는 조건이라면 추가 해답을 생략할 수 있지만, 다른 블록 규칙까지 자동으로 생략할 수는 없습니다. [1] [9] [10]
서명할 메시지에 그 서명 자체가 들어 있으면 순환 의존성이 생깁니다. 그래서 검증은 해답을 비운 뒤 수정된 거래 지문과 두 개의 가상 거래를 사용합니다. 이들은 계산을 위한 것이며 추가 지급으로 전송되지 않습니다. 서명에는 헤더의 nonce, 즉 Proof of Work를 찾을 때 바꾸는 숫자도 포함되지 않습니다. 이 숫자를 바꿔도 재서명은 필요 없지만, 블록의 다른 부분까지 마음대로 바꿔도 된다는 뜻은 아닙니다. [1] [9]
안나는 먼저 지갑, 노드, 블록 탐색기가 같은 테스트 네트워크를 쓰는지 확인합니다. 블록 탐색기는 특정 네트워크의 거래와 블록을 조회하는 앱입니다. Bitcoin Core에서는 getblockchaininfo와 signet_challenge 필드가 설정된 조건을 보여 줍니다. 이후 “전송됨” 문구만 보지 않고 실제 확인을 살피며, 별도의 테스트 지갑을 사용합니다. 성공은 해당 조건에서 앱이 어떻게 작동하는지 보여 줍니다. 자금의 안전이나 mainnet 공격자에 대한 저항력을 보장하지는 않습니다. [7] [8]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Nakamoto Consensus, Block Propagation, Initial Block Download, Block Weight, Bitcoin, Bitcoin Core. 다음 항목에서도 이 글을 참조합니다 Testnet, Miniscript, Dead Man’s Switch.