스마트 계약
스마트 계약은 미리 정한 조건을 코드로 표현한 약속입니다. 비트코인에서도 거래에 조건을 설정할 수 있지만, 그 조건을 표현하는 언어는 의도적으로 단순하고 제한적으로 설계되어 있습니다.
약속을 코드로 표현하기
사람 사이의 약속은 계약서와 법을 통해 지켜지도록 만들 수 있습니다. 그러나 분쟁을 해결하려면 시간과 비용이 들고, 당사자가 약속을 지키지 않을 가능성도 남습니다.
스마트 계약은 약속의 일부를 코드로 표현합니다. 조건을 만족하는 지출 거래가 제출되면 노드가 그 거래를 검증하고, 검증을 통과한 거래가 정해진 규칙에 따라 처리됩니다. 따라서 매번 사람이 승인하거나 중재해야 하는 부분을 줄일 수 있지만, 조건만 충족되었다고 자금이 스스로 이동하는 것은 아닙니다.
자판기에 동전을 넣으면 음료가 나오는 구조를 생각할 수 있습니다. 동전이라는 조건이 맞으면 점원과 별도로 협상하지 않아도 결과가 나옵니다. 다만 비트코인에서는 자금을 쓰려는 주체가 필요한 서명 등을 갖춘 지출 거래를 작성해 네트워크에 제출해야 합니다. 자판기가 할 수 있는 일이 제한되어 있듯, 단순한 조건만 처리하도록 설계하면 예상하지 못한 동작과 오류를 줄일 수 있습니다.
비트코인에서 설정할 수 있는 조건
비트코인 거래에는 다음과 같은 조건을 설정할 수 있습니다.
- 여러 명 가운데 정해진 수가 서명해야 사용할 수 있는 조건
- 특정 시각이나 일정한 시간이 지나야 사용할 수 있는 시간 잠금
- 특정 비밀값을 알고 있어야 사용할 수 있는 조건
- 위와 같은 조건을 조합한 지출 방식
정해진 시각이 되기 전에는 조건을 만족하는 지출을 할 수 없고, 시간이 지나면 미리 정한 다른 조건으로 지출할 수 있게 만드는 것도 한 예입니다. 시간 잠금은 자금을 일정 기간 동안 묶어 두거나, 정해진 시간이 지난 뒤 다른 지출 조건을 허용하는 방식에 활용될 수 있습니다. 시간의 경과 자체가 자동 송금이나 자동 반환을 일으키는 것은 아니며, 필요한 서명과 지출 거래 제출이 별도로 필요합니다. 비트코인 개발자 문서도 거래를 사용하려면 조건을 만족하는 지출 거래가 필요하다는 구조를 설명합니다.
일부러 제한된 조건 언어
비트코인의 조건 언어는 되풀이 계산이나 무한 반복을 수행하도록 설계되지 않았습니다. 외부 웹사이트나 현실 세계의 정보를 스스로 가져오지도 못합니다. 거래 바깥의 복잡한 상태를 자유롭게 저장하고 갱신하는 방식도 제한적입니다.
이런 제약은 부족함처럼 보일 수 있습니다. 그러나 계약이 복잡해질수록 예상하지 못한 오류나 보안 취약점이 생길 가능성이 커집니다. 비트코인은 자금이 한 번 잘못 이동하면 되돌리기 어렵다는 점을 고려해, 모든 노드가 같은 규칙을 비교적 단순하게 검증하도록 설계했습니다.
복잡한 계산을 모든 노드가 다시 수행해야 한다면 네트워크 전체의 부담도 커질 수 있습니다. 비트코인은 자금이 움직이는 기본 층에서는 단순함과 검증 가능성을 우선하고, 더 복잡한 기능은 다른 층에서 처리하는 방향을 택합니다.
실제로 활용되는 방식
스마트 계약은 이미 여러 비트코인 기능에 사용됩니다. 여러 사람이 함께 서명해야 자금을 사용할 수 있도록 하는 공동 보관, 일정 기간이 지나야 다른 열쇠로 자금을 회수할 수 있도록 하는 상속 대비 방식이 그 예입니다.
서로 다른 자산을 두 사람이 중개자 없이 교환하는 원자적 교환에도 조건부 거래 구조를 활용할 수 있습니다. 라이트닝 네트워크의 채널 역시 정해진 조건에 따라 자금의 사용과 회수를 처리하는 계약 구조로 볼 수 있습니다.
코드가 알 수 없는 것
스마트 계약이라는 이름 때문에 계약서의 모든 내용이 자동으로 집행된다고 생각하기 쉽습니다. 그러나 비트코인의 조건 코드는 주로 자금의 이동과 지출 조건을 다룹니다.
물건이 실제로 배송되었는지, 서비스가 제대로 제공되었는지, 당사자가 약속한 행동을 했는지는 코드가 스스로 확인할 수 없습니다. 현실 세계의 사실을 확인하고 분쟁을 해결하는 일은 여전히 사람이나 별도의 시스템의 몫입니다.
자판기 안에서 동전과 상품의 조건이 자동으로 처리되더라도, 자판기 밖에서 상품이 어떤 상태로 전달되었는지까지 자판기가 판단하지 못하는 것과 비슷합니다.
다른 계약 시스템과의 차이
더 자유롭고 복잡한 계약 언어를 사용하는 시스템도 있습니다. 복잡한 조건을 표현할 수 있다는 장점이 있지만, 그만큼 예상하지 못한 오류가 발생할 가능성도 커질 수 있습니다.
비트코인의 제한된 조건 언어와 다른 시스템의 넓은 계약 언어를 단순히 우열로 비교하기는 어렵습니다. 무엇을 우선하는지와 어떤 목적에 사용하는지가 다르기 때문입니다. 비트코인은 자금을 다루는 기본 층에서 예측 가능성과 검증 가능성을 중요하게 봅니다.
확장 논의가 신중한 이유
비트코인에 새로운 조건을 추가하자는 제안은 계속 논의됩니다. 그러나 새로운 기능이 예상하지 못한 보안 문제나 검증 부담을 만들 수 있기 때문에, 제안이 나왔다고 곧바로 적용되지는 않습니다.
스마트 계약의 범위를 넓히는 일은 기능을 늘리는 것만이 아니라, 모든 노드가 그 규칙을 안전하게 이해하고 검증할 수 있는지 살피는 일이기도 합니다.
비트코인 스마트 계약은 무엇이든 자동으로 처리하는 범용 계약 시스템이라기보다, 서명과 시간, 비밀값 같은 제한된 조건을 안정적으로 검증하는 구조입니다. 할 수 있는 일이 적은 대신, 자금을 다루는 기본 층에서 깨질 가능성을 줄이려는 선택이 담겨 있습니다.