BitVM: Smarter Bitcoin Smarter (상)

Wonhyeok Choi
Decipher Media |디사이퍼 미디어
19 min readJul 7, 2024

Disclaimer : 서울대학교 블록체인 학회 디사이퍼(Decipher)에서 `BitVM: Smarter Bitcoin Smarter`을 주제로 Weekly Session에서 발표한 내용을 바탕으로 합니다. 본 아티클은 BitVM의 기술적 내용과 이를 이해하기 위한 Bitcoin의 기본적인 동작 방법 등에 대한 내용을 다루고 있습니다. 이 보고서에 포함된 어떠한 내용도 투자 조언이 아니며, 투자 조언으로 해석되어서도 안 됩니다.

시리즈

  1. BitVM: Smarter Bitcoin Smarter (상)
  2. BitVM: Smarter Bitcoin Smarter (하)

Author

최원재, 최원혁 of Decipher Seoul Nat’l Univ. Blockchain Academy Decipher(@decipher-media)

Reviewed By 신성헌, 박순종, 최재우

Table of Contents

1. Intro : Why BitVM

2. Bitcoin Layer2

  • Client Side Validation
  • Side Chain
  • BitVM

3. Background for BitVM

  • 비트코인 Script
  • Pay to Public Key Hash (P2PKH)
  • Hashed Time Lock Contract (HTLC)
  • Segwit — Witness
  • Pay-to-Taproot (P2TR)
  • Merkelized Alternative Script Tree (MAST)

4. 마치며

Abstract

BitVM은 비트코인에서 스마트컨트랙트를 구현할 수 없는 한계를 극복하기 위해 등장한 Layer2 솔루션이다. 본 아티클은 비트코인이 스마트컨트랙트를 구현할 수 없는 이유와 BitVM의 기술적 측면에 대해 깊이 있게 다루며, 1부에서 BitVM을 이해하기 위한 사전지식으로 입문자를 위한 비트코인의 동작 원리을 먼저 알아보고, 2부에서 본격적으로 BitVM에 대해 알아볼 예정이다.

1. Intro : Why BitVM

가장 이상적인 블록체인은 보안성(Security), 탈중앙화(Decentralization), 확장성(Scalability)이라는 세 가지 요소를 모두 충족하는 것이다. 그러나 기술적 한계로 인해 이 중 하나를 포기해야 하는데, 이를 블록체인 트릴레마(Blockchain Trilemma)라고 한다. 비트코인은 이 트릴레마에서 확장성을 포기하고, 탈중앙화와 보안성에 중점을 두어 설계되었다. 이러한 목표를 달성하기 위해 비트코인은 의도적으로 튜링 불완전한(Turing incomplete) Script를 선택하게 되었고, 이로 인해 스마트컨트랙트를 구현할 수 없는 한계를 갖게 되었다.

튜링 불완전성(Turing incomplete)은 프로그래밍 언어의 계산 능력이 일부 의도적으로 제한된 것을 의미하며, 주로 반복문(Loop)이나 재귀 함수(Recursion Function)의 사용이 제한된다. 비트코인은 이러한 튜링 불완전성을 갖는 언어인 Script를 통해 거래를 처리하고 검증한다. 탈중앙화를 목표로 하는 비트코인 시스템에서는 모든 노드가 트랜잭션을 빠르고 효율적으로 처리하여 합의에 도달하는 것이 필수적이다. 또한, Script를 실행하는 노드가 DoS와 같은 무한 반복 공격을 받지 않도록 보호해야 한다. 이러한 이유로, 비트코인은 복잡한 코드나 반복되는 Loop문 및 재귀 함수의 사용이 제한되는 튜링 불완전 언어를 의도적으로 채택하였다.

이처럼 Script는 시스템의 실행이 단순하고 보안적으로 장점을 갖는 반면, 이더리움의 ERC20이나 zkEVM과 같은 복잡한 스마트컨트랙트를 구현할 수 없는 한계를 가진다. 때문에, 비트코인이 직면한 한계를 해결하고자 새롭게 등장한 Layer2 솔루션이 바로 BitVM이다.

2. Bitcoin Layer2

