디지털 자산과 컴플라이언스

게임에 블록체인 기술을 도입하면 투명하고 안전한 아이템 거래가 가능해진다. 유저가 블록체인 상에 발행된 게임 아이템을 구매하거나 획득하면 해당 아이템에 대한 소유권을 보장 받는다. 유저는 다른 유저와 아이템을 거래할 수도 있고 아이템 마켓을 통해 아이템을 판매할 수도 있다. 게임사는 유저 간 거래에 수수료를 부과할 수도 있고 직접 아이템 거래소를 운영하여 거래를 중개할 수도 있다.

블록체인 기술의 장점에도 불구하고 기존 게임사들은 블록체인 기술 도입을 망설이고 있다. 아무런 보호 장치 없이 게임 아이템을 블록체인 상에 발행할 경우 게임 유저 간 아이템 거래에 대한 통제가 불가능해진다. 게임 아이템 거래를 통해 현금화가 가능해지면 사행성 논란을 피해갈 수 없다. 또한 아이템 거래가 투자의 수단이 될 경우 게임 아이템을 일종의 유가증권으로 해석하고 증권거래세를 부과하자는 이야기가 나올 수도 있다.

국내 게임의 경우 게임 내 거래소를 통해 현금성 자산을 거래할 수 있으면 사행성이 있다고 판단하여 청소년 이용불가 등급을 부여하고 있다. 대표적인 예로, 현금성 아이템인 다이아를 이용하여 아이템을 거래할 수 있는 리니지 M이 청소년 이용불가 등급을 받았다. 결국, 리니지 M은 거래소를 제거한 버전을 추가로 출시하여 12세 이용가 등급을 받았다.

게임 내에 거래소를 없앴다고 유저 간 아이템 거래가 일어나지 않는 것은 아니다. 이미 아이템베이나 아이템매니아 같은 아이템 거래 사이트를 통해 활발한 아이템 거래가 일어나고 있다. 문제는 안전하지 않은 아이템 거래로 발생하는 문제는 게임사가 떠안으면서, 수익은 아이템 거래 사이트가 가져가는 구조에 있다. 정부의 규제에도 불구하고 국내에는 이미 1조 5천억 규모의 게임 아이템 현금 거래 시장이 형성되어 있으나 정작 게임을 개발한 게임사는 이 시장에서 배제되어 있다.

이러한 딜레마에 해결책은 없을까? 최근 활발히 논의되고 있는 증권형 토큰(security token)이 실마리가 될 수 있다. 증권형 토큰은 주식, 채권, 파생상품, 부동산, 예술품 등 실물 자산에 대한 권리를 블록체인 상에 토큰 형태로 발행한 것을 말한다. 해외에서는 이미 Securitize, Harbor, Polymath 등의 증권형 토큰 발행 플랫폼을 통해 증권형 토큰을 발행한 사례가 등장하고 있고, 미국 증권 거래소의 인가를 받은 ATS(Alternative Trading System)에서 이렇게 발행된 토큰들을 거래하고 있다.

증권형 토큰이 비트코인, 이더리움와 같은 유틸리티 토큰(utility token)과 다른 점은 발행 및 거래 시에 증권거래법을 포함한 관련 규정을 준수한다는 점이다. 일례로, 미국의 벤처캐피탈인 블록체인 캐피탈은 2017년 4월 신규로 결성한 $50M 규모의 펀드 중 $10M을 토큰 형태로 LP들에게 발행하였다. 블록체인 캐피탈이 발행한 BCAP 토큰은 Reg D 506C를 준수하는 증권형 토큰으로 99명의 적격 투자자(accredited investor)만 투자할 수 있다.

BCAP 토큰은 증권형 토큰 프로토콜 중에 하나인 DS Protocol을 따르는데, 토큰을 거래할 때 관련 컴플라이언스를 자동으로 검사해준다. 예를 들어, Reg D 506C는 적격 투자자들만 토큰을 거래할 수 있으므로 BCAP 토큰은 KYC를 통해 적격 투자자임이 확인되지 않은 주소로 토큰을 전송하는 것을 차단한다. 또한 적격 투자자의 숫자가 99명을 넘지 않아야 하므로 현재 99명의 적격 투자자가 있으면 토큰의 일부만 거래하는 것도 차단해준다. 컴플라이언스 검사가 거래소가 아닌 BCAP 토큰 자체에 내장되어 있기 때문에 어떤 거래소에서 거래를 하든 컴플라이언스를 강제할 수 있다는 점이 기존 방식과의 차이점이다.

증권형 토큰의 컴플라이언스를 게임 아이템에 적용하면 지금까지 기술적으로 불가능했던 정교한 통제가 가능하다. 특정 게임 아이템을 성인 인증을 한 유저만 거래할 수 있도록 제한할 수도 있고, 게임 아이템을 구매한 후에 1개월 동안은 해당 아이템을 재판매할 수 없도록 강제할 수도 있다. 아이템 거래소가 아닌 게임 아이템 자체가 규칙을 강제하기 때문에 어떤 거래소에서 거래를 하든 동일한 규칙을 적용할 수 있다.

