'에테리움'에 해당되는 글 12건

 Ethereum 의 Github 를 가보면 매우 많은 프로젝트들이 Repository 에 올라와 있는게 보이고, 매우 복잡하게 느껴진다.

 그러나 업데이트 안하고 있는 프로젝트나 다른 프로젝트의 Sub Module 들이 많이 섞여있는 상태이므로 자꾸 왔다갔다 하다보면 별로 복잡하게 느껴지지 않는다.

주요 프로젝트들에 대해서 간단히 설명해본다.

yellowpaper

The "Yellow Paper": Ethereum's formal specification

Vitalik Buterin 이 White Paper 를 쓰고있고, Ethereum 의 사상의 기술적인 Spec 이라고 할 수 있는 Yellow Paper 를 Gavin Wood 가 쓴다. 이 Yellow Paper 는 얼핏 보면 수학공식 같아 보이지만, 말로 표현할때의 해석의 모호성을 줄이기 위해 수학적인 기호를 차용한 정도이다. 복잡한 수식은 없으며 대부분 집합 기호를 통해 개념을 설명한다.

Ethereum 의 중요 개념인 Block, State/State Transition, Transaction, Gas, Contract 등에 대한 동작 방식을 정의해놓았다. Ethereum 내부의 개발자들은 이 Yellow Paper 를 보고 구현한다고는 하지만 사실 이 내용만 보고 그들의 사상을 구현하기에는 부족한 부분들이 매우 많다. 통신, 마이닝, 로직의 흐름 등은 설명되어 있지 않으므로 설계서 보다는 핵심 사상의 정의 수준이라고 해야 하겠다.

go-ethereum

Official golang implementation of the Ethereum protocol

나도 2014년 말 Ethereum 을 접하면서 Go 언어라는것을 처음 알게 되었다. Go 언어는 Chrome 의 V8 엔진 개발에 참여하고 Java Hotspot 컴파일러를 개발한 Robert Griesmer, UTF-8 과 분산 운영체제를 개발한 Rob Pike, UNIX 의 창시자라 불리는 Ken Thompson, 프로그래밍 천재라는 Russ Cox 등의 천재들이 만들어낸 매우 간결하지만 강력한, Google 이 만들어낸 걸작의 언어이다. Ethereum 의 공식 구현체 중 가장 빠르게 버전업이 되는 구현체이며, DApp 클라이언트 플랫폼으로 Go Ethereum (Geth) 를 공식화 하고있다. 코드도 매우 깔끔한 편이다.

webthree-umbrella

The umbrella project for all of C++ Web Three implementation

작년까지만 해도 C++ Ethereum 으로 불리우던 cpp-ethereum 프로젝트가 있었는데, 이 프로젝트가 webthree-umbrella 라는 이름으로 바뀌었고 git repository 구조도 바뀌게 되었다. Ethereum 의 공식 구현체이며 Repository 내 많은 submodule 들이 이 프로젝트에 dependecy 로 참조되고 있다. 나도 비록 근래에는 Java 기반의 Enterprise S/W Architect 를 했지만 2000년 부터 7년 간을 C++ 을 했었기에 주로 이녀석을 분석했었는데, 처음 코드를 보면서 "이게 뭔 C++ 이야?" 라는 생각이 들었는데, boost 라이브러리들을 많이 사용하고, C++ '11 스펙을 사용하는 관계로 C++ 98 스펙에 익숙했던 나에게는 해석에 참 많은 시간이 필요로 하게 하였다. Gavin Wood 의 해커끼(?) 보이는 코드의 복잡함들도 더러 보이며 TrieDB 쪽은 특히 Template Class를 꼬아서 쓰기때문에 해석 중에 컨텍스트를 잃어버리는 경우도 생겼다. 버그도 많은편이고 코드 복잡성은 Top 수준이다. Ethereum 은 C++ Ethereum 을 Backend 용으로 적합하고 Go 보다는 좀더 나은 성능을 원하는 경우에 사용할것을 권고한다. 비교적 자주 업데이트 되는 편이지만 작년 기준으로는 Go 대비 한발 늦는 개발 진행 때문에 Geth 와 함께 코드를 보는 경우도 있었다.

pyethapp

 forked from heikoheiko/pyethapp

이름에서 보이듯이 Python 기반의 프로젝트이다. Ethereum 은 Pyethapp 은 "학습" 목적으로 단정짓는다. (사실 작년 Frontier 발표 전에는 그런 말도 안보이더니..) 성능과 기능 보다는 Ethereum 의 동작 원리를 이해하고 분석하는데에 사용할것을 권고하고 있다. Python 은 언어도 쉬운편이니 Ethereum 의 핵심 메커니즘 맛보기 수준 정도를 원한다면 이녀석으로 시작해보는것도 괜챦을 듯 하다. 상세한 코드 주석이 세심한 배려심을 드러내고있다.

Java implementation of the Ethereum yellowpaper