비트코인 Layer2 솔루션은 비트코인의 근본적인 문제를 해결하기 위해 제안된 다양한 솔루션 중 하나이며, 빠른 속도와 낮은 트랜잭션 비용, 그리고 튜링 완전한 스마트컨트랙트 등 비트코인에서 사실상 불가능했던 영역을 오프체인에서 수행하는 방식으로 한계점들을 해결한다. 비트코인 Layer2는 비트코인의 하드포크 없이 구현이 가능하며, 이로 인해 비트코인 네트워크의 보안과 탈중앙화 특성이 유지될 수 있다.

BitVM을 살펴보기 전에, 우선 현존하는 비트코인 Layer2 솔루션들을 알아보고 각 솔루션들이 비트코인의 어떤 한계점들을 해결하고자 하는지, 그리고 BitVM 역시 Layer2 솔루션으로 어떠한 방법으로 문제들을 해결하고 있는지 알아보자.

Client Side Validation

Client Side Validation은 최근 많은 주목을 받고 있는 Layer2 솔루션 중 하나이다. 거래라는 행위에는 이체인과 수령인이 있으며, 비트코인 네트워크에서 트랜잭션은 두 당사자의 거래 단위를 의미한다. 비트코인은 모든 노드가 다수의 트랜잭션을 처리하고 검증하는 과정에서 속도가 느려진다. Client Side Validation는 이런 문제를 개선하기 위해 오프체인에서 거래 당사자들이 직접 트랜잭션을 검증하고 실행한다.

Client Side Validation을 이용하는 사용자는 거래가 성립될 때마다 거래 내역을 Layer1(비트코인)에 저장하고, 자신의 로컬 장치에 필요한 데이터와 잔액 정보를 보관한다. 이후 다른 거래가 발생할 때, 이체인은 거래 내역을 역추적하여 자신의 자산을 증명하는 Proof of asset으로 활용한다. 거래가 진행되면, 수령인은 이체인의 Proof of asset을 통해 온체인에 기록된 내역을 역추적하고, 이를 통해 이체인이 충분한 금액을 보유하고 있음을 검증할 수 있다.

그러나, Client Side Validation는 거래 기록이 누적되면서 데이터의 양이 커지고, 이로 인해 수령인이 검증해야 할 과정이 점점 복잡해지고 느려진다. 이 문제를 해결하기 위해 요즘에는 Proof of asset을 관리하고 검증을 대행해주는 Indexer를 사용한다.

Side Chain

Side Chain은 비트코인과 병렬로 운영되는 별도의 블록체인이다. 비트코인과는 다른 독립적인 컨센서스를 사용하며, 탈중앙성과 보안성이 부족하더라도 확장성에 특화되어 있다. 또한, Bridge 기술을 통해 Side Chain과 비트코인 네트워크 간 상호 운영성(Interoperability)을 갖는다. 덕분에 사용자들은 더 나은 환경에서 비트코인을 활용할 수 있는 생태계를 제공받게 된다.

Layer1의 보안과 탈중앙성을 상속받는 Layer2 솔루션과는 다르게, Side Chain은 독립적인 체인으로 서로 다른 솔루션으로 논의된다. 하지만, Stacks의 공동 창립자의 주장처럼 비트코인 네트워크의 완결성을 따르거나 비트코인을 네이티브 코인으로 활용하는 경우, Side Chain이라도 Layer2 솔루션으로 봐야 한다는 논의가 계속되고 있다. 중요한 점은 두 솔루션 모두 오프체인에서 비트코인의 확장성 문제를 해결하고자 하는 공통된 목적을 갖고 있다는 것이다.

BitVM

위에서 언급한 두 가지 솔루션은 비트코인의 느린 거래 속도와 비싼 가스비를 개선하기 위해 거래 또는 합의(컨센서스)를 오프체인에서 수행한다. 이와 같이 BitVM은 비트코인에서 스마트컨트랙트를 구현할 수 없는 한계를 개선하기 위해 복잡한 코드를 오프체인에서 실행한다.