게임 아이템 자체에 컴플라이언스를 포함시키는 방법을 이용하면 게임사들이 게임 아이템 거래로 발생하는 사행성 논란에 대한 자율 규제가 가능해진다. 또한, 블록체인 상에 발행된 아이템 거래는 모든 거래 내역이 비가역적으로 남기 때문에 게임사들의 자율 규제가 구호에만 그치는 것이 아니라 실제로 준수되고 있음을 확인할 수도 있다. 필요하면 입법을 통해 규제안을 만들고 이를 강제하는 것도 가능하다.

이 글에서는 게임 아이템을 예로 들었지만, 디지털 바우처, 쿠폰, e티켓 등 다양한 종류의 디지털 자산에 대한 컴플라이언스 논의가 필요하다. 모든 디지털 자산을 상품이나 증권으로 일괄적으로 판단할 것이 아니라 디지털 자산의 종류와 성격에 따라 적절한 컴플라이언스를 정하고 이를 정책적, 기술적으로 풀어가는 식의 접근이 필요하다. 그리고 증권형 토큰의 예와 같이 블록체인 기술의 적절한 활용을 통해 이러한 문제를 해결할 수 있을 것으로 기대한다.

코드체인 도구 지원

새로운 블록체인을 만들겠다는 팀이 무척 많다. 이더리움 기반 ERC-20 토큰으로 ICO를 한 팀들도 상당수는 이더리움을 쓰지 않고 자체 체인을 만들어 쓰겠다고 계획을 가지고 있다. 확장성(scalability)를 개선하기 위한 노력에도 불구하고 아직 이더리움의 성능이 충분히 나오지 않고 DApp에 특성에 따라 기존 블록체인 플랫폼이 제공하지 않는 추가 기능이 필요할 수 있기 때문에 새로운 블록체인을 만드는 시도는 앞으로도 계속 이어질 것으로 예상한다.

그런데 블록체인을 만든다는 건 무슨 의미일까? TPS (Transaction Per Second)를 높여주는 획기적인 합의 알고리즘 아이디어만 하나 있으면 뚝딱 하고 블록체인이 나올까? ICO가 붐이던 작년 말 올해 초에는 이런 식의 접근 법으로도 몇 백억의 자금을 쉽게 모았던 게 사실이지만, 아쉽게도 블록체인은 그렇게 쉽게 만들어지지 않는다.

블록체인을 만들려면 먼저 블록체인 엔진을 만들어야 한다. 합의 알고리즘도 블록체인 엔진의 중요한 요소지만, 그 외에도 스마트 컨트랙 실행을 위한 가상 머신, P2P 통신을 위한 네트워크 스택, 블록 및 상태(state) 데이터를 저장하기 위한 데이터 구조 및 스토리지, 블록과 트랜잭션의 유효성을 확인하는 검증기 등 다양한 요소들이 유기적으로 연결되어야만 한다. 성능과 확장성을 고민하는 블록체인 기술이라면 샤딩(sharding)이나 인터체인 등도 고려해야 한다. 블록체인 엔진을 처음부터 다 만들기는 어렵기 때문에 대부분 기존 프로젝트를 포크해서 1-2개의 요소만 수정해서 사용하고 있다.

블록체인 엔진만 있다고 개발이 끝난 게 아니다. 사람들이 쉽게 블록체인을 사용할 수 있게 하려면 각종 도구 지원도 필수다. 우선, 생성된 블록 및 트랜잭션의 내용을 확인할 수 있는 블록 익스플로러가 필요하다. 블록체인 상에 발행된 디지털 자산 등을 주고 받을 수 있는 지갑도 만들어야 한다. 테스트넷을 운영한다면 테스트용 코인을 지급하는 포싯(Faucet) 사이트도 필요하다. 개발자들이 블록체인 노드를 쉽게 사용할 수 있도록 SDK도 제공해야 한다. 스마트 컨트랙을 지원하는 블록체인이면 스마트 컨트랙 언어에 대한 툴링도 필요하다.

블록체인 네트워크에 노드로 참여하는 블록 생성자를 위한 툴링도 필요하다. 작업 증명(PoW) 방식을 사용하는 블록체인 엔진의 경우, 채굴에 사용할 채굴 소프트웨어를 제공해야 한다. 또한, 하나의 블록 생성자가 여러 대의 노드를 운영할 수 있으므로 여러 노드에 대한 모니터링 및 관리 기능을 제공하는 소프트웨어도 필요하다. 이 외에도 블록체인 사용자에게 편의를 제공할 수 있는 툴링은 더 있을 수 있다. 일례로, 키를 생성하고 관리할 수 있는 코맨드라인 도구나, 블록체인 상에서 발행된 디지털 에셋을 조회하고 관리할 수 있는 소프트웨어 등도 있으면 편리하다.

