2014년 서울이더리움밋업을 처음 조직한 정우현(atomrigs)씨가 지난 3~5일 캐나다 토론토에서 열린 이더리움 개발 컨퍼런스 에드콘(EDCON) 참관기를 보내왔다. 미국 텍사스에 거주하는 사업가인 정씨는 지금도 일년에 한 두 차례 한국에 와 서울이더리움밋업에 직접 참석하곤 한다. 서울대 언론정보학과를 졸업했지만, 30대 후반의 나이에 프로그래밍 공부를 시작했다.

_______________________________________________


암호경제학의 개념에 대해서 여러 발표들에 걸쳐서 논의를 했었는데, 그 만큼 블록체인을 이해하는데 있어서 핵심적인 개념이기 때문이다. L4사의 조쉬 스타크(Josh Stark)의 강연도 초보자들이 암호경제학을 이해하는데 도움이 된다.

강연의 내용은 3가지이다. 우선 암호경제학이 무엇인지에 대한 오해들을 지적하고, 암호경제학이 무엇인지 정의를 하고자한다. 마지막으로 왜 이게 중요한지를 정리한다.

암호경제학은 암호화폐의 가격트렌드를 분석하고 언제 이더를 사야되는지 말아야 되는지를 분석해주는 도구가 아니다.

뿐만 아니라 암호경제학은 단지 암호화폐와 토큰같은 디지털에 적용된 경제학은 아니다. 예를 들어 기존 경제학에서 사용하고 있는 화폐통화량이나 재정정책에 관련된 논의를 암호화폐에 적용해보는 그런 게 아니라는 것이다. 또는 여러가지 코인경제에 대한 미시경제적인 분석 또한 아니다.

암호화페와 토큰들은 분명히 경제학적 연구와 분석의 대상들이고 이 시장들은 독특한 기능과 속성들을 가지고 있다. 하지만, 이러한 종류의 시장에 대한 분석과, 금융적 인센티브와 관련해 사람들이 어떤 선택을 하는지를 연구하는 것은 여전히 단지 “경제학”일 뿐이다.

그렇다면 암호경제학이란 도대체 무엇인가?

암호경제학이란 경제적 메카니즘을 사용해 분산 시스템을 만들기 위한 응용과학이라 할 수 있는데, 여기서 이 분산시스템의 주요한 속성들이 경제적 인센티브에 의해 보장받고, 경제적 메카니즘은 암호학에 의해 보장받는다.
이 정의의 구성요소를 하나씩 더 구체적으로 살펴보자.

응용 과학이라는 것은 암호경제학이 무언가를 만드는데 관한 것이라는 것이다. 예를 들어 비트코인, 이더리움, PoW, PoS, 스테이트 채널, 플라스마, 샤딩등을 만들기 위해 이론적인 분석과 도구들을 사용하는 매우 실용적인 학문이라는 점이다. 추상적인 이론을 사용한다고 해도 이를 적용한 사람들에게 유용한 어떤 어플리케이션을 만들기 위한 목적으로 사용한다.

둘째, 분산시스템을 만들기 위해 경제적 메커니즘을 사용한다는 것은 어떤 의미일까?
암호경제학은 메커니즘 디자인과 많은 유사성을 가지고 있는데, 메커니즘 디자인은 “리버스 게임 이론(reverse game theory)이라고도 불린다. 게임 이론에서는 주어진 상황을 하나의 “게임”으로 보고 각 참여자들의 최선의 전략을 분석하고자 한다. 메커니즘 디자인에 있어서, 우선 우리가 원하는 결과를 설정하고, 하나의 게임 시스템을 만드는데, 이 때 각 참여자가 자신의 이익을 위해 행동한다고 전제할 때, 이 시스템이 앞에서 설정한 결과를 산출할 수 있도록 하는 것이다.
즉 이기적 개인이 자신의 이익 실현을 위해 최선을 다할 때, 시스템 전체 레벨에서는 미리 설정한 원하는 결과에 도달할 수 있도록 한다는 것이다.
메커니즘이론에 대한 참고로 이 기사를 읽어보는 것도 도움이 될듯하다.

