loopchain SCORE(Smart Contract On Reliable Environment)

이전 포스팅에서는 스마트 컨트랙트(Smart Contract) 기술이 블록체인 위에서 어떻게 동작하는지에 대해 알아보았습니다.

블록체인 기술 연재 시리즈
블록체인 기술 개요
스마트 컨트랙트(Smart Contract) 개요 -1
스마트 컨트랙트(Smart Contract) 개요 -2

이번 포스트에서는 loopchain의 스마트 컨트랙트인 SCORE(Smart Contract On Reliable Environment) 가 어떤 특징을 가지고 있는지에 대해 알아보도록 하겠습니다.

SCORE(Smart Contract On Reliable Environment)의 특징

loopchain SCORE의 가장 큰 특징은 개발 친화적 언어를 통해 자유롭게 개발환경을 구성할 수 있다는 점입니다. 대표적인 블록체인 기반 스마트 컨트랙트 플랫폼인 이더리움의 경우 특수한 가상머신 EVM(Ethereum Virtual Machine)에서 사용 가능한 언어로만 스마트 컨트랙트를 작성할 수 있습니다. 즉 Solidty, Serpent, LLL을 통해서 스마트 컨트랙트를 개발을 해야하고 데이터 접근 및 저장 또한 EVM 내부 변수를 통해서만 저장할 수 있습니다.

loopchain_archi
SCORE와 합의엔진(Blockchain)이 구조상 분리되어있는  loopchain 모듈 구조

loopchain SCORE는 합의엔진과 의존성을 최대한 떨어뜨린 별도의 모듈로 개발되었습니다. 합의 엔진과 SCORE는 내부 GRPC로 구현된 인터페이스를 통하여 통신을 하기 때문에 인터페이스만 맞으면 어떠한 언어로도 구현이 가능하나 현재는 파이썬 구현체만 허용하고 있습니다. 데이터 베이스 또한 자유롭게 사용할 수 있죠. 다만 이더리움 처럼 변수의 모든 데이터가 저장되지는 않고 데이터베이스에 직접 읽고 쓰고 한 결과만 저장됩니다.

 

SCORE 데모

아직 정확한 일정이 확정되지 않았지만 올해 하반기에 loopchain는 오픈소스로 공개될 예정이며 이때 SCORE 서비스 부분도 함께 공개될 것입니다.

공개 전에 SCORE를 이해하는데 도움이 되도록 SCORE기반 채팅 샘플에 대해 동작 방식과 함께 설명하겠습니다.

채팅서비스는 중계자가 필요한 대표적인 서비스입니다. 채팅 참여자는 각자가 직접 연결되지 않고 채팅서버와 연결한 후 채팅서버에서 보내주는 다른 참여자의 말을 믿고 대화를 진행합니다. 즉, 대화 당사자가 아닌 채팅서버라는 별도의 TTP(Trusted Third Party)가 대화라는 거래를 중계해주는 방식이라고 할 수 있습니다.

이를 스마트 컨트랙트로 간략히 구성한다면 아래와 같습니다.

  • 스마트 컨트랙트로 공유하는 내용
    • 채팅 참여자간 대화록
  • 스마트 컨트랙트 갱신 조건
    • 채팅 참여자가 보내온 대화의 서명이 해당 채팅 참여자의 서명이 맞으면 대화록에 추가함

즉, 채팅 참여자가 각각 블록체인 노드를 구성하고 대화 내용을 포함하고 서명을 하여 거래를 발생시키면 해당 거래가 동기화되고 거래 내역이 정당하면(채팅 참여자의 서명이 맞으면) 거래에 포함된 대화 내용을 전체 대화록에 추가하는 식입니다.

SCORE 기반 채팅 서비스 데모

이전 포스팅에서 설명하였듯이 스마트 컨트랙트는 Transaction과 Query라는 두가지 형태의 인터페이스를 가지고 있습니다. 위 동영상의 ‘보내기’는 Transaction으로써 다른 사람에게 메세지를 보내는 역활을 하며 ‘조회’는 Query로써 채팅방에 올려진 메세지를 확인할 수 있습니다. Query는 본인이 가지고 있는 스마트 컨트랙트의 내용을 확인하는 것이죠.

