Taproot Wizards는 어제 CatVM이라는 만화를 발표했습니다. 저는 이것을 백서라고 부르지 않을 것입니다. 백서는 성인을 위한 실제 학술 문서입니다. 만화 속에는 터무니없는 어린이 이야기 사이에 비트코인 생태계의 다양한 확장 제안에 대한 몇 가지 귀중한 기술 통찰이 섞여 있었습니다. 물론 만화의 진정한 방식으로, 과장과 장식 사이에 묻혀 있었습니다.
만화의 최종 목표는 비트코인 위에 구축된 확장 레이어로 들어가고 나오는 새로운 메커니즘을 제안하는 것이었습니다. 그 실제 제안을 만화에서 분리하기 위해서는 두 가지 요소를 분해해야 합니다.
구성 요소
Rijndael의 첫 번째 OP_CAT 실험은 금고를 구성하는 것이었습니다. 이는 사용자가 금고에서 자금을 인출하기 위해 중간 “스테이징” 거래를 생성할 수 있도록 하는 계획입니다. 이것은 타임락을 시작하며, 이 기간 동안 사용자는 언제든지 자금을 금고나 안전한 콜드 스토리지 지갑으로 다시 보낼 수 있고, 타임락이 만료된 후에는 인출 프로세스를 시작할 때 선택한 목적지로 자유롭게 자금을 인출할 수 있습니다. 이는 금고 스크립트로 전송된 비트코인을 사용할 수 있는 유일한 두 가지 방법입니다.
이것이 어떻게 이루어지는지에 대한 전체 메커니즘을 설명하는 것은 본질적으로 하나의 기사에 해당하므로, 제가 보통 하지 않는 방식으로 이를 “마법”이라고 손쉽게 넘기겠습니다. (Andrew Poelstra가 여기서 설명했습니다) 이 “마법”이 허용하는 것은 비표준 Schnorr 서명을 생성하고 OP_CAT의 도움으로 서명 검사가 스크립트 스택에서 어떤 거래에 대한 것인지 구축하는 것입니다. 이를 통해 거래의 특정 부분이 미리 정의된 대로 정확히 이루어지도록 강제할 수 있습니다. 또한 거래를 구축하는 과정에서 이전 거래의 출력을 스택에 올릴 수 있어, 지출 거래의 출력을 이전 거래의 출력과 비교할 수 있습니다. 이를 통해 특정 부분의 이전 거래 출력이 새로운 출력의 특정 부분과 일치하는지 보장할 수 있습니다. 즉, 스크립트나 금액입니다. 따라서 이전 출력의 일부를 새로운 출력으로 “이월”하고 이를 강제할 수 있습니다.
OP_CAT으로 할 수 있는 또 다른 것은 Merkle 트리 가지를 검증하는 것입니다. 항목을 CAT 스택에 함께 쌓을 수 있고 비트코인이 이미 스택에서 데이터를 해싱하는 것을 지원하기 때문에, 잎 노드에서 내부 노드로 Merkle 트리 루트를 천천히 구축할 수 있습니다. 두 조각을 해시하여 하나의 해시를 만들고, 그 해시를 쌍 해시와 해시하여 계속 진행합니다. 결국 스택에서 루트 해시를 얻습니다. 그런 다음 이를 OP_EQUAL과 비교하여 잠금 스크립트에 미리 정의된 루트 해시와 비교할 수 있습니다.
일방적 인출
이 두 가지 구성 요소는 그룹 공유 UTXO에서 일방적 인출 메커니즘을 촉진하기에 충분합니다. Merkle 루트는 OP_RETURN 또는 각 사용자의 잎 노드에 커밋하는 다른 메커니즘을 사용하여 거래에 포함될 수 있습니다. UTXO 스크립트는 잔액이 있는 모든 사용자가 인출을 시도할 수 있도록 구조화될 수 있습니다. 그렇게 하려면 그들은 자신이 받을 수 있는 금액을 커밋하는 Merkle 가지, 서명을 확인하기 위한 공개 키와 같은 인증 증명을 제공하고, 적절한 조건이 충족되었는지 확인하기 위해 스택에서 거래를 구성해야 합니다.
Rijndael의 OP_CAT 금고와 유사하게, 이 인출 거래는 스테이징 포인트로 기능할 것입니다. 사용자 자금은 타임락에 의해 제한되며, 만료될 때까지 인출을 완료할 수 없습니다. 타임락이 만료되기 전 언제든지 다른 사용자는 사기 증명을 생성하여 인출을 중단하고 자금을 그룹 UTXO 스크립트로 다시 밀어넣을 수 있습니다. 이는 OP_CAT의 Merkle 트리를 검증하는 능력 덕분입니다. 누군가가 이전에 특정 Merkle 가지를 사용하여 UTXO에서 자금을 인출했다면, 이는 어딘가의 블록에 포함되었습니다. 실제 블록 내에서 그 거래의 SPV 증명을 포함하는 거래를 구성함으로써, OP_LESSTHANOREQUAL을 사용하여 블록 헤더가 최소 난이도를 충족하는지 검증할 수 있습니다. 이를 통해 스택에서 Merkle 가지가 이전에 사용되었음을 증명할 수 있습니다. 이는 중복 인출을 방지할 수 있게 합니다.
또한, 이전 거래의 특정 부분이 다음 거래에 포함되어야 함을 보장하기 위해 “스택에서 CAT” 트릭을 사용할 수 있기 때문에, 성공적인 인출 후 현재 Merkle 루트가 다음 거래로 이월되도록 보장할 수 있습니다. 인출로부터의 잔돈이 그룹 공유 스크립트로 돌아가도록 보장할 수도 있습니다. 이는 한 사용자가 자금을 인출한 후 잔돈 UTXO가 남은 사용자가 인출할 수 있도록 허용하는 스크립트로 잠금된다는 것을 보장합니다. 어떤 사용자든 언제든지 어떤 순서로든 일방적으로 자금을 인출할 수 있으며, 나머지 자금은 여전히 다른 사용자에게 접근 가능하다는 보장이 있습니다.
VM 부분
독자들은 BitVM의 기본 아이디어에 익숙해야 합니다. 임의의 계산을 가져와 각 구성 요소로 나누고 이를 큰 탭루트 트리에 포함시켜 그 계산을 상호 도전/응답 게임으로 전환할 수 있습니다. 이를 통해 비트코인을 비트코인 스크립트 자체가 직접 지원하는 것보다 더 복잡한 조건으로 잠글 수 있습니다. 유일한 진정한 단점은 이를 촉진하기 위해 대량의 사전 서명된 거래를 작성해야 한다는 것입니다.
사전 서명된 거래를 사용해야 하는 이유는 도전/응답 동적에서 코인이 대형 탭루트 트리로 다시 사용되도록 보장할 수 있기 때문입니다. OP_CAT과 이전 거래에서 데이터를 “이월”할 수 있는 능력 덕분에 사전 서명된 거래가 필요하지 않게 됩니다.
따라서 이 계획은 사용자가 스스로 일방적으로 종료할 수 있게 할 뿐만 아니라, 비트코인 스크립트에서 지원되지 않는 두 번째 레이어에 의해 지원되는 잠금 조건이 인출 과정에서 실제로 시행될 수 있도록 합니다. 즉, 어떤 코인이 기본 레이어가 이해하지 못하는 스마트 계약에 의해 제한되어 있고, 두 번째 레이어에서 인출된 경우, 이러한 더 복잡한 조건이 기본 레이어에서 올바르게 해결될 수 있습니다.
누락된 조각
OP_CAT이 가능하게 하지 않는 한 가지는 사용자 잔액을 온체인에서 검증 가능하게 나타내는 Merkle 트리 루트를 업데이트하는 것입니다. 이는 일방적 인출을 촉진하기 위해 이미 커밋된 상태를 가능하게 할 수 있지만, 이는 실제로 트리의 전체 섹션이 온체인에 놓이고 검증되기 때문입니다. 그 루트를 온체인에서 업데이트한다는 것은 본질적으로 데이터를 온체인에 놓지 않는 것을 의미합니다. 이는 문제를 나타냅니다. CAT만으로는 Merkle 트리에 대한 모든 변경 사항이 관련 사용자에 의해 적절하게 승인되었는지 효율적으로 검증할 방법이 없습니다.
누군가(들)를 신뢰해야 하며, UTXO를 원하는 대로 효율적으로 교체하기 위해서는 구식 상태 루트를 새로운 것으로 교체할 수 있는 능력이 필요합니다. 이를 신뢰 없는 방식으로 수행하기 위해서는 OP_CAT 외에 OP_ZKVERIFY와 같은 새로운 연산 코드가 필요합니다.
하지만 OP_ZKVERIFY가 없더라도 세상 끝은 아닙니다. 오프체인 전송을 위한 Merkle 루트를 업데이트하는 엔티티는 n-of-n 다중 서명일 수 있으며, 루트 변경 사항에 대해 100%의 참여자가 서명해야 합니다. 이는 BitVM 기반 피그와 동일한 신뢰 모델로 귀결되며, 단 하나의 정직한 참여자가 존재하는 한 누구의 자금도 도난당할 수 없습니다. 그러나 인출 과정에 있어서는 기존 BitVM 설계보다 확실히 개선된 것입니다.
BitVM 피그에서는 사용자가 일방적 인출 메커니즘을 갖고 있지 않습니다. 피그 운영자는 사용자 인출을 이행하기 위해 신뢰를 받아야 하며, 그렇게 하기 위해 상대적으로 신뢰 없이 BitVM 피그에서 사용한 자금을 다시 청구할 수 있습니다. 이의 유인은 매우 확고하지만, 여전히 사용자가 시스템에서 나가기 위해 누군가의 허가를 받아야 하며, 스스로 할 수는 없습니다. CatVM을 통해 사용자는 자금을 일방적으로 청구할 수 있으며, 인출을 처리하기 위해 운영자가 자신의 유동성을 제공할 필요가 없습니다.
마무리
전반적으로 설계는 구성 측면에서 불완전합니다. 이것은 그 자체로 레이어 2라고 부를 수 있는 것이 아닙니다. 이는 레이어 2에 자금을 잠그는 메커니즘과 구조의 핵심이며, 사용자가 자금을 인출할 수 있는 프로세스입니다. 확실히 많은 유연성과 유용성을 가지고 있습니다.
최악의 경우, 사용자는 자금을 안전하게 온체인에서 청구하기 위해 누구의 허가도 필요하지 않습니다. 또한 최악의 경우 일방적 종료 시 조건을 기본 레이어로 시행하면서 자금의 더 유연한 프로그래밍 가능성을 허용합니다. 언젠가 OP_ZKVERIFY와 같은 것이 생긴다면, 오프체인 상태 진행이 실제로 신뢰 없는 과정이 될 수 있습니다.
근처에서 구체적인 데모를 기대하지는 않지만, 제 생각에는 확실히 건전한 아이디어이며 고려할 가치가 있는 것입니다. 또한 마법사들이 단순히 어리석은 JPEG를 펌핑하는 것 이상을 하고 있다는 것을 보여줍니다.