
BitVM 해석: BTC 체인에서 어떻게 사기 증명을 검증하는가? (EVM 또는 기타 VM의 오퍼레이션 코드 실행)
저자: 안개달 & 파우스트, 지크웹3
자문: Kevin He, 비트VM 중국 커뮤니티 발기인, 전 웹3 기술 책임자@후오비
서론: 현재 비트코인 레이어2는 하나의 열풍이 되었으며, 시장에서 스스로를 "비트코인 레이어2"라고 정의하는 프로젝트가 수십 개에 이른다고 한다. 이 중 상당수는 "롤업(Rollup)"이라고 자칭하며, BitVM 백서에서 제안한 방식을 채택했다고 주장함으로써 BitVM은 비트코인 생태계에서 주목받는 학문 분야가 되었다.
하지만 아쉽게도 현재 대부분의 BitVM 관련 문서들은 그 원리를 쉽게 설명하지 못하고 있다.
본문은 우리가 8페이지짜리 BitVM 백서를 읽고, Taproot, MAST 트리, Bitcoin Script와 관련된 자료들을 조사한 후 도출한 간단한 요약이다. 독자의 이해를 돕기 위해 일부 표현 방식이 BitVM 백서의 내용과 다를 수 있으며, 우리는 독자가 레이어2에 대해 어느 정도 이해하고 있고 "사기 증명(fraud proof)"의 기본 개념을 이해할 수 있다고 가정한다.

먼저 몇 문장으로 BitVM의 핵심 아이디어를 요약하자면: 체인상(on chain) 데이터 없이, 먼저 오프체인에서 게시 및 저장하며, 체인에는 커밋먼트(Commitment, 약속값)만 저장한다.
분쟁 또는 사기 증명이 발생할 때, 필요한 데이터만 체인에 올리고 이것이 체인상의 커밋먼트와 연관되어 있음을 입증한다. 이후 BTC 메인넷은 이러한 체인상 데이터에 문제가 있는지, 데이터 생성자(거래를 처리하는 노드)가 악의적인 행동을 했는지를 검증한다. 이 모든 것은 오크엄의 면도날 원칙에 따른 것이다—‘불필요한 실체를 늘리지 말라’ (최대한 적은 양의 on chain 데이터만 사용).

본론: BitVM 기반의 BTC 체인상 사기 증명 검증 방식을 쉽게 요약하면 다음과 같다.
1.BitVM의 핵심 아이디어
우선 컴퓨터/프로세서란 많은 논리 회로들이 결합된 입력-출력 시스템이다. BitVM의 핵심 아이디어 중 하나는 비트코인 스크립트(Bitcoin Script)를 사용하여 논리 회로의 입력-출력 효과를 모방하는 것이다.
논리 회로를 모방할 수 있다면 이론적으로 튜링 머신을 구현할 수 있으며, 모든 계산 가능한 작업을 수행할 수 있다. 즉, 인력과 자금이 충분하다면 엔지니어들을 동원해 기능이 제한된 비트코인 스크립트 코드로 논리 회로를 만들고, 이를 대량으로 연결해 EVM이나 WASM의 기능을 구현할 수 있다는 뜻이다.

(이 스크린샷은 교육용 게임 《튜링 완결성》에서 나온 것으로, 가장 핵심적인 내용은 논리 회로, 특히 NAND 게이트를 이용해 완전한 CPU 프로세서를 구성하는 것이다)
누군가는 BitVM의 접근법을 마인크래프트에서 레드스톤 회로를 이용해 M1 프로세서를 만든 것에 비유했다. 혹은 레고 블록으로 뉴욕의 엠파이어 스테이트 빌딩을 짓는 것과 같다고 볼 수 있다.

(일 년간의 시간을 들여 마인크래프트에 구축한 ‘프로세서’라는 소문이 있다)
2. 왜 굳이 Bitcoin Script로 EVM 또는 WASM을 모의해야 하는가?
이건 너무 번거롭지 않은가? 이유는 대부분의 비트코인 레이어2 프로젝트들이 솔리디티(Solidity)나 무브(Move) 같은 고급 언어를 지원하려 하지만, 현재 비트코인 체인에서 직접 실행 가능한 것은 기능이 제한되고 고유한 명령어(opcode)들로 구성되며 튜링 완결성이 아닌 비트코인 스크립트라는 낮은 수준의 언어이기 때문이다.

