이더리움 [ Ethereum ] 특징
- Figure 1. 이더리움 로고, https://ethereum.org/assets
이더리움의 주요 특징
비트코인과의 차이점
이더리움의 비트코인과 가장 큰 차이점은 단순 화폐 기능을 넘어 스마트 컨트랙트(Smart Contract) 작성 및 그를 통한 DApp(Decentralized Application)개발, 배포를 할 수 있는 하나의 플랫폼이란 것이다. 비트코인 또한 스크립트를 통해 단순 송금 이상의 거래를 표현할 수 있긴 하지만 반복문이나 복잡한 논리를 표현하는데 제한이 있는 즉 튜링 불완전한 언어[1]를 제공한다. 이는 무한 루프나 장애를 초래할 만한 부하 공격을 막기 위한 의도적인 선택이었지만 그로 인해 화폐 이상의 기능을 구현하는 것에 제한이 생기게 된 것이다. 해당 제한을 해결하고자 이더리움은 Gas의 개념을 두어, 어떠한 연산과 구현도 가능한 튜링 완전한 언어를 제공하되, 일으킨 연산 및 메모리 사용량에 따라 Gas로 비용을 내게 함으로써 악의적인 연산을 방지하였다.
- Figure 2. 이더리움 transition, https://github.com/ethereum/wiki/wiki/White-Paper
탈중앙화 어플리케이션(DApp)
DApp이란 무엇일까? 기존의 Application들이 사용자가 직접적으로 이용하는 Client와 서비스 제공자가 데이터를 제공하는 Server 로 구성되어 있어서 데이터가 Server에 중앙화되어 있었다면, DApp은 Data가 탈중앙(Decentralized)화 되어 블록체인 등에 저장되어 데이터 조작, 해킹의 위험성을 낮춰주고, 기존 Server 와 같은 중개자 없이 사용자끼리 스마트 컨트랙트 하에 서로에 대한 신뢰 없이도 안전한 계약, 거래를 가능케 한다. 이더리움에서의 이러한 DApp은 기존 Web Application을 개발하듯이 HTML, Javascript를 이용해 Frontend개발을 하며 추가적으로 web3.js 를 사용하여 이더리움 블록체인 및 스마트 컨트랙트에 접근할 수 있도록 구현할 수 있다. web3.js 는 결국 사용자의 지갑과 통신하며 블록체인을 다루게 되는데, 그렇기 때문에 사용자는 Mist, Parity, MetaMask와 같이 웹 브라우징을 할 수 있는 지갑을 통해서만 DApp을 이용할 수 있다.
이더리움 어카운트 종류와 구동 원리
이더리움에는 크게 두 종류의 Account가 존재한다. 잔고 데이터를 지녀 ETH전송과 같이 일반적인 지갑으로서의 역할을 수행하며 Externally Owned Accounts라 불리는 기본 Account와 배포된 코드와 저장공간이 추가로 존재하여 스마트 컨트랙트, DApp의 역할을 할 수 있는 Contract Account이다.
Contract Account에 발생시킨 트랜잭션은 입력한 데이터, 호출한 함수에 따라 배포된 코드가 실행되게 되는데 이 코드는 여러 채굴자 노드에서 실행, 처리된다. 채굴자는 합의 알고리즘에 따른 단순 마이닝뿐만 아니라 EVM(Ethereum Virtual Machine)라는 스마트 컨트랙트를 실행시킬 수 있는 하나의 독립적인 가상머신을 함께 구동하게 되는 것이다. 이러한 스마트 컨트랙트 코드는 사람이 이해하기 쉬운 고급 프로그래밍 언어로 작성한 뒤 EVM이 이해, 구동할 수 있는 바이트 코드로 블록체인에 배포되게 된다. 대표적으로 Solidity라는 Javascript스타일의 고급언어로 작성되며, 한번 블록체인에 배포한 코드는 수정할 수 없게된다. 비트코인의 제한적이였던 스크립팅과 다르게 블록, 트랜잭션, 발신자의 주소, 잔액 등의 특수 데이터에 접근할 수 있고 이체 전송 등의 기본 함수들이 제공되어 스마트 컨트랙트를 작성하기 좋은 환경을 제공한다. 여러 Account, 조건에 의해서 트리거 되도록 하여 Voting, Auction, Multi-Sig등 까다로웠던 시스템을 손쉽게 구현 가능하며 Contract Account가 다른 Contract Account를 호출하여 의존, 연쇄적인 구현도 가능하며 그로 인해 Library형태로 재사용 가능하도록 할 수 있다. 그 예로 Data Feed용 Contract Account를 호출하여 블록체인 외의 실제 데이터를 제공받아 여러 파생상품의 구현도 가능해진다.
그중에서도 이더리움에서 최근 가장 활발한 Smart Contract구현체는 ICO(Initial Coin Offering)이라고 볼 수 있다. 토큰의 총발행량, 잔액, 전송, 인출 등 스펙이 담긴 ERC-20 규약에 따라 토큰을 구현, 발행 시 여러 지갑에서 손쉽게 이용 가능하고 손쉬운 연동이 가능하다는 장점이 있다.
이더리움 플랫폼 상 거래
거래 수수료 지불
앞서 살펴본 것처럼 이더리움은 단순히 암호화폐의 개념보다는 하나의 플랫폼에 가깝다. ETH는 이더리움의 수수료를 지불하기 위한 연료로서 쓰이게 되는 것이다. 그렇다면 이더리움의 수수료, Gas는 어떤 방식으로 계산, 지불하게 될까? 기본적으로 수수료는 트랜잭션을 발생시키는 모든 순간 발생하게 된다, 해당 트랜잭션은 단순히 다른 지갑으로 ETH나 ERC-20토큰을 전송하는 것이 될 수도 있고, 스마트 컨트랙트를 배포하거나, 배포되어있는 스마트 컨트랙트에 Data, ETH 등을 보내 스마트 컨트랙트를 구동시키는 경우가 있을 수 있다. 이때 스마트 컨트랙트를 구동하기 위해 필요한 연산자들에 대해 미리 정의된 각 연산자들의 Gas cost에 따라 사용한 만큼 계산되며 차례대로 연산자를 실행하며 Gas를 소비 하다 발신자(이용자)가 제시한 Gas Limit[2] 을 초과하여 더이상 사용할 Gas가 남아 있지 않다면 모든 연산이 취소되고 에러를 내며 트랜잭션이 종료되게 된다. 이때 소모한 Gas의 경우 발신자의 지갑에서 차감하게 되며 따라서 구동할 스마트 컨트랙트의 연산량을 고려하여 Gas가 고갈되지 않을 충분한 양의 Gas Limit 을 준 상태로 트랜잭션을 발생시키는 것이 중요하다. Gas Limit보다 실제 사용된 양이 적어 남은 Gas의 경우 발신자의 지갑으로 환불되게 되며 소비되는 Gas는 해당 트랜잭션을 검증, 실행해준 채굴자(Miner)에게 주어지게 된다.
이더리움 지갑에서 이러한 트랜잭션을 발생시킬 때 앞서 살펴 본 Gas Limit과 더불어 Gas Price, 항목을 접할 수 있을 것이다. 이는 Gas Limit과 같이 트랜잭션을 일으키는 발신자가 정하는 값으로서 모든 가스 단위에서 사용될 ETH의 양을 나타낸다. 즉 10 Gas가 소비됐다고 해서 모두 같은 가격의 ETH를 수수료로 내는 것이 아니라 발신자가 정한 Gas Price를 Gas에 곱한 양 만큼의 ETH를 수수료로 부과하게 된다. 이같은 매커니즘을 통해 수수료를 가져가는 채굴자 입장에서는 똑같은 연산, 검증이더라도 더 비싼 Gas Price를 제시하는 트랜잭션을 우선적으로 처리함으로써 시간투자 대비 최대의 이익을 얻으려 할 것이고 따라서 더 시급히 처리돼야 하는 트랜잭션을 일으킬 때는 Gas Price를 높게 주면 보다 빨리 블록에 포함되어 Confirm 받을 수 있도록 유도할 수 있다.
Gas Price의 단위를 ETH로 하기에는 너무 크다 보니 10-9 ETH를 나타내는 Gwei단위를 사용한다. 즉 1 Gwei는 0.000000001 ETH이다. 이같이 수수료나 소액결제 등 작은 단위를 표현하기 위해서 Bitcoin의 satoshi와 비슷한 개념으로 이더리움에서는 wei(10-18)를 최소 단위로서 Kwei(10-15), Mwei(10-12), Gwei(10-9) 등의 단위를 사용한다.
이더리움의 한계 및 대안
51% 공격
현재 2017년 기준으로 Homestead단계에 있는 이더리움은 합의 알고리즘으로 POW(Proof of Work)인 ethash를 사용한다. 기존 비트코인의 합의 알고리즘의 경우 단순한 연산의 반복만으로 Work 가 가능하여 일반 PC가 아닌 마이닝을 위한 ASIC(주문형 반도체)를 제작하여 특정 소수가 채굴량을 독점할 위험이 존재한다. 이같이 ASIC남용을 통한 하드웨어 경쟁이 심해지면 특정 집단이 채굴량의 51% 이상을 차지 할 경우 블록체인의 조작이 가능해지는 51% 공격이 발생 할 수 있으므로 ethash알고리즘은 이같은 합의가 중앙화될 수 있는 문제점을 해결하고자 ASIC을 제작할 수 없도록 Memory 연산을 늘리되, 검증은 쉽게 할 수 있도록 하고, GPU연산에 친화적으로 설계하였다. 구체적인 방식으로는 매 30,000 블록마다 DAG라는 완전 다른값의 1GB 의 데이터를 생성하여 Work에 사용하도록 하여 많은 Memory 용량과 IO가 요구된다. 하지만 이같은 POW 형식의 합의 알고리즘은 전기 등 많은 에너지와 컴퓨팅 자원을 사용하게 됨으로써 이더리움은 최종 세레니티(Serenity)단계에서는 Casper라 불리는 POS(Proof of Stake) 방식으로 전향하게 된다. 하지만 합의 알고리즘의 변경은 기존 마이닝 풀 생태계에 혼란을 줄 수 있으므로, 기존 POW 방식에 일정 주기로 한 번씩 POS 를 섞는 hybrid 방식을 거쳐 점진적으로 POS로 넘어갈 계획을 가지고 있다.
확장성(Scalability)
최근 대형 ICO들로 인하여 순간적으로 많은 트랜잭션이 몰리며 블록체인에 많은 지연이 발생하여 이더리움의 확장성(scalability) 문제가 중요한 화두로 올라왔다. 앞서 다룬 POS 알고리즘인 Casper 가 적용되더라도, POW에 비해 상대적으로 속도 향상이 있을 수 있지만, 확장성을 초점으로 이더리움 팀 내에서 공식적으로 연구되고 있는 방안으로는 샤딩(Sharding)과 플라즈마(Plasma) 가 있다. 샤딩이란 하나의 커다란 블록체인을 유지하는 것이 아닌 여러 조각(Shard)으로 나누어 저장하여 병렬적으로 처리될 수 있도록 하는 방안이다. 간단하게 예를 들었을 때 0x1 로 시작하는 지갑 주소에 대한 Shard, 0x2 로 시작하는 주소에 대한 Shard와 같은 방식으로 나눴을 때 같은 Shard내에 있는 지갑끼리의 트랜잭션은 해당 Shard안에서만 처리될 수 있어서 병렬처리로 인해 속도 향상을 가져올 수 있다. 하지만 다른 Shard에 존재하는 지갑끼리의 트랜잭션을 처리하는 Cross shard communication 문제와 하나의 Shard의 대다수를 특정인이 차지해 버리는 Single shard takeover attacks 등 안정적으로 적용하기에는 해결할 문제가 많아 지속적으로 연구, 개발이 진행 중에 있다.
- Figure 3. 샤딩, https://github.com/ethereum/wiki/wiki/Sharding-FAQ
플라즈마(Plasma) 는 블록체인을 트리 형태로 무한히 확장하여 각 하위 블록체인에 특정 목적의 트랜잭션과 데이터를 담고 Root체인에는 최소한의 검증용 데이터만 저장함 블록체인 공간 효용성과 처리 속도를 크게 높일 수 있게된다. 또한 Map-Reduce[3] 방식으로 각 서브 체인들에 대해 분산 병렬 연산을 통해 목적에 따라 빠른 결과를 얻을 수 있게 한다. 아직 Paper 만 나와 있는 상황에서, 실질적인 코드가 공개되진 않았지만 추후 개발 및 공개가 된다면 플라즈마를 이용하여 빠르고 확장성이 중요한 블록체인 시스템 시스템을 구현할 수 있게 될 예정이며 최근 omisego 또한 플라즈마를 통해 VISA를 뛰어넘는 TPS(Transaction per sec) 를 구현할 계획을 밝혀 주목을 받은 바 있다.
- Figure 4. 플라즈마, Joseph Poon, Vitalik Buterin, Plasma: Scalable Autonomous Smart Contracts
공식 프로젝트는 아니지만, 외부 팀에서 진행되는 비트코인 Lightning Network의 이더리움 판이라고 볼 수 있는 Raiden Network가 있다. 상점이나 거래소 등 트랜잭션이 빈번하게 일어나는 사례에서 매 트랜잭션을 블록체인에 기록하면 승인 시간 및 수수료 또한 계속 발생하게 되니, Off-Chain 상태에서 여러 트랜잭션을 처리한 후 최종 잔액만 블록체인에 기록하는 방식으로 볼 수 있다. Raiden Network 에서는 ERC-20 토큰에 대해서 Off-Chain 트랜잭션을 지원하여 다양한 사례에 적용할 수 있을 것으로 본다.
이더리움의 공식 Paper로는 비트코인의 개념과 함께 이더리움 기본 구조, 특징, 활용을 설명하는 White Paper와 더불어 이더리움의 기술적인 상세 구조와 스펙을 설명하는 Yellow Paper가 존재한다. 책에 담기지 못한 이더리움에 대한 보다 상세한 내용은 위 문서 등에서 참고할 수 있다.
[1]:튜링 완전성이란 특정 문제를 풀기 위한 알고리즘과 무한한 메모리가 제공된다면 어떠한 계산 문제든 풀 수 있는 머신임을 나타내며 이를 위해 논리적 제한 없이 알고리즘을 구현 가능한 언어를 튜링 완전한 언어라고 볼 수 있다
[2]:이더리움 백서(White Paper) 등 일부에서는 startGas 로 표기된다.
[3]:맵리듀스(Map-Reduce)는 구글에서 대용량 데이터 처리를 분산 병렬 컴퓨팅에서 처리하기 위한 목적으로 제작하여 2004년 발표한 소프트웨어 프레임워크다. https://ko.wikipedia.org/wiki/맵리듀스
본 원고의 무단 복제 및 변경을 금하며, 기타 문의는 메일 바랍니다.
자세한 설명 감사합니다