코드체인은 코드체인을 쉽고 편하게 사용할 수 있도록 돕는 다양한 툴링을 제공한다.

어떤 소프트웨어든 많은 사람들이 쉽게 사용하기 위해서는 도구 지원이 필수이다. 코드체인은 블록체인 엔진 개발뿐만 아니라 엔진을 쉽게 사용할 수 있는 툴링에도 많은 시간과 노력을 투자하고 있다. 관련하여 현재는 코드체인 상에서 발행된 디지털 에셋을 쉽게 조회하고 관리할 수 있는 CodeChain Gateway 프로젝트를 준비하고 있다. 관련 내용은 다음 글에서 다시 자세히 다루도록 하겠다.

코드체인의 합의 알고리즘들

어떤 합의 알고리즘이 가장 좋은 합의 알고리즘일까? PoW(Proof of Work)? PoS(Proof of Stake)? PoA(Proof of Authority)? 사실 정답은 없다. 성능, 보안성, 분산화의 정도 등 여러 면에서 장단점이 있기 때문에 특정 합의 알고리즘이 가장 좋다고 이야기하기는 어렵다.

블록체인 네트워크를 구축할 때는 네트워크의 특성에 따라 합의 알고리즘을 선택해야 한다. 참여 노드의 숫자가 100개 이하로 제한되더라도 높은 TPS(Transaction Per Second)와 빠른 블록 확정 속도가 필요하다면 BFT(Byazntine Fault Tolerance) 계열의 합의 알고리즘이 좋고, 최대한 많은 노드의 참여가 필요가 있는 보안성이 중요한 어플리케이션이라면 PoW 합의 알고리즘을 선택하는 것이 좋다.

코드체인은 블록체인 네트워크를 셋업할 때 합의 알고리즘을 선택할 수 있다. 현재 PoA, PoW, 텐더민트(Tendermint) 등의 합의 알고리즘을 제공하고 있고, 필요하면 다른 합의 알고리즘도 쉽게 추가할 수 있는 pluggable한 아키텍처를 가지고 있다. 구축하고자 하는 블록체인 어플리케이션의 특성에 맞는 합의 알고리즘을 선택하면 된다.

현재 코드체인은 두 개의 테스트넷을 운영하고 있다.

먼저, Saluki 테스트넷은 PoA 합의 알고리즘을 사용한다. PoA는 합의에 참여하는 노드의 정체를 알고 있기 때문에, 어떤 노드가 잘못된 행동을 했을 경우 법적인 제재를 가할 수 있다. 따라서 PoS처럼 지분을 걸고 잘못된 행동을 했을 때 처벌을 하는 메커니즘이 필요 없고, 커뮤니케이션 오버헤드도 적어서 빠르게 합의에 도달할 수 있다.

또 다른 테스트넷인 Husky 테스트넷Cuckoo Cycle 기반의 PoW 합의 알고리즘을 사용한다. 각 노드는 계산을 통해 Cuckoo Cycle의 그래프 문제의 해를 찾아야 하며, 해를 찾은 노드가 블록을 생성하면 블록 보상을 지급한다. 현재 30초마다 하나의 블록을 생성하고 있고, 채굴 속도에 따라 난이도가 자동으로 조절되는 시스템을 가지고 있다.

대표적인 BFT 방식의 합의 알고리즘인 텐더민트를 사용하는 Corgi 테스트넷도 조만간 오픈할 예정이다. 텐더민트 합의 알고리즘은 1/3 이하의 노드가 비잔틴이어도 문제가 없는 합의 방식이며, 100개 이하의 노드에서 대략 1000-2000 TPS의 성능을 보여준다. 또한 확률적으로만 finality를 보장하는 PoW 합의 알고리즘과 달리 3-4초 이내에 즉각적인 finality를 보장한다는 장점이 있다. 참여 노드는 지분을 걸고 노드로 참여하고 잘못된 행동을 했을 때 지분이 삭감되는 처벌을 받기 때문에 임의의 노드가 참여할 수 있다는 점에서 PoA와는 차별화된다.

이 외에도 코드체인은 다양한 합의 알고리즘을 실험하고 있다. Algorand처럼 VRF(Verifiable Random Function) 기반으로 노드를 선출하는 합의 알고리즘도 실험 중이다. 또한, PoW 기반으로 노드를 선출하고 선출된 노드가 다시 BFT 기반의 합의 알고리즘의 노드로 참여하는 하이브리드 방식의 아이디어도 테스트하고 있다.

전세계적으로 합의 알고리즘에 대한 연구가 활발히 진행 중이기 때문에 앞으로 성능, 보안성, 분산화를 모두 개선한 합의 알고리즘이 지속적으로 등장할 것으로 기대한다. 코드체인은 여러 합의 알고리즘을 쉽게 구현하고 테스트해볼 수 있는 환경을 제공하여, 합의 알고리즘의 성능과 안정성을 실제로 검증할 수 있는 플랫폼 역할을 수행하려 한다.