관리 메뉴

개발이야기

[백서정리]이더리움 백서 내 맘대로 정리 - 초안 본문

블록체인 /백서 정리

[백서정리]이더리움 백서 내 맘대로 정리 - 초안

안성주지몬 2018. 6. 13. 17:16

예전에 이더리움 백서를 처음보고 간략하게 정리했던 것입니다.

백서를 읽어가면서 가볍게 정리하는 식으로 한 것이라 보완해야할 점이 많습니다.

추후에 보완과 수정을 걸쳐 제대로 정리 된 것을 올리려고 합니다 !! 



이더리움 백서 정리 



1. 비트코인과 기존 개념들에 대한 소개 
- 비트코인 등장 
비트코인 이전 분산화된 디지털 통화의 개념은 이미 존재해 왔음. 하지만 성공한 경우는 비트코인이 처음  
(2009년 사토시 나카모토). 분산 합의를 실제로 구현, '작업 증명' 과 기존의 알고리즘의 결합에 의해 가능해짐. 

- 비트코인 "상태" 개념 
비트코인같은 암호화 화폐의 장부는 하나의 상태변환 시스템. 현재 비트코인의 소유권 현황을 하나의 "상태"로 표현. 현재 상태와 트랜잭션을 받아 그 결과로 새로운 상태를 출력해주는 "상태변환함수"로 구성 
UTXO : "상태"는 생성되었지만 사용하지 않은 모든 코인들의 집합을 의미 

- 비트코인 채굴 
비트코인 분산 합의 과정은 네트워크에 "블록"을 계속 생성해주는 노드들을 필요로 함. 이 네트워크는 약 10분마다 하나의 블록을 생성되도록 계획. 각 블록은 타임스탬프, 논스, 이전 블록에 대한 해시값 등을 포함함. 
이전 블록 이후에 발생한 모든 트랜잭션의 목록을 포함하고 있음. 이러한 과정을 통해서 지속적으로 블록체인이 생성하며 비트코인 장부의 최신 상태를 나타내기 위해 지속적인 업데이트가 이루어짐. 
블록의 유효성 검증 알고리즘은 SHA256 해시 알고리즘을 사용. 해시값이 목표값보다 작아야 함. 작업증명의 목적은 블록 생성을 계산적으로 어렵게 만들어 sybil 공격에 대비 하기 위함. SHA-256은 전혀 예측 불가능한 유사난수 함수로 설계되어 있기 때문에 유효 블록을 생성하기 위한 유일한 방법은 블록헤더의 nonce 값을 계속해서 증가시키면서, 생성되는 새로운 해시값이 위의 조건을 만족하는지 확인하는 과정을 반복해야 한다.(brute force) 

- 머클트리 
머클 트리의 목적은 어떤 블록의 데이터가 분리돼서 전달될 수 있도록 하기 위함. 머클트리에 하위 노드들의 해시값이 상위 노드에 영향을 주기 때문에 악의적인 유저가 머클트리 최하위에 있는 트랜잭션 정보를 하나 바꾸면 상위 노드의 해시값들이 바꾸게 되므로 이 블록은 완전히 다른 블록으로 인식하게 됨. 
머클트리 프로토콜은 비트코인 네트워크를 장기간 지속가능하게 만드는 기초가 된다. 

- 블록체인 기술을 이용한 다른 응용사례 
네임코인  
2010년에 만들어진 네임코인은 '탈중앙화된 명칭 등록 데이터베이스'라고 부르는 것이 가장 좋을 것이다. 네임코인은 동일한 계정을 등록하려 할때 먼저 등록한 사람이 성공하고 두 번째 등록한 사람은 실패하도록 하였다.  

컬러드 코인 
컬러드 코인의 목적은 누구나 비트코인 블록체인 위에서 자신만의 고유한 디지털 화폐를 발행할 수 있는 프로토콜 역할을 하는 것이다.  

메타코인 
메타코인의 아이디어는 비트코인 거래를 메타코인 거래 저장에 이용하되, 상태 이동 함수 APPLY를 다르게 가짐으로써, 비트코인 시스템 위에서 운영되는 프로토콜을 갖는것이다.  

- 비트코인 스크립팅 
비트코인 프로토콜은 낮은 수준의 "스마트 계약"의 개념을 가능하게 함.(왜 낮은 수준이면 비트코인은 튜링 불완전한 언어를 사용하기 때문, 다양한 조건을 사용할 수 없음). 비트코인은 단순 스택-기반 프로그래밍 언어로 표현된다.  
비트코인 스크립트 언어의 한계점 : 튜링 불완정성, 가치 무지, 상태표현 제한, 블록체인 무지  

튜링불완전성  
비트코인 스크립트 언어는 모든 경우의 프로그래밍을 다 지원하지는 않는다. 특히 while이나 for 와 같은 순환 명령 카테고리가 빠져 있다.  
- 가치 무지 
UTXO 스크립트만으로는 인출 액수를 세밀하게 통제할 방법이 없다. 

