검수요청.png검수요청.png

"스마트 계약"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
(동영상)
 
(사용자 8명의 중간 판 115개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''스마트 계약''' 또는 '''스마트 컨트랙트'''(smart contract)는 계약 당사자가 사전에 협의한 내용을 미리 프로그래밍하여 전자 계약서 문서 안에 넣어두고, 이 계약 조건이 모두 충족되면 자동으로 계약 내용이 실행되도록 하는 시스템이다. 스마트 계약은 중간에 제3의 보증기관을 끼우지 않고도 개인간(P2P)에 원하는 계약을 체결할 수 있도록 해주는 전자계약 기능이라고 할 수 있다. 2013년 당시 19세의 천재 프로그래머였던 [[비탈릭 부테린]](Vitalik Buterin)은 스마트 계약 플랫폼인 [[이더리움]](ethereum)을 개발할 것을 제안<ref name="이더리움 백서">Vitalik Buterin, "[https://github.com/ethereum/wiki/wiki/White-Paper A Next-Generation Smart Contract and Decentralized Application Platform]", 2013.</ref>하고, 2015년 7월 30일 이더리움 개발에 성공하여 실제 서비스를 시작했다. [[솔리디티]](solidity)라는 프로그래밍 언어를 사용하여, 계약 기간, 금액, 조건 등을 미리 코딩해 두면, 부동산 거래, 중고 자동차 거래, 무역 거래 등 어떠한 종류의 계약도 자동 실행되도록 만들 수 있다. <ref>Peter Sayer, 〈[http://www.ciokorea.com/news/29268 블록체인에 대한 기본 상식 5가지]〉, 《CIO Korea》, 2016-04-12</ref>
+
'''스마트 계약''' 또는 '''스마트 컨트랙트'''(smart contract)는 계약 당사자가 사전에 협의한 내용을 미리 프로그래밍하여 전자 계약서 문서 안에 넣어두고, 이 계약 조건이 모두 충족되면 자동으로 계약 내용이 실행되도록 하는 시스템이다. 기존의 [[블록체인]] 1.0 기술이 '과거에 일어났던 일'을 기록한다면, 스마트 계약 기능을 구현한 블록체인 2.0 기술은 '미래에 일어날 일'을 미리 기록해 둘 수 있다.<ref name="Peter">Peter Sayer, 〈[http://www.ciokorea.com/news/29268 블록체인에 대한 기본 상식 5가지]〉, 《CIO코리아》, 2016-04-12</ref>
기존의 [[비트코인]]이 블록체인 기술을 활용하여 가치의 저장과 전달이 가능한 암호화폐를 만들었다면, [[이더리움]]은 한 단계 더 나아가 블록체인 기술을 활용하여 인간이 상상할 수 있는 모든 종류의 계약을 자동으로 실행할 수 있는 스마트 계약 플랫폼을 개발했다. 비탈릭 부테린이 이더리움을 통해 스마트 계약 기능을 구현함으로써, [[블록체인]] 기술을 [[비트코인]]과 같은 [[암호화폐]]에만 사용하는 것이 아니라, 위변조 방지가 필요한 각종 계약서 작성 등에 활용할 수 있게 되었다. 이런 점에서 기존의 비트코인을 '블록체인 1.0'이라고 부르고, 스마트 계약 기능을 구현한 이더리움을 '블록체인 2.0'이라고 부른다.
+
 
 +
== 개요 ==
 +
스마트 계약은 중간에 제3의 보증기관을 끼우지 않고 개인간(P2P)에 원하는 계약을 체결할 수 있도록 해주는 디지털 전자계약 기능이다. 스마트 계약은 1994년 [[닉 재보]](Nick Szabo)가 처음 제안하였으나 실제로 구현하지는 못하였다. 2013년 당시 19세의 천재 프로그래머였던 [[비탈릭 부테린]](Vitalik Buterin)은 스마트 계약 플랫폼인 [[이더리움]](Ethereum)을 개발할 것을 제안하고<ref name="이더리움 백서">Vitalik Buterin, "[https://github.com/ethereum/wiki/wiki/White-Paper A Next-Generation Smart Contract and Decentralized Application Platform]", 2013.</ref>, 2015년 7월 30일 이더리움 개발에 성공하여 실제 서비스를 시작했다. [[솔리디티]](solidity)라는 프로그래밍 언어를 사용하여, 계약 기간, 금액, 조건 등을 미리 코딩해 두면, 부동산 거래, 중고 자동차 거래, 무역 거래 등 어떠한 종류의 계약도 자동 실행되도록 만들 수 있다.<ref name="Peter"></ref>
 +
 
 +
기존의 [[비트코인]]이 블록체인 기술을 활용하여 가치의 저장과 전달이 가능한 [[암호화폐]]를 만들었다면, [[이더리움]]은 한 단계 더 나아가 블록체인 기술을 활용하여 인간이 상상할 수 있는 모든 종류의 계약을 자동으로 실행할 수 있는 스마트 계약 플랫폼을 개발했다. 비탈릭 부테린이 이더리움을 통해 스마트 계약 기능을 구현함으로써, [[블록체인]] 기술을 [[비트코인]]과 같은 [[암호화폐]]에만 사용하는 것이 아니라, 위변조 방지가 필요한 각종 계약서 작성 등에 활용할 수 있게 되었다. 이런 점에서 기존의 비트코인을 '블록체인 1.0'이라고 부르고, 스마트 계약 기능을 구현한 이더리움을 '블록체인 2.0'이라고 부른다.
  
 
== 닉 재보의 비트골드 ==
 
== 닉 재보의 비트골드 ==
스마트 계약은 1994년 [[닉 재보]](Nick Szabo)<ref>닉 재보(Nick Szabo)는 로스쿨을 졸업한 컴퓨터 과학자이다. '닉 자보'라고도 한다.</ref>가 고안한 개념이다. 닉 재보는 스마트 계약을 "계약에 필요한 요소를 코드를 통해 스스로 실행되게 하는 전산화된 거래 약속"이라고 정의했다. 그는 스마트 계약이 자동판매기와 비슷하다<ref>김인경 기자, 〈[http://hash.kr/coininfo/read.htm?bn=coininfo&fmlid=745&pkid=17&board_no=745&thisPage=1&startTextId=&buffer= (IT열쇳말) 스마트 계약]〉, 《블로터》, 2018-02-05</ref>고 말했다. 자동판매기에 미리 정해진 액수 이상의 돈을 투입하면, 자동으로 원하는 상품을 구매할 수 있듯이, 스마트 계약을 통해 일정한 조건이 충족되면 자동으로 계약이 실행되도록 한다는 것이다.
+
[[파일:닉 재보.jpg|썸네일|200픽셀|'''[[닉 재보]]'''(Nick Szabo)]]
 +
 
 +
스마트 계약은 1994년 '''[[닉 재보]]'''(Nick Szabo)<ref>[[닉 재보]](Nick Szabo)는 로스쿨을 졸업한 컴퓨터 과학자이다. '닉 자보'라고도 한다.</ref>가 처음 고안한 개념이다. 닉 재보는 스마트 계약을 "계약에 필요한 요소를 코드를 통해 스스로 실행되게 하는 전산화된 거래 약속"이라고 정의했다. 그는 스마트 계약이 자동판매기와 비슷하다고 말했다.<ref>김인경 기자, 〈[http://hash.kr/coininfo/read.htm?bn=coininfo&fmlid=745&pkid=17&board_no=745&thisPage=1&startTextId=&buffer= (IT열쇳말) 스마트 계약]〉, 《블로터》, 2018-02-05</ref> 자동판매기에 미리 정해진 액수 이상의 돈을 투입하면, 자동으로 원하는 상품을 구매할 수 있듯이, 스마트 계약을 통해 일정한 조건이 충족되면 자동으로 계약이 실행되도록 한다는 것이다.
  
 
1996년 닉 재보는 스마트 계약 설계의 기본 원칙으로 관측 가능성, 검증 가능성, 사생활 보호, 강제 가능성 등 4가지를 제시했다.
 
1996년 닉 재보는 스마트 계약 설계의 기본 원칙으로 관측 가능성, 검증 가능성, 사생활 보호, 강제 가능성 등 4가지를 제시했다.
* '''관측 가능성'''(observability) : 스마트 계약은 서로의 계약 이행 가능성을 관찰하거나 성과를 입증할 수 있어야 한다.
+
* '''관측 가능성'''(observability): 스마트 계약은 서로의 계약 이행 가능성을 관찰하거나 성과를 입증할 수 있어야 한다.
* '''검증 가능성'''(verifiability) : 계약을 이행 또는 위반했을 때 이를 알 수 있어야 한다.
+
* '''검증 가능성'''(verifiability): 계약을 이행 또는 위반했을 때 이를 알 수 있어야 한다.
* '''사생활 보호'''(privacy) : 계약 내용은 계약에 관련된 당사자들에게만 알려져야 한다.
+
* '''사생활 보호'''(privacy): 계약 내용은 계약에 관련된 당사자들에게만 알려져야 한다.
* '''강제 가능성'''(enforceability) : 계약을 강제로 이행할 수 있는 구속력이 있어야 한다. 단, 강제 가능성은 최소화해야 한다.
+
* '''강제 가능성'''(enforceability): 계약을 강제로 이행할 수 있는 구속력이 있어야 한다. 단, 강제 가능성은 최소화해야 한다.
 +
 
 +
닉 재보는 스마트 계약을 위해 '''[[비트골드]]'''<!--비트 골드-->(bit gold)<!--bitgold-->라는 디지털 화폐를 고안했지만, 당시의 기술적 한계로 인해 실제로 개발되거나 사용되지는 못하였다.<ref>이정훈 기자, 〈[http://www.edaily.co.kr/news/news_detail.asp?newsId=01361206619076408&mediaCodeNo=257&OutLnkChk=Y (이정훈의 암호화폐 읽기)<2>`빅 브라더` 가라…혁신 넘어선 혁명]〉, 《이데일리》, 2018-01-10</ref> 하지만 닉 재보가 고안한 스마트 컨트랙트 개념은 이후 [[비트코인]] 스크립트로 이어졌고, 2015년 7월 30일 [[비탈릭 부테린]](Vitalik Buterin)에 의해 [[이더리움]](Ethereum)이 개발됨으로써 실제로 구현되었다.
 +
 
 +
== 비트코인 스크립트 ==
 +
[[파일:비트코인(bitcoin).png|썸네일|200픽셀|'''[[비트코인]]'''(bitcoin)]]
 +
 
 +
2009년 1월 3일 '''[[사토시 나카모토]]'''(Satoshi Nakamoto)가 '''[[비트코인]]'''(Bitcoin)을 개발하고, 비트코인의 신뢰 보장 기술인 [[블록체인]]이 등장하자 스마트 컨트랙트가 다시 관심을 받으며 부상하기 시작했다. 기존 디지털 프로토콜의 낮은 신뢰성과 복제 및 위변조 문제로 인해 실제 구현되기 어려웠던 스마트 계약은 블록체인 기술을 통해 [[무결성]]을 보장하고 조작방지가 가능한 블록체인 기반 스마트 컨트랙트로 개발될 수 있게 되었다. 비트코인 프로토콜도 낮은 수준의 '스마트 계약' 기능을 가지고 있다. 기술적인 관점에서 봤을 때, 비트코인의 장부는 하나의 상태변환 시스템(state transition system)으로 생각해볼 수 있다. 이 시스템은 현재 모든 비트코인의 소유권 현황으로 이루어진 하나의 [[상태]](state)와 이 현재 상태 및 트랜잭션을 받아서 그 결과로서 새로운 상태를 출력해주는 [[상태변환함수]]<!--상태 변환 함수, 상태변환 함수-->(state transition function)로 구성되어 있다.
 +
 
 +
최초의 블록체인 기반 스마트 컨트랙트는 바로 비트코인 스크립트이다. 비트코인의 결제 시스템인 '''[[UTXO]]'''(사용되지 않은 트랜잭션 출력)은 간단한 스택 기반 프로그래밍 언어로 표현된 복잡한 스크립트에 의해서도 작동한다.<ref name="이더리움 백서"></ref> UTXO(유티엑스오)는 'Unspent Transaction Outputs'의 약자로서, '미사용 트랜잭션 출력값' 또는 '미지출 거래 출력'이라고 한다. [[비트코인]]은 [[이더리움]]의 '계좌 잔고 모델'(account balance model)과 달리 계정이나 잔고가 없고, [[블록체인]]에 기록된 "소비되지 않은 출력값"을 통해 거래의 유효성을 검사하여 코인의 존재 여부를 확인한다.
  
닉 재보는 스마트 계약을 위해 '''[[비트골드]]'''(bit gold)라는 디지털 화폐를 고안했지만, 당시의 기술적 한계로 인해 실제로 개발되거나 사용되지는 못하였다.<ref>이정훈 기자, 〈[http://www.edaily.co.kr/news/news_detail.asp?newsId=01361206619076408&mediaCodeNo=257&OutLnkChk=Y (이정훈의 암호화폐 읽기)<2>`빅 브라더` 가라…혁신 넘어선 혁명]〉, 《이데일리》, 2018-01-10</ref>
+
비트코인 트랜잭션에 [[원시 언어]]인 [[오피코드]](OPCODE)로 [[스크립트]]를 작성해서 보내면, 조건에 따라 자동으로 거래를 수행할 수 있다. 하지만 비트코인 스크립트는 [[튜링 불완전 언어]]<!--튜링불완전언어, 튜링불완전 언어-->를 사용하고, [[반복문]](loop)은 사용할 수 없고, 다양한 상태를 표현할 수 없으며, 비트코인 잔고 외의 다른 정보를 관리할 수 없다는 한계가 있다. 만약 비트코인 스크립트에서 반복문을 허용할 경우, 스크립트 조건 때문에 코드 실행을 0부터 시작하는 프로그램 카운터를 하나씩 증가시키면서 반복적으로 연산을 수행하도록 구성된 [[무한루프]]가 발생하여 네트워크 전체가 멈출 수 있기 때문이다.<ref>더루프, 〈[https://blog.theloop.co.kr/2017/04/04/%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99%ED%8A%B8smart-contract-%EA%B0%9C%EC%9A%94-2/ 스마트 컨트랙트 개요(Smart Contract)-2]〉, 《더루프 블로그》, 2017-04-04</ref>
  
==비트코인 스크립트==
+
== 이더리움 스마트 컨트랙트 ==
비트코인 프로토콜도 낮은 수준의 '스마트 계약' 기능이 가능하다. 기술적인 관점에서 보았을 때, 비트코인의 장부는 하나의 상태변환시스템(state transition system)으로 생각해볼 수 있다. 이 시스템은 현재 모든 비트코인의 소유권 현황으로 이루어진 하나의 “상태(state)” 와 이 현재 상태와 트랜잭션을 받아서 그 결과로써 새로운 상태를 출력해주는 “상태변환함수(state transition function)”로 구성되어 있다. 이러한 비트코인의 결제 시스템인 [[UTXO]](소비되지 않은 트랜잭션 출력)은 간단한 스택-기반 프로그래밍 언어로 표현된 복잡한 스크립트에 의해서도 작동한다.<ref name="이더리움 백서"></ref> 즉, 최초의 블록체인 기반 스마트 컨트랙트는 바로 비트코인 스크립트이다. 비트코인 트랜잭션에 원시 언어인 OPCODE로 스크립트를 작성해서 보내면 일종의 계약(Contract) 개념이 있으므로 조건에 따라 자동으로 거래를 수행할 수 있다. 하지만 비트코인 스크립트는 튜링불완전성 언어를 사용하고, 반복문을 사용할 수 없고, 다양한 상태를 표현할 수 없으며 비트코인 잔고 외의 다른 정보를 관리 할 수 없다는 한계가 있다. 이는 블록체인의 특이한 구조 때문인데 비트코인 스크립트에서 반복문을 허용할 경우, 스크립트 조건 때문에 코드 실행을 0부터 시작하는 프로그램 카운터를 하나씩 증가시키면서 반복적으로 연산을 수행하도록 구성된 무한 루프가 발생할 경우 네트워크 전체가 멈출 수 있다.<ref> 더루프, 〈[https://blog.theloop.co.kr/2017/04/04/%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99%ED%8A%B8smart-contract-%EA%B0%9C%EC%9A%94-2/ 스마트 컨트랙트 개요(Smart Contract)-2]〉, 《더루프 블로그》, 2017-04-04</ref>
+
[[파일:비탈릭 부테린.jpg|썸네일|200픽셀|'''[[비탈릭 부테린]]'''(Vitalik Buterin) 2016년]]
 +
[[파일:이더리움 글자.png |썸네일|300픽셀|'''[[이더리움]]'''(Ethereum)]]
  
== 이더리움 스마트 컨트랙트==
+
=== 스마트 컨트랙트 플랫폼 ===
 +
'''[[이더리움]]'''(Ethereum)은 비트코인 스크립트 시스템의 [[튜링 불완전성]]이라는 한계를 극복하고자 나온 스마트 컨트랙트 플랫폼(smart contract platform)이다. '''[[비탈릭 부테린]]'''(Vitalik Buterin)이 창시한 이더리움 블록체인의 경우, [[블록]]에 [[데이터]]뿐만 아니라  비트코인 스크립트 시스템의 한계인 [[조건문]](if), [[반복문]](loop) 등의 실행 코드를 포함시켜 로직의 실행을 자동화할 수 있다. 스마트 컨트랙트를 구현하기 위한 컨트랙트 코드(contract code)는 '''[[이더리움 가상머신]]'''(EVM; Ethereum Virtual Machine)이라는 독립된 실행 환경에서 실행된다. 여기에 스마트 컨트랙트를 실행할 때마다 [[수수료]]인 '''[[가스]]'''(gas)를 발생시키고 네트워크상에 수수료의 한계를 설정하여 무한루프를 막았다. 무한히 반복되는 조건을 만들어 스마트 컨트랙트를 실행시키면 중간에 수수료 한계점에 도달하게 되는데, 이때 중단된다. 이더리움에서 스마트 컨트랙트는 '''[[솔리디티]]'''(Solidity) 언어로 프로그래밍된다. 솔리디티 언어로 프로그래밍된 스마트 컨트랙트는 [[컴파일러]](solc)에 의해 [[바이트코드]](bytecode)로 [[컴파일]]되고, 컴파일된 바이트코드는 블록에 포함되어, 이더리움 가상머신(EVM)에 의해 실행된다. 이더리움 가상머신(EVM)은 이더리움 스마트 컨트랙트의 바이트코드를 실행하는 32 바이트 [[스택]] 기반의 실행환경이다.
  
이더리움(Ethereum)은 이러한 비트코인 스크립트 시스템의 한계를 극복하고자 나온 스마트 컨트랙트에 특화된 블록체인 플랫폼이다. 이더리움은 비트코인 스크립트 시스템의 한계인 다양한 상태 저장과 반복문을 허용한 스마트 컨트랙트를 만들었다. 여기에 각 라인을 실행할 때마다 수수료를 발생시키고 네트워크상에 수수료의 한계를 설정하여 무한루프를 막았다. 무한히 반복되는 조건을 만들어 스마트 컨트랙트를 실행시키면 중간에 수수료 한계점에 도달하면 중단된다. 이는 블록체인을 통해 함수 내용과 함수의 입력을 공유하면서 무결성을 보장한다면, 함수의 결과는 별도로 공유하지 않더라도 그 무결성이 보장된다는 것이다. 이더리움은 함수를 컴파일된 코드 형태로 거래에 포함하여 블록체인을 통해 동기화한다. 이때 거래에 포함된 정보를 함수의 입력으로 하여 코드로 표현된 함수를 실행한 후 그 결과를 별도의 상태로 보관하는 방식으로 스마트 컨트랙트를 구현하게 되었다.
+
이더리움이 제공하려는 것은 [[튜링 완전]](turing-complete) 프로그래밍 언어가 심어진 블록체인이다. 이 프로그래밍 언어는 코딩된 규칙에 따라 '어떤 상태'를 '다른 상태'로 변환시키는 기능(arbitrary state transition functions)이 포함된 [[계약]]을 사용자들이 직접 작성할 수 있게 함으로써, 인간이 상상할 수 있는 모든 종류의 계약을 스마트 컨트랙트로 만들 수 있다. 이를 통해 모든 계약이 자동으로 실행할 수 있고, 이를 위한 다양한 분산형 애플리케이션인 '''[[디앱]]'''(DApp)도 만들 수 있다.<ref name="이더리움 백서"></ref> 누구든지 솔리디티 언어를 사용해 스마트 컨트랙트와 디앱을 작성하고 소유권에 대한 임의의 규칙, 트랜잭션 형식(transaction format), 상태변환함수(state transition function) 등을 생성할 수 있다.
  
이더리움이 제공하려는 것은 튜링 완전(turing-complete) 프로그래밍 언어가 심어진 블록체인이다. 이 프로그래밍 언어는 코딩된 규칙에 따라 '어떤 상태'를 다르게 변환시키는 기능(arbitrary state transition functions)이 포함된 "계약(contracts)"을 사용자들이 작성할 수 있게 함으로써 인간이 상상할 수 있는 모든 종류의 계약을 자동으로 실행할 수 있게 만들고, 다른 많은 앱플리케이션도 쉽게 만들 수 있도록 돕는다.<ref name="이더리움 백서"></ref>누구든지 이 언어를 사용해 스마트 컨트랙트, 디앱을 작성하고 소유권에 대한 임의의 규칙, 트랜잭션 형식(transaction format), 상태변환함수(state transition function) 등을 생성 할 수 있다. 이더리움 상에서의 가장 유명한 스마트 컨트랙트의 예는 DAO(Decentralized Autonomous Organization)라고 불리는 탈중앙화된 자율 조직이다. 이는 회사의 의결권을 토큰(DAO Token)으로 행사할 수 있도록 크라우드 펀딩을 통해 토큰을 이더로 구입할 있도록 판매하였고, 그 과정에서 모인 약 2000억원 가량의 이더를 어떻게 사용할지 토큰을 기반으로 투표할 수 있도록 한 스마트 컨트랙트로서 특정 운영주체가 없이 참여자의 투표로 운영되도록 했다.
+
초창기 이더리움 스마트 컨트랙트에서 가장 이슈가 되었던 예는 '''[[다오]]'''(DAO; Decentralized Autonomous Organization)라고 불리는 탈중앙화된 자율 조직이다. [[다오]](DAO)는 스마트 컨트랙트 기술로 구현된 조직으로 중앙의 운영 주체가 없이 개인들이 자율적으로 제안 및 투표를 하여 다수결로 의결하여 운영되는 조직이다. 회사의 의결권을 [[다오토큰]]<!--다오 토큰-->(DAO Token)으로 행사할 수 있도록 [[크라우드 펀딩]]을 통해 [[이더리움]]으로 다오토큰을 살 있게 판매하였다. 이 과정에서 모인 약 2,000억원 가량의 이더리움을 어떻게 사용할지 다오토큰을 기반으로 투표할 수 있도록 했다.
  
===작동 방법===
+
=== 스마트 컨트랙트 작동 원리 ===
 +
블록체인 기반 스마트 컨트랙트는 기본적으로 모든 트랜잭션 [[로그]]가 저장된 블록체인 데이터베이스와 스마트 컨트랙트의 상태를 저장하는 데이터베이스 두 가지가 존재한다. 여기서의 스마트 컨트랙트는 상태를 변경할 수 있는 애플리케이션이라고 할 수 있고, 스마트 컨트랙트의 상태는 해당 애플리케이션에서 사용하는 변수라고 할 수 있으며, 이를 변경하기 위한 입력값은 트랜잭션에 포함되어 있다. 스마트 컨트랙트는 두 가지 [[인터페이스]]를 공개하고 있는데, 하나는 [[트랜잭션]](transaction)이고, 하나는 [[쿼리]](query)이다. 트랜잭션을 통한 인터페이스는 트랜잭션 데이터베이스에 저장되고, 스마트 컨트랙트의 상태를 변경시키는 접근방법이다. 쿼리는 트랜잭션 데이터베이스에 기록이 남지 않으면서 스마트 컨트랙트의 상태를 읽는 작업이다. 트랜잭션은 쓰기, 삭제, 수정을 실행하고, 쿼리는 읽기를 통한 조회만을 실행한다.
  
비트코인의 경우 스마트 컨트랙트가 지원되지는 않지만, 비트코인이라는 자산이 이동되는 단 하나의 송금 애플리케이션이 블록체인에 올라간 서비스라고 볼 수 있다. 이더리움 스마트 컨트랙트의 경우, 스마트 컨트랙트의 상태를 변경시키는 트랜잭션 보관 데이터베이스와 스마트 컨트랙트의 최신 상태를 보관하고 있는 스마트 컨트랙트 데이터베이스를 가지고 있다. 여기서의 스마트 컨트랙트는 상태를 변경할 수 있는 애플리케이션이라고 할 수 있고, 스마트 컨트랙트의 상태는 해당 애플리케이션에서 사용하는 변수라고 할 수 있으며 이를 변경하기 위한 입력값은 트랜잭션에 포함되어 있다. 또, 스마트 컨트랙트는 두 가지 인터페이스를 공개하고 있는데, 하나는 트랜잭션(Transaction)이고, 하나는 쿼리(Query)이다. 트랜잭션을 통한 인터페이스는 트랜잭션 데이터베이스에 저장되고, 스마트 컨트랙트의 상태를 변경시키는 접근방법이다. 쿼리는 트랜잭션 데이터베이스에 기록이 남지 않으면서 스마트 컨트랙트의 상태를 읽는 작업이다. 트랜잭션은 쓰기, 삭제, 수정을 실행하고 쿼리는 읽기만을 실행한다. 예로, '디지털 컨텐츠 거래' 가 어떻게 작동하는지를 알아보도록 하자.  
+
예를 들어, '상품 거래'는 스마트 컨트랙트 시스템에서 다음과 같이 작동한다.
  
* 콘텐츠 판매자가 콘탠츠 등록 트랜잭션을 블록체인에 보낸다. 콘텐츠 등록 트랜잭션 발생 시, 네트워크의 모든 노드는 콘텐츠 등록 트랜잭션을 공유하고 트랜잭션 데이터베이스에 저장하게 된다. 여기까지가 비트코인과 같은 스마트 컨트랙트가 지원되지 않는 데이터 공유 기반의 블록체인이라고 할 수 있다. 스마트 컨트랙트 지원 블록체인은 이 단계 이후에 트랜잭션의 내용에 따라 스마트 컨트랙트 애플리케이션을 실행하고 그 결과를 스마트 컨트랙트 데이터베이스를 반영한다. 
+
* '''기록 저장''': 판매자가 상품을 올리겠다는 내용을 [[코딩]]하여 [[트랜잭션]]을 만든 후 [[블록체인]]에 전송한다. 상품 등록 트랜잭션 발생 시, 네트워크의 모든 [[노드]]는 상품 등록 트랜잭션을 공유하고 블록을 생성한 후 블록을 [[브로드캐스팅]]한다. 블록을 전달받은 각 노드는 해당 블록을 자신의 블록체인 맨 끝에 추가하고, 해당 블록에 저장되어 있는 트랜잭션을 적용시켜 자신의 스마트 컨트랙트 데이터베이스를 동기화한다. 이러한 과정을 통해 모든 블록체인의 노드들이 스마트 컨트랙트 상태 데이터베이스를 공유하게 된다.
* 구매자는 블록체인 네트워크에서 콘텐츠를 조회한다. 블록체인의 어떤 데이터도 변경시킬 필요 없이 스마트 컨트랙트 데이터베이스 내 저장된 상태 값만 조회하면 되기 때문에 쿼리 정보는 블록체인에 동기화할 필요 없고, 블록 동기화 타이밍에 상관없이 바로 응답할 수 있다.
 
* 구매자가 콘텐츠 구매 트랜잭션을 보내면 트랜잭션을 공유하고 블록체인 네트워크에 동기화한다. 모든 노드의 스마트 컨트랙트 데이터베이스에 컨텐츠 구매자를 등록하고 돈을 판매자에게 전송한다. 그러면 등록된 콘텐츠의 소유권이 구매자에게로 이동한다.
 
  
==비트코인캐시 스크립트 연산 부호==
+
* '''상품 조회''': 구매자는 블록체인 네트워크에서 상품를 조회한다. 스마트 컨트랙트에 쓰는 것는 것은 트랜잭션을 발생시키지만, 이미 저장되어 있던 값을 읽어 오는 것은 트랙잭션을 발생시키지 않는다. 블록체인의 어떤 데이터도 변경시킬 필요 없이 스마트 컨트랙트 데이터베이스 내 저장된 상태 값만 조회하면 되기 때문에 쿼리 정보는 블록체인에 동기화할 필요 없고, 블록 동기화 타이밍에 상관없이 바로 응답할 있다.
2018년 한국에서 열린 후오비 카니발에서 비트메인 대표이자 비트코인캐시의 아버지라 불리는 [[우지한]]은 비트코인캐시(BCH)는 의사결정 방식인 합의 알고리즘 변화 없이 다양한 프로젝트를 시도할 수 있는 방안을 도출했다며 [[BCH]]에 내재된 ‘스크립트 연산 부호(OP_RETURN)’을 활용하면 스마트 계약 등 다양한 기능을 자유롭게 구현할 수 있다고 했다. BCH는 최근 업데이트를 통해 40바이트였던 스크립트 연산 부호 용량을 220바이트로 늘려 새로운 프로토콜을 개발하기에 훨씬 쉬운 환경이 됐다고 한다. 스크립트 연산 부호는 블록체인 거래(transaction) 과정에 아무런 영향을 주지 않고, 블록에서 제거할 수 있기 때문에 스마트 계약 등 다양한 기능을 자유롭게 개발 및 구현할 있다거 한다.  이어 비트코인의 스크립트 연산 부호 용량이 컸다면 이더리움 창시자인 비탈릭 부테린도 이더리움을 만드는 대신 이 부호를 활용하여 스마트 계약을 만들었을 것이란 언급도 덧붙였다.  
 
  
==
+
* '''계약 이행''': 구매자가 상품 구매 트랜잭션을 보내면 트랜잭션을 공유하고 블록체인 네트워크에 동기화한다. 모든 노드의 스마트 컨트랙트 데이터베이스에 상품 구매자를 등록하고 돈을 판매자에게 전송한다. 그러면 등록된 콘텐츠의 소유권이 구매자에게로 이동한다.
  
==장점==
+
이렇듯 스마트 컨트랙트는 모든 데이터를 서로 공유하기 때문에 특정한 사용자가 스마트 컨트랙트의 실행 결과를 조작하려 해도 조작할 수 없다. 블록체인이 모든 트랜잭션의 무결성을 보장해 주는 방식으로 스마트 컨트랙트의 무결성도 보장할 수 있다. 또한, 조건이 충족된 경우 계약을 자동으로 이행함으로써 계약의 집행 비용 및 분쟁 가능성을 줄일 수 있다. 다만, 일상 언어를 프로그래밍하는 과정에서 계약 작성 단계의 비용이 발생할 있고, 이 과정에서 프로그래밍 오류 문제가 발생할 가능성이 존재한다.
중재해주는 사람이나 기관이 없다보니 돈이나 부동산, 주식, 그밖에 가치있는 그 무엇이라도 교환하면서도 투명하고, 계약 쌍방간에 충돌 없이 거래를 완료할 수 있다. 기존 계약서는 서면으로 돼 있어 계약 조건을 이행하려면 실제 사람이 계약서대로 수행을 해야 하지만 디지털 명령어로 계약서를 작성하게 되면 애초에 합의한 조건에 따라 계약 내용을 자동으로 실행할 수 있다. 디지털로 된 계약서는 조건에 따른 계약 결과가 명확하고 계약 내용을 즉각 이행할 있다. 특히 각자 자산이 연결된 디지털로 양자간에 합의하고 계약서를 작성하고 실행하기로 한다면 계약을 이행하는데 있어 복잡한 절차를 엄청나게 간소화할 수 있다.  
 
  
 +
[[이더리움]]은 기존 시스템과 스마트 컨트랙트의 [[인터페이스]]를 위한 [[라이브러리]]를 제공하고 있다. 이더리움의 다른 기능들과 마찬가지로, 스마트 컨트랙트도 웹서버, 모바일, 일반 PC 어플리케이션 등 기존 시스템과 인터페이스를 통해, 계약 내용의 등록, 집행, 결과 조회 등의 동작을 수행할 수 있다. 이더리움 공식 인터페이스 라이브러리에서 지원하는 언어는 [[자바]](Java), [[자바스크립트]](JavaScript), [[PHP]], [[파이썬]](Python) 등이다. 스마트 계약과 이더리움 공식 [[인터페이스 라이브러리]](interface library) 사이에 상당한 제약 사항이 존재한다.<ref>이더리움 공식 인터페이스 라이브러리를 통칭 [[웹쓰리]](web3)라고 부르지만 지원하는 언어별로 약간씩 명칭이 다르다. 예를 들어 자바는 Web3J, 자바스크립트는 Web3.js, 파이썬은 Web3py라고 부른다.</ref> 예를 들어 [[솔리디티]](Solidity) 언어의 "struct" 타입의 데이터는 [[인터페이스 라이브러리]]를 통해서 주고 받을 수 없다. 만약 이를 시도하면, 솔리디티 언어의 [[컴파일러]]에서 [[에러]] 처리되고 있다. 물론 실험적 ABI 인코더(experimental ABI encoder)라고 하는 실험적인 컴파일 지시자를 사용하면 가능하지만, 권장되지는 않는다.
 +
 +
=== 스마트 컨트랙트 활용 사례 ===
 +
스마트 컨트랙트는 오랜 기간 동안 비즈니스 관행으로 고착화된 여러 제약을 넘어설 수 있는 사고의 파괴를 유도하고 나아가 새로운 가치를 창출할 수 있는 원천이다. 스마트 계약을 통해 [[해킹]] 위험이 낮아지고, [[보안]] 비용이 절감되며, [[중개자]]가 없으므로 [[수수료]]도 절감되고, 데이터 정합성 혹은 무결성 검증 시간이 단축될 수 있다. 또한, 계약의 투명성으로 인해 규제 비용이 절감되고, [[이중지불]] 위험도 사라지며, 정보통신(IT) 시스템 구축 비용이 절감되고, 신사업 서비스로 확장성도 가질 수 있다. 특히, 상호 약속된 규칙에 따른 절차로 작동하며 서로 간의 신뢰가 필요한 서비스 업무 영역에서 가장 큰 적용 효과를 발휘할 것으로 예상되고 있다. 기존 비트코인(Bitcoin) 블록체인에서부터 시작된 통화 및 지급 결제 수단으로서 본원적 영역은 물론이고, 유∙무형 자산을 포괄한 모든 재화에 대한 평가, 가치 관련 모든 거래 등에 빠르게 침투할 수 있다. 일정한 형식의 반복적인 계약이 많은 분야, 원격자 간 계약 체결이 필요한 분야, 제품의 유통 추적이 필요한 분야 등에서 스마트 컨트랙트를 우선적으로 도입하고 있다.
 +
 +
==== 금융 ====
 +
[[비트코인]]이 지불 수단을 중심으로, 중개기관 없이 순수 자금의 이동·전환·처리에 중점을 두었다면, [[이더리움]]은 거래 관련 이해관계자들 간 자금 이동을 포함하여 관련된 계약의 내용을 포괄하는 사전·사후 업무처리 범위로 관련 업무 영역이 확산되었다. 이더리움의 스마트 계약 플랫폼을 이용하면, 거래 당사자 간 스마트 컨트랙트에 따른 자동 실행이 가능하므로, [[피투피]](P2P) 중심 계약 시스템으로 확산될 수 있다. 특히, 일정한 형식의 반복적인 계약이 많은 분야, 예를 들어 보험업에서 특정 조건을 만족시키면 계약 보상금이 지급되도록 스마트 컨트랙트를 작성함으로써, 조건 충족 시 보험금이 자동으로 지불되도록 할 수 있다.
 +
 +
* '''[[보험]]''': 보험업의 특성상 손해보험 보상 업무 하나만을 놓고 보더라도, 가입자, 보험사, 손해사정, 정비업체, 병원, 사법기관 등 다양한 이해관계자들이 존재한다. 다양한 이해관계자들간 확인 및 검증 처리 절차를 위하여, 그동안 각기 상이한 대외 업무 처리를 통한 복잡한 인터페이스 프로세스에 의존할 수 밖에 없어, 전체 업무 처리에 소요되는 시간과 비용이 상대적으로 높을 수밖에 없었다. 하지만 스마트 계약을 도입하면, 보상 프로세스 진행을 위해, 관련자간 위∙변조가 불가능한 동일한 증빙문서에 의존하게 되고, 일정한 조건을 충족하는 경우 자동으로 해당 보상금이 지급되도록 함으로써, 보험 업무를 신속하고 정확하며 투명하게 처리할 수 있다. 이렇게 보험회사, 병원, 환자 간 블록체인 기반 처리가 가능해지면, 공동의 블록체인 시스템 생태계가 조성되어 네트워크 보완과 환자 의료 기록을 보호하면서, 의료비 산출 및 청구 과정에서 투명성과 효율성을 높일 수 있다. 최근 해외에서는 [[알리안츠]] 보험, [[존핸콕]]과 같은 대형 보험사를 중심으로 블록체인의 잠재성을 높이 평가하여 [[스타트업]]과 제휴를 통해 새로운 보험 사업 모델을 개발 중이다.
 +
 +
* '''[[은행]]''': [[삼성SDS㈜]]<!--삼성SDS-->는 2017년 기업형 블록체인 플랫폼인 [[넥스레저]](Nexledger)를 선보인 후, 은행 공동 블록체인이자 은행연합회의 블록체인 공동 인증 서비스인 [[뱅크사인]](BankSign)을 출시했다. 2018년 8월 27일에 개발 완료된 [[뱅크사인]]은 한국의 18개 은행이 모두 각자 서버를 두고 블록체인 네트워크를 운용하는 프로젝트이다. 이를 통해 만약 고객이 한 은행에서 공동 인증서를 발급 받으면 다른 은행에서도 간단한 인증만으로 거래 은행의 모바일 뱅킹 서비스를 편리하게 이용할 수 있다. 매년 공인인증서를 갱신하고 은행마다 각각 별도의 등록과 인증이 필요했던 과거의 번거로운 절차도 필요 없어졌다. 또한 인증서의 유효기간도 3년 이상으로 늘어난다. 증권업계도 증권 거래에 스마트 계약을 도입해 자동화를 이뤄나가고 있다. 미국 [[나스닥]]의 경우 전문 투자자용 장외시장 거래([[OTC]])에 이를 적용했다.
 +
 +
==== 저작권 ====
 +
블록체인 기반의 스마트 계약은 [[저작물]]의 소유권을 관리하고, 저작물 구입 관련 거래 정보를 투명하게 공유하며, [[저작권]]과 같은 지적재산권을 보호하고, 저작물의 불법 복제를 근본적으로 근절하는 데에 기여할 수 있다. 또한 지적재산권에 대한 권리를 스마트 계약으로 등록하여 사용자 대금 지급에 따라 실시간 대금 수령이 이루어지도록 구현하면, 불필요한 중개자가 제거되고 프로세스는 단축되어 보다 효율적인 거래가 가능해질 수 있다.
 +
 +
==== 공유경제 ====
 +
블록체인 기반의 스마트 계약은 공유경제의 한계점 보완과 신뢰 문제를 해결하는 열쇠가 될 수 있다. 스마트 계약 기능은 원격자 간 계약 체결이 필요한 분야인 [[공유경제]] 분야에 활용될 수 있다. 예를 들어, 집 또는 자동차를 공유하기 위해 계약 조건을 정하고 이에 따라 금전 지급 및 서비스 제공이 이루어지도록 스마트 계약을 실행하면, 중개업체를 거치지 않는 사용자 간 직접 거래가 실현될 수 있다. 미국 [[GM]]과 승차공유기업 [[리프트]]는 [[사물인터넷]](IoT) 기반으로 차량을 등록하고, 스마트 계약을 통해 차량 유치권, 이전, 압류 담보관리 등의 추적을 자동화하는 작업을 진행하고 있다.
 +
 +
==== 물류 유통 ====
 +
제품의 유통 추적이 필요한 분야인 전 세계 식품 유통에 관여하는 생산자, 공급자, 운영자, 배급업체, 유통업체, 규제당국, 소비자 등이 모두 블록체인 상에서 식품 오염 이력을 확인하고, 이에 따른 대금 지불이 가능하다. 미국 [[IBM]]은 블록체인 기반 식품 원산지 조회 서비스인 [[푸드트러스트]]<!--푸드 트러스트-->(Food Trust)를 운영 중이다. 식품 원산지 조회 서비스를 운영하게 되면서 오염된 식품이 발견될 경우, 예전에는 어떤 농장에서 생산됐는지 확인하는 데 6일 이상 걸려 모든 식품을 폐기해야 했는데, 블록체인 기술을 적용한 이후 2.2초로 단축되었다. [[삼성SDS㈜]]<!--삼성SDS-->의 경우,  2017년 36개 민·관·연과 함께 해운물류 블록체인 컨소시엄을 구성해 7개월간 기술 검증을 진행했다. 선박을 이용해 물건 하나를 다른 나라로 보내는 일은 생각보다 복잡해서 상대방을 속이는 부당행위가 일어나도 이를 걸러내기 쉽지 않은 구조이다. 이에 따라 해운물류 분야 기업들은 다른 분야의 기업들보다 먼저 신뢰의 기술이라는 [[블록체인]]에 관심이 가지게 되었다. 기존에는 200개 이상 문서가 수작업으로 오가야 했는데, 블록체인 도입으로 문서를 한 번에 동시 공유할 수 있게 되었다. 기존에 5~6일씩 걸리던 작업이 실시간으로 해결돼, 많은 낭비가 사라졌다고 한다.
 +
 +
=== 스마트 컨트랙트의 문제점 ===
 +
스마트 컨트랙트는 블록체인의 활용 범위를 일상생활의 여러 분야로 확장시켜 '블록체인 2.0'이 가능하게 했으나, 다양한 기술적·정책적 문제점을 가지고 있다.
 +
 +
==== 기술적 문제점 ====
 +
* 다른 [[프로그래밍 언어]]로 작성된 프로그램과 달리 스마트 계약 코드는 [[타이머]]나 [[이벤트]](event) 등을 통해서 실행되지 못한다. 예를 들어, 특정 시간에 특정 주소로 자동으로 송금하는 프로세스 등은 구현할 수 없다. 왜냐하면 스마트 컨트랙트는 자기 자신의 [[개인키]](private key)가 없기 때문에 스스로 어떤 트랜잭션도 발생시킬 수 없기 때문이다.
 +
* 원칙적으로 [[랜덤 함수]](random function)를 사용할 수 없다. 블록의 생성 시간으로 랜덤값을 만드는 방법 등이 있기는 하지만, 원칙적인 랜덤값이라고 보기는 힘들다.
 +
* 한번 배포되어 블록으로 생성된 스마트 계약은 수정이 불가능하기 때문에, [[업그레이드]]나 버그 패치, 보안 취약점 수정 등이 어렵다. 최근 들어 업그레이드 가능한 스마트 계약(upgradable smart contract) 작성 방법이 활발히 연구되고 있으나, [[델리게이트콜]](delegatecall) 기능을 이용하여 복수의 스마트 계약을 구성하고, 새로 배포한 스마트 계약을 델리게이트콜<!--델리게이트 콜-->하는 방식이기 때문에 플랫폼 차원에서 해결된 문제라고 보기는 힘들다.
 +
* [[솔리디티]](Solidity) 언어가 비교적 최근에 개발된 언어이고 그렇게 빠르게 업그레이드되지 않고 있어서, 타 개발 언어에서 기본적으로 지원되는 [[타입]]이나 [[연산자]] 또는 [[명령어]]가 부족하다. 예를 들어, 소수점 연산을 아직 지원하지 않고 있는데, 솔리디티 공식 매뉴얼에서도 소수점 연산을 하지 말 것을 권고하고 있다. 또한, 예외 상황이나 에러 처리를 위한 [[제어문]]이나 [[클래스]]가 거의 없다시피하다. 물론 assert문이나 require문이 있기는 하나, 주어진 검사 조건이 참(true)이 아니면 실행 중인 코드를 중지시키는 역할만 하고 있을 뿐, 코드 흐름을 제어하지는 못하고 있다.
 +
* 솔리디티 언어 관련 [[라이브러리]](library)도 상당히 부족하다. 심지어는 이더리움 공식 솔리디티 빌트인(solidity built-in) 라이브러리도 거의 없어서, 기본적인 문자열 연산(문자열 결합, 분할, 내부검색 등)도 지원되지 않는다. 물론 [[서드파티]](3rd party) 비공식 라이브러리는 있지만, 그렇게 활발히 사용되고 있지는 않다.
 +
* 솔리디티 언어는 다양한 [[보안 취약점]]을 가지고 있다. 특히, 솔리디티의 '6대 보안 취약점'을 이용한 [[해킹]] 공격으로 인해 많은 피해가 발생하였다.
 +
 +
==== 정책적 문제점 ====
 +
* '''비싼 [[가스]] 수수료 문제''': 스마트 컨트랙트를 이용하여 특정 기능, 특히 상태값을 변경하려면, 수수료인 [[가스]]<!--개스-->(gas)가 필요하다. 다시 말해, 가스 수수료 때문에 무료로 사용할 수 있는 서비스를 구현하기가 어렵다. 이 문제를 해결하기 위해, [[루니버스]] 같은 스마트 계약 플랫폼은 [[디앱]] 운영업체들의 수수료를 정책적으로 대납해 주기도 한다.
 +
* '''다자간 스마트 계약 문제''': 스마트 컨트랙트는 기본적으로 2명의 사용자 사이의 1:1 계약을 전제로 한다. 만약 1:1 계약이 아니라, N:M 다자간 계약인 경우, 기존의 스마트 컨트랙트 기능을 대폭 수정해야 한다. 만약 계약의 내용이 계약 당사자 모두에게 동일하다면, [[다중서명]]을 통해 다자간 계약을 구현할 수도 있을 것이다. 다중서명은 "M-of-N" 구조를 가지고 있는데, 전체 N명의 사용자 중에서 M명 이상이 서명하는 경우, 해당 스마트 계약이 자동 실행된다. 그러나, 만약 계약 내용이 계약 참여자마다 서로 다른 경우라면, 기존의 다중서명 기능을 이용하여 N:M 다자간 스마트 계약 기능을 구현할 수 없다. 예를 들어, A, B, C라는 3명의 계약 참여자가 존재하는 다자간 계약 상황에서 A:B의 계약 내용과 A:C의 계약 내용이 서로 다른 경우라면, 기존의 스마트 계약 방식으로는 다자간 계약을 구현하기 어렵다. 이 경우 [[상호인증 블록체인]] 방법을 사용하여 다자간 스마트 계약 문제를 해결할 수 있다.
 +
* '''[[오라클 문제]]'''(oracle problem): 스마트 컨트랙트 시스템은 [[오라클 문제]]라는 근본적 문제를 가지고 있다. 오라클 문제란 블록체인 밖에 있는 데이터를 블록체인 안으로 가져올 때 발생하는 문제를 말한다. [[블록체인]]은 [[데이터]]의 위변조가 거의 불가능한 분산 저장 기술이지만, 데이터가 블록체인 안으로 들어와야 블록체인으로 관리할 수 있다. 데이터가 블록체인 안으로 들어오지 않거나, 혹은 블록체인 안으로 들어오는 과정에서 위변조가 발생한다면, 설령 그 데이터가 블록체인으로 관리된다고 할지라도 신뢰하기 어렵다. 이러한 오라클 문제를 해결하기 위해, [[중간자]]를 두거나 [[상호인증 블록체인]] 방법을 사용할 수 있다.
 +
 +
== 비트코인캐시 스크립트 연산 부호 ==
 +
[[파일:우지한.jpg|썸네일|200픽셀|'''[[우지한]]'''(吴忌寒, Wu Jihan)]]
 +
[[파일:비트코인캐시 글자.png|썸네일|300픽셀|왼쪽|'''[[비트코인캐시]]'''(bitcoin cash)]]
 +
 +
2018년 한국에서 열린 후오비 카니발에서 비트메인 대표이자 [[비트코인캐시]](Bitcoin Cash)의 아버지라 불리는 [[우지한]]은 비트코인캐시(BCH)는 의사결정 방식인 합의 알고리즘 변화 없이 다양한 프로젝트를 시도할 수 있는 방안을 도출했다며 [[BCH]]에 내재된 ‘스크립트 연산 부호(OP_RETURN)’을 활용하면 스마트 계약 등 다양한 기능을 자유롭게 구현할 수 있다고 했다. BCH는 최근 업데이트를 통해 40바이트였던 스크립트 연산 부호 용량을 220바이트로 늘려 새로운 프로토콜을 개발하기에 훨씬 쉬운 환경이 됐다고 한다. 스크립트 연산 부호는 블록체인 거래(transaction) 과정에 아무런 영향을 주지 않고, 블록에서 제거할 수 있기 때문에 스마트 계약 등 다양한 기능을 자유롭게 개발 및 구현할 수 있다거 한다.  이어 비트코인의 스크립트 연산 부호 용량이 컸다면 이더리움 창시자인 비탈릭 부테린도 이더리움을 만드는 대신 이 부호를 활용하여 스마트 계약을 만들었을 것이란 언급도 덧붙였다.
 +
 +
==심버스의 심트랜스: 범용거래 처리기==
 +
[[파일:최수혁.jpg|썸네일|200픽셀|'''[[최수혁]]''' [[심버스]] 대표이사]]
 +
[[파일:심버스 글자.png|썸네일|300픽셀|'''[[심버스]]'''(SymVerse)]]
 +
 +
이더리움 블록체인의 주요 기능인 스마트 계약은 당사자 간 특정 조건이 충족되어야만 거래가 발생하므로, '''예약거래'''는 불가능하다. 반면 심버스는 범용거래 처리기로 예약거래와 일반거래를 구분 없이 거래 가능하도록 했다. 심버스 블록체인의 사용자들은 일반거래와 예약거래는 분 단위로 처리시점을 정할 수 있으며, 예약거래의 최장 예약시점은 1년이며, 그 이상 되는 예약거래의 경우 애플리케이션이 연 단위로 갱신하여 처리하거나 스마트 계약을 이용하여야 한다. 예약거래의 네트워크 수수료는 거래의 컴퓨팅 크기를 기준으로 하며 저장비용을 감안하여 기간할인 방식을 적용한다. 이러한 범용거래 처리기 사용으로 그동안 블록체인 접근이 힘들었던 개인과 소상공인 및 인터넷 애플리케이션에 새로운 블록체인을 활용 기회가 제공된다.
 +
 +
심트랜스 범용거래 처리기의 주요 기능은 다음과 같다.
 +
 +
*즉시거래와 예약거래: 범용거래 처리기는 다중블록체인을 이용하여 일반거래와 스마트 계약을 구분하여 처리하고, 일반거래는 거래 처리 시점에 따라 즉시거래와 예약거래로 구분하며 서로 다른 블록체인을 사용한다. 일상생활에서 송금이나 단순지불 거래는 즉시 처리가 요구되지만, 일부 인터넷 쇼핑 등에서는 물건의 배달이 확인되는 시점까지 대금지불을 늦출 수 있다. 또한 매달 월정액을 지불하는 상품과 서비스 구매도 예약거래에 해당한다. 계약서에 따른 대금지불이나 조건이 붙은 거래도 예약 거래를 이용하여 손쉽게 처리할 수 있다.
 +
*일대다 거래: 다수의 수신자에게 즉시 거래하거나 예약거래를 할 수 있다. 다수의 수신인에게 송금을 할 수 있기 때문에 다수의 중개인이 존재하는 거래나 동일한 유형의 다수 거래를 한 번에 처리할 수 있다. 이를 통하여 거래 처리시간 단축, 거래시점 동시화 등을 간단하게 처리한다.
 +
*일반거래와 스마트 계약의 병용: 하나의 함수로 모든 일반거래와 스마트 계약을 동시에 처리할 수 있다. 예를 들어 예약거래와 스마트 계약의 호출은 하나의 함수로 처리할 수 있기 때문에, 선물거래나 옵션거래를 간단하게 처리할 수 있다.
 +
 +
==향후 전망==
 +
블록체인을 이용한 [[스마트계약]]은 계약 이행 및 검증의 과정이 네트워크로 자동화되고, 중재해주는 사람이나 기관이 없다보니 돈이나 부동산, 주식, 그밖에 가치있는 그 무엇이라도 교환하면서도 투명하고, 계약 쌍방간에 충돌 없이 거래를 완료할 수 있다. 기존 계약서는 서면으로 돼 있어 계약 조건을 이행하려면 실제 사람이 계약서대로 수행을 해야 하지만 디지털 명령어로 계약서를 작성하게 되면 명확성과 함께 애초에 합의한 조건에 따라 계약 내용을 자동 수행이 가능하다. 그리고 추가 비용 없이 직접 처리하게 만든 것으로 복잡한 사업상의 계약을 적은 비용과 합의에 따른 신뢰를 바탕으로 안전하게 계약을 실행할 수 있다. 무엇보다 스마트 계약은 그 실행 내용의 무결성과 조작되지 않음을 보장한다. 그렇기 때문에 스마트 컨트랙트 비즈니스는 계속 성장할 것으로 예상된다. 시장조사업체 가트너는(Gartner)는 2022년에는 글로벌 기관 중 25% 이상이 스마트 컨트랙트를 사용할 것으로 예상하고 있다. 캡제미니(Capgemini)는 2020년 초 스마트 컨트랙트가 도입될 것이며 특히 금융업계가 비용 절감과 수요 창출의 효과를 얻을 것라고 예측하고 있다. 즉, 투자은행의 경우, 결제 주기가 20일에서 6~12일로 단축되어 5~6% 추가 수요를 발생시킴으로써 매년 20~70억 달러의 추가 수입 발생을 예상하고 있고, 소비자 금융의 경우, 주택 담보 대출의 처리 비용을 낮춰 매년 30~110억 달러 비용 절감되고, 보험의 경우, 개인용 자동차 보험에서만 연간 210억 달러 비용 절감이 예상되고 있다. 한국에서도 지난해부터 스마트 콘트랙트를 활용한 각종 정부사업이 추진되고 있다. 중앙선거관리위원회는 블록체인을 접목한 온라인 전자투표 시스템을, 농림축산식품부는 블록체인 기반의 축산물 이력관리시스템을 준비 중이다. 국토교통부는 공인중개사 등과 연계해 부동산 거래를 원스톱으로 제공하는 플랫폼을 시범적으로 구축하고 있다.
 +
 +
== 동영상 ==
 +
<youtube>rYAP9W1vIeQ</youtube>
  
 
{{각주}}
 
{{각주}}
46번째 줄: 120번째 줄:
 
* 이정훈 기자, 〈[http://www.edaily.co.kr/news/news_detail.asp?newsId=01361206619076408&mediaCodeNo=257&OutLnkChk=Y (이정훈의 암호화폐 읽기)<2>`빅 브라더` 가라…혁신 넘어선 혁명]〉, 《이데일리》, 2018-01-10
 
* 이정훈 기자, 〈[http://www.edaily.co.kr/news/news_detail.asp?newsId=01361206619076408&mediaCodeNo=257&OutLnkChk=Y (이정훈의 암호화폐 읽기)<2>`빅 브라더` 가라…혁신 넘어선 혁명]〉, 《이데일리》, 2018-01-10
 
* 더루프, 〈[https://blog.theloop.co.kr/2017/04/04/%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99%ED%8A%B8smart-contract-%EA%B0%9C%EC%9A%94-2/ 스마트 컨트랙트 개요(Smart Contract)-2]〉, 《더루프 블로그》, 2017-04-04
 
* 더루프, 〈[https://blog.theloop.co.kr/2017/04/04/%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99%ED%8A%B8smart-contract-%EA%B0%9C%EC%9A%94-2/ 스마트 컨트랙트 개요(Smart Contract)-2]〉, 《더루프 블로그》, 2017-04-04
 +
* Dan Swinhoe, 〈[http://www.itworld.co.kr/news/111130 블록체인의 스마트 컨트랙트란 무엇인가, 그리고 보안]〉, 《IT WORLD》, 2018-10-17
 +
* 박소영, 〈[https://www.kistep.re.kr/getFileDown.jsp?fileIdx=9791&contentIdx=12492&tbIdx=BRD_BOARD 생활 속에 스며드는 스마트 컨트랙트 현황 및 준비과제]〉, 《한국과학기술기획평가원》, 2018-40(통권 제258호)
 +
* 김종협, 〈[http://a.to/19autpr 블록체인 기반 스마트 컨트랙트 활용 사례 연구]〉, 《전자금융과 금융보안》, 2017-07(제9호)
 +
* 머니넷스탭, 〈[https://www.moneynet.co.kr/board_lecture/105908 스마트 컨트랙트(Smart Contract)의 개념 및 특징]〉, 《머니넷》, 2017-09-23
 +
* 야옹메롱, 〈[https://blog.naver.com/mage7th/221334819568 스마트 컨트랙트에 대한 개요 및 설명]〉, 《네이버 블로그》, 2018-08-08
  
 
== 같이 보기 ==
 
== 같이 보기 ==
 +
{{다단3|
 
* [[블록체인]]
 
* [[블록체인]]
 +
* [[UTXO]]
 +
* [[솔리디티]]
 +
* [[디앱]]
 +
* [[취약점]]
 +
* [[트러스트 컨트랙트]]
 +
* [[오라클 문제]]
 +
* [[상호인증 블록체인]]
 +
|
 
* [[암호화폐]]
 
* [[암호화폐]]
 +
* [[비트골드]]
 
* [[비트코인]]
 
* [[비트코인]]
 
* [[이더리움]]
 
* [[이더리움]]
 +
* [[비트코인캐시]]
 +
* [[심버스]]
 +
|
 
* [[닉 재보]]
 
* [[닉 재보]]
* [[비트골드]]
+
* [[사토시 나카모토]]
 
* [[비탈릭 부테린]]
 
* [[비탈릭 부테린]]
* [[오라클 문제]]
+
* [[우지한]]
 +
* [[최수혁]]
 +
}}
  
{{블록체인 기술|토막글}}
+
{{블록체인 기술|검토 필요}}

2023년 3월 20일 (월) 14:13 기준 최신판

스마트 계약 또는 스마트 컨트랙트(smart contract)는 계약 당사자가 사전에 협의한 내용을 미리 프로그래밍하여 전자 계약서 문서 안에 넣어두고, 이 계약 조건이 모두 충족되면 자동으로 계약 내용이 실행되도록 하는 시스템이다. 기존의 블록체인 1.0 기술이 '과거에 일어났던 일'을 기록한다면, 스마트 계약 기능을 구현한 블록체인 2.0 기술은 '미래에 일어날 일'을 미리 기록해 둘 수 있다.[1]

개요[편집]

스마트 계약은 중간에 제3의 보증기관을 끼우지 않고 개인간(P2P)에 원하는 계약을 체결할 수 있도록 해주는 디지털 전자계약 기능이다. 스마트 계약은 1994년 닉 재보(Nick Szabo)가 처음 제안하였으나 실제로 구현하지는 못하였다. 2013년 당시 19세의 천재 프로그래머였던 비탈릭 부테린(Vitalik Buterin)은 스마트 계약 플랫폼인 이더리움(Ethereum)을 개발할 것을 제안하고[2], 2015년 7월 30일 이더리움 개발에 성공하여 실제 서비스를 시작했다. 솔리디티(solidity)라는 프로그래밍 언어를 사용하여, 계약 기간, 금액, 조건 등을 미리 코딩해 두면, 부동산 거래, 중고 자동차 거래, 무역 거래 등 어떠한 종류의 계약도 자동 실행되도록 만들 수 있다.[1]

기존의 비트코인이 블록체인 기술을 활용하여 가치의 저장과 전달이 가능한 암호화폐를 만들었다면, 이더리움은 한 단계 더 나아가 블록체인 기술을 활용하여 인간이 상상할 수 있는 모든 종류의 계약을 자동으로 실행할 수 있는 스마트 계약 플랫폼을 개발했다. 비탈릭 부테린이 이더리움을 통해 스마트 계약 기능을 구현함으로써, 블록체인 기술을 비트코인과 같은 암호화폐에만 사용하는 것이 아니라, 위변조 방지가 필요한 각종 계약서 작성 등에 활용할 수 있게 되었다. 이런 점에서 기존의 비트코인을 '블록체인 1.0'이라고 부르고, 스마트 계약 기능을 구현한 이더리움을 '블록체인 2.0'이라고 부른다.

닉 재보의 비트골드[편집]

닉 재보(Nick Szabo)

스마트 계약은 1994년 닉 재보(Nick Szabo)[3]가 처음 고안한 개념이다. 닉 재보는 스마트 계약을 "계약에 필요한 요소를 코드를 통해 스스로 실행되게 하는 전산화된 거래 약속"이라고 정의했다. 그는 스마트 계약이 자동판매기와 비슷하다고 말했다.[4] 자동판매기에 미리 정해진 액수 이상의 돈을 투입하면, 자동으로 원하는 상품을 구매할 수 있듯이, 스마트 계약을 통해 일정한 조건이 충족되면 자동으로 계약이 실행되도록 한다는 것이다.

1996년 닉 재보는 스마트 계약 설계의 기본 원칙으로 관측 가능성, 검증 가능성, 사생활 보호, 강제 가능성 등 4가지를 제시했다.

  • 관측 가능성(observability): 스마트 계약은 서로의 계약 이행 가능성을 관찰하거나 성과를 입증할 수 있어야 한다.
  • 검증 가능성(verifiability): 계약을 이행 또는 위반했을 때 이를 알 수 있어야 한다.
  • 사생활 보호(privacy): 계약 내용은 계약에 관련된 당사자들에게만 알려져야 한다.
  • 강제 가능성(enforceability): 계약을 강제로 이행할 수 있는 구속력이 있어야 한다. 단, 강제 가능성은 최소화해야 한다.

닉 재보는 스마트 계약을 위해 비트골드(bit gold)라는 디지털 화폐를 고안했지만, 당시의 기술적 한계로 인해 실제로 개발되거나 사용되지는 못하였다.[5] 하지만 닉 재보가 고안한 스마트 컨트랙트 개념은 이후 비트코인 스크립트로 이어졌고, 2015년 7월 30일 비탈릭 부테린(Vitalik Buterin)에 의해 이더리움(Ethereum)이 개발됨으로써 실제로 구현되었다.

비트코인 스크립트[편집]

비트코인(bitcoin)

2009년 1월 3일 사토시 나카모토(Satoshi Nakamoto)가 비트코인(Bitcoin)을 개발하고, 비트코인의 신뢰 보장 기술인 블록체인이 등장하자 스마트 컨트랙트가 다시 관심을 받으며 부상하기 시작했다. 기존 디지털 프로토콜의 낮은 신뢰성과 복제 및 위변조 문제로 인해 실제 구현되기 어려웠던 스마트 계약은 블록체인 기술을 통해 무결성을 보장하고 조작방지가 가능한 블록체인 기반 스마트 컨트랙트로 개발될 수 있게 되었다. 비트코인 프로토콜도 낮은 수준의 '스마트 계약' 기능을 가지고 있다. 기술적인 관점에서 봤을 때, 비트코인의 장부는 하나의 상태변환 시스템(state transition system)으로 생각해볼 수 있다. 이 시스템은 현재 모든 비트코인의 소유권 현황으로 이루어진 하나의 상태(state)와 이 현재 상태 및 트랜잭션을 받아서 그 결과로서 새로운 상태를 출력해주는 상태변환함수(state transition function)로 구성되어 있다.

최초의 블록체인 기반 스마트 컨트랙트는 바로 비트코인 스크립트이다. 비트코인의 결제 시스템인 UTXO(사용되지 않은 트랜잭션 출력)은 간단한 스택 기반 프로그래밍 언어로 표현된 복잡한 스크립트에 의해서도 작동한다.[2] UTXO(유티엑스오)는 'Unspent Transaction Outputs'의 약자로서, '미사용 트랜잭션 출력값' 또는 '미지출 거래 출력'이라고 한다. 비트코인이더리움의 '계좌 잔고 모델'(account balance model)과 달리 계정이나 잔고가 없고, 블록체인에 기록된 "소비되지 않은 출력값"을 통해 거래의 유효성을 검사하여 코인의 존재 여부를 확인한다.

비트코인 트랜잭션에 원시 언어오피코드(OPCODE)로 스크립트를 작성해서 보내면, 조건에 따라 자동으로 거래를 수행할 수 있다. 하지만 비트코인 스크립트는 튜링 불완전 언어를 사용하고, 반복문(loop)은 사용할 수 없고, 다양한 상태를 표현할 수 없으며, 비트코인 잔고 외의 다른 정보를 관리할 수 없다는 한계가 있다. 만약 비트코인 스크립트에서 반복문을 허용할 경우, 스크립트 조건 때문에 코드 실행을 0부터 시작하는 프로그램 카운터를 하나씩 증가시키면서 반복적으로 연산을 수행하도록 구성된 무한루프가 발생하여 네트워크 전체가 멈출 수 있기 때문이다.[6]

이더리움 스마트 컨트랙트[편집]

비탈릭 부테린(Vitalik Buterin) 2016년
이더리움(Ethereum)

스마트 컨트랙트 플랫폼[편집]

이더리움(Ethereum)은 비트코인 스크립트 시스템의 튜링 불완전성이라는 한계를 극복하고자 나온 스마트 컨트랙트 플랫폼(smart contract platform)이다. 비탈릭 부테린(Vitalik Buterin)이 창시한 이더리움 블록체인의 경우, 블록데이터뿐만 아니라 비트코인 스크립트 시스템의 한계인 조건문(if), 반복문(loop) 등의 실행 코드를 포함시켜 로직의 실행을 자동화할 수 있다. 스마트 컨트랙트를 구현하기 위한 컨트랙트 코드(contract code)는 이더리움 가상머신(EVM; Ethereum Virtual Machine)이라는 독립된 실행 환경에서 실행된다. 여기에 스마트 컨트랙트를 실행할 때마다 수수료가스(gas)를 발생시키고 네트워크상에 수수료의 한계를 설정하여 무한루프를 막았다. 무한히 반복되는 조건을 만들어 스마트 컨트랙트를 실행시키면 중간에 수수료 한계점에 도달하게 되는데, 이때 중단된다. 이더리움에서 스마트 컨트랙트는 솔리디티(Solidity) 언어로 프로그래밍된다. 솔리디티 언어로 프로그래밍된 스마트 컨트랙트는 컴파일러(solc)에 의해 바이트코드(bytecode)로 컴파일되고, 컴파일된 바이트코드는 블록에 포함되어, 이더리움 가상머신(EVM)에 의해 실행된다. 이더리움 가상머신(EVM)은 이더리움 스마트 컨트랙트의 바이트코드를 실행하는 32 바이트 스택 기반의 실행환경이다.

이더리움이 제공하려는 것은 튜링 완전(turing-complete) 프로그래밍 언어가 심어진 블록체인이다. 이 프로그래밍 언어는 코딩된 규칙에 따라 '어떤 상태'를 '다른 상태'로 변환시키는 기능(arbitrary state transition functions)이 포함된 계약을 사용자들이 직접 작성할 수 있게 함으로써, 인간이 상상할 수 있는 모든 종류의 계약을 스마트 컨트랙트로 만들 수 있다. 이를 통해 모든 계약이 자동으로 실행할 수 있고, 이를 위한 다양한 분산형 애플리케이션인 디앱(DApp)도 만들 수 있다.[2] 누구든지 솔리디티 언어를 사용해 스마트 컨트랙트와 디앱을 작성하고 소유권에 대한 임의의 규칙, 트랜잭션 형식(transaction format), 상태변환함수(state transition function) 등을 생성할 수 있다.

초창기 이더리움 스마트 컨트랙트에서 가장 이슈가 되었던 예는 다오(DAO; Decentralized Autonomous Organization)라고 불리는 탈중앙화된 자율 조직이다. 다오(DAO)는 스마트 컨트랙트 기술로 구현된 조직으로 중앙의 운영 주체가 없이 개인들이 자율적으로 제안 및 투표를 하여 다수결로 의결하여 운영되는 조직이다. 회사의 의결권을 다오토큰(DAO Token)으로 행사할 수 있도록 크라우드 펀딩을 통해 이더리움으로 다오토큰을 살 수 있게 판매하였다. 이 과정에서 모인 약 2,000억원 가량의 이더리움을 어떻게 사용할지 다오토큰을 기반으로 투표할 수 있도록 했다.

스마트 컨트랙트 작동 원리[편집]

블록체인 기반 스마트 컨트랙트는 기본적으로 모든 트랜잭션 로그가 저장된 블록체인 데이터베이스와 스마트 컨트랙트의 상태를 저장하는 데이터베이스 두 가지가 존재한다. 여기서의 스마트 컨트랙트는 상태를 변경할 수 있는 애플리케이션이라고 할 수 있고, 스마트 컨트랙트의 상태는 해당 애플리케이션에서 사용하는 변수라고 할 수 있으며, 이를 변경하기 위한 입력값은 트랜잭션에 포함되어 있다. 스마트 컨트랙트는 두 가지 인터페이스를 공개하고 있는데, 하나는 트랜잭션(transaction)이고, 하나는 쿼리(query)이다. 트랜잭션을 통한 인터페이스는 트랜잭션 데이터베이스에 저장되고, 스마트 컨트랙트의 상태를 변경시키는 접근방법이다. 쿼리는 트랜잭션 데이터베이스에 기록이 남지 않으면서 스마트 컨트랙트의 상태를 읽는 작업이다. 트랜잭션은 쓰기, 삭제, 수정을 실행하고, 쿼리는 읽기를 통한 조회만을 실행한다.

예를 들어, '상품 거래'는 스마트 컨트랙트 시스템에서 다음과 같이 작동한다.

  • 기록 저장: 판매자가 상품을 올리겠다는 내용을 코딩하여 트랜잭션을 만든 후 블록체인에 전송한다. 상품 등록 트랜잭션 발생 시, 네트워크의 모든 노드는 상품 등록 트랜잭션을 공유하고 블록을 생성한 후 블록을 브로드캐스팅한다. 블록을 전달받은 각 노드는 해당 블록을 자신의 블록체인 맨 끝에 추가하고, 해당 블록에 저장되어 있는 트랜잭션을 적용시켜 자신의 스마트 컨트랙트 데이터베이스를 동기화한다. 이러한 과정을 통해 모든 블록체인의 노드들이 스마트 컨트랙트 상태 데이터베이스를 공유하게 된다.
  • 상품 조회: 구매자는 블록체인 네트워크에서 상품를 조회한다. 스마트 컨트랙트에 쓰는 것는 것은 트랜잭션을 발생시키지만, 이미 저장되어 있던 값을 읽어 오는 것은 트랙잭션을 발생시키지 않는다. 블록체인의 어떤 데이터도 변경시킬 필요 없이 스마트 컨트랙트 데이터베이스 내 저장된 상태 값만 조회하면 되기 때문에 쿼리 정보는 블록체인에 동기화할 필요 없고, 블록 동기화 타이밍에 상관없이 바로 응답할 수 있다.
  • 계약 이행: 구매자가 상품 구매 트랜잭션을 보내면 트랜잭션을 공유하고 블록체인 네트워크에 동기화한다. 모든 노드의 스마트 컨트랙트 데이터베이스에 상품 구매자를 등록하고 돈을 판매자에게 전송한다. 그러면 등록된 콘텐츠의 소유권이 구매자에게로 이동한다.

이렇듯 스마트 컨트랙트는 모든 데이터를 서로 공유하기 때문에 특정한 사용자가 스마트 컨트랙트의 실행 결과를 조작하려 해도 조작할 수 없다. 블록체인이 모든 트랜잭션의 무결성을 보장해 주는 방식으로 스마트 컨트랙트의 무결성도 보장할 수 있다. 또한, 조건이 충족된 경우 계약을 자동으로 이행함으로써 계약의 집행 비용 및 분쟁 가능성을 줄일 수 있다. 다만, 일상 언어를 프로그래밍하는 과정에서 계약 작성 단계의 비용이 발생할 수 있고, 이 과정에서 프로그래밍 오류 문제가 발생할 가능성이 존재한다.

이더리움은 기존 시스템과 스마트 컨트랙트의 인터페이스를 위한 라이브러리를 제공하고 있다. 이더리움의 다른 기능들과 마찬가지로, 스마트 컨트랙트도 웹서버, 모바일, 일반 PC 어플리케이션 등 기존 시스템과 인터페이스를 통해, 계약 내용의 등록, 집행, 결과 조회 등의 동작을 수행할 수 있다. 이더리움 공식 인터페이스 라이브러리에서 지원하는 언어는 자바(Java), 자바스크립트(JavaScript), PHP, 파이썬(Python) 등이다. 스마트 계약과 이더리움 공식 인터페이스 라이브러리(interface library) 사이에 상당한 제약 사항이 존재한다.[7] 예를 들어 솔리디티(Solidity) 언어의 "struct" 타입의 데이터는 인터페이스 라이브러리를 통해서 주고 받을 수 없다. 만약 이를 시도하면, 솔리디티 언어의 컴파일러에서 에러 처리되고 있다. 물론 실험적 ABI 인코더(experimental ABI encoder)라고 하는 실험적인 컴파일 지시자를 사용하면 가능하지만, 권장되지는 않는다.

스마트 컨트랙트 활용 사례[편집]

스마트 컨트랙트는 오랜 기간 동안 비즈니스 관행으로 고착화된 여러 제약을 넘어설 수 있는 사고의 파괴를 유도하고 나아가 새로운 가치를 창출할 수 있는 원천이다. 스마트 계약을 통해 해킹 위험이 낮아지고, 보안 비용이 절감되며, 중개자가 없으므로 수수료도 절감되고, 데이터 정합성 혹은 무결성 검증 시간이 단축될 수 있다. 또한, 계약의 투명성으로 인해 규제 비용이 절감되고, 이중지불 위험도 사라지며, 정보통신(IT) 시스템 구축 비용이 절감되고, 신사업 서비스로 확장성도 가질 수 있다. 특히, 상호 약속된 규칙에 따른 절차로 작동하며 서로 간의 신뢰가 필요한 서비스 업무 영역에서 가장 큰 적용 효과를 발휘할 것으로 예상되고 있다. 기존 비트코인(Bitcoin) 블록체인에서부터 시작된 통화 및 지급 결제 수단으로서 본원적 영역은 물론이고, 유∙무형 자산을 포괄한 모든 재화에 대한 평가, 가치 관련 모든 거래 등에 빠르게 침투할 수 있다. 일정한 형식의 반복적인 계약이 많은 분야, 원격자 간 계약 체결이 필요한 분야, 제품의 유통 추적이 필요한 분야 등에서 스마트 컨트랙트를 우선적으로 도입하고 있다.

금융[편집]

비트코인이 지불 수단을 중심으로, 중개기관 없이 순수 자금의 이동·전환·처리에 중점을 두었다면, 이더리움은 거래 관련 이해관계자들 간 자금 이동을 포함하여 관련된 계약의 내용을 포괄하는 사전·사후 업무처리 범위로 관련 업무 영역이 확산되었다. 이더리움의 스마트 계약 플랫폼을 이용하면, 거래 당사자 간 스마트 컨트랙트에 따른 자동 실행이 가능하므로, 피투피(P2P) 중심 계약 시스템으로 확산될 수 있다. 특히, 일정한 형식의 반복적인 계약이 많은 분야, 예를 들어 보험업에서 특정 조건을 만족시키면 계약 보상금이 지급되도록 스마트 컨트랙트를 작성함으로써, 조건 충족 시 보험금이 자동으로 지불되도록 할 수 있다.

  • 보험: 보험업의 특성상 손해보험 보상 업무 하나만을 놓고 보더라도, 가입자, 보험사, 손해사정, 정비업체, 병원, 사법기관 등 다양한 이해관계자들이 존재한다. 다양한 이해관계자들간 확인 및 검증 처리 절차를 위하여, 그동안 각기 상이한 대외 업무 처리를 통한 복잡한 인터페이스 프로세스에 의존할 수 밖에 없어, 전체 업무 처리에 소요되는 시간과 비용이 상대적으로 높을 수밖에 없었다. 하지만 스마트 계약을 도입하면, 보상 프로세스 진행을 위해, 관련자간 위∙변조가 불가능한 동일한 증빙문서에 의존하게 되고, 일정한 조건을 충족하는 경우 자동으로 해당 보상금이 지급되도록 함으로써, 보험 업무를 신속하고 정확하며 투명하게 처리할 수 있다. 이렇게 보험회사, 병원, 환자 간 블록체인 기반 처리가 가능해지면, 공동의 블록체인 시스템 생태계가 조성되어 네트워크 보완과 환자 의료 기록을 보호하면서, 의료비 산출 및 청구 과정에서 투명성과 효율성을 높일 수 있다. 최근 해외에서는 알리안츠 보험, 존핸콕과 같은 대형 보험사를 중심으로 블록체인의 잠재성을 높이 평가하여 스타트업과 제휴를 통해 새로운 보험 사업 모델을 개발 중이다.
  • 은행: 삼성SDS㈜는 2017년 기업형 블록체인 플랫폼인 넥스레저(Nexledger)를 선보인 후, 은행 공동 블록체인이자 은행연합회의 블록체인 공동 인증 서비스인 뱅크사인(BankSign)을 출시했다. 2018년 8월 27일에 개발 완료된 뱅크사인은 한국의 18개 은행이 모두 각자 서버를 두고 블록체인 네트워크를 운용하는 프로젝트이다. 이를 통해 만약 고객이 한 은행에서 공동 인증서를 발급 받으면 다른 은행에서도 간단한 인증만으로 거래 은행의 모바일 뱅킹 서비스를 편리하게 이용할 수 있다. 매년 공인인증서를 갱신하고 은행마다 각각 별도의 등록과 인증이 필요했던 과거의 번거로운 절차도 필요 없어졌다. 또한 인증서의 유효기간도 3년 이상으로 늘어난다. 증권업계도 증권 거래에 스마트 계약을 도입해 자동화를 이뤄나가고 있다. 미국 나스닥의 경우 전문 투자자용 장외시장 거래(OTC)에 이를 적용했다.

저작권[편집]

블록체인 기반의 스마트 계약은 저작물의 소유권을 관리하고, 저작물 구입 관련 거래 정보를 투명하게 공유하며, 저작권과 같은 지적재산권을 보호하고, 저작물의 불법 복제를 근본적으로 근절하는 데에 기여할 수 있다. 또한 지적재산권에 대한 권리를 스마트 계약으로 등록하여 사용자 대금 지급에 따라 실시간 대금 수령이 이루어지도록 구현하면, 불필요한 중개자가 제거되고 프로세스는 단축되어 보다 효율적인 거래가 가능해질 수 있다.

공유경제[편집]

블록체인 기반의 스마트 계약은 공유경제의 한계점 보완과 신뢰 문제를 해결하는 열쇠가 될 수 있다. 스마트 계약 기능은 원격자 간 계약 체결이 필요한 분야인 공유경제 분야에 활용될 수 있다. 예를 들어, 집 또는 자동차를 공유하기 위해 계약 조건을 정하고 이에 따라 금전 지급 및 서비스 제공이 이루어지도록 스마트 계약을 실행하면, 중개업체를 거치지 않는 사용자 간 직접 거래가 실현될 수 있다. 미국 GM과 승차공유기업 리프트사물인터넷(IoT) 기반으로 차량을 등록하고, 스마트 계약을 통해 차량 유치권, 이전, 압류 담보관리 등의 추적을 자동화하는 작업을 진행하고 있다.

물류 유통[편집]

제품의 유통 추적이 필요한 분야인 전 세계 식품 유통에 관여하는 생산자, 공급자, 운영자, 배급업체, 유통업체, 규제당국, 소비자 등이 모두 블록체인 상에서 식품 오염 이력을 확인하고, 이에 따른 대금 지불이 가능하다. 미국 IBM은 블록체인 기반 식품 원산지 조회 서비스인 푸드트러스트(Food Trust)를 운영 중이다. 식품 원산지 조회 서비스를 운영하게 되면서 오염된 식품이 발견될 경우, 예전에는 어떤 농장에서 생산됐는지 확인하는 데 6일 이상 걸려 모든 식품을 폐기해야 했는데, 블록체인 기술을 적용한 이후 2.2초로 단축되었다. 삼성SDS㈜의 경우, 2017년 36개 민·관·연과 함께 해운물류 블록체인 컨소시엄을 구성해 7개월간 기술 검증을 진행했다. 선박을 이용해 물건 하나를 다른 나라로 보내는 일은 생각보다 복잡해서 상대방을 속이는 부당행위가 일어나도 이를 걸러내기 쉽지 않은 구조이다. 이에 따라 해운물류 분야 기업들은 다른 분야의 기업들보다 먼저 신뢰의 기술이라는 블록체인에 관심이 가지게 되었다. 기존에는 200개 이상 문서가 수작업으로 오가야 했는데, 블록체인 도입으로 문서를 한 번에 동시 공유할 수 있게 되었다. 기존에 5~6일씩 걸리던 작업이 실시간으로 해결돼, 많은 낭비가 사라졌다고 한다.

스마트 컨트랙트의 문제점[편집]

스마트 컨트랙트는 블록체인의 활용 범위를 일상생활의 여러 분야로 확장시켜 '블록체인 2.0'이 가능하게 했으나, 다양한 기술적·정책적 문제점을 가지고 있다.

기술적 문제점[편집]

  • 다른 프로그래밍 언어로 작성된 프로그램과 달리 스마트 계약 코드는 타이머이벤트(event) 등을 통해서 실행되지 못한다. 예를 들어, 특정 시간에 특정 주소로 자동으로 송금하는 프로세스 등은 구현할 수 없다. 왜냐하면 스마트 컨트랙트는 자기 자신의 개인키(private key)가 없기 때문에 스스로 어떤 트랜잭션도 발생시킬 수 없기 때문이다.
  • 원칙적으로 랜덤 함수(random function)를 사용할 수 없다. 블록의 생성 시간으로 랜덤값을 만드는 방법 등이 있기는 하지만, 원칙적인 랜덤값이라고 보기는 힘들다.
  • 한번 배포되어 블록으로 생성된 스마트 계약은 수정이 불가능하기 때문에, 업그레이드나 버그 패치, 보안 취약점 수정 등이 어렵다. 최근 들어 업그레이드 가능한 스마트 계약(upgradable smart contract) 작성 방법이 활발히 연구되고 있으나, 델리게이트콜(delegatecall) 기능을 이용하여 복수의 스마트 계약을 구성하고, 새로 배포한 스마트 계약을 델리게이트콜하는 방식이기 때문에 플랫폼 차원에서 해결된 문제라고 보기는 힘들다.
  • 솔리디티(Solidity) 언어가 비교적 최근에 개발된 언어이고 그렇게 빠르게 업그레이드되지 않고 있어서, 타 개발 언어에서 기본적으로 지원되는 타입이나 연산자 또는 명령어가 부족하다. 예를 들어, 소수점 연산을 아직 지원하지 않고 있는데, 솔리디티 공식 매뉴얼에서도 소수점 연산을 하지 말 것을 권고하고 있다. 또한, 예외 상황이나 에러 처리를 위한 제어문이나 클래스가 거의 없다시피하다. 물론 assert문이나 require문이 있기는 하나, 주어진 검사 조건이 참(true)이 아니면 실행 중인 코드를 중지시키는 역할만 하고 있을 뿐, 코드 흐름을 제어하지는 못하고 있다.
  • 솔리디티 언어 관련 라이브러리(library)도 상당히 부족하다. 심지어는 이더리움 공식 솔리디티 빌트인(solidity built-in) 라이브러리도 거의 없어서, 기본적인 문자열 연산(문자열 결합, 분할, 내부검색 등)도 지원되지 않는다. 물론 서드파티(3rd party) 비공식 라이브러리는 있지만, 그렇게 활발히 사용되고 있지는 않다.
  • 솔리디티 언어는 다양한 보안 취약점을 가지고 있다. 특히, 솔리디티의 '6대 보안 취약점'을 이용한 해킹 공격으로 인해 많은 피해가 발생하였다.

정책적 문제점[편집]

  • 비싼 가스 수수료 문제: 스마트 컨트랙트를 이용하여 특정 기능, 특히 상태값을 변경하려면, 수수료인 가스(gas)가 필요하다. 다시 말해, 가스 수수료 때문에 무료로 사용할 수 있는 서비스를 구현하기가 어렵다. 이 문제를 해결하기 위해, 루니버스 같은 스마트 계약 플랫폼은 디앱 운영업체들의 수수료를 정책적으로 대납해 주기도 한다.
  • 다자간 스마트 계약 문제: 스마트 컨트랙트는 기본적으로 2명의 사용자 사이의 1:1 계약을 전제로 한다. 만약 1:1 계약이 아니라, N:M 다자간 계약인 경우, 기존의 스마트 컨트랙트 기능을 대폭 수정해야 한다. 만약 계약의 내용이 계약 당사자 모두에게 동일하다면, 다중서명을 통해 다자간 계약을 구현할 수도 있을 것이다. 다중서명은 "M-of-N" 구조를 가지고 있는데, 전체 N명의 사용자 중에서 M명 이상이 서명하는 경우, 해당 스마트 계약이 자동 실행된다. 그러나, 만약 계약 내용이 계약 참여자마다 서로 다른 경우라면, 기존의 다중서명 기능을 이용하여 N:M 다자간 스마트 계약 기능을 구현할 수 없다. 예를 들어, A, B, C라는 3명의 계약 참여자가 존재하는 다자간 계약 상황에서 A:B의 계약 내용과 A:C의 계약 내용이 서로 다른 경우라면, 기존의 스마트 계약 방식으로는 다자간 계약을 구현하기 어렵다. 이 경우 상호인증 블록체인 방법을 사용하여 다자간 스마트 계약 문제를 해결할 수 있다.
  • 오라클 문제(oracle problem): 스마트 컨트랙트 시스템은 오라클 문제라는 근본적 문제를 가지고 있다. 오라클 문제란 블록체인 밖에 있는 데이터를 블록체인 안으로 가져올 때 발생하는 문제를 말한다. 블록체인데이터의 위변조가 거의 불가능한 분산 저장 기술이지만, 데이터가 블록체인 안으로 들어와야 블록체인으로 관리할 수 있다. 데이터가 블록체인 안으로 들어오지 않거나, 혹은 블록체인 안으로 들어오는 과정에서 위변조가 발생한다면, 설령 그 데이터가 블록체인으로 관리된다고 할지라도 신뢰하기 어렵다. 이러한 오라클 문제를 해결하기 위해, 중간자를 두거나 상호인증 블록체인 방법을 사용할 수 있다.

비트코인캐시 스크립트 연산 부호[편집]

우지한(吴忌寒, Wu Jihan)
비트코인캐시(bitcoin cash)

2018년 한국에서 열린 후오비 카니발에서 비트메인 대표이자 비트코인캐시(Bitcoin Cash)의 아버지라 불리는 우지한은 비트코인캐시(BCH)는 의사결정 방식인 합의 알고리즘 변화 없이 다양한 프로젝트를 시도할 수 있는 방안을 도출했다며 BCH에 내재된 ‘스크립트 연산 부호(OP_RETURN)’을 활용하면 스마트 계약 등 다양한 기능을 자유롭게 구현할 수 있다고 했다. BCH는 최근 업데이트를 통해 40바이트였던 스크립트 연산 부호 용량을 220바이트로 늘려 새로운 프로토콜을 개발하기에 훨씬 쉬운 환경이 됐다고 한다. 스크립트 연산 부호는 블록체인 거래(transaction) 과정에 아무런 영향을 주지 않고, 블록에서 제거할 수 있기 때문에 스마트 계약 등 다양한 기능을 자유롭게 개발 및 구현할 수 있다거 한다. 이어 비트코인의 스크립트 연산 부호 용량이 컸다면 이더리움 창시자인 비탈릭 부테린도 이더리움을 만드는 대신 이 부호를 활용하여 스마트 계약을 만들었을 것이란 언급도 덧붙였다.

심버스의 심트랜스: 범용거래 처리기[편집]

최수혁 심버스 대표이사
심버스(SymVerse)

이더리움 블록체인의 주요 기능인 스마트 계약은 당사자 간 특정 조건이 충족되어야만 거래가 발생하므로, 예약거래는 불가능하다. 반면 심버스는 범용거래 처리기로 예약거래와 일반거래를 구분 없이 거래 가능하도록 했다. 심버스 블록체인의 사용자들은 일반거래와 예약거래는 분 단위로 처리시점을 정할 수 있으며, 예약거래의 최장 예약시점은 1년이며, 그 이상 되는 예약거래의 경우 애플리케이션이 연 단위로 갱신하여 처리하거나 스마트 계약을 이용하여야 한다. 예약거래의 네트워크 수수료는 거래의 컴퓨팅 크기를 기준으로 하며 저장비용을 감안하여 기간할인 방식을 적용한다. 이러한 범용거래 처리기 사용으로 그동안 블록체인 접근이 힘들었던 개인과 소상공인 및 인터넷 애플리케이션에 새로운 블록체인을 활용 기회가 제공된다.

심트랜스 범용거래 처리기의 주요 기능은 다음과 같다.

  • 즉시거래와 예약거래: 범용거래 처리기는 다중블록체인을 이용하여 일반거래와 스마트 계약을 구분하여 처리하고, 일반거래는 거래 처리 시점에 따라 즉시거래와 예약거래로 구분하며 서로 다른 블록체인을 사용한다. 일상생활에서 송금이나 단순지불 거래는 즉시 처리가 요구되지만, 일부 인터넷 쇼핑 등에서는 물건의 배달이 확인되는 시점까지 대금지불을 늦출 수 있다. 또한 매달 월정액을 지불하는 상품과 서비스 구매도 예약거래에 해당한다. 계약서에 따른 대금지불이나 조건이 붙은 거래도 예약 거래를 이용하여 손쉽게 처리할 수 있다.
  • 일대다 거래: 다수의 수신자에게 즉시 거래하거나 예약거래를 할 수 있다. 다수의 수신인에게 송금을 할 수 있기 때문에 다수의 중개인이 존재하는 거래나 동일한 유형의 다수 거래를 한 번에 처리할 수 있다. 이를 통하여 거래 처리시간 단축, 거래시점 동시화 등을 간단하게 처리한다.
  • 일반거래와 스마트 계약의 병용: 하나의 함수로 모든 일반거래와 스마트 계약을 동시에 처리할 수 있다. 예를 들어 예약거래와 스마트 계약의 호출은 하나의 함수로 처리할 수 있기 때문에, 선물거래나 옵션거래를 간단하게 처리할 수 있다.

향후 전망[편집]

블록체인을 이용한 스마트계약은 계약 이행 및 검증의 과정이 네트워크로 자동화되고, 중재해주는 사람이나 기관이 없다보니 돈이나 부동산, 주식, 그밖에 가치있는 그 무엇이라도 교환하면서도 투명하고, 계약 쌍방간에 충돌 없이 거래를 완료할 수 있다. 기존 계약서는 서면으로 돼 있어 계약 조건을 이행하려면 실제 사람이 계약서대로 수행을 해야 하지만 디지털 명령어로 계약서를 작성하게 되면 명확성과 함께 애초에 합의한 조건에 따라 계약 내용을 자동 수행이 가능하다. 그리고 추가 비용 없이 직접 처리하게 만든 것으로 복잡한 사업상의 계약을 적은 비용과 합의에 따른 신뢰를 바탕으로 안전하게 계약을 실행할 수 있다. 무엇보다 스마트 계약은 그 실행 내용의 무결성과 조작되지 않음을 보장한다. 그렇기 때문에 스마트 컨트랙트 비즈니스는 계속 성장할 것으로 예상된다. 시장조사업체 가트너는(Gartner)는 2022년에는 글로벌 기관 중 25% 이상이 스마트 컨트랙트를 사용할 것으로 예상하고 있다. 캡제미니(Capgemini)는 2020년 초 스마트 컨트랙트가 도입될 것이며 특히 금융업계가 비용 절감과 수요 창출의 효과를 얻을 것라고 예측하고 있다. 즉, 투자은행의 경우, 결제 주기가 20일에서 6~12일로 단축되어 5~6% 추가 수요를 발생시킴으로써 매년 20~70억 달러의 추가 수입 발생을 예상하고 있고, 소비자 금융의 경우, 주택 담보 대출의 처리 비용을 낮춰 매년 30~110억 달러 비용 절감되고, 보험의 경우, 개인용 자동차 보험에서만 연간 210억 달러 비용 절감이 예상되고 있다. 한국에서도 지난해부터 스마트 콘트랙트를 활용한 각종 정부사업이 추진되고 있다. 중앙선거관리위원회는 블록체인을 접목한 온라인 전자투표 시스템을, 농림축산식품부는 블록체인 기반의 축산물 이력관리시스템을 준비 중이다. 국토교통부는 공인중개사 등과 연계해 부동산 거래를 원스톱으로 제공하는 플랫폼을 시범적으로 구축하고 있다.

동영상[편집]

각주[편집]

  1. 1.0 1.1 Peter Sayer, 〈블록체인에 대한 기본 상식 5가지〉, 《CIO코리아》, 2016-04-12
  2. 2.0 2.1 2.2 Vitalik Buterin, "A Next-Generation Smart Contract and Decentralized Application Platform", 2013.
  3. 닉 재보(Nick Szabo)는 로스쿨을 졸업한 컴퓨터 과학자이다. '닉 자보'라고도 한다.
  4. 김인경 기자, 〈(IT열쇳말) 스마트 계약〉, 《블로터》, 2018-02-05
  5. 이정훈 기자, 〈(이정훈의 암호화폐 읽기)<2>`빅 브라더` 가라…혁신 넘어선 혁명〉, 《이데일리》, 2018-01-10
  6. 더루프, 〈스마트 컨트랙트 개요(Smart Contract)-2〉, 《더루프 블로그》, 2017-04-04
  7. 이더리움 공식 인터페이스 라이브러리를 통칭 웹쓰리(web3)라고 부르지만 지원하는 언어별로 약간씩 명칭이 다르다. 예를 들어 자바는 Web3J, 자바스크립트는 Web3.js, 파이썬은 Web3py라고 부른다.

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 스마트 계약 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.