동영상 시나리오와 같이 한 사용자가 오프라인 상태가 되더라도 다른 사용자에게는 영향이 없으며 다시 온라인 상태가 되면 블록 동기화 과정을 통해 이전에 있던 모든 메세지를 받을 수 있습니다.

사실 채팅서비스는 블록체인이 유용한 어플리케이션이라고 하기는 어렵습니다. Socket.io 등을 이용하면 더 편리하고 실시간성으로 만들 수 있죠. 본 예제는 loopchain SCORE가 어떻게 돌아가는지 보여주기 위해 만든 샘플 정도로 보시면 됩니다. 그러나 예전에 야후 메신저가 내용 위변조가 안되고 모든 내용을 저장하는 특성 때문에 일부 도메인에서 사업 계약에 이용되었던 것을 생각하면 대화내용에 대한 무결성을 보장하는 블록체인 기반 채팅서비스도 상용화될 수 있습니다.

본 포스팅에서는 loopchain의 스마트 컨트랙트인 SCORE에 대해서 알아보았습니다. 다음 포스팅 부터는 블록체인의 또다른 주요 요소인 합의 알고리즘에 대해 알아보도록 하겠습니다.

스마트 컨트랙트(Smart Contract) 개요 -2

이전 포스팅에서는 블록체인 기술이 이렇게 여러 도메인에서 사용할 수 있게 가장 큰 역할을 한 스마트 컨트랙트(Smart Contract)이 무엇이고 어떤 역할을 하는지에 대해 알아보았습니다.

블록체인 기술 연재 시리즈
블록체인 기술 개요
스마트 컨트랙트(Smart Contract) 개요 -1

이번 포스트에서는 스마트 컨트랙트가 실제로 어떻게 동작하는지 알아보도록 하겠습니다.

이전 블록체인 기술 개요 포스팅에서 송금 서비스 예제를 통해서 블록체인 네트워크에 참여하는 노드의 종류와 역할, 그리고 각 노드가 가지고 있는 데이터에 대해서 알아보았습니다. 이번 글에서는 이 내용을 바탕으로 기술할 것입니다.

블록체인 기술 개요에서 설명한 것 처럼 블록체인 네트워크의 노드는 두 가지 데이터베이스를 가지고 있습니다. 하나는 모든 거래 내용이 보관된 트랜잭션 데이터베이스고 또 하나는 저장된 트랜잭션을 기반으로 서로 사전에 약속한 어플리케이션에 적용하는 어플리케이션 데이터베이스 입니다.

비트코인의 경우 스마트 컨트랙트가 지원되지는 않지만, 비트코인이라는 자산이 이동되는 단 하나의 송금 어플리케이션이 블록체인에 올라간 서비스라고 볼 수 있습니다.

Ethereum 같은 스마트 컨트랙트 지원 블록체인의 경우 스마트 컨트랙트의 상태를 변경시키는 트랜잭션 보관 데이터베이스와 스마트 컨트랙트의 최신 상태를 보관하고 있는 스마트컨트랙트 데이터베이스를 가지고 있습니다.

여기서 스마트 컨트랙트는 상태를 변경할 수 있는 어플리케이션이라고 할 수 있고 스마트 컨트랙트의 상태는 해당 어플리케이션에서 사용하는 변수라고 할 수 있으며 이를 변경하기 위한 입력값은 트랜잭션에 포함되어 있다고 볼 수 있습니다.

스마트 컨트랙트 상태(State)를 저장하는 데이터베이스의 경우 Ethereum처럼 높은 압축률을 위해 트랜잭션을 저장하는 데이터베이스와 합쳐져 있는 경우도 있고 아니면 분산합의와 스마트 컨트랙트의 낮은 의존성을 달성하기 위해 완전히 분리된 경우도 있습니다.

예제 스마트 컨트랙트 설명 