BitVM은 코드를 연산하는 하나의 가상 머신(Virtual Machine)이다. 이더리움의 EVM과 유사하게, 탈중앙화 시스템에서 신뢰와 무결성(integrity)을 갖는 스마트컨트랙트를 실행하는 가상 머신을 구현하는 것을 목표로 한다. 하지만 다수의 노드에 의해 검증되는 이더리움의 스마트컨트랙트와 달리, BitVM은 오프체인에서 동작하기 때문에 별도의 검증 과정이 필요하다. 이를 위해 BitVM은 구현된 코드를 오프체인(Layer2)에서 실행하고 검증자(Verifier)에 의해 주기적으로 검사를 받는다. 검증 과정에서 오류가 발견되거나 부정 행위가 발견되면, 비트코인 네트워크(Layer1)에서 사기 증명(fraud proofs)을 통해 검증하고, 부적절하게 실행한 주체에 대한 처벌이 이루어진다. 이 과정은 롤업의 Optimistic 방식과 매우 유사하다. 또한, BitVM의 이러한 프로세스는 비트코인의 추가적인 업데이트 없이도 Script와 Taproot의 Merkelized Alternative Script Tree (MAST)를 사용하여 구현할 수 있다는 특징을 갖고 있다.

3. Background for BitVM

2부 아티클에서 다루는 BitVM은 주로 기술적인 요소와 위에서 설명한 사기증명(fraud proofs)에 대한 자세한 내용이 포함되어 있다. 따라서 1부는 이를 이해하기 위해 필요한 배경 지식을 먼저 소개할 예정이다. 배경에서 다루는 내용은 비트코인 Script의 동작 원리와 Taproot의 Merkelized Alternative Script Tree (MAST)에 관한 것이며, 이미 사전 지식이 있는 독자는 바로 BitVM 부분으로 넘어가도 문제가 없을 것이다.

비트코인 Script

https://i.sstatic.net/ehk1f.jpg

비트코인의 Script는 Opcode 기반의 프로그래밍 언어이다. 위 사진에 나와 있는 약 110개의 Opcode를 조합하여 튜링 불완전한 로직을 구현할 수 있다. Script는 UTXO의 input과 output, 즉 해제 Script와 잠금 Script로 구현된다. 비트코인 네트워크로 제출된 트랜잭션의 해제 Script와 잠금 Script가 순차적으로 실행하, 최종적으로 True라는 실행 결과를 얻게 되면 트랜잭션이 성공하는 메커니즘이다.

Pay to Public Key Hash (P2PKH)

https://iq.opengenus.org/locking-and-unlocking-scripts-in-bitcoin/

P2PKH는 비트코인에서 Script로 구현할 수 있는 가장 대표적인 로직으로, 비트코인을 전송할 때 해당 UTXO의 소유권을 증명할 수 있는 서명을 검증하는 기능이 구현되어 있다. 해제 Script에는 서명 데이터(sig)와 공개키(PubK)가 포함되어 있으며, 잠금 Script는 해당 UTXO를 소유 중인 공개키의 해시(PubKHash)와 해제 스크립트의 서명을 검증하는 Opcode로 구성되어 있다. Script는 실행되는 환경의 Stack에 First In Last Out(FILO) 방식으로 데이터와 Opcode를 처리한다. P2PKH를 통해 Script가 동작하는 원리에 대해 알아보자.

2017 Mastering Bitcoin: Programming the Open Blockchain

1. P2PKH의 해제 Script에 있는 서명(sig)과 공개키(PubK)가 순차적으로 스택에 저장된다.

2. Opcode DUP은 Stack 최상단 데이터를 복사하는 기능을 가지고 있으며, DUP이 실행됨에 따라 Stack에 PubK가 저장된다.

2017 Mastering Bitcoin: Programming the Open Blockchain

3. Opcode HASH160은 Stack 최상단 데이터를 Hash하는 기능을 가지고 있으며, HASH160이 실행됨에 따라 Stack의 최상단에 위치한 해제 Script의 PubK은 PubKHash로 처리된다.

4. 잠금 Script에 있는 PubKHash를 Stack 최상단에 저장한다.

