(이 포스트는 dCUN(decentralized Credit Union Network) 프로젝트의 연구 주제 중 하나입니다. '스마트 계약' 자체를 개선하려는 시도를 고려하는 분들에게 '하나의 접근법'을 공유합니다. 이러한 해석은 dCUN 팀의 독자적 해석으로 어떤 공인된 지위를 가진 해석이 아님을 밝혀 둡니다.)
이더리움이 스마트 계약의 개념을 들고 나왔을 때, 부테린이 이룬 혁신의 핵심은 ‘거래의 결과’를 장부에 기록할 뿐 아니라 ‘거래의 내용’을 장부에 기록한다는 점이었다. 그리고 이는 ‘거래의 결과’를 ‘거래의 내용’으로부터 ‘의미로서 산출되는 것’이라고 해석한 결과였다. ‘거래의 내용’이 ‘표현(expression)’이라면 ‘거래의 결과’는 ‘의미(meaning)’이다.
이더리움의 이러한 접근은 공개 블록체인의 세계관에 큰 변화를 일으켰는데, 비트코인의 세계에서 거래의 기술(description of transaction)은 오직 ‘온체인 이벤트’에 의해 의미가 확정된 어휘들만으로 이루어졌지만, 이더리움에서 ‘거래의 기술’은 ‘온체인 이벤트’에 의해 의미가 확정되지 않는 어휘들을 포함하게 된 것이다.
이더리움 온체인 이벤트로서의 ‘스마트 계약’의 의미 결정
비트코인에서 거래의 쌍방을 지칭하는 명시적 어휘(외연)는 오직 그들의 ‘공개키’이고, 그것의 ‘내포’는 ‘개별 거래 장부(UTXO : 수신자의 public key를 포함하여 송신자의 private key로 서명된 금액이 표시된 거래 결과를 담은 회계적 계정)에 비대칭키 암호를 이용한 서명이 가능한 송금자와 수금자’로서 UTXO만으로도 ‘거래로부터 파생된 주체’라는 의미가 남김없이 확정되었지만, 이더리움의 세계에서 거래 쌍방은 ‘거래의 주체’로서 거래 그 자체와는 분리된 정체성을 가진 존재(EOA : External owned Account)가 되고 ‘거래의 내용’에 해당하는 스마트 계약의 맥락에 결합되어야 의미가 확정되는 존재가 되었다.
부테린으로서는 ‘거래의 내용’이 가진 의미를 안정적으로 확정하기 위해 ‘스마트 계약의 의미 이론’이 필요해졌는데, 예를 들어 ‘1 ETH의 가격이 100만원이 되면, A의 계정에서 0.1 ETH를 B의 계정으로 송금한다’는 스마트 계약이 있다면, 부테린은 이 스마트 계약의 의미 이론을 구축하기 위해 ‘튜링 완전’이라고 불리는 이론적 용어를 가져 오게 된다.
‘튜링 완전’이 내포하는 조건은 두 가지다. 하나는 ‘명령 문장의 최소 단위 분할 혹은 분할 가능성’이고, 다른 하나는 ‘조건과 루프에 의한 무한 루프 허용’이 그것이다. 여기서 ‘스마트 계약’의 ‘의미 이론’이 담긴 곳은 전자다. 스마트 계약이 기술하는 내용을 아주 작은 단위로 분할하고, 이것이 ‘지시적 의미’를 갖게되면 이를 조립하여 만들어진 스마트 계약의 의미는 확정된다고 보는 의미이론이다. 1
이러한 의미 이론에 입각하면, 이더리움의 스마트 계약의 ‘의미 이론’에서 남은 것은 최소 단위로 분할된 어휘들이 ‘신뢰할 수 있는 지시체에 대한 지시’에 성공하는 것뿐이다. 이 중에서 거래 쌍방에 대한 ‘지시’는 비대칭키 암호에서 프라이빗 키를 사용할 수 있는 주체로 비트코인과 비슷한 방식의 의미 작용으로 방어가 가능하므로 남는 문제는 ‘스마트 계약의 조건’을 기술하는데 사용된 어휘들의 의미다. 이 어휘들이 어떻게 ‘온체인 이벤트’의 구성 요소로서 의미가 확정될 수 있게 만들 것인가?
앞선 예에서, 이 계약은 ‘1 ETH의 가격이 100만원이 된다’는 계약 내의 조건과 현실 세계에서 벌어진 ‘1 ETH가 100만원이다’라는 사건 사이에 ‘지시관계’를 성립시켜야 하는 숙제를 안게 된 것이다. 여기서 ‘1 ETH의 가격이 100만 원이 된다’는 계약 내 조건은 ‘온체인 이벤트’인 반면, 현실에서 벌어진 ‘1 ETH가 100만 원이다’라는 사건은 ‘오프체인 이벤트’라는 점에서 이를 지시하는 것은 당연해 보이지만 간단치 않은 일이 되어버렸다. 이 문제를 해결하기 위해 도입된 것이 ‘오라클’이라는 메카니즘이다.2
‘오라클’이란 ‘스마트 계약’ 내의 ‘최소 단위 어휘’의 의미에 대응되는 ‘오프체인 이벤트’와의 신뢰할 수 있는 ‘지시 관계’를 보장하는 메카니즘을 의미하는데, 부테린은 여기서 이 ‘지시 관계’가 오직 합의에 의해서만 보장할 수 있다고 판단한 것으로 보인다. 이는 이더리움이 합의 방식을 PoW에서 PoS로 변경하게 만드는 중요한 동기가 된 것으로 추정되는데, 블록 생성을 위한 합의는 수만개의 거래가 하나의 블록으로 만들어지는 과정에서 한 번 필요할 뿐이지만, ‘오라클’을 위한 합의는 하나의 계약에서도 여러 개가 발생할 가능성이 있다는 점에서 PoW와 같은 고비용 합의 방식을 유지하기는 어렵기 때문이다.
이더리움의 ‘스마트 계약 의미이론’에 대한 실용주의적 반론 : BOScoin
하지만 정말로 ‘오라클’을 통해 ‘신뢰할 수 있는 지시 관계’가 만들어지면 ‘스마트 계약’의 의미는 확정되는 것일까?
다시 앞의 예로 돌아가 보자.
A가 B에게 0.1 ETH를 주기로 한 스마트 계약의 의미는 언제 확정되는 것일까? 그 계약에 A가 계약 상대방을 B로 하여 자신의 프라이빗 키로 서명한 순간일까? 아니면 그 계약의 조건이 충족되어 A의 지갑에서 B에게로 0.1 ETH가 송금되는 순간일까? 부테린이 채택한 지시적 의미이론에 따르자면 이 계약의 의미는 서명 순간에 확정된다. 그러나 그러한 의미론은 하나의 모순을 낳는다. 만약 1 ETH가 100만 원이 되어 A의 지갑에서 B에게 0.1 ETH를 송금하려는 순간 A의 지갑에 잔액이 부족하여 송금이 이루어지지 않는다면, ‘거래의 내용’과 ‘거래의 결과’ 사이에 ‘표현’과 ‘의미’라는 관계가 깨지기 때문이다. ‘거래의 내용’(표현)이 확정된 순간에도 여전히 ‘거래의 결과’(의미)가 확정되지 않았던 것이다. ‘튜링 완전’을 통해 도입한 부테린의 ‘지시적 의미이론’은 위기에 빠졌다.
여기서 이더리움의 ‘의미 이론’을 더 명확히 하기 위해, 이더리움 백서가 거론하고 있는 ‘비트코인의 한계’에 대한 지적을 살펴보자.
비트코인에 구현된 스크립트 언어는 몇가지 중요한 한계가 있다.
튜링불완전성: 비트코인 스크립트 언어로 할 수 있는 작업이 많긴 하지만, 모든 경우의 프로그래밍을 다 지원하지는 않는다. 특히 while이나 for와 같은 순환(loop) 명령 카테고리가 빠져 있다.
가치무지하다: UTXO 스크립트만으로는 인출 액수를 세밀하게 통제할 방법이 없다. 예를 들어 신탁 계약
다양한 상태를 표현할 수 없다(Lack of State): UTXO가 표현할 수 있는 상태는 사용되었거나 안 되거나 둘 뿐이다. 그렇기 때문에 이 두가지 상태 이외에 다른 어떤 내부적 상태를 가지는 다중 단계 계약이나 스크립트를 만들 수가 없다.
블록체인을 해독할 방법이 없다(Blockchain-blindness): UTXO (Script – 인용자)는 논스(Nonce), 타임스탬프, 이전 블록해시같은 블록체인 자료를 해독하지 못한다.
(https://github.com/ethereum/wiki/wiki/%5BKorean%5D-White-Paper 에서 부분 취사 발췌)
이 내용에는 부테린이 ‘스마트 계약’에 대해 어떤 의미 이론을 구축하려고 하는지가 드러나 있다. 일단 첫번째로는 ‘스마트 계약’의 어휘들이 ‘무한 루프’ 허용하거나 적어도 효율적으로 구현할 수 있는 방법을 제공해야 한다는 것을 제시한다. 그리고 나머지 3개의 지적을 통해 ‘튜링 완전’이 전제로 삼고 있는 ‘의미 이론’을 자연스럽게 암시한다. ‘다양한 상태를 표현할 수 없다’는 지적은 ‘다양한 종류의 스마트 계약을 최소 단위 어휘로 분할하여 표현할 충분한 어휘를 제공하지 않는다’는 의미로 사용되어 ‘튜링 완전’이 갖춰야 하는 조건인 계산적 완전성(computational completeness)을 보완적으로 표현한다. 그리고 이 어휘들이 ‘의미’를 갖기 위해 ‘지시’해야 하는 두 종류의 대상에 대해 나머지 두 항목에서 제시한다. 하나는 ‘온체인’ 상의 대상인 블록에 저장된 거래 장부 상의 엔터티이고, 다른 하나는 ‘가치 인식’이 가능한 ‘오프 체인’ 상의 지시체이다.
부테린은 이더리움을 통해 ‘스마트 계약으로 표현 가능한 의미의 범위’를 확장할 뿐 아니라 ‘스마트 계약에 대한 의미이론’도 확장하고자 했다. 그리고 그 끝에 ‘튜링 완전’ 언어의 ‘무한 순환’ 문제가 ‘스마트 계약’의 의미를 결정하지 못하게 되는 원인이 될 수 있다는 사실을 깨닫고, ‘무한 순환’에서 벗어나오는 장치인 ‘GAS 소진 시 실행 중지’ 개념을 넣어 이를 해소했다. 그렇다면 이것으로 ‘스마트 계약의 의미이론’은 완성된 것일까?
한국 최초의 ICO 프로젝트였던 BOScoin이 제기한 문제 중 하나는 바로 ‘이더리움의 스마트 계약 의미이론’에 대한 문제제기였다.3 BOScoin의 ‘스마트 계약 의미이론’인 ‘Trust Contract’는 이를 위해서 OWL DL(Web Ontology Language Descriptive Logic)로부터 다음과 같은 장점을 가져 온다.
OWL DL은 계산적 완전성(Computational Completeness)과 결정가능성(Decidability)을 유지하면서 최대의 표현력을 활용하고자 하는 사용자에게 적합하다. 완전성은 모든 결론이 계산될 수 있다는 특성이고, 결정가능성은 모든 계산이 유한한 시간 안에 끝난다는 특성이다.
(http://www.w3c.or.kr/Translation/REC-owl-features-20040210/)
BOScoin의 이러한 접근은 백서에서 이야기하고 있는 것과 같이, ‘스마트 계약의 의미이론’과 관련하여 다음의 문제들을 해결한다.
하나는 튜링 머신이 추구하는 ‘최소 단위 어휘’를 특정 도메인에 대해 구축된 웹 온톨로지로부터 ‘충분히’(‘모든’은 아니라는 점에서 domain specific 하게) 제공하는 것이다. BOScoin에서 OWL DL(TAL : Timed Automata Language를 포함하여)은 ‘스마트 계약 어휘’를 공급하는 원천이 된다. 이는 다양한 스마트 계약을 분할할 수 있는 ‘최소 단위 어휘’와 함께 ‘오프체인’ 상에 있지만 시맨틱웹을 통해 충분히 검증된 ‘의미’를 제공하므로, ‘오라클’에 대한 의존도를 낮추면서도 GAS 메카니즘 없이도 ‘결정 가능성’을 제공한다. 나아가 모든 결과를 계산할 수 있는 알고리즘을 ‘계산 가능한 수’(Computational Number, 튜링 머신이 어떤 계산을 수행할 것인지를 수로 표현한 것, Description Number로 불리기도 한다)로 표현 가능하게 하면서도, ‘스마트 계약의 표현 범위’를 제한해서라도 안정적으로 작동하도록 하는 것을 목표로 한다.
다른 하나는 ‘온체인 이벤트’인 ‘스마트 계약’의 ‘의미론(semantics)’을 ‘오프체인’ 상에서 작동시켜 볼 수 있도록 한다는 것이다. VM 상에서 실행하기 전에도 이미 해당 계약의 ‘의미’를 확정할 수 있게 하여 잘못된 계약이 실행되는 것을 막고, 심지어 이 계약에 대한 ‘사람에 대한 가독성’을 제공하여 잘못된 계약이 작성되는 것도 방어한다.
여기에 이더리움이 스마트 계약이 ‘온체인’ 상의 의미를 확정하는 방법으로 사용하는 ‘온체인 상에 있는 다른 거래 장부의 내용에 대한 지시’와 ‘오라클화된 오프체인 지시체에 대한 지시’도 당연히 수용한다.
그러나 이것으로 BOScoin이 스마트 계약에 충분한 ‘의미 이론’을 제공하는 것은 아니다. BOScoin이 이 문제에 대해 ‘정당한’ 문제제기를 한 것은 맞지만, 여전히 스마트 계약의 분할된 최소 의미단위가 ‘오프체인’ 상의 지시체인 ‘웹 온톨로지’를 지시하는 것만으로, 스마트 계약을 신뢰성 있는 ‘온체인 이벤트’로서 의미를 확정할 수 있는 것인가하는 의문은 남는다. 현재까지 발표된 문서들만으로는 이 의문을 완전히 해소시키지는 못한다.(물론 이것은 BOScoin이 문서를 통해 발표하지 않은 내용에 포함되어 있을 가능성은 있다.)
스마트 계약의 의미 이론과 실용주의
공개 블록체인 컴퓨팅에서 ‘스마트 계약’은 비트코인에서는 상대적으로 정적이었던 온체인 요소를 ‘동적’이거나 ‘가변성을 포함하는’ 요소로 확장시켰다. 이는 마치 논리학에서 ‘양화 논리(quantificational logic)’가 도입되면서, 논리학이 개별 사건의 추론을 넘어 ‘보편성’의 도구가 될 정도로 활용 범위가 확장되었던 것과 유사하다.
그런데 ‘스마트 계약’은 단순히 논리적인 것만은 아니다. 부테린의 경우 ‘온체인 토대주의(on-chain foundationalism)’를 고수하면서 스마트 계약이 포괄하는 범위를 극대화하는 것을 목표로 한다. 혹시라도 블록체인이 제공하는 신뢰성이 스마트 계약의 느슨한 문법이나 의미론으로 인해 누수되는 것을 막고자 한다. 이는 부테린이 댄 라리머가 이끄는 EOS의 DPOS를 비판하는 근본적 이유이기도 하다.
하지만 실용주의자들은 ‘토대주의’를 거부한다. ‘스마트 계약’에서 사용되는 어휘에 어느 수준 이상의 객관화된 근거만 있다면, ‘오프체인’ 상의 어휘라도 ‘온체인’으로 가져왔을 때 잃는 것에 비해 얻는 것이 압도적으로 크다는 시각이다.
당분간 이들 간의 갈등은 해소되지 않을 것이다. 그러나 분명한 것은 실용주의적 확장에서 얻을 것이 많다 하더라도 실용주의적 확장을 평가할 이론적 기준이 없이 접근하는 것은 위험하다는 것이다. 스마트 계약의 속도가 빨라지고 새로운 함수(개념)이 도입되는 것은 필연이지만, 그 중 어떤 것들이 ‘대형 사고의 당사자’가 되는 것도 필연일 수 밖에 없다.
튜링의 이러한 의미 이론은 프레게, 러셀, 화이트헤드로부터 온 것인데, 이들은 ‘지시적 의미이론’을 기초로 언어를 논리학으로, 다시 논리학을 수학으로 환원시키려는 시도를 하였다. 여기서는 의미 이론을 용어들을 엄밀하게 사용하지는 않을 계획이다. 단적으로 ‘의미’와 ‘지시체’를 섞어 쓰기도 한다.
https://steemit.com/oracle/@energist/blockchain-study-oracle, https://www.zap.org/whitepaper.pdf 이 두 문서를 순서대로 읽어두면 오라클 문제에 대한 이해에 도움이 될 것으로 보인다.
하지만 BOScoin은 백서에서 이 문제를 ‘튜링 완전 언어의 결정 불가능성’ 때문이라고 뭉뚱그렸는데, 이는 ‘튜링 완전’의 의미를 너무 포괄적으로 사용한 것이다.(이에 대해서는 BOScoin의 문서만으로는 애매한 부분이 여전히 남아 있다.)
Coins mentioned in post:
위와 같은 스마트 컨트랙트의 실제 동작시에는 A는 계약의 실행단계에서 0.1ETH를 스마트 컨트랙트로 전송함으로써, 나중에 A의 지갑에서 B로 보내는게 아닌 스마트컨트랙트 주소에서 B로 0.1 ETH가 전송됩니다. 이로써 거래의 내용이 거래의 결과를 보장하죠. 즉 어떻게 코드를 짜느냐에 따라 거래의 내용이 확정 됐을 때 거래의 결과를 확정시킬 수 있습니다. 이 부분에 대해서는 어떻게 생각하나요?
예시를 대충 했더니 바로 지적하시네요^^ 사실 이 문단에서 이야기하는 부테린의 '지시적 의미이론'의 문제를 더 정확히 보여주는 예시가 있겠지만, 독자들에게 단순하고 직관적인 예시를 하기 위해 감수한 부분입니다.^^ 더 명확한 예시는 '무한 루프'의 예시일 것입니다. 그것이 부테린 자신도 GAS를 통해 해결하려 한 '결정 불가능' 문제인데, '무한 루프'는 표현은 확정되더라도 의미가 확정되지 않는 대표적 예라고 할 수 있습니다.
넵 답변감사드립니다.
심도 있는 기술적 분석 감사히 잘 읽었습니다. 공부하고 이해하는데 도움이 많이 되었습니다.
도움이 되셨다니 제가 감사합니다^^