스마트 계약
스마트 계약은 미리 정한 조건을 코드로 표현한 약속입니다. 비트코인에서도 거래에 조건을 설정할 수 있지만, 그 조건을 표현하는 언어는 의도적으로 단순하고 제한적으로 설계되어 있습니다.
약속을 코드로 표현하기
사람 사이의 약속은 계약서와 법을 통해 지켜지도록 만들 수 있습니다. 그러나 분쟁을 해결하려면 시간과 비용이 들고, 당사자가 약속을 지키지 않을 가능성도 남습니다.
스마트 계약은 약속의 일부를 코드로 표현합니다. 조건을 만족하는 지출 거래가 제출되면 노드가 그 거래를 검증하고, 검증을 통과한 거래가 정해진 규칙에 따라 처리됩니다. 따라서 매번 사람이 승인하거나 중재해야 하는 부분을 줄일 수 있지만, 조건만 충족되었다고 자금이 스스로 이동하는 것은 아닙니다.
자판기에 동전을 넣으면 음료가 나오는 구조를 생각할 수 있습니다. 동전이라는 조건이 맞으면 점원과 별도로 협상하지 않아도 결과가 나옵니다. 다만 비트코인에서는 자금을 쓰려는 주체가 필요한 서명 등을 갖춘 지출 거래를 작성해 네트워크에 제출해야 합니다. 자판기가 할 수 있는 일이 제한되어 있듯, 단순한 조건만 처리하도록 설계하면 예상하지 못한 동작과 오류를 줄일 수 있습니다.
비트코인에서 설정할 수 있는 조건
비트코인 거래에는 다음과 같은 조건을 설정할 수 있습니다.
- 여러 명 가운데 정해진 수가 서명해야 사용할 수 있는 조건
- 특정 시각이나 일정한 시간이 지나야 사용할 수 있는 시간 잠금
- 특정 비밀값을 알고 있어야 사용할 수 있는 조건
- 위와 같은 조건을 조합한 지출 방식
정해진 시각이 되기 전에는 조건을 만족하는 지출을 할 수 없고, 시간이 지나면 미리 정한 다른 조건으로 지출할 수 있게 만드는 것도 한 예입니다. 시간 잠금은 자금을 일정 기간 동안 묶어 두거나, 정해진 시간이 지난 뒤 다른 지출 조건을 허용하는 방식에 활용될 수 있습니다. 시간의 경과 자체가 자동 송금이나 자동 반환을 일으키는 것은 아니며, 필요한 서명과 지출 거래 제출이 별도로 필요합니다. 비트코인 개발자 문서도 거래를 사용하려면 조건을 만족하는 지출 거래가 필요하다는 구조를 설명합니다.
일부러 제한된 조건 언어
비트코인의 조건 언어는 되풀이 계산이나 무한 반복을 수행하도록 설계되지 않았습니다. 외부 웹사이트나 현실 세계의 정보를 스스로 가져오지도 못합니다. 거래 바깥의 복잡한 상태를 자유롭게 저장하고 갱신하는 방식도 제한적입니다.
이런 제약은 부족함처럼 보일 수 있습니다. 그러나 계약이 복잡해질수록 예상하지 못한 오류나 보안 취약점이 생길 가능성이 커집니다. 비트코인은 자금이 한 번 잘못 이동하면 되돌리기 어렵다는 점을 고려해, 모든 노드가 같은 규칙을 비교적 단순하게 검증하도록 설계했습니다.
복잡한 계산을 모든 노드가 다시 수행해야 한다면 네트워크 전체의 부담도 커질 수 있습니다. 비트코인은 자금이 움직이는 기본 층에서는 단순함과 검증 가능성을 우선하고, 더 복잡한 기능은 다른 층에서 처리하는 방향을 택합니다.
실제로 활용되는 방식
스마트 계약은 이미 여러 비트코인 기능에 사용됩니다. 여러 사람이 함께 서명해야 자금을 사용할 수 있도록 하는 공동 보관, 일정 기간이 지나야 다른 열쇠로 자금을 회수할 수 있도록 하는 상속 대비 방식이 그 예입니다.
서로 다른 자산을 두 사람이 중개자 없이 교환하는 원자적 교환에도 조건부 거래 구조를 활용할 수 있습니다. 라이트닝 네트워크의 채널 역시 정해진 조건에 따라 자금의 사용과 회수를 처리하는 계약 구조로 볼 수 있습니다.
사후 상속을 위한 조건부 서명 제안
영상이 소개한 B-SSL 백서는 사용자가 사망하거나 실종된 뒤 남은 이가 비트코인을 인출할 수 있도록, 미리 정한 조건이 충족될 때만 자금을 넘기는 서명 구조를 제안합니다. 영상은 GitHub에 공개된 이 백서를 LLM으로 번역해 읽으며 소개하며, 이 사이트는 백서 원문을 검토하지 않았습니다. 백서는 개인키를 잃어버리면 자금이 움직이지 않는 상태가 남고, 거래소나 회사에 맡기면 제3자 위험이 다시 생긴다고 지적하며, 자가보관을 유지하면서 복구 경로를 더하는 방법을 찾습니다. 다만 이 문서는 학술·기술적 검토를 위해 공개한 제안일 뿐이며, 비트코인에 적용된 규칙은 아닙니다.
영상이 읽어 준 백서 내용에 따르면, 설계는 탭트와 미니스크립트를 이용해 하나의 금고 출력 안에 서로 독립적인 지출 경로를 여러 개 둡니다. 각 경로는 서로 다른 키 조합과 지연 시간을 가지고, 지연은 비트코인 노드가 기존의 시간 잠금 기능으로 검증합니다. 백서는 합의 규칙을 수정하지 않고 암호학적으로 보장된 복구 경로를 더하는 것을 목표로 삼는다고 밝힙니다.
지출 경로는 세 가지입니다.
- 일상 운용 경로: 사용자와 보관 주체(커스터디언)가 함께 서명해 평소처럼 지출하는 경로로, 2시간에서 15일 사이의 지연을 둡니다.
- 사용자 복구 경로: 외부 서비스나 보관 주체가 사라진 것과 무관하게 1년이 지난 뒤 사용자 쪽이 자금을 직접 회수할 수 있게 하는 경로입니다. 영상은 하드웨어 장치가 부서지거나 키를 잃어버린 경우를 예로 듭니다.
- 사후 복구 경로: 사용자가 사망하거나 실종되었을 때를 대비한 경로로, 보조 키 보유자(영상은 배우자를 예로 듭니다)와 보관 주체가 3년이 지난 뒤에야 함께 자금을 인출할 수 있는 구조로 설명합니다.
사후 복구 경로에서는 그전에 보조 키 보유자와 보관 주체가 합의해도 자금을 빼갈 수 없습니다. 영상은 이 경로가 상속을 안정시키는 장치로 작동한다고 설명합니다.
선택적인 게이트키퍼에 대해서는 백서가 개인키를 갖지 않는 편의 계층이라고 설명합니다. 설정된 지연이 지난 뒤에 공동 서명을 승인하고, 지출이 시작되면 미리 정한 보호자에게 암호화된 알림을 보내 지연이 끝나기 전에 대응할 시간을 줍니다. 백서는 게이트키퍼의 가용성과 무관하게 사용자가 다른 경로로 통제권을 유지할 수 있다고 설명합니다. 알림 서비스를 자체 인프라에서 운영하면 물리적 강압에 대한 대응이 약해진다는 점도 백서가 지적합니다.
운영 전제도 따릅니다. 사후 복구 경로가 3년을 지나 우발적으로 열리는 것을 피하도록 약 2.5년마다 금고를 갱신하고, 디스크립터와 공개 키를 오프라인 매체에 보관하며, 알림 수신처를 점검하도록 백서는 지침을 제시합니다. 이 구조는 제안이며, 실제 상속의 법적 효력은 이 절이 다루지 않습니다.
코드가 알 수 없는 것
스마트 계약이라는 이름 때문에 계약서의 모든 내용이 자동으로 집행된다고 생각하기 쉽습니다. 그러나 비트코인의 조건 코드는 주로 자금의 이동과 지출 조건을 다룹니다.
물건이 실제로 배송되었는지, 서비스가 제대로 제공되었는지, 당사자가 약속한 행동을 했는지는 코드가 스스로 확인할 수 없습니다. 현실 세계의 사실을 확인하고 분쟁을 해결하는 일은 여전히 사람이나 별도의 시스템의 몫입니다.
자판기 안에서 동전과 상품의 조건이 자동으로 처리되더라도, 자판기 밖에서 상품이 어떤 상태로 전달되었는지까지 자판기가 판단하지 못하는 것과 비슷합니다.
다른 계약 시스템과의 차이
더 자유롭고 복잡한 계약 언어를 사용하는 시스템도 있습니다. 복잡한 조건을 표현할 수 있다는 장점이 있지만, 그만큼 예상하지 못한 오류가 발생할 가능성도 커질 수 있습니다.
비트코인의 제한된 조건 언어와 다른 시스템의 넓은 계약 언어를 단순히 우열로 비교하기는 어렵습니다. 무엇을 우선하는지와 어떤 목적에 사용하는지가 다르기 때문입니다. 비트코인은 자금을 다루는 기본 층에서 예측 가능성과 검증 가능성을 중요하게 봅니다.
확장 논의가 신중한 이유
비트코인에 새로운 조건을 추가하자는 제안은 계속 논의됩니다. 그러나 새로운 기능이 예상하지 못한 보안 문제나 검증 부담을 만들 수 있기 때문에, 제안이 나왔다고 곧바로 적용되지는 않습니다.
스마트 계약의 범위를 넓히는 일은 기능을 늘리는 것만이 아니라, 모든 노드가 그 규칙을 안전하게 이해하고 검증할 수 있는지 살피는 일이기도 합니다.
비트코인 스마트 계약은 무엇이든 자동으로 처리하는 범용 계약 시스템이라기보다, 서명과 시간, 비밀값 같은 제한된 조건을 안정적으로 검증하는 구조입니다. 할 수 있는 일이 적은 대신, 자금을 다루는 기본 층에서 깨질 가능성을 줄이려는 선택이 담겨 있습니다.
관련 개념은 탭루트와 라이트닝 네트워크에서 더 확인할 수 있습니다.
영상
원본 영상: 나 죽으면 비트코인은 어떻게 하지, B-SSL 백서 살펴보기 (공개일: 2025-11-06)