Taproot는 비트코인을 쓸 권한을 설정하고 증명하는 방식입니다. 하나의 서명으로 일반적인 지출을 하면서 미리 준비한 대체 조건도 선택적으로 둘 수 있습니다. 서명 경로를 사용하면 네트워크는 한 사람이 승인했는지 여러 사람이 협력했는지, 다른 미사용 규칙이 있었는지 알 필요가 없습니다.
Alice와 Bob이 공동 자금을 관리한다고 생각해 보세요. 두 사람이 동의하는 동안은 함께 결제를 승인하려고 합니다. 동시에 특정 블록 높이에 도달하면 Alice가 혼자 쓸 수 있다는 대안을 미리 정할 수도 있습니다. Taproot는 평소 공동 결제 때 대체 계획 전체를 공개하지 않고 이런 약속을 담을 수 있습니다. 모든 지갑에 자동으로 있는 기능은 아닙니다. 소프트웨어가 선택한 조건을 지원해야 하며, 자금을 받기 전에 참여자들이 올바르게 준비해야 합니다. 그 약속에 따라 Alice에게 실제로 독립적인 지출 권한이 생깁니다. [1] [3]
간단한 방법을 key path라고 합니다. 네트워크는 출력의 지출 조건에 명시된 키에 대해 유효한 Schnorr 서명 하나를 검증합니다. 출력은 이전 거래에서 만들어져 지금 쓰려는 특정 금액입니다. 이 서명만으로는 몇 명이 협력했는지, 대체 스크립트가 있었는지 드러나지 않습니다. 다른 방법인 script path는 사용한 스크립트, 즉 구체적인 규칙과 이를 충족하는 데이터를 제시합니다. 그 규칙이 원래 약속에 포함됐음을 증명하는 control block도 함께 냅니다. 다른 스크립트는 숨길 수 있지만, 사용한 스크립트와 증명은 여전히 정보를 드러냅니다. [1]
Schnorr Signature는 디지털 서명의 한 종류로, 해당 키가 결제를 승인했다는 수학적 증거입니다. MuSig2 같은 적절한 프로토콜을 이용하면 여러 키 보유자가 공동 키를 만들고, 이어 공동 서명을 생성할 수 있습니다. Alice와 Bob은 서로 개인 키를 건넬 필요가 없습니다. 다만 지갑이 이 절차를 지원하고 서명 과정에서 협력해야 합니다. Taproot 자체가 모든 입력의 서명을 합치거나 어떤 Multisig 지갑이든 하나의 서명으로 바꾸는 것은 아닙니다. 구현이 중요합니다. 서명 프로토콜에서 nonce라고 하는 비밀 값을 잘못 재사용하면 개인 키가 노출될 수 있습니다. [2] [5]
비트코인 메인넷에서 Taproot 주소는 보통 bc1p로 시작하며 Bech32m으로 표시됩니다. 보내기 전에 서비스나 지갑의 형식 지원 여부와 전체 주소를 확인하세요. Taproot는 공개하는 규칙과 지출에 필요한 데이터를 줄일 수 있습니다. 그러나 금액을 숨기거나 지출되는 출력 사이의 공개된 연결을 끊지는 않습니다. 선택한 경로와 증명의 크기는 수수료에도 영향을 줍니다. 새 형식이라고 자동으로 가장 저렴한 것은 아닙니다. 지갑이 일반적인 단일 키 결제에 Taproot를 사용한다면 직접 대체 스크립트를 만들 필요는 없습니다. [1] [4]
P2TR은 Pay to Taproot의 약자입니다. 규칙상 네이티브 SegWit 버전 1이며, 출력 공개 키를 나타내는 32바이트 witness 프로그램을 사용합니다. 선택적인 스크립트는 트리를 이루고, 그 암호학적 지문이 키에 반영됩니다. 한 갈래의 스크립트를 사용할 때 트리 전체를 공개하지 않고도 해당 스크립트가 트리에 포함됨을 증명할 수 있습니다. BIP 340은 Schnorr 서명, BIP 341은 Taproot 규칙, BIP 342는 스크립트 경로에 쓰이는 언어 Tapscript를 정의합니다. 일반적인 Schnorr 서명은 64바이트입니다. 거래의 어떤 부분을 서명할지 정하는 다른 모드를 명시적으로 선택하면 1바이트가 더 붙습니다. 이 세부 사항은 지갑이 처리하며 주소를 손으로 수정해 설정하는 것이 아닙니다. [1] [2] [3]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 SegWit, Private Key, 트랜잭션, Lightning Network. 다음 항목에서도 이 글을 참조합니다 SegWit, Lightning Network, Hash, SHA-256.