(비트코인 스크립트 코드 예시 한 조각)
비트코인 레이어2가 아르비트럼(Arbitrum) 등의 이더리움 레이어2처럼 레이어1에서 사기 증명을 검증하면서 BTC의 보안성을 최대한 계승하려면, “논란이 있는 거래” 또는 “논란이 있는 명령어”를 비트코인 체인에서 직접 검증해야 한다. 따라서 레이어2에서 사용하는 솔리디티 언어 / EVM 명령어를 비트코인 체인에서 다시 실행해야 한다. 결국 문제는 다음과 같이 요약된다:
비트코인 네이티브의 제한된 프로그래밍 언어인 Bitcoin Script를 사용하여 EVM 또는 다른 가상 머신의 기능을 구현하는 것.
따라서 컴파일러 이론 관점에서 BitVM을 보면, EVM / WASM / 자바스크립트 명령어를 비트코인 스크립트 명령어로 변환하는 과정이며, 이때 논리 회로는 “EVM 명령어 → Bitcoin Script 명령어” 사이의 중간 표현(IR) 역할을 한다.

(BitVM 백서에서 비트코인 체인상에서 특정 "논란이 있는 명령어"를 실행하는 대략적인 아이디어를 언급함)
어쨌든 최종적으로 달성되는 효과는 EVM / WASM에서만 처리 가능했던 명령어를 이제 비트코인 체인에서도 직접 처리할 수 있게 되는 것이다. 이 방법은 원칙적으로 가능하지만, 모든 EVM/WASM 명령어를 표현하기 위해 많은 논리 회로를 중간 형태로 사용하는 것이 어렵다. 또한 복잡한 거래 처리 절차를 논리 회로 조합으로 직접 표현하는 것은 어마어마한 작업량을 요구할 수 있다.
3. 아르비트럼과 매우 유사한 '대화형 사기 증명'
다음으로 BitVM 백서에서 언급한 또 다른 핵심 개념인 아르비트럼과 매우 유사한 '대화형 사기 증명(interactive fraud proof)'에 대해 살펴보자.
대화형 사기 증명에서는 일반적으로 assert(단언)이라는 용어가 등장한다. 일반적으로 레이어2의 제안자(Proposer, 보통 정렬기 sequencer가 담당)는 레이어1에 assert 단언을 게시하여 특정 거래 데이터나 상태 전이 결과가 유효하고 오류가 없다고 선언한다.
누군가 Proposer가 제출한 assert 단언에 문제가 있다고 판단하면(관련 데이터에 오류가 있음), 분쟁이 발생한다. 이때 Proposer와 Challenger는 차례로 정보를 교환하며, 논란이 있는 데이터에 대해 이분 탐색(binary search)을 수행하여 극히 세밀한 수준의 특정 명령어와 관련 데이터 조각을 신속하게 찾아낸다.
이 논란이 있는 명령어(OP Code)는 입력 매개변수와 함께 레이어1에서 직접 실행되어 출력 결과가 검증되어야 한다(레이어1 노드는 자체적으로 계산한 출력 결과를 Proposer가 이전에 게시한 결과와 비교함). 아르비트럼에서는 이를 "단일 단계 사기 증명(single-step fraud proof)"이라고 부른다.

(아르비트럼의 대화형 사기 증명 프로토콜에서는 Proposer가 게시한 데이터를 이분법으로 탐색해 신속하게 논란이 있는 명령어와 실행 결과를 찾은 후, 최종 검증을 위해 단일 단계 사기 증명을 레이어1에 제출함)
참고자료:전 아르비트럼 기술 대사가 해설하는 아르비트럼 구성 요소 구조(상)