이러한 시스템 프로토콜의 주요 속성이 경제적 인센티브에 의해 보장받는다는 것은 어떤 의미일까? 예를 들자면, 비트코인이나 이더리움에서 내일 새로운 블록이 생산될 것이라는 것을 어떻게 보장할 수 있는가 하는 문제이다. 내일 블록들이 계속 생산될 것이라고 믿는 이유는 사람들이 블록에 대한 보상이라는 경제적 이득을 얻기 위해 계속 활동을 할 것이라고 믿기 때문이다. 만일 사람들이 아무도 추가적인 경제적 보상을 기대하지 않는 그런 상태가 된다면, 내일 비트코인 블록이 더 이상 생산되지 않을 수도 있다. 그래서 어떤 속성을 보장하는 것을 경제적 용어로 표현할 수 있게 된다. “만일 누군가가 비트코인에 대해 51% 공격을 하고자 한다면 최소한 x 만큼의 비용이 필요하다.”

여기서 경제적 메카니즘은 다시 암호학에 의해 보장받는다는 의미는 무엇일까? 예를 들면 비트코인의 경우에 SHA256 이라는 암호학적 해시 알고리듬이 “작업(work)”이 이루어졌다는 것을 증명하는데 사용한다거나, 일방향 해시함수를 사용한 퍼블릭-프라이빗 키 시스템이 비트코인의 배타적 소유를 가능하게 한다는 것이다. 이러한 암호학적인 메카니즘 없이는 비트코인이 작동할 수가 없다.

암호경제학이 경제적 인센티브와 암호학에 의존함으로써 이러한 분산 시스템을 가능하게 한다는 것이다. 암호학적 원리는 어디에서나 똑같이 작동할 수 있다는 매우 높은 수준의 확신을 줄 수 있고, 사람들이 경제적 인센티브를 예측가능하게 한다는 점에서도 매우 높은 수준에서 신뢰할 수 있다. 이런 이유들로 암호경제학이 이러한 분산 시스템을 반드는 데 매우 유용하다는 것이다.

암호경제학은 여러방면에 사용될 수 있는데, 우선 합의알고리듬을 만드는 데 사용된다. 한 시스템의 특정한 상태에 대해 서로 신뢰할 수 없는 다자 간에 어떻게 합의에 이를 수 있도록 메커니즘을 설계할 수 있는가? 어떻게 이것을 가장 효율적으로 만들 수 있을까? 이런 문제들에 대한 해답을 암호경제학을 통해 찾을 수 있다.

스테이트 채널, 플라즈마, 트루비트 같은 레어이 2 스케일링 솔루션들도 암호경제학이 적용된 사례들이다.

다른 여러가지 어플리케이션들과 프로토콜들에서도 암호경제학이 적용된다. 예측시장, 경매시스템, p2p 연산과 저장공간과 같은 시스템에서 참여자들이 어떻게 상호협력적으로 참여할 수 있도록 인센티브 메커니즘을 설계할 것인가에 이용된다.

이러한 암호경제학에 대한 이해가 중요한 것은 많은 사람들이 블록체인을 어떤 마술같은 것으로 생각하는 오해를 불식시킬 수 있기 때문이다. 블록체인에 한번 기록된 것은 절대 바꿀 수 없다고 생각하거나 비트코인은 오직 수학에 의해서 보장받는다고 생각하는 것은 잘못된 것이다. 블록체인은 특정한 전제 아래서 암호학과 경제적 인센티브 메카니즘에 의해 예측가능한 형태로 작동한다고 보는 것이 올바른 것이다.

암호경제학은 마술이 아니다. 이것은 융합적(interdisciplinary) 과학일 뿐이다. 경제학쪽에서는 암호학이 생소할 것이고, 반대로 암호학을 이용하는 컴퓨터 과학에서는 경제학적 개념의 사용에 거부감이 있을 수도 있지만, 이것의 적절한 융합적 사용에 의해 블록체인이 가능하게 된다.

조쉬는 하나의 블록체인은 미래에 중단될 수도 있지만, 엄청난 것들을 만드는 데 사용될 암호경제학적 지식은 파괴시킬 수 없다는 점을 강조하는 것으로 강좌를 끝낸다.