스마트 컨트랙트 블록체인은 두 가지 인터페이스를 공개하고 있습니다. 하나는 트랜잭션(Transaction) 이고 하나는 쿼리(Query)입니다. 트랜잭션을 통한 인터페이스는 트랜잭션 데이터베이스에 저장되고 스마트 컨트랙트의 State를 변경시키는 접근방법입니다. 쿼리는 트랜잭션 데이터베이스에 기록이 남지 않으면서 스마트 컨트랙트의 State를 읽는 작업입니다. 트랜잭션은 Write, Delete, Modify를 실행한다면 보면 되고 Query는 Read만을 실행한다고 생각하시면 됩니다.

본 포스팅에서는 스마트 컨트랙트를 통한 디지털 컨텐츠 거래 예제를 통해 스마트 컨트랙트가 실제로 어떻게 동작하는지 알아보도록 하겠습니다. 거래되는 디지털 컨텐츠는 DNS와 같은 온라인 자산일 수도 있고 Hash나 금 일련번호와 같은 다른 자산을 나타내는 증거 데이터일 수도 있습니다.

본 예제 스마트 컨트랙트에서 제공할 인터페이스는 다음과 같습니다.

Transaction

  • 컨텐츠 등록
  • 컨텐츠 구매

Query

  • 컨텐츠 조회

디지털 컨텐츠 거래 예제를 통한 스마트 컨트랙트 동작 방식

SoWkIImgAStDuKfCBialKdZRC-7ryYLlvas0ybzjNGFbmsKKTEqKNk-OydhXt3URjhoPkqF1Ik7DxXLlMoUysR50uVNaZK09BhWsl8hVBDpmTbOFaOeXghWSKlDIWCu50000.png
디지털 컨텐츠 거래 순서

스마트 컨트랙트를 통한 디지털 컨텐츠 거래 시나리오는 위의 예제 시나리오와 같이 동작할 것입니다. 각 내용에 따라 어떤 일을 실제로 수행하는지 알아보도록 하죠.

  1. 컨텐츠 판매자가 컨텐츠 등록 트랜잭션을 블록체인에 보낸다.
스크린샷 2017-04-03 오후 5.27.23.png
상품 등록 트랜잭션 생성시 네트워크 동작

컨텐츠 등록 트랜잭션 발생 시 블록체인 네트워크 내부에서는 위의 다이어그램과 같이 동작합니다. 네트워크의 모든 노드는 컨텐츠 등록 트랜잭션을 공유하고 트랜잭션 데이터베이스에 저장하게 됩니다. 여기까지가 비트코인과 같은 스마트 컨트랙트가 지원되지 않는 데이터 공유 기반의 블록체인이라고 할 수 있습니다. 스마트 컨트랙트 지원 블록체인은 이 단계 이후에 트랜잭션의 내용에 따라 스마트 컨트랙트 어플리케이션을 실행하고 그 결과를 스마트 컨트랙트 데이터베이스를 반영합니다. 이후 모든 트랜잭션은 전부 위 그림과 같은 방식으로 동작합니다.

  1. 구매자는 블록체인 네트워크에서 컨텐츠 조회한다
스크린샷 2017-04-03 오후 5.45.07.png
상품 조회 내부 동작

위의 다이어그램은 컨텐츠 조회 동작 방식을 나타낸 것입니다. 매우 간단합니다. 클라이언트가 검색 쿼리를 보내면 노드는 그에 대해 응답을 해줍니다.

블록체인의 어떤 데이터도 변경시킬 필요 없이 스마트 컨트랙트 데이터베이스 내 저장된 상태 값만 조회하면 되기 때문에 쿼리 정보는 블록체인에 동기화할 필요 없고 블록 동기화 타이밍에 상관없이 바로 응답할 수 있습니다. 블록체인의 트랜잭션 속도는 다른 네트워크보다 느리지만 쿼리 속도는 같은 머신의 내부 DB를 사용해서 쿼리 해주고 어떤 노드에 접속해도 같은 결과를 얻을 수 있기 때문에 중계자를 통한 서비스보다 오히려 속도가 빠를 수도 있습니다.

  1. 컨텐츠 구매
    구매자가 컨텐츠 구매 트랜잭션을 보내면 1의 다이어그램과 같이 트랜잭션을 공유하고 블록체인 네트워크에 동기화합니다. 모든 노드의 스마트 컨트랙트 데이터베이스에 컨텐츠 구매자를 등록하고 돈을 판매자에게 전송합니다. 또한, 등록된 컨텐츠의 소유권을 구매자로 이동합니다.