작년에 파일럿 시스템을 만들 때 codebase 로 활용했던 녀석이다. 지금와서 보면 참 후회스러운 선택이었지만 일단 작년 5~6월 정도에는 매우 Simple 한 코드와 Java 의 간결성 때문에 이녀석을 선택했었다. 그러나 C++ ETH (eth) 와 Geth 대비 확연히 떨어지는 구현도를 보였으며, 심지어 Miner 는 불과 며칠 전에 Homstead Prerelease 버전인 1.1.0 버전에서야 추가 되었다. 공식 구현체가 아니므로 너무 큰 기대는 하지 않는게 상책이지만 요즘은 어떤지 확인이 한번 필요하기도 하다.

alethzero

The AlethZero Hardcore Ethereum Client

C++ Team 이 개발하고 있는 일종의 Debug 툴이다. eth 를 테스트하기에 충분한 기능들이 들어가있고, Qt 기반의 GUI 로 Tx 을 날리거나 Block, Peer, Node, Tx, Contract Code 실행, Mining 상태 등을 보여준다. C++ 팀의 주력 개발 Client 라 보면 된다. 단 Mist 와 같은 DApp Client 가 아니고, eth 의 동작을 테스트하는 목적으로 보면 되는 클라이언트이다. 

mix

The Mix Ethereum Dapp Development Tool

Mix 는 공식적인 Ethereum 의 DApp 개발도구이다. HTML/CSS/JavaScript 기반으로 DApp 을 만들고, Smart Contract 를 개발할 수 있도록 되어있다. Contract Code 를 개발하고 컴파일하고 검증할 때 사용하면 좋으며, 아래 Mist 에서 실행되는 DApp 은 Mix 로 개발하는게 순서상 맞다.

mist

Mist browser

Mist 는 Go 언어로 Go 개발팀이 만들고 있는 일반 End-User 용 Ethereum Client 이다. DApp 을 구동하는 플랫폼이며, Browser 와 유사한(내부적으로 Web View 를 갖는) 클라이언트이다. 웹 엔진과 Geth 가 통합된 형태라고 보면 되며, 향후 Light Weight Client 는 이 mist 형태로 일반 유저에게 배포될 것이다.

solidity

The Solidity Contract-Oriented Programming Language

Solidity, Serpent, LLL 은 Smart Contract 를 기술하는 언어이다. Solidity 는 C++ 팀이 개발하고 있으며, 현재 가장 잘 만들어진 Smart Contract 구현 언어이다. solc 로 Solidity 코드를 컴파일 하면 EVM Code 가 생성되도록 되어있으며, 요즘은 예제들도 상당히 많이 돌아다니므로 배우기가 더 쉬워졌다. 문법은 JavaScript 와 유사하여 러닝커브도 짧은 편이다.

Serpent 도 Smart Contract 기술 언어중에 하나이다. 문법이 Python 매우 유사하다. Solidity 다음으로 많이 사용되나 요즘은 Ethereum 에서도 Solidity 를 많이 밀고있는 상황이라 상대적으로 Serpent 는 약간 뒤쳐지는 느낌이다.

이외에 LLL 과 Mutan 이 있었는데 LLL 은 Low-Level 언어이며 현재는 더이상 발전시키지 않고있는 언어이다. Mutan 은 훨씬 이전부터 지원하지 않고있다. LLL 은 현재도 사용할 수는 있다. OP Code 의 래퍼 정도로 매우 저수준이기 때문에 간단히 코드 짜서 테스트해보고 디버깅 할때에는 LLL 을 사용할 수도 있다.

web3.js

Ethereum Compatible JavaScript API

Ethereum 의 JavaScript API 이다. 내부적으로는 JSON RPC 를 통해 eth / geth 와 통신한다. Geth/Eth 의 Javascript Console 이나 브라우져, Node.js runtime 에서 사용할 수 있는 API 이다. 특히 이 web3.js 의 spec 을 자주 보게 될것인데, ethereum 의 console 의 명령이 frontier 이전 버전은 Command 방식으로 사용하다가, 아예 Command 는 지양하도록 하며 Console 에서 모든 명령은 이 web3 JavaScript API 를 사용하도록 했기 때문이다.

diary

The Ethereum Developer logs

바로 어제 부터 글이 올라오기 시작한다. 개발일지같은 형태로 올라오는데, 급 외부 사람들과의 Communication 에 신경을 쓰고있다. 신임 C++ Team Leader 인 Christian Reitweissner 의 글을 봐도 커뮤니케이션 열심 하겠다고 하는걸로 봐서 내부적으로 뭔가 일이 있었나보다. 앞으로 자주 들러보게 될 것 같다.

wiki

The Ethereum Wiki -

Ethereum 의 기술적인 부분들은 이제 이 Wiki 로 통합되었다. 이전에는 ethereum/ethereum 프로젝트(리파지토리)에 가이드를 올렸는데, 이제는 ethereum/wiki 프로젝트로 옮겨갔다. 좀더 정리되는것 같은 느낌이 나지만 아직도 각 프로젝트 별 문서는 자체 리파지토리 내의 Wiki 를 사용하는 등 산만함이 완전히 가시지는 않았다.