(아르비트럼의 대화형 사기 증명 프로세스 다이어그램, 다소 대략적임)
여기까지 오면 단일 단계 사기 증명의 개념은 명확하다: 레이어2에서 발생하는 대부분의 거래 명령어는 BTC 체인에서 다시 검증할 필요가 없다. 다만 논란이 있는 데이터 조각/명령어는 누군가 도전했을 때 레이어1에서 다시 재생(replay)되어야 한다.
검증 결과가 다음과 같을 경우:
-
Proposer가 이전에 게시한 데이터에 문제가 있을 경우, Proposer의 담보 자산을 슬래시(slash)한다;
-
Challenger에게 문제가 있을 경우, Challenger의 담보 자산을 슬래시한다.
-
Prover가 오랫동안 도전에 응답하지 않을 경우에도 슬래시할 수 있다.
아르비트럼은 이더리움 스마트 계약을 통해 위의 메커니즘을 구현하지만, BitVM은 Bitcoin Script를 활용해 시간 잠금(time lock), 다중 서명(multisig) 등의 기능을 구현해야 한다.

4.MAST 트리와 머클 증명(Merkle Proof)
“대화형 사기 증명”과 “단일 단계 사기 증명”에 대해 간략히 설명했으므로, 이제 MAST 트리와 머클 증명에 대해 알아보자.
앞서 언급했듯이, BitVM 방식에서는 레이어2가 오프체인에서 처리하는 대량의 거래 데이터와 관련된 방대한 논리 회로를 직접 체인에 올리지 않으며, 필요한 순간에 극소량의 데이터/논리 회로만 체인에 올린다.
하지만 이 '기존에는 오프체인이었으나 이제 체인에 올릴' 데이터들이 임의로 조작된 것이 아님을 입증할 수단이 필요하다. 이것이 바로 암호학에서 말하는 커밋먼트(Commitment)이며, 머클 증명(Merkle Proof)은 그 한 형태이다.
먼저 MAST 트리에 대해 설명하자. MAST 트리는 Merkelized Abstract Syntax Trees의 약자로, 컴파일러 이론에서 나오는 AST 트리를 머클 트리로 변환한 형태이다.
그렇다면 AST 트리는 무엇인가? 그것의 한국어 이름은 "추상 구문 트리(Abstract Syntax Tree)"이며, 간단히 말해 복잡한 명령어를 어휘 분석을 통해 여러 개의 기본 연산 단위로 나눈 후, 트리 형태의 데이터 구조로 조직하는 것을 말한다.

(AST 트리의 간단한 예시. 이 AST 트리는 x=2, y=x*3과 같은 간단한 연산을 하위 명령어 + 데이터로 분해함)
MAST 트리는 AST 트리를 머클화(Merkleize)하여 머클 증명을 지원하도록 한 것이다. 머클 트리의 장점은 효율적인 "데이터 압축"이 가능하다는 점이다. 예를 들어, 머클 트리의 특정 데이터를 필요 시 BTC 체인에 게시하고자 하되, 외부에 이 데이터 조각이 실제로 해당 머클 트리에 존재하는 것임을 확신시키고 싶다면 어떻게 해야 할까?
단순히 미리 머클 트리의 루트(root)를 체인에 기록해두고, 미래에 해당 데이터가 루트에 대응하는 머클 트리에 존재함을 증명하는 머클 증명(Merkle Proof)을 제시하면 된다.

(머클 증명/브랜치와 루트 사이의 관계)
따라서 전체 MAST 트리를 BTC 체인에 저장할 필요 없이, 미리 루트를 공개하여 커밋먼트로 삼고, 필요 시 데이터 조각 + 머클 증명/브랜치만 제시하면 된다. 이를 통해 체인상 데이터량을 극도로 줄일 수 있으며, 체인상 데이터가 실제로 MAST 트리에 존재함을 보장할 수 있다. 또한 전체 데이터를 공개하는 대신 BTC 체인에 소량의 데이터 조각 + 머클 증명만 공개함으로써 좋은 개인정보 보호 효과도 얻을 수 있다.
참고자료:데이터 보류와 사기 증명: 플라즈마가 스마트 계약을 지원하지 않는 이유