2. 이더리움 

이더리움의 목적 : 분산 어플리케이션 제작을 위한 대체 프로토콜 만들기 위함. 이 언어를 사용하여 누구나 smart contract, state transition function 등을 생성할 수 있다.  

- 이더리움 어카운트 
이더리움에서 상태는 어카운트라고 하는 객체로 구성됨. 이더는 이더리움의 기본 내부 암호-연료. 보통 트랜잭션 수수료를 지불하는데 사용 

이더리움 상태 변환 함수  
1. 트랜잭션이 형식에 맞는지, 서명이 유효한지, 논스가 발신처 어카운트의 논스와 일치하는지를 체크, 아니면 오류 반한 
2. STARTGAS * GASPRICE 로 트랜잭션 수수료를 계산하고 서명으로부터 발신처주소를 결정한다. 발신처 어카운트 잔고에서 이 수수료를 빼고 발신자 논스를 증가시킨다. 
3. GAS = STARTGAS 로 초기화 한후, 트랜잭션에서 사용된 바이트에 대한 값을 지불하기 위해 바이트당 gas의 특정양을 차감한다. 
4. 발신처 어카운트에서 수신처 어카운트로 트랜잭션 값을 보낸다. 수신처 어카운트가 존재하지 않으면 새로 생성한다. 수신처 어카운트가 컨트랙트이면, 컨트랙트의 코드를 끝까지 또는 gas가 모두 소모될때까지 수행한다. 

- 어플리케이션  
이더리움을 이용하여 여러가지 어플리케이션을 만들 수 있다. 백서에서 소개한 어플리케이션을 살펴보면 

토큰 시스템 
스마트자산, 위조불가능한 쿠폰 등 다양한 형태의 거래 시스템을 구현 가능하게 할 수 있음. 이를 구현하기 위해서는 백서에서 설명한 "은행시스템"의 "상태변환함수"를 아무런 가공없이 사용하거나 몇 줄의 코드만 추가하여 사용할 수 있음 

금융파생상품 
스마트컨트랙트의 가장 일반적인 어플리케이션 
다만 이더-USD 변동성에 대해 다른 컨트랙트들과 환율에 대한 메시지를 주고받을 수 있는 인터페이스를 제공해야 함. 

신원조회 시스템 
블록체인을 이용하여 사용자가 공공 DB에 다른 데이터와 함께 자신의 이름을 등록하는 시스템. 이 컨트랙트는 매우 단순하게 이더리움 네트워 상에서 저장되 있는 추가만 가능한 데이터 베이스일 뿐이다. 

분산형 파일 저장소 
드롭박스와 같이 웹 상에 파일을 저장시켜주는 시스템이 이미 존재. 하지만 비효율적. 이를 분산형 파일 저장소를 통해 해결할 수 있다.  

탈중앙화된 자율조직(DAO) 
DAO의 기본적인 개념은 특정한 집합의 구성원 또는 주주들을 갖고 있는 가상 독립체가 필요한 수만큼의 구성원의 동의하에 조직자금운용 권한 및 코드 변경 권한을 갖는다는 것. 
DAO 코딩에 관한 일반적인 개요를 살펴보면, 가장 간단한 디자인은 단순하게도 구성원 2/3가 동의/거부 하였을 시 저절로 코드가 변경되는 컨셉이다.  
DAO는 탈중앙화된 커뮤니티로 유기적으로 성장가능하며, 누가 구성원인지 아닌지를 판단하는 기능을 전문가들에게 위임할 수 있도록 해준다. 

- 여러 이슈들 
GHOST 프로토콜 
GHOST 프로토콜은 가장 최신의 블록넘버를 가진 경로를 선택하도록 한다. STALE 블록(UNCLE 블록)에 대한 보상을 지금함으로서 STALE 블록을 메인테인 포함하여 DIFICULTY 상승을 유도한다.  
블록체인들이 높은 스테일 비율로 인해 보안성 저하라는 문제를 겪고 있다. 블록들이 네트워크를 통해 전파되는데 일정 시간이 걸리기 때문. 블록이 낭비되는 경우가 발생 

중압집중화 이슈 
해싱파워가 작을수록 스테일 블록이 될 가능성이 커짐. 따라서 블록주기가 짧은 블록체인에서 높은 해시파워가 높으면 채굴과정에서 사실상의 통제권을 가지게 될 가능성이 높아짐. 

