스마트컨트랙트 코딩 - seumateukeonteulaegteu koding

V Systems는 개발자에게 간편하고, 커스터마이징이 용이한 프리미티브를 제공합니다.

NFT는 V Systems의 스마트 컨트랙트중의 하나로, 한번의 클릭으로 대체 불가능 토큰들을 발행하는 것을 가능케 합니다.

디지털 자산을 락 (Asset Lock) 할수 있는 것은 블록체인 시스템의 아주 유용한 기능 중 하나입니다. 자사의 락 컨트랙트는 유저가 정의한 일정 시기동안 적용되는 자산의 락 솔루션으로, 블록체인에서 디지털 자산의 증빙으로 사용됩니다.

블록체인에 기록을 남기지 않고 암호화폐의 거래를 할 수 있는 수단입니다.

V 스왑은 V Systems의 스마트 컨트랙트의 일종으로, V Systems 블록체인 네트워크 위에서 토큰들의 스왑거래를 할 수 있는 탈중앙화 거래소입니다.

V 스테이블 스왑은 기존의 오더북을 사용하는 방식의 거래형태를 가진 V Systems의 스마트 컨트랙트로, 주문에 명시된 거래가격을 강제하는 스마트 컨트랙트에 영향을 받지 않고 주문을 제출하는 것을 가능케 합니다.

V 아토믹 스왑은 블록체인 간의 스왑을 가능케 하는 스마트 컨트랙트 입니다.

V 옵션 컨트랙트는 개발자가 레버리지 거래를 지원하는 탈중앙화 파생상품의 거래를 개발할 수 있도록 하는 스마트 컨트랙트 입니다.

V 에스크로는 비수탁형 결제 솔루션으로, V 결제 채널과 함께 고액의 거래를 이행하고자하는 기업에게 탈중앙화 솔루션을 제공합니다.

자사의 스마트 컨트랙트가 제공하였으면 하는 기능이나, 기존 컨트랙트 템플렛으론 만들 수 없어 추가하였으면 하는 다른 형태의 스마트 컨트랙트가 있다면, 꼭 저희에게 알려주시기 바랍니다. 저희 팀은 언제나 누구보다 유저 여러분의 이야기에 귀를 기울이고자 합니다. 저희가 자사의 결제채널의 구축을 하게된 계기는 Tachyon 측에서 당시 V Systems 메인넷에서 이루어지던 트랜잭션이 더욱 빠르고 저렴하길 바란다는 제의가 있었기 때문입니다. 현재는 Tachyon 뿐만 아니라 그 외 다른 프로젝트에서도 운용되는 모습을 보실 수 있습니다.

정의

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

개요

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

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

닉 재보의 비트골드

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

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

- 관측 가능성(observability) : 스마트 계약은 서로의 계약 이행 가능성을 관찰하거나 성과를 입증할 수 있어야 한다.

- 검증 가능성(verifiability) : 계약을 이행 또는 위반했을 때 이를 알 수 있어야 한다.

- 사생활 보호(privacy) : 계약 내용은 계약에 관련된 당사자들에게만 알려져야 한다.

- 강제 가능성(enforceability) : 계약을 강제로 이행할 수 있는 구속력이 있어야 한다. 단, 강제 가능성은 최소화해야 한다.

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

비트코인 스크립트

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

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

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

이더리움 스마트 컨트랙트

스마트 컨트랙트 플랫폼

이더리움(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)도 만들 수 있다. 누구든지 솔리디티 언어를 사용해 스마트 컨트랙트와 디앱을 작성하고 소유권에 대한 임의의 규칙, 트랜잭션 형식(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대 보안 취약점'을 이용한 해킹 공격으로 인해 많은 피해가 발생하였다.

참고(6대 취약 문제점)

: http://wiki.hash.kr/index.php/%EC%B7%A8%EC%95%BD%EC%A0%90

정책적 문제점

비싼 가스 수수료 문제 : 스마트 컨트랙트를 이용하여 특정 기능, 특히 상태값을 변경하려면, 수수료인 가스(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) : 스마트 컨트랙트 시스템은 오라클 문제라는 근본적 문제를 가지고 있다. 오라클 문제란 블록체인 밖에 있는 데이터를 블록체인 안으로 가져올 때 발생하는 문제를 말한다. 블록체인은 데이터의 위변조가 거의 불가능한 분산 저장 기술이지만, 데이터가 블록체인 안으로 들어와야 블록체인으로 관리할 수 있다. 데이터가 블록체인 안으로 들어오지 않거나, 혹은 블록체인 안으로 들어오는 과정에서 위변조가 발생한다면, 설령 그 데이터가 블록체인으로 관리된다고 할지라도 신뢰하기 어렵다. 이러한 오라클 문제를 해결하기 위해, 중간자를 두거나 상호인증 블록체인 방법을 사용할 수 있다.을 이용한 해킹 공격으로 인해 많은 피해가 발생하였다.

참고자료

http://wiki.hash.kr/index.php/%EC%B7%A8%EC%95%BD%EC%A0%90