(MAST 트리 예시)
BitVM의 방식은 모든 논리 회로를 비트코인 스크립트로 표현한 후, 이를 거대한 MAST 트리로 구성하는 것을 시도한다. 이 트리의 가장 아래쪽 리프(leaf, 그림의 Content)는 비트코인 스크립트로 구현된 논리 회로에 해당한다.
레이어2의 Proposer는 BTC 체인에 MAST 트리의 루트를 자주 게시하며, 각 MAST 트리는 특정 거래와 연관되어 있으며, 해당 거래의 모든 입력 매개변수 / 명령어 / 논리 회로를 포함한다. 어느 정도로 보면, 이는 아르비트럼의 Proposer가 이더리움 체인에 롤업 블록(Rollup Block)을 게시하는 것과 유사하다.
분쟁이 발생하면, Challenger는 BTC 체인에서 Proposer가 게시한 어떤 루트에 대해 도전하겠다고 선언하고, Proposer에게 해당 루트에 대응하는 특정 데이터를 공개하도록 요청한다. 이후 Proposer는 머클 증명을 제시하며 체인상에 MAST 트리의 작은 데이터 조각들을 반복해서 공개하며, Challenger와 함께 논란이 있는 논리 회로를 찾아낸다. 이후 슬래시를 실행할 수 있다.

(이미지 출처)
5. 마지막으로
여기까지, BitVM 방식의 가장 중요한 부분을 거의 다 설명했다. 일부 세부사항은 여전히 다소 난해할 수 있지만, 독자들은 BitVM의 핵심 정수를 충분히 이해했을 것으로 믿는다.
백서에서 언급된 비트 값 커밋먼트(bit value commitment)는, Proposer가 도전을 받고 체인상에서 논리 회로를 검증할 때 해당 논리 회로의 입력값에 동시에 0과 1을 모두 할당하는 것을 방지하여 모호한 혼란을 막기 위한 것이다.
요약
BitVM 방식은 먼저 비트코인 스크립트로 논리 회로를 표현하고, 이를 통해 EVM/다른 VM의 명령어를 표현하며, 명령어를 통해 임의의 거래 명령어 처리 절차를 표현한 후, 마지막으로 머클 트리/MAST 트리 형태로 구성한다.
이러한 트리가 복잡한 거래 처리 절차를 표현한다면, leaf 수가 쉽게 1억 개를 넘길 수 있으므로, 커밋먼트가 차지하는 블록 공간과 사기 증명의 영향 범위를 최대한 줄여야 한다.
비록 단일 단계 사기 증명은 체인에 매우 작은 데이터 조각과 논리 회로 스크립트만 올리지만, 완전한 머클 트리는 장기간 오프체인에 저장되어야 하며, 누군가 도전할 때 언제든지 트리의 데이터를 체인에 올릴 수 있어야 한다.
레이어2에서 발생하는 모든 거래마다 큰 규모의 머클 트리가 생성되므로, 노드의 계산 및 저장 부담은 상상 이상이며, 대부분의 사람들은 노드 운영을 꺼릴 수 있다(다만 이러한 역사적 데이터는 일정 기간 후 폐기될 수 있으며, B^2 네트워크는 Filecoin과 유사한 zk 저장 증명을 도입해 저장 노드가 장기간 역사 데이터를 보관하도록 유인한다).
다만, 사기 증명 기반의 낙관적 롤업(Optimistic Rollup)은 본질적으로 많은 노드를 필요로 하지 않는다. 그 신뢰 모델은 1/N이기 때문에, N개의 노드 중 단 하나라도 정직하여 중요한 순간에 사기 증명을 시작할 수 있다면, 레이어2 네트워크는 안전하다.
그러나 BitVM 기반의 레이어2 설계에는 여전히 많은 도전 과제가 존재한다. 예를 들어:
1) 이론적으로 데이터 압축을 더욱 극대화하기 위해, 명령어를 직접 레이어1에서 검증하는 대신, 명령어 처리 과정을 다시 zk 증명(zk proof)으로 압축하고, Challenger가 이 zk 증명의 검증 단계에 도전할 수 있도록 하는 것도 가능하다. 이를 통해 체인상 데이터량을 크게 줄일 수 있다. 그러나 구체적인 개발 세부사항은 매우 복잡할 것이다.
2) Proposer와 Challenger는 오프체인에서 반복적으로 상호 작용해야 하며, 프로토콜 설계 방식과 커밋먼트 및 도전 과정을 처리 흐름상으로 어떻게 더 최적화할지는 많은 고민이 필요하다.
TechFlow 공식 커뮤니티에 오신 것을 환영합니다
Telegram 구독 그룹:https://t.me/TechFlowDaily
트위터 공식 계정:https://x.com/TechFlowPost
트위터 영어 계정:https://x.com/BlockFlow_News