매우 추상적인 수준에서의 암호경제학 개념에 대한 강좌였지만, 블록체인이 순수 수학에 의해서만 유지되는 메카니즘이 아니라는 점을 좀 더 분명하게 부각시키는 내용이었다. 한편으로는 게임이론적 메커니즘에 의해 정의되는 미래의 개연성이라는 개념은 순수 법칙적인 인과관계로서의 결과를 찾으려는 사람들에게는 다소 실망스러울 수도 있다. 그리고 게임이론이 전제하는 플레이어들의 속성, 즉 이기적 이익을 위해 최선의 전략을 찾으려는 주체의 합리성이 얼마나 일관성을 지니고 있는 것인가에 대한 의문도 든다. 사회적 주체를 정의하고 그들의 의식과 행동을 둘러싼 힘의 관계를 어떻게 보는가에 따라 게임이론이 전제하고 있는 플레이어도 그리 단순하게 규정 되기 힘든 면도 있을 것 같다.

 

플라즈마 체인에 대한 이해와 활용


 

다음은 데이빗 노트(David Knott) 의 플라즈마 강의이다. 요즘은 이더리움에서 플라즈마 이야기 안하면 할 이야기가 없을 정도로 이에 대한 관심이 지대하다. 데이빗은 오미세고(OMG)에서 플라즈마체인 개발에 전념하고 있는 개발자인데, 강연을 할 때 보면 입으로 하는게 아니라 거의 몸으로 한다고 말해도 좋을 정도로 활기차다.

플라즈마 체인의 가장 큰 관심은 블록체인의 성능을 향상시켜서 최소한 초당 처리할 수 있는 트랜잭션 수에 있어서 크레딧카드보다는 나아야 되지 않겠냐는 것이다. 물론 탈중앙성 원칙을 최대한 고수하면서 말이다.

플라즈마의 핵심개념은 느린 이더리움 메인체인에 담보를 컨트랙트에 담아 둔후, 이를 바탕으로 빠른 플라즈마체인에서 트랜잭션들을 처리하다가, 문제가 발생하면, 메인체인에 가서 보관된 담보에 클레임할 수 있게 한다는 것이다.

그런데 플라즈마체인에서 일어나는 상태(State)변화가 메인에 계속 업데이트 되어 기록되지 않으면, 나중에 메인체인의 담보에 대해 클레임을 걸 경우, 최종 플라즈체인의 상태를 확인할 수 이가 없게 된다. 따라서 플라즈마체인에서 일어난 상태 변화를 메인체인에 기록해야 되는데, 만일 그냥 모든 트랜잭션을 개별적으로 올린다면 플라즈마 체인을 사용하는 효율성이 다시 없어지게 된다. 그래서 플라즈마 체인에서 일어난 상태변화를 전부 모아서 뭔가 압축을 할 수 있는 기법을 사용해 메인체인에 기록해야 될 필요가 생긴다.

플라즈마 체인에 있는 여러 개별적인 트랜잭션들이 일으키는 상태변화를 모두 모아서 매우 효율적인 포맷의 데이터로 압축해 이를 메인체인에 기록해야 된다.

이러한 압축은 기본적으로 해시함수를 사용한다. 긴 인풋데이터가 해시함수를 통하고 나면 정해진 짧은 길이의 해시문자열로 변환되게 된다. 이러한 함수를 이용해 각 트랜잭션의 내용들을 해시함수를 사용해 줄이고, 이들 해시값을 두개씩 묶어서 다시 해시를 뜨는 과정을 통해 전체 상태변화를 최종적인 하나의 해시값으로 만들어 낼 수 있다. 보통 블록에서 트랜잭션을 묶어서 루트해시를 구하는 머클트리 방식이다.

머클트리외에도 블룸필터가 사용되는데. 바이너리 멤버쉽 증명(Binary proof of membership) 기법으로 이용된다.  즉 하나의 데이터 값이 주어졌을 때, 이것이 어떤 데이터셋에 포함되어 있는지 여부를 확인해주는 효율적인 기법이다. 블룸필터의 기본원리에 대해서는 이 문서를 참조하라. 

Priority Queues는 플라즈마체인에 부정이 생겨서 메인체인에서 담보를 찾아가는 exit이 이루어질 때 악의의 공격자보다 피해자의 클레임이 먼저 처리될 수 있도록 우선권을 부여하는 장치라고 한다.

