스마트계약 - 약속을 기록하는 것에서 조건을 실행하는 것으로
2016년 이더리움 블록체인 위에 The DAO라는 펀드가 만들어졌습니다. 이더리움 블록체인 위에서 실행되는컴퓨터화된 거래 프로토콜인 스마트계약으로 운영되는 일종의 벤처투자 펀드였죠. 투자자들이 돈을 넣으면 토큰을 받고, 어디에 투자할지는 토큰을 가진 사람들이 투표로 정하는 구조였습니다. 펀드매니저도, 사무실도 없었어요. 규칙은 전부 코드에 적혀 있었습니다.
당시 반응은 폭발적이었습니다. 출범하자마자 1억 5천만 달러가 넘는 이더가 모였고, 5월에는 투자자가 1만 1천 명을 넘었습니다. 당시 존재하던 전체 이더의 약 17%가 이 펀드 하나에 묶여 있었을 정도였죠. 혹시 여기 기억하거나, 참여한 카피바라가 있을지도 모르겠네요.
그런데 어느 날, 누군가 코드의 허점을 이용해 펀드의 돈을 대거 빼 갔습니다. 그리고 그는 이렇게 주장했죠.
"나는 코드가 허락한 대로 했을 뿐이다."
이게 무슨 말이냐고요? 지금 들려드린 이야기는 스마트계약의 역사에서 가장 극적인 사건입니다. 라이브 「카피바라가 토큰을 깨문 이유」, 오늘도 바로 시작합니다!
2016년 당시, 이 펀드의 스마트계약에는 허점이 있었습니다.
ATM을 떠올려 볼게요. 출금 버튼을 누르면 보통은 잔액을 먼저 줄이고, 그다음 돈을 내줍니다. 그런데 어떤 ATM이 돈을 먼저 내주고, 잔액은 나중에 줄인다면? 돈이 나오는 순간 재빨리 출금 버튼을 다시 누르면, 잔액이 줄기 전에 돈이 또 나오겠죠.
The DAO의 코드가 바로 그랬습니다. 공격자는 이 허점을 이용해, 잔액이 갱신되기 전에 출금을 반복해서 이더를 빼냈습니다. 2016년 6월 17일, 약 360만 이더가 공격자가 통제하는 곳으로 옮겨졌습니다. 당시 돈으로 약 6천만 달러, 수백억원어치였습니다.
여기서 블록체인 세계는 깊은 고민에 빠졌습니다.
블록체인과 스마트계약의 철학은 이랬습니다. 코드가 곧 법이다. 코드가 허락하는 일이라면 무엇이든 정당하다. 누구도 몰래 바꿀 수 없는 장부, 사람이 끼어들 수 없는 규칙. 그게 이 기술의 존재 이유였으니까요.
실제로 공격자는 코드를 바꾸지 않았습니다. 해킹이라고 부르지만, 사실 코드에 적힌 규칙대로 출금 버튼을 눌렀을 뿐입니다. 코드가 법이라면, 이건 합법일까요?
반대로, 이걸 도둑질로 보고 돈을 되돌린다면? 그건 "누구도 바꿀 수 없는 장부"를 사람이 바꾼다는 뜻입니다. 블록체인의 존재 이유를 스스로 부정하는 일이죠.
채팅창이 뜨겁네요. "블록체인이고 나발이고 당연히 돌려줘야죠!" "아니, 사람이 끼어들지 않기로 약속했는데, 이럴거면 애초에 블록체인을 왜 써요?" 2016년 여름, 이더리움 커뮤니티도 정확히 이렇게 갈라졌습니다.
몇 주간의 격렬한 논쟁 끝에, 다수는 장부의 역사를 되돌리기로 결정했습니다. 2016년 7월 20일, 이더리움은 블록 1,920,000번에서 이른바 하드포크를 실행했습니다. 해킹이 일어나기 전으로 기록을 되돌리고, The DAO에 있던 이더를 투자자들이 돌려받을 수 있는 새 스마트계약으로 옮긴 거죠.
하지만 모두가 동의한 건 아니었습니다. 장부는 절대 바꿔서는 안 된다고 믿은 사람들은 기존 장부에 그대로 남았습니다. 그렇게 블록체인은 둘로 갈라졌습니다. 기록을 되돌린 쪽이 지금의 이더리움(ETH), 원래 기록을 지킨 쪽이 이더리움 클래식(ETC) 입니다.
아이러니하죠. "사람이 끼어들 수 없는 장부"를 지키기 위해 만든 기술에서, 가장 중요한 순간에 결정을 내린 건 결국 사람이었습니다.
The DAO 사건은 스마트계약에 대해 몇 가지를 분명하게 보여줬습니다.
① 코드는 쓰인 대로만 실행합니다.
허점까지 포함해서요. 코드에는 "선의"나 "취지" 같은 게 없습니다. 실수도 정확하고 성실하게 실행합니다.
② 코드는 애매함을 모릅니다.
사람의 법은 "이건 누가 봐도 부당하다"고 판단할 수 있습니다. 코드는 허락했는지, 안했는지만 압니다.
③ 실행되는 순간, 멈출 사람이 없습니다.
ATM 앞에 직원이 있었다면 "잠깐만요, 지금 뭐하시는 겁니까!" 했겠지만 스마트계약에는 그런 사람이 없었습니다. 멈추는 데는 몇 주의 논쟁과, 장부를 둘로 쪼개는 대가가 필요했습니다.
금융이 토큰화를 하면서 공개된 블록체인보다 허가받은 기관들이 함께 쓰는 장부를 먼저 고르고, 스마트계약을 쓰기 전에 코드를 몇 번이고 검증하는 이유가 여기에 있습니다. 코드가 규칙을 실행하는 세상은 빠르고 정확하지만, 그 코드가 틀렸을 때 누가 멈추고 누가 바카라임질지는 여전히 사람이 정해야 하니까요.
스마트계약은 약속을 실행합니다. 하지만 그 약속이 옳은지는 판단하지 않습니다.
그 판단은, 결국 사람의 몫으로 돌아왔습니다.
코드가 법이라면 해킹도 합법이라고 생각하시나요? 아니면 여전히 사람이 바카라임져야한다고 생각하시나요? 한 번 생각해보시길 바랍니다. 아, 한 카피바라가 채팅으로 묻네요.
"근데요, The DAO는 펀드매니저 없이 코드가 펀드를 굴린 거잖아요. 사고는 났지만, 코드를 잘 짜면 되는 거라면... 앞으로 은행도 코드로 대체되는 거 아니에요?"
그러게요, 앞으로 은행은 사라지려나요? 오늘 라이브는 여기까지! 다음 라이브에서 이 질문을 깨물어 보겠습니다.
1990년대에 스마트계약이라는 말을 처음 만든 컴퓨터과학자 닉 사보는 이걸 자판기로 설명했습니다.
자판기에 동전을 넣고 버튼을 누르면 음료가 나옵니다. 점원도 없고, 계약서도 없고, "정말 돈 넣으셨죠?" 하고 확인하는 사람도 없습니다. 그럼에도 불구하고 우리는 돈을 안 넣고 음료를 꺼낼 수는 없죠. 기계 안에 규칙이 들어 있기 때문입니다. 스마트계약은 이 자판기를 블록체인 위에 코드로 만든 겁니다. 이렇게요.
만약 카피바라가 100원을 보내면 → 카피바라에게 채권 토큰 1개를 보낸다
아니면 → 아무 일도 일어나지 않는다
"만약 ㅇㅇ하면, ㅁㅁ한다."
스마트계약의 기본 공식입니다.
스마트계약은 정해진 조건이 맞으면(동전을 넣으면) 반드시, 그리고 바로 실행하는(음료수가 나오는) 자판기와도 같습니다. 비트코인 위의 자판기라고나 할까요.
처음 이 말을 만든 닉 사보는 "a computerized transaction protocol that executes the terms of a contract(계약의 조건을 실행하는 컴퓨터화된 거래 프로토콜)"라고 정의하였습니다. (1994)
이더리움은 공식 문서에서 "A 'smart contract' is simply a program that runs on the Ethereum blockchain(스마트계약은 이더리움 블록체인 위에서 실행되는 프로그램이다.)"라고 정의하고 있습니다. 이더리움 문서는 이어서 스마트계약을 블록체인의 특정 주소에 존재하는 코드(기능)와 데이터(상태)의 모음으로 설명해요.
위 내용을 포괄하여 토큰화 맥락에서 쓰이는 정의를 종합하면 아래와 같습니다.
스마트계약은 블록체인(분산원장) 위에 배포되어, 사전에 정의된 조건이 충족되면 그에 따른 거래나 계약 조건을 자동으로 이행하는 컴퓨터 프로그램이다.
하필 '계약'이라는 말이 붙어서, 스마트계약이라고 하면 모두싸인이나 글로싸인 같은 전자계약을 떠올리는 카피바라도 많을 텐데요. 스마트계약은 계약서가 아니라, 블록체인 위에서 정해진 규칙대로 실행되는 프로그램입니다.
참고 자료
Corporate Finance Institute, 「The DAO Heist」https://corporatefinanceinstitute.com/resources/cryptocurrency/dao-heist
Gemini Cryptopedia, 「DAO Hack Explained: How a Vulnerability Split Ethereum」https://www.gemini.com/en-GB/cryptopedia/the-dao-hack-makerdao
Mastering Ethereum, 「Appendix: Ethereum Fork History」https://github.com/dkarvounis/ethereumbook/blob/develop/appdx-forks-history.asciidoc
Arch Lending, 「The DAO Hack」https://archlending.com/glossary/the-dao-hack/