이번 포스팅에서는 스마트 컨트랙트 동작 방식을 스마트 컨트랙트를 통한 디지털 컨텐츠 거래를 통해 알아보았습니다. 특히 Transaction과 Query는 모든 스마트 컨트렉트 블록체인에서 동작하는 방식이 거의 유사하므로 대부분 블록체인이 이와 같은 방식으로 동작합니다.

R3 Corda나 Hyperledger Fabric 1.0처럼 블록체인에 참여한 모든 노드가 거래를 공유하지 않고 해당 거래에 참여한 노드끼리만 거래를 공유하고 스마트 컨트랙트를 실행하는 것도 해당 거래에 있어서는 이와 동일하다고 할 수 있습니다.

다음 포스팅에서는 이와 같은 스마트 컨트랙트가 실제 구현체에서는 어떻게 작동하는지 loopchain의 스마트컨트랙트인 SCORE(Smart Contract on Reliable Envirement)를 기반으로 예제 어플리케이션과 함께 설명하도록 하겠습니다.

스마트 컨트랙트(Smart Contract) 개요 -1

이전 포스팅에서는 블록체인 기술 시리즈 1부로 블록체인의 기능과 블록체인의 메인 자료구조 그리고 블록체인 네트워크가 어떻게 동작하는지에 대해 거래 시나리오를 통해 설명하였습니다.

블록체인 기술 개요

본 포스팅에서는 블록체인을 단순한 원장 기반의 디지털 화폐 거래 플랫폼을 넘어 다양한 서비스에 적용할 수 있도록 만들어준 스마트 컨트랙트(Smart Contract)에 대해 알아보도록 하겠습니다.

Smart Contract 

스마트 컨트랙트는 Nick Szabo가 1994년 최초 제안한 개념입니다. 기존 계약서(Contract)는 서면으로 되어있어 계약 조건을 이행하려면 실제 사람이 계약서 대로 수행을 해야 하지만 디지털 명령어로 계약을 작성하면 조건에 따라 계약 내용을 자동으로 실행할 수 있다고 주장하였습니다.

SmartContract

디지털로 된 계약서는 조건에 따른 계약 결과가 명확하고, 계약 내용을 즉각 이행할 수 있습니다. 각자의 자산이 연결된 디지털로 양자 합의를 하고 계약서를 작성하고 실행하기로 한다면 계약을 이행하는데 복잡한 프로세스를 엄청나게 간소화 될 것 입니다. 또한 다양한 그러나 디지털로 된 자료들은 쉽게 복사되고 조작이 쉬워 1994년에 제안한 스마트 컨트랙트는 개념으로만 존재하고 구체적인 서비스에 이용될 수 없었습니다.

블록체인(Blockchain)과 스마트 컨트랙트 (Smart Contract)

이전 포스팅 들에서 설명하였듯이 블록체인은 디지털 데이터를 신뢰할 수 있게 만들어 주는 기술입니다. 다수의 노드가 같은 데이터를 공유하고 검증하는 방식을 통해 디지털상에 신뢰관계를 만들었죠.

스마트 컨트랙트는 이러한 블록체인과 함께 급부상하게 됐습니다. 스마트 컨트랙트를 만들 수 있는 환경이 20여 년이 지나 구체화 된 것이죠. 최초의 블록체인 기반 스마트 컨트랙트는 비트코인 스크립트입니다. 비트코인 트랜잭션에 원시 언어인 OPCODE로 스크립트를 작성해서 보내면 조건에 따라 자동으로 거래를 수행합니다. 스크립트가 정상이면(기존에 보유한 비트코인의 잔액이 정확하고 거래를 보낸 사람의 서명이 정확한지 보는 것이 가장 기본적인 스크립트) 거래를 정상으로 본다는 일종의 계약(Contract) 개념이 있으므로 Contract Code로 불리기도 합니다.