5. Opcode EQUALVERIFY는 Stack 최상단의 데이터 두개가 동일한지 비교하는 기능을 가지고 있으며, EQUALVERIFY가 실행됨에 따라 해제 Script의 PubKHash와 잠금 Script의 PubKHash가 동일한지 검증한다.

6. Opcode CHECKSIG는 Stack에 남은 서명 데이터(sig)를 검증하는 기능을 가지고 있으며, CHECKSIG가 실행됨에 따라 현재 Stack에 남아 있는 서명 데이터(sig)가 공개키 주소(PubK)로 생성된 서명인지 검증한다.

Script의 모든 Opcode가 실행되고 Stack에는 True만 남게 되면 트랜잭션은 성공적으로 종료된다.

Hashed Time Lock Contract (HTLC)

P2PKH 외에 Script의 Opcode를 잘 구성하면 다양한 로직을 구현할 수 있으며, 그 대표적인 사례가 Hashed Time Lock Contract(이하 HTCL)이다. HTCL은 거래하는 두 당사자 간 조건이 충족될 때까지 비트코인을 잠그는 기능이 구현된 Script이다. 비트코인 사용자는 신뢰 가능한 계약 또는 거래에 HTCL을 사용한다.

HTCL은 Hash LockTime Lock이라는 두 가지 조건에 따라 로직이 분기된다. Hash Lock은 사전에 합의된 비밀 키(Secret)가 제출되면 비트코인의 잠금을 해제하는 로직이 구현되어 있다. 반면, Time Lock은 특정 시간 안에 합의가 이루어지지 않으면 비트코인을 잠근 원래 주인에게 반환하는 로직이 구현되어 있다.

https://scryptplatform.medium.com/cross-chain-atomic-swaps-f13e874fcaa7

HTLC를 이해하기 위한 대표적인 예시로 Atomic Swap이 있다. Atomic Swap은 블록체인 기술을 활용하여 서로 다른 암호화폐 자산을 신뢰 가능한 P2P(Peer-to-Peer) 방식으로 거래할 수 있게 하는 기술이다.

예를 들어, Alice와 Bob이 서로 비트코인에스브이(BSV)와 비트코인(BTC) 거래를 원하는 상황에서, 서로 다른 네트워크의 자산을 가지고 있음에도 HTLC를 활용하면 신뢰 가능한 거래가 가능하다.

  1. 먼저, Alice는 자신만 알고 있는 Secret의 Hash로 HTLC에 거래하고자 하는 양의 BSV를 잠근다. 해당 HTLC의 Hash Lock이 호출되면 잠긴 BSV는 Bob에게 전송되도록 설정된다.
  2. Bob은 Alice가 제공한 Hash된 Secret을 이용해 HTLC에 거래하고자 하는 양의 BTC를 잠근다. 마찬가지로, 해당 HTLC의 Hash Lock이 호출되면 잠긴 BTC는 Alice에게 전송되도록 설정되어 있다.
  3. Secret을 알고 있는 Alice는 Bob이 만든 HTLC의 Hash Lock을 해제하고 자산을 인출한다. 이 과정에서 Secret은 온체인에 제출되기 때문에, Bob을 포함한 누구든지 이를 확인할 수 있다.
  4. Alice의 Secret을 확인한 Bob은 Alice가 만든 HTLC의 Hash Lock을 해제하고 자산을 인출하며, 최종적으로 두 사람의 거래가 성사된다.

이처럼 HTLC를 활용한 Atomic Swap은 거래하는 두 당사자의 순차적인 행동에 따라 진행된다. 하지만, Alice가 온체인에 Secret을 제출하지 않거나, Bob이 HTLC를 생성하지 않는 등 악의적인 행동을 취할 가능성이 있다. 이러한 경우 HTLC는 Time Lock을 안전장치로 활용하여 문제를 방지할 수 있다.

BitVM은 사기 증명 과정에서 Hash Lock과 Time Lock을 활용하여 challenge를 수행하며, 2부에서 자세하게 다룰 예정이다.

Segwit — Witness

https://river.com/learn/what-is-segwit/

