코인스택
코인스택(Coinstack)은 ㈜블로코(Blocko)가 개발한 프라이빗 블록체인 플랫폼이다.
㈜블로코가 개발한 코인스택 플랫폼을 기반으로 다양한 정부 공공기관 블록체인 시스템이 개발되었다. 코인스택 기반의 블록체인 시스템 사용자는 2018년 기준으로 약 2,500만명 이상이며, 실제 엔터프라이즈 환경에서 기술력을 검증받았다. 블로코는 이렇게 검증된 핵심 기술을 바탕으로 2018년 아르고(Aergo)라는 퍼블릭 블록체인 플랫폼을 개발하였으며, 기업 고객을 위한 컨설팅과 유지보수 등의 다양한 서비스를 제공하고 있다.
목차
개요
코인스택은 일반기업 또는 개발자가 지속적으로 성장하고 있는 블록체인에 대한 기술적인 연구나 고민 없이 블록체인 기반 서비스를 개발, 테스트, 운영하는 것에만 집중하게 해주는 블록체인 플랫폼이다.[1]
코인스택 엔터프라이즈를 이용하면 프라이빗 블록체인을 바로 설치하고 사용할 수 있다. 비트코인 블록체인에서 사용할 수 있는 모든 어플리케이션과 프로토콜을 지원하며, 이를 이용하여 기존 코인스택에서 제공하고 있는 포인트 관리 시스템, 전자 자산, 전자 문서, 사용자 인증과 같은 다양한 기능을 곧바로 이용 가능하다. 또한 비트코인 블록체인 기반의 계약과 이더리움 기반의 스마트 계약을 모두 지원하여 차세대 금융 및 비즈니스에서 필요로 하는 진보한 서비스와 어플리케이션을 개발 가능하게 한다.
코인스택은 비공개 블록체인 네트워크를 구성할 수 있는 모든 조건을 충족하는 프라이빗 블록체인 솔루션이다.[2] 이렇게 형성된 안전한 네트워크에서 코인스택 노드로 참여하여 데이터 블록을 쌓을 수 있다.[3] 코인스택 콘솔은 효율적으로 블록체인 네트워크를 구축하여 블록과 노드 상태를 실시간으로 모니터링하고 새로운 노드 추가, 문제 노드의 제거 등을 할 수 있는 기능을 제공한다.[4] 코인스택은 REST API뿐만 아니라 주요 플랫폼용 SDK 또한 제공하여 손쉽고 안전하게 비트코인 블록체인을 다룰 수 있는 환경을 마련해준다.[5] 현재 블로코 홈페이지를 통해 체험 가능하다. 코인스택은 디앱 개발 및 운영을 위한 툴을 지원하는데 이미 많은 기업들이 이를 운영하고 있으며 자바, 자바 스크립트, 파이썬 등을 지원함으로써 많은 개발자들이 쉽게 디앱 개발을 할 수 있는 환경을 제공한다.
등장배경
블록체인은 비트코인이 암호화폐의 대표주자로 안착하기까지 핵심적인 역할을 담당해 왔다. 현재 블록체인 기술은 비트코인과는 별도로 최고의 데이터 안전성과 신뢰성이 요구되는 금융, 의료, 관공서 등의 분야에서 활용되거나 검토 중에 있으며 블록체인을 기반으로 그동안 존재하지 않던 서비스들이나 참신한 아이디어로 무장한 스타트업들이 계속해서 생겨나고 있다.
만약 블록체인 기술을 활용할만한 획기적인 아이디어가 있어도, 우선 블록체인과 비트코인에 대해 이해하고 공부하기 위한 많은 노력이 선행되어야 했다. 그리고 블록체인은 원래 범용적인 기술이 아니라 비트코인을 지탱하기 위해 만들어진 구조이므로 이를 응용하기 위해서는 추가적인 노력을 들여 기술적 장벽을 넘어야 했다.
코인스택은 이러한 어려움 없이 서비스와 블록체인을 연결해주는 징검다리 역할을 하기 위해 만들어졌다. 즉, 코인스택은 간편하게 블록체인 기반 서비스를 개발할 수 있도록 도와주는 플랫폼이다. 실제로 블로코에서 서비스 중인 클라우드 스탬프는 모두 코인스택 기반으로 개발되었으며, 현재 제1금융권 은행 및 대형 카드사를 비롯한 대기업, 한국거래소, 각종 스타트업들이 블록체인 기반 서비스를 제공하기 위해 코인스택을 사용하고 있다. 블로코가 무료로 제공하고 있는 클라우드 기반 코인스택 서비스는 과제를 수행하는 학생들, 개인 개발자들이 편리하게 이용하고 있다.[6]
특징
문서 진위 확인 서비스
블록체인은 그 불가역성을 활용하여 여러 분야에 적용할 수 있다. 특히 문서 진위 확인 서비스(Document Stamping)에서 이 블록체인 기술이 각광을 받고 있다. 코인스택은 데이터 아웃풋(Data output)을 활용한 트랜잭션을 생성할 수 있다. 본인이 직접 트랜잭션을 생성하여 문서의 지문값을 등록할 경우 다음과 같은 일련의 작업들을 수행해야 한다.
- 본인의 비트코인 주소 생성
- 주소에 수수료로 쓰일 비트코일 전송
- 문서의 해시값 추출
- 문서의 해시값을 추가한 데이터 아웃풋 생성
- 데이터 아웃풋을 추가한 트랜잭션 생성
- 트랜잭션을 블록체인 네트워크에 브로드캐스팅
- 본인 주소의 잔액을 확인하여 수수료가 충분한지 계속 모니터링
하지만 단순히 문서의 지문값(Hash value)만을 빠르고 간단히 블록체인에 등록하고자 할 때는 이 모든 작업이 부담이 될 수 있다. 코인스택은 레벨에서 데이터를 등록하는 기능을 추상화하여 위 작업을 간편하게 수행할 수 있는 문서 진위 확인 서비스 기능을 제공한다.[7]
멀티 시그니처
비트코인 계정은 공개키 암호 방식으로 관리되므로 안전하고 편리하지만 개인키를 분실하는 경우 해당 주소에 가지고 있는 비트코인을 사용할 수 없게 된다는 위험성이 있다. 실제로 상당량의 비트코인이 개인키의 분실로 인해 특정 주소에서 더 이상 사용되지 못하고 잠들어 있을 것으로 추정되고 있다. 또한 허술한 관리로 인해 개인키가 유출되는 경우 비트코인을 쉽게 도난당할 수 있다.
만약 비트코인의 특정 주소에 여러 개의 키를 설정할 수 있고, 그 중 몇 개의 키가 있어야 해당 주소의 비트코인을 사용할 수 있게 한다면 한 개뿐인 개인키의 분실이나 유출만으로 비트코인을 사용할 수 없게 되거나 도난당하는 문제를 완화할 수 있다.
예를 들어 두 개의 키를 설정하고 그 중 하나만으로도 특정 주소의 비트코인을 사용할 수 있게 해두면 사용자는 두 개의 키를 각각 다른 공간에 보관할 수 있다. 만약 한 개의 키를 잃어버리더라도 별도로 보관하고 있던 다른 키를 사용하여 해당 비트코인을 사용할 수 있게 된다.
또 다른 활용은 세 개의 키를 설정하고 그 중 두 개가 있어야 비트코인을 사용할 수 있게 하는 방식이다. 세 개의 키 중 하나는 거래소나 지갑 같은 서비스 회사에서 관리하게 하면 사용자는 항상 두 개의 키를 준비해야 하는 불편 없이 서비스를 이용할 수 있다. 하지만 평소 사용하던 키를 분실하더라도 별도로 보관하던 키를 이용해 비트코인을 안전하게 옮길 수 있고, 서비스 회사 입장에서는 키가 하나밖에 없기 때문에 사용자를 속일 수 없으며 해킹을 당하더라도 사용자의 지갑을 안전하게 보호할 수 있다.
이처럼 특정 비트코인 주소에 n개(n>1)의 개인키를 설정해두고, 해당 주소의 비트코인을 사용할 때는 그 중 m개(n≥m≥1)의 개인키가 필요하도록 설정하는 방식을 멀티 시그니처라고 한다.[8]
오픈에셋 프로토콜
비트코인은 블록체인을 활용한 대표적인 암호화폐이다. 블록체인의 공공 장부의 성격을 활용하여 비트코인은 현재까지 가장 안전한 암호화폐로서 자리매김하고 있다. 하지만 블록체인 상에서 비트코인만을 거래할 수 있는 것은 아니다. 오픈에셋 프로토콜(Open Assets Protocol)은 블록체인 상에서 자신만의 화폐나 어떠한 종류의 자산이라도 발행하고 유통시킬 수 있도록 해준다. 예를 들어 지역 화폐, 주식, 회사의 쿠폰이나 바우처 등을 발행할 수 있다. 오픈에셋은 비트코인 프로토콜 위에 레이어를 두어 구현되어 있기 때문에 비트코인의 안전성을 그대로 상속 받는다. 비트코인이 해결한 이중지불의 문제를 오픈에셋 또한 가지고 있지 않기 때문에 자산이 이중으로 발행되거나 유통하는 과정에서 자산이 감소하거나 증가하는 문제 또한 없다.
오픈에셋은 비트코인 프로토콜을 사용하여 고객이 맞춤형 자산을 발행하거나 유통시킬 수 있다. 일반적인 오픈에셋 트랜잭션은 비트코인 트랜잭션과 그 모습은 같지만 비트코인 트랜잭션의 아웃풋 중 오픈에셋만이 가지고 있는 특수한 아웃풋, 즉 마커 아웃풋(Maker Output)을 가진다. 다시 말하면 비트코인 트랜잭션 중에 마커 아웃풋을 가진 트랜잭션이 오픈에셋 트랜잭션이다. 마커 아웃풋은 사실 OP_RETURN으로 시작하는 일반적인 비트코인 데이터 아웃풋이다. 다만 마커 아웃풋은 자신만이 가진 고유 아이디값(OAP Marker, 0x4f41)으로 시작하게 된다.
따라서 마커 아웃풋은 OP_RETURN PUSHDATA OAP_MARKER의 데이터로 시작하게 된다. 여기에 버전 정보(0x0100)와 Asset count(현재 트랜잭션에서 몇 개의 에셋 아웃풋이 있는지), Asset 수량 리스트, 그리고 메타데이터(Asset에 관한 부가 정보)가 붙게 된다.[9]
스마트 계약
블로코에서는 자체적으로 비트코인 프로토콜을 확장하여 스마트 계약 플랫폼을 구축, 제공하고 있으며 이를 통해 다양한 비즈니스 로직을 블록체인 상에서 구현할 수 있도록 지원하고 있다. 코인스택은 스마트 계약의 프로그래밍 언어로 스크립트 언어인 Lua를 사용하고 있다. 스마트 계약은 계약 별로 키-밸류 쌍의 상태 정보를 저장하고 있고 모든 노드는 블록체인을 통해 동일한 계약을 단계적으로 수행함으로써 항상 동일한 상태 정보를 유지한다. 스마트 계약은 정의, 수행, 조회의 세 단계로 나뉜다. 정의 단계에는 Lua언어로 스마트 계약 코드를 작성, 블록체인 상에 배포하는 단계이고, 수행 단계는 앞서 정의한 코드 내의 함수를 실제로 인자값을 넣어 호출하여 상태값을 변경하는 단계이다. 마지막으로 조화 단계는 수행 결과가 반영된 현재 상태값을 읽어오는 단계이다.[10]
권한 설정 기능
비트코인은 공개된 환경을 지향하여 기본적으로 누구나 트랜잭션을 전송할 수 있고 풀노드를 운영하거나 채굴을 시도할 수 있다. 하지만 기업의 프라이빗 네트워크 등 비공개 환경에서 사용할 때에는 제한된 권한을 특정 사용자에게 부여해야 할 필요가 있다. 이러한 요구에 따라 코인스택에서는 특정 비트코인 주소에 역할을 부여하여 권한을 제한하는 방법을 제공한다.
프라이빗 코인스택에서는 하나의 비트코인 주소에 총 4가지의 역할을 부여할 수 있다. 주소를 사용하는 주체가 사용자나 어플리케이션의 경우 운영자(Admin)와 작가(Writer) 역할을 부여하여 각각 계정관리와 트랜잭션의 쓰기 권한을 줄 수 있다. 역할별 상세 설명은 다음과 같다.
- 운영자(Admin) : 역할을 설정 및 관리한다. 운영자를 제외한 다른 모든 역할(Writer, Miner, Node)을 활성화 및 비활성화 할 수 있다. 다른 모든 역할의 권한도 가진다. 즉, 트랜잭션을 쓰고 블록을 생성하고 프라이빗 네트워크에 참여할 수 있다.
- 작가(Writer) : 트랜잭션 생성 및 전송할 수 있다. 이 역할이 활성화 되어 있는 경우에 트랜잭션 쓰기 역할이 없는 주소의 개인키로 서명하여 전송한 트랜잭션은 코인스택 노드에서 수용하지 않는다.
주소를 사용하는 주체가 노드인 경우 채굴자와 노드 역할을 부여하여 노드의 권한을 제한할 수 있다. 여기서 주소는 노드의 설정파일에 기재되어 있는 개인키와 대응하는 주소를 지칭한다.
- 채굴자(Miner) : 블록을 생성할 수 있다. 이 역할이 활성화 되어 있는 경우에 채굴자 역할이 없는 노드가 채굴한 블록은 다른 코인스택 노드들이 수용하지 않는다.
- 노드(Node) : 이 역할이 있는 노드만 프라이빗 네트워크에 참여할 수 있다. 이 역할이 활성화 되어 있는 경우에 노드 역할이 없는 노드는 코인스택 노드에 접속 및 동기화를 할 수 없다.
역할을 부여하는 보안상 가장 안전한 방법은 역할별로 주소를 여러 개 생성하여 하나의 주소에 하나의 역할만 부여하는 것이지만, 경우에 따라 주소 하나에 여러 개의 역할을 부여해야 하는 경우도 있다. 예를 들면 노드와 채굴자 권한이 활성화 되어 있는 경우 주소 하나에 노드와 채굴자 역할을 동시에 부여해서 사용해야 해당 노드는 프라이빗 네트워크에 접속하여 자신이 생성한 블록을 전파할 수 있다. 또한 운영자 역할을 가지는 주소는 환경설정의 편의성을 위해 모든 권한을 가진다.[11]
트랜잭션 전송 유틸리티
코인스택의 트랜잭션은 비트코인의 표준을 따른다. 단순한 트랜잭션의 경우 트랜잭션 빌더의 기본 설정으로 트랜잭션을 빌드해도 문제가 없다. 하지만 너무 적은 양의 비트코인을 보내려 하거나 너무 큰 사이즈의 트랜잭션을 보내고자 하는 등 예외적인 경우에는 정책상 트랜잭션이 거절될 수 있다. 이에 따라 트랜잭션 빌더에서는 정책적인 부분을 세세하게 설정해줄 수 있는 API가 존재한다. 하지만 대다수의 사용자의 경우 표준 형식의 비트코인 트랜잭션의 정책을 숙지하고 있지 않다.
또한 앞에서와 같이 트랜잭션을 설정해야 하기 때문에 일반적으로 블록체인에서는 트랜잭션을 전송하기 위해서는 트랜잭션 빌더를 통한 설정, 생성, 코인스택 클라이언트를 통한 전송의 세 단계를 거치게 된다. 그러나 이에 따른 중복된 코드 사용이 발생하고 코드의 이해도가 낮아지는 경우가 있다. 이러한 측면에서는 사용자의 편의성을 위해 코인스택에서는 자동적으로 표준 형식에 맞추기 위한 트랜잭션빌드팁(Transaction Build Tip)이라는 클래스와, 한 단계로 트랜잭션을 전송할 수 있는 트랜잭션샌더(Transaction Sender)라는 유틸리티 클래스를 제공한다.[12]
주소데이터
코인스택에서는 오픈키체인과 스마트 계약 등 OP_RETURN으로 데이터를 보낼 즉시 특정 주소에 600 사토시를 보내는 트랜잭션 아웃풋(dusty 아웃풋)을 추가해 대상 주소에 이력을 남기고 있다. 이렇게 하는 이유는 한 트랜잭션에는 하나에 널 데이터(Null Data) 트랜잭션 아웃풋만 허용되기 때문이다. 하지만 이로 인해 트랜잭션을 쓰기 위해 600 사토시가 계속 소모되고, 상대방의 주소에는 사용 불가능한 UTXO가 지속적으로 쌓이게 된다.
이러한 이슈를 해소하기 위해 코인스택에서는 주소데이터(Address-Data)라는 현재 트랜잭션을 받는 대상을 표현하는 널 데이터를 제공한다. 트랜잭션에 주소데이터로 대상 주소를 설정하면 대상의 트랜잭션 이력에 대한 해당 트랜잭션이 보이나 UTXO가 새로이 생기지는 않는다. 수수료 무료 네트워크에 이 기능을 조합해서 사용하면 데이터 트랜잭션을 무제한 만들 수도 있다. 최소 하나의 UTXO는 필요하므로 초기에 필요한 만큼 충전을 해줘야 한다. 단, 이 기능은 쓰면 한 트랜잭션에 널 데이터가 2개 이상 존재하는 비표준 트랜잭션을 생성한다. 따라서 이 기능은 비표준 트랜잭션을 허용하는 프라이빗 네트워크에서만 사용 가능하다.[12]
UTXO 캐시
비트코인 트랜잭션은 UTXO 기반으로, 트랜잭션을 생성하기 위해서는 사용하지 않은 다른 트랜잭션의 아웃풋을 입력으로 받아야 한다. 코인스택에서는 사용자가 클라이언트에서 직접 UTXO를 관리하는 부담을 줄이기 위해 트랜잭션 빌더를 통해 트랜잭션을 생성하는 시점에 코인스택 서버로부터 매번 사용 가능한 UTXO를 조회해 사용하도록 되어 있다. 그러나 이로 인해 트랜잭션 생성 시 추가적인 시간이 필요하게 된다. 따라서 매번 서버로부터 UTXO를 가져오지 않고 UTXO를 SDK 레벨에서 캐싱해 두고 필요한 만큼 사용하게 하면 UTXO 조회 시간만큼 트랜잭션 생성 시간을 줄일 수 있다.
단, 캐시의 효과를 보려면 개인키를 여러 서비스나 쓰래드가 공유하지 않고 하나의 서비스가 하나의 개인키로 여러 번의 트랜잭션을 지속적으로 전송하는 경우여야만 한다. 만약에 여러 서비스나 쓰래드에서 동시에 하나의 개인키를 공유해서 쓸 경우 이중지불이 발생하므로 절대 하나의 개인키를 여럿이 공유하지 않아야 한다. 여러 개의 서비스가 블록체인에 접근할 경우 서비스마다 다른 개인키를 할당하여 사용해야 한다.[12]
동영상
각주
- ↑ 광훈 박용수, 〈블록체인 전문 기업, 블로코!〉, 《네이버 블로그》, 2016-12-10
- ↑ 소셜세이브 블록체인, 〈대기업 협력 블록체인 관련주 블로코(blocko)〉, 《네이버 블로그》, 2018-05-21
- ↑ 박주부, 〈블로코 장외주식 추가매수중〉, 《네이버 블로그》, 2018-08-23
- ↑ 영원한 사랑, 〈블로코/블로코주식/블록쳉니플랫폼 코인스택-블로코〉, 《네이버 블로그》, 2017-11-17
- ↑ sliversle, 〈(공유) 대기업 협력 블록체인 관련주 블로코(blocko)〉, 《네이버 블로그》, 2018-10-02
- ↑ 코인스택 깃허브 Coinstack Basic - https://blocko-1.gitbook.io/coinstack-api-reference/5.-coinstack-basic
- ↑ 코인스택 깃허브 Coinstack Stamping - https://blocko-1.gitbook.io/coinstack-api-reference/6.-coinstack-stamping
- ↑ 코인스택 깃허브 Coinstack Multisig - https://blocko-1.gitbook.io/coinstack-api-reference/7.-coinstack-multisig
- ↑ 코인스택 깃허브 Coinstack Open Assets - https://blocko-1.gitbook.io/coinstack-api-reference/8.-coinstack-open-assets
- ↑ 코인스택 깃허브 Coinstack Smart Contract - https://blocko-1.gitbook.io/coinstack-api-reference/9.-coinstack-smart-contract
- ↑ 코인스택 깃허브 Coinstack Coinstack Permission - https://blocko-1.gitbook.io/coinstack-api-reference/10.-coinstack-permission
- ↑ 12.0 12.1 12.2 코인스택 깃허브 Additinal Features - https://blocko-1.gitbook.io/coinstack-api-reference/11.-additinal-features
참고자료
- ㈜블로코 공식 홈페이지 - https://www.blocko.io/
- 코인스택 API - https://blocko-1.gitbook.io/coinstack-api-reference/
같이 보기
|