하지만 비트코인 스크립트는 반복문을 사용할 수 없고, 비트코인 잔고 외의 다른 정보를 관리 할 수 없는 한계가 있습니다. 이는 블록체인의 특이한 구조 때문인데 비트코인 스크립트에서 반복문을 허용할 경우 만약 스크립트 조건 때문에 무한 루프가 발생할 경우 네트워크 전체가 멈출 수 있습니다. 사용자는 무한루프를 통해 쉽게 DoS(Denial of Service) 공격을 할 수 있습니다.

이더리움(Ethereum)은 이러한 비트코인 스크립팅 시스템의 한계를 극복하고자 나온 스마트 컨트랙트 특화 블록체인 플랫폼입니다. 사실 스마트 컨트랙트란 용어가 본격적으로 사용하기 시작한 것은 이더리움 이후라고 보면 됩니다. 이더리움은 비트코인 스크립팅 시스템의 한계인 다양한 상태 저장과 반복문을 허용한 스마트 컨트랙트를 만들었습니다. 여기에 각 라인을 실행할 때마다 수수료를 발생시키고 네트워크상에 수수료의 한계를 설정하여 무한루프를 막았습니다. 무한히 반복되는 조건을 만들어 스마트 컨트랙트를 실행시키면 돌다가 중간에 수수료 한계점에 도달하면 중단됩니다.

스크린샷 2017-03-28 오전 10.58.59.png
Solidity 온라인 컴파일러를 통해 스마트 컨트랙트를 작성하고 가스 소모량을 확인할 수 있다. (출처: ethereum.github.io)

이는 기발하지만 뜻밖에 간단한 논리에 의해 구현되게 되었는데 블록체인을 통해 함수 내용과 함수의 입력을 공유하면서 무결성을 보장한다면, 함수의 결과는 별도로 공유하지 않더라도 그 무결성이 보장된다는 것이죠. 이더리움은 함수를 컴파일된 코드 형태로 거래에 포함하여 블록체인을 통해 동기화합니다. 이때 거래에 포함된 정보를 함수의 입력으로 하여 코드로 표현된 함수를 실행한 후 그 결과를 별도의 상태로 보관하는 방식으로 스마트 컨트랙트를 구현하게 되었습니다.

그리하여 독자 코인인 이더 외에 다른 디지털 객체의 상태를 저장하는 방식을 허용하여 다양한 재화를 이더리움 네트워크 위에 만들고 거래할 수 있게 되었습니다. 이더리움 상에서의 가장 유명한 스마트 컨트랙트의 예는 DAO(Decentralized Autonomous Organization)라고 불리는 탈중앙화된 자율 조직입니다. 이는 회사의 의결권을 토큰(DAO Token)으로 행사할 수 있도록 크라우드 펀딩을 통해 토큰을 이더로 구입할 수 있도록 판매하였고 그 과정에서 모인 약 2000억원 가량의 이더를 어떻게 사용할지 토큰을 기반으로 투표할 수 있도록 한 스마트 컨트랙트로서 특정 운영주체가 없이 참여자의 투표로 운영되도록 했습니다.

The-DAO-.jpg
DAO 주주들의 지분을 통한 의사 참여 방법 (출처 : themerkle.com)

참고로 DAO는 DAO 스마트 컨트랙트 코드의 논리 오류 때문에 해커의 공격을 당해 엄청난 피해가 발생하게 되자 이더리움 전체를 Hard fork, 즉 롤백하는 등 우여곡절이 있었습니다. 기회가 되면 다음에 이 사례에 관해서도 설명하도록 하겠습니다.

이더리움 기반 다양한 스마트 컨트랙트들은 여기서 확인하실 수 있습니다.

본 포스팅에서는 스마트 컨트랙트의 개념을 설명하였습니다. 스마트 컨트랙트에 대한 개념 설명이라 잘 이해가 안 되실 수 있습니다. 다음 포스팅에서는 스마트 컨트랙트가 실제로 어떻게 동작하는지에 대해 예제를 통해 구체적으로 설명하도록 하겠습니다.