위와 같이 주요 리파지토리(프로젝트) 들에 대해 알아보았다. 앞으로 블로그에서 저 프로젝트들이 종종 언급될 듯 한데 한번쯤 들어가서 Readme.md 파일이라도 읽어보는게 좋겠다는 생각이다.




반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
 2014년 하반기, Decentralized Computing 에 대한 관심과 Autonomous IoT Device 의 자율적인 협업을 위한 방안을 연구하던 중 당시 비트코인의 핵심 기술로 적용된 Blockchain 기술을 접하게 되었고, 특히 Blockchain 의 Consensus 메커니즘이 디바이스 간 자율적인 협업을 위한 핵심 메커니즘으로 작용할 수 있다는 생각으로 2014년 말 부터 Blockchain 기술을 더 깊이 연구해보게 되었다. IBM 의 ADEPT 컨셉도 이쯔음에 발표되었고 ("Device Democracy 라는 주제로") 마침 유사한 고민을 하던 중 글로벌 기업도 이러한 노력을 하고있다는 데에서 더 신이 나기도 했다.

 2015년 3월 부터는 비트코인에서 사용중인 원시적인 Blockchain 기술을 1.0으로 기준화 하고 Blockchain 2.0 이라 불리우던 Ethereum 을 집중적으로 연구하였고, PoC8 버전을 달리던 C++, Go Ethereum 을 분석하여 당시 매우 덜 구현되어있던 EthereumJ (Java) 를 CodeBase 로 하여 해석된 메커니즘을 Java 로 추가 구현 하였다.

 애초 Ethereum 의 Smart Contract 개념을 가장 중요시하게 보고 있었던터라 약 3개월 뒤에 Solidity 기반의 간단한 Smart Contract Code 를 개발하고, EthereumJ 에 Mining 기능 및 각종 Validation, Networking 을 추가하여 진본 증명 파일럿 시스템을 개발해보았다. 요즘 말하는 Private Blockchain 까지는 아니지만 Local Blockchain 을 구성하여 자체적인 Blockchain 서비스를 시험개발해 본 것이다.

 2016년에 들어서자 한국은행 총장의 신년사에서도 Blockchain이 언급될 만큼, 금융권은 Nasdaq 과 R3CEV 등의 사례를 보며 핀테크를 넘어선 글로벌 미래 금융기술을 준비하는데에 Blockchain 기술을 매우 중요한 요소로 생각하고, 기술을 응용한 비즈니스모델을 만들고자 노력중인것으로 보인다.

 역시나 발빠른 스타트업들은 이러한 금융사로 부터 펀딩을 받기 위해 노력중이나, 사실 기술 보다는 화술로 어필하고 있는 회사들도 다수 보인다. 또한 대부분 인프라가 잘 갖추어지고(많은 Client, Miner, Exchange, Full Blockchain Node) 성숙한 오픈소스 기반의 기술들이 많은 비트코인 네트워크를 사용한 Public Blockchain 으로 Transaction 을 발생 시키고 Overlay 하는 정도의 기술을 갖고있다.

 작년 중반 까지도 블럭체인 기술을 하는 대부분의 스타트업들은 비트코인과 같은 "가치화폐 창조" 라는 꿈을 갖고 시장에 뛰어들고있었다. 비트코인 네트워크에 Colored Coin 형태의 신규 토큰을 발행하거나 Alt Coin 을 만들어내고, 이 Coin 이 시장에서 가치를 인정받는 순간 "최초 발행한 발행량 x 가치평가금액" 이 그 즉시 실제 돈이 될 수 있는 "일확천금"의 기회가 생기기 때문이다. 그래서 대부분 "Coin Exchange" + "Colored Coin"/"Alt Coin" 기술에 주력을 하고 있었고 사실 지금도 상황은 마찬가지이다.

 그러나 작년 말 부터 금융권을 중심으로하여 불어오는 Consorthium Blockchain, Private Blockchain 의 필요성은, 이해와 응용 비즈니스 모델을 만들어내기 힘든 블럭체인 기술에 대해 그나마 약간 알고 있는 스타트업을 만나고 있으며, 스타트업 기업들은 이 기회를 활용하여 향후 자신들의 이상을 실현하기 위한 스폰서를 찾기 위해 많은 구애활동을 하고 있다.

 불과 지난 1월 20일, 42개 은행의 컨소시엄 회사인 R3CEV 가 Customize 한 Ethereum 으로 11개 은행을 대상으로 PoC 를 수행했다는 기사가 나왔다. IBM 은 2014년, ADEPT 컨셉을 발표할 때에도 Blockchain 기술 기반은 Ethereum 으로 못박고, Resource Sharing 은 Bit Torrent, Messaging 은 Telehash 를 조합하겠다고 발표한 바 있다. R3CEV 의 실제적인 기술진의 핵심은 IBM 의 이전 executive Architect 였던 Richard Gendal Brown 이고, Ethereum 으로 테스트해본것은 어찌보면 당연한듯 해보인다.

 블로그를 통해 Ethereum 을 기반으로 다양한 사상과 원리, 응용방법을 공유하고 그 외 Private / Consorthium Blockchain OSS 구현체들에 대해서도 이야기 해보도록 하겠다.



반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,