HTLC처럼 Script로 구현할 수 있는 다양한 서비스 로직이 개발되면서 Script의 사이즈 또한 늘어나게 된다. 이에 따라 자연스럽게 트랜잭션의 사이즈가 커지기 시작했고, 이로 인해 비트코인의 정해진 1 MB 블록 사이즈 내에 담을 수 있는 트랜잭션의 양이 줄어들면서 확장성 문제가 발생하기 시작했다. 이러한 문제를 해결하기 위해 비트코인 생태계는 Segwit 업데이트를 도입하여 Witness라는 별도의 저장 공간을 만들어 용량이 큰 서명 데이터를 별도로 보관함으로써 확장성 문제를 개선했다.

Pay-to-Taproot (P2TR)

비트코인 생태계는 Segwit 업데이트 이후, Witness라는 공간에 서명 데이터뿐만 아니라 Script 코드를 저장하여 Script가 차지하는 용량을 효율적으로 처리하자는 아이디어가 제안(BIP-341)되었고, 이러한 제안은 비트코인의 Taproot 업데이트를 통해 P2TR 포맷이 네트워크에 도입되었다.

P2TR은 비트코인의 새로운 송금 방식으로, 사용자는 선택적으로 기존의 P2PKH을 통해 단순한 서명 검증 Script를 실행하거나, Merkelized Alternative Script Tree (이하 MAST)의 머클루트를 검증하는 방식으로 Witness에 있는 Script를 실행할 수 있게 되었다.

P2TR를 사용하는 지갑은 Taproot Wallet을 사용해야 하며, ‘bc1p’로 시작하는 Bech32m으로 인코딩된 형식의 주소를 사용해야 한다.

Merkelized Alternative Script Tree (MAST)

MAST는 실행하고자 하는 Script를 작게 나누어 만든 머클 트리(Merkle Tree) 구조를 의미하며, 전체 Script 중 특정 상황 또는 조건문(OP_IF)에 따라 실행되는 Script가 분리된다. P2TR은 이 분리된 구조에서 필요한 Script가 위치한 경로를 Witness에서 추적하여 실행한다. 때문에, 블록은 Witness에 실행하고자 하는 Script 부분만을 저장하게 되어, 사용되지 않는 Script는 블록에 저장되지 않는다.

위에서 알아본 HTLC의 예를 들면, HTLC는 조건에 따라 Hash LockTime Lock으로 실행되는 코드가 나누어진다. 만약 Hash Lock 부분의 Script를 P2TR을 통해 실행하고자 한다면, 해당 Script와 관련된 머클 증명 (Hash1, 2, 5, 6)을 Witness에 함께 담아 트랜잭션을 전송하게 된다. 그리고, 해당 트랜잭션을 실행하는 노드는 잠금 스크립트에 있는 MAST Root와 Hash Lock에 해당하는 머클 증명을 검증하게 되며, 검증에 성공하면 머클 증명에 해당하는 Script가 실행된다.

하지만, 트랜잭션 작성자가 전체 Script에 구현된 코드와 다른 Script를 실행하고자 한다면, MAST Root 검증 과정에서 트랜잭션은 실패할 것이다. 이처럼 MAST는 Script의 확장성 문제를 해결하며, Script가 분리되더라도 기존 설계대로 정확하게 동작했음을 증명하여 코드의 무결성(Integrity)를 확립한다.

마치며

이번 아티클에서는 비트코인이 스마트컨트랙트를 구현할 수 없는 이유와 이를 해결하기 위한 Layer 2 솔루션 중 하나인 BitVM에 대해 다루었다. 다음 시리즈인 ‘BitVM: Smarter Bitcoin Smarter (하)’에서는 BitVM이 어떻게 오프체인에서 스마트컨트랙트를 실행하고, 비트코인 네트워크를 통해 이를 검증하여 신뢰성과 무결성을 유지하는지에 대해 기술적으로 심도 깊게 알아볼 예정이다.

1부에서 설명한 비트코인의 동작 원리와 Script의 기본 개념, 그리고 Taproot의 Merkelized Alternative Script Tree (MAST)에 대한 지식이 BitVM을 이해하는 데 도움이 되었기를 바라며 이만 글을 마친다.

Reference

--

--