플라즈마체인(그림에서 Child Chain)에서 상태4에서 부정이 일어난 경우, 루트체인에 기록된 상태3을 기준으로 exit 하는 그림이다.  플라즈마체인에서는 부정이 일어난 상태4이후에도 체인이 계속 연결될 수 있지만, 피해자들은 이미 상태3을 기준으로 exit 하게 됨으로써 손실을 당하지 않게 된다.

플라즈마 체인은 궁극적으로 모든 스마트컨트랙의 상태변화 전체를 메인체인에 압축해 기록하려는 목표를 가지고 있지만, 상당히 복잡한 기술적 해결과제들이 여전히 많이 남아 있다. 현재는 단순한 코인전송 기록을 추적하거나, 특정한 대상의 비교적 단순한 상태변화만을 담는 정도 방법으로 플라즈마 캐시에 대한 연구가 많이 진행된 정도이다.

플라즈마, 특히 플라즈마 캐시는 비동질적(Non-fungible) 자산의 효과적인 추적에 적합하다. 예를 들면, 크립토키티 같은 게임에서 모든 고양이는 전부 유니크하다. 이들 자산의 소유권 변화에 대한 추적을 플라즈마 체인에서 쉽게 관리할 수 있다. 최근에는 Loom Network에서 플라즈마 캐시를 이용해 이러한 게임 아이템이나 캐릭터의 상태를 추적하는 체인을 만들기도 했다.

매달 정기적으로 일어나야 되는 반복적 페이먼트 시스템의 구축에도 활용될 수 있다. 특히 소액의 잦은 결제가 반복적으로 일어나면 트랜잭션 비용을 많이 절감할 수 있게 된다.

플라즈마체인에 프라이버시 솔루션인 영지식증명 기법 등을 활용해 허가형 체인으로 만들 수도 있다.

플라즈마 백서에 나오는 플라즈마 체인은 많은 차일드체인들로 분화되는 하이어라키 구조를 가진 것으로 묘사되지만, 샤딩기술이 발전함에 따라, 매우 큰 통합적인 플라즈마체인의 구현도 가능하지 않을까 보고 있다.

 

데이빗의 강연은 모두가 플라즈마체인을 더 연구해서 각자의 플라즈마 체인을 만들어 보라는 것으로 매듭을 지웠다. 처음에는 개발에 참여하면서 스스로도 무슨 말을 하는지 잘 이해가 되지 않지만, 지속적인 토론과정에서 점차 개념을 이해하기 시작했다고 한다. 그리고 무엇보다 직접 만들어 보는 것이 배우는 가장 빠른 방법일지도 모르겠다는 생각이 든다.

 

Turbo-Geth: 고성능 이더리움 클라이언트


그 다음 세션은 이더리움 클라이언트중 가장 많이 이용되고 있는 geth를 성능을 많이 향상시킨 turgo-geth 개발과 관련된 발표이다.

Geth의 데이타 트리구조와 데이터의 처리와 검색과정에 대한 개선을 통해 많은 성능을 향상을 이루었다고 한다. 자세한 내용은 원래의 발표자료를 참조하는 것이 좋을 듯 하다.

현재 geth에서 사용하고 있는 패트리시아 트리는 트랜잭션수가 많아짐에 따라 메모리 요구량이 매우 많이 증가하고 때로는 메모리에서 언로딩을 해야 되기 때문에 성능에 지장을 많이 주게 된다고 한다.

Turbo-geth에서는 key 값을 일일히 다시 해시값을 계산해서 구하는 것이 아니라, 미리 계산된 값들을 키의 일부로서 포함시켜서 데이터베이스에 저장한다. 그래서 해당 데이터 패스가 메모리에 로드되어 있지 않은 경우에도 geth의 패트리샤 트리보다 훨씬 빠르게 Range query를 통해 필요한 키-밸류 페어를 찾아 올 수 있게 된다는 것이다.

Geth에 개선할 수 있는 점들이 많다는 점을 보여주어, 앞으로 클라이언트 성능 향상에도 더욱 많은 관심이 몰릴 것이라 생각한다.

<6편에서 계속>

제보, 보도자료는 contact@coindeskkorea.com
저작권자 © 코인데스크코리아 무단전재 및 재배포 금지