TIP) 스테일 블록 
블록생성에 성공하고 검증작업도 문제없었지만 네트워크상에서 자신보다 자신보다 더 빨리 전파된 다른 채굴자의 블록에 밀려 연결되지 못한 블록. 이더리움에서 이러한 탈락블록도 주체인 블록 보상의 87.5%만큼의 보상을 줌으로서 보안성을 강화하는 역할을 수행. 
수수료 
블록체인에 올려지는 트랜잭션에 대한 검증을 위한 비용을 네트워크에 부과, 따라서 남용을 막기 위한 수수료가 필요.  
하지만 트랜잭션 수수료를 대부분 제 3자가 부담하여 '공유지의 비극' 문제가 발생하기 쉬움 

비트코인에서 큰 블록이 전파되는데 오래 걸리기 때문에 스테일 될 가능성이 높다. 하지만 이더리움에서는 GHOST 프로토콜로 인해 그 네트워크 지연에 대한 불이익은 줄어든다. 조정된 블록리미트를 통해 보다 안정적인 BASELINE을 얻을 수 있다. 

- 연산과 튜링완정성 
이더리움 가상 머신 : 튜링 완전하다.  
무한 순환, 모든 계산 수행 코딩 가능 
튜링-완전은 다루기 쉬우며, 튜링 완전성이 없으면 정확히 같은 계약으로 대체할 수 없는 한 다루기가 어렵다.  


- 통화와 발행 
이더리움 네트워크 상에서의 화폐 : 이더 
이더는 효율적인 교환을 가능하게 함, 트랜잭션 수수료 지불 방법. 

화폐발행 모델 
1.BTC 당 1000~2000개의 이더 발행.  
2.판매된 총 이더(60,102,216 ETH)의 0.099 배만큼(5,950,110)의 이더가 신규 발행됨 
3. 채굴 시점 이후, 영구히 매년, 총 판매수량의 0.26 배만큼씩을 채굴자에게 신규 발행 
4. 매년 신규 발행량이 일정함에도 불구, 발행된 총 이더에 대한 신규 이더의 발행률은 비중이 0을 향하게 됨 

- 채굴 중앙집권화  
비트코인은 SHA256 해싱 작업 무한정 반복 
1) ASIC 채굴기 이슈  
GPU 채굴기에 비해 수천배 이상의 효율을 가짐 
일반사용자들의 채굴행위가 밀리게 됨 
채굴행위가 분권화되어있었지만 '사업'으로 변질됨 

2. 채굴방식 
중앙집권화된 채굴풀(MINING POOL)  
3개의 채굴풀들이 50%에 육박하는 해시를 간접적으로 통제하고 있음 

- 이더리움의 채굴방식 
각 채굴자가 상태정보에서 무작위의 정보를 가져와 무작위로 선택된 최근 몇 개의 블록내역을 해싱 작업, 결과 값을 내놓음 

1. 이더리움 계약이 모든 종류의 컴퓨터 계산방식을 포괄할 수 있다. ASIC 자체를 무용지물 하게 만듦 

2. 채굴자들은 작업 시 전체 블록체인을 다운 받아 모든 이체내역을 검증해야 함  
중앙집권형 풀 방식을 사용할 필요가 없게됨. P2P 형식의 풀을 통해서도 가능하기 때문 

- 확장성(Scalability) 
이더리움 역시 확장성에 대한 의문이 존재 
비트코인처럼 이더리움 역시 모든 이체작업을 네트워크 상에 전체노드가 일일이 검증해야 한다는 약점이 있음. 비트코인은 현재 블록체인의 크기가 15GH에 달함. 매시간 1MB씩 증가. VISA 의 경우 2000건의 이체작업을 처리, 매 3초마다 1MB가 확장. 특히 이더리움은 화폐로서의 역활만 하는 것이 아니라 다양한 Dapp들을 제공하기에 훨씬 더 많은 문제를 야기할 수 있음 
하지만 이더리움은 '전체 블록체인 히스토리' 가 아닌 '상태'만 저장함 

이슈 
블록체인의 크기가 점점 커진다면 다수의 일반 사용자는 SPV 노드만 사용. 전체 블록체인 내역을 가진 소수의 참여자가 악의적으로 블록의 내용을 수정하는 것과 같은 조작행위가 일어날 수 있음. 즉, 완전노드가 작심하여 블록체인 조작을 시도하면 이미 늦었다고 봐야함 

해결방법 
1. 이더리움 모든 채굴자들은 완전노드가 되도록 의무화. 필요한 최소한의 완전노드 숫자를 확보할 수 있음 

2. 이체내역 검증 작업 이후 블록체인에 '중간상태 트리루트'를 도입 

3. 불완전한 블록 이슈, 블록을 검증하 위해 질의-응답 프로토콜 기법을 사용.  

- 결론  
이더리움 프로토콜은 튜링-완정한 언어를 사용하여 가상화폐의 업그레이드 버전을 구상하였다. 이더리움 프로토콜은 다양한 종류의 서비스를 설계할 수 있도록 돕는 특화된 기반이 될 것이라 믿는다.  



Comments