이더리움 백서 요약

이주형·2021년 3월 22일
0
post-thumbnail

비트코인의 역사

탈중앙화 디지털 화폐는 이미 예전부터 꽤 오랫동안 존재해오던 개념이다.
몇가지 예시를 들자면,

1. 1980~90년대 익명 e-cash protocol

chaumian blinding 이라는 기술을 사용하여 높은 보안성을 유지하며 화폐를 발행했지만,
중개인에 과도한 의존성을 띄었기 때문에 인기를 얻는데 실패했다.

2. 1998 Wei Dai's B money

처음으로 암호를 풀어 화폐를 생성한다는 개념을 소개했던 기술이다. 하지만, 이 역시도 탈중앙화를
구현에 대해 큰 진전을 보이지 못하였다.

3. 2005 Hal Finney의 reusable proofs of work 개념

앞서 언급했던 b-money의 기술과 Adam Back의 해쉬퍼즐 암호를 결합하여 암호화폐의 초기컨셉을
제시하였으나, 이를 구현하기 위한 엄청난 컴퓨팅 파워를 해결할 기법을 제시하지 못하였다.

이 과정을 거쳐 비로소 2009년, Satoshi Nakamoto 라는 사람에 의해 처음으로 기존의 단점들을 모두 보완한 암호화폐를 구현할 기술이 나오게 되었다.
그는 proof of work(작업증명) 라는 것을 활용하여 이를 구현하였는데,
이는 기존에 가지고 있었던 두가지 문제를 말끔히 해결한다.

상태 변환 시스템으로서의 비트코인

기술적인 관점에서 비트코인은, 거래가 이루어질 때마다 상태가 변하는 상태변환시스템이라고 볼 수 있다.
A가 B에게 X만큼을 보낸다고 했을 때, 비트코인은 상태변환함수를 실행시켜, A의 계좌에서 X만큼을 빼고, B의 계좌에
X만큼을 추가하는 행동을 할 것이다. 혹은 A를 확인했더니 X만큼의 돈이 없으면, 에러를 반환하는 행동을 진행할 것이다.

APPLY({ Alice: $50, Bob: $50 },"send $20 from Alice to Bob") = { Alice: $30, Bob: $70 }

대략 이런 코드를 실행할 것이다.

APPLY({ Alice: $50, Bob: $50 },"send $70 from Alice to Bob") = ERROR
물론 A에 그만큼의 돈이 없으면 이렇게 실행할 것이다.

UTXO란?

utxo는 Unspent Transaction Outputs 의 약자로, 아직 사용하지 않은 금액이란 뜻이다.
우리가 가상화폐를 상상해보면, 왠지 원하는 만큼 떼어서 보낼 수 있을 것 같고, 마음대로 잔액을 관리할 수 있을 것만 같은 생긱이 든다. 하지만, 실제로 비트코인은 잔액을 자유롭게 나누지 못한다. 현실에서 누구에게 5천원짜리 지폐와 1000원짜리 지폐를 받았으면, 화폐를 바꾸지 않는 이상 3000원짜리 물건을 한번에 결제하지 못하는 것처럼, 비트코인도 돈을 UTXO 단위로 받게 된다. 즉, 만약 사용자 C가 A에게 2BTC를 받고, B에게 3BTC를 받았다면, C에게는 5BTC짜리 지폐가 생기는 것이 아니라,2BTC, 3BTC 이렇게 잔액이 채워지게 된다. 이렇게 지갑에 있는 잔액 덩어리들을 일컬어 UTXO라고 부르게 된다.

이제 백서에 있는 예시로 돌아와 보자

앨리스가 11.7BTC를 밥에게 보내고 싶다고 하자. 그렇다면 앨리스는 본인의 지갑에 있는 UTXO을보면서 최대한 11.7BTC에 가깝게 UTXO들을 모을 것이다. 하지만, 보통은 정확히 11.7BTC를 딱 맞추기는 힘들다. 할수없이 그녀는 6, 4, 2 짜리 UTXO들을 더해서 12 를 만들어 밥에게 거래신청을 하게 된다. 이후, 그녀는 0.3BTC를 거슬러달라는 거래는 다시 요청하여 0.3BTC를 거슬러 받게 된다.

만약 이 거래가 기존의 은행과 같은 제3자의 기록을 통해 이루어진다면, 이는 사실 큰 문제가 되진 않는다. 하지만 이를 비트코인 상에서 실현시키기 위해선 조금 다른 접근이 필요하다. 비트코인에서는 든 거래들을 블록단위로 기록을 하게 된다. 블록체인 네트워크는 보통 10분에 한번씩 블록을 생성하는데, 블록에는 크게 4가지 정도를 포함하게 된다.

  1. 타임스탬프(현재 시간을 기록해주는 장치라고 보면 된다)
  2. 논스
  3. 해시된 기존 블록에 대한 정보
  4. 이전 블록 이후에 발생한 모든 트랜잭션들

거래가 이어지면서 이런식으로 형성된 블록들이 꼬리에 꼬리를 물고 체인을 형성하게 된다.
이런 형태로 구성된 체인은 오직 그 이전블록을 가리키는 정보만에 의해 연결되어 있는 상태로 유지된다.

채굴이란?

51퍼센트 어택이란?

머클트리란?

다른 블록체인 애플리케이션들

블록체인 기술은 다른 방식으로도 다양하게 응용되어 왔다.
그 예시들이 바로 아래 있는 여러 코인들이다.

1. NameCoin

2010년도에 만들어진 namecoin은 이름 그대로 블록체인 상에 명칭을 등록할 수 있는 방식의 코인이다.

2. Colored Coin

컬러드 코인은 사용자가 본인만의 코인을 발행 할 수 있게 해주는 프로토콜이다. 본인만의 색깔로 화폐를 발행하여
이를 가지고 거래를 진행할 수 있다.

3. MetaCoin

메타코인은 비트코인 프로토콜을 기반으로 만들어져, 비트코인과는 다른 거래함수를 이요하여
금융 계약, 증명 혹은 탈중앙화된 거래를 위해 만들어졌다.

비트코인의 약점

앞서 본 것 처럼 비트코인은 여러 방면에 사용되지만, 비트코인에는 몇개의 취약점이 있다.
튜링 불완전성 : 비트코인은 스크립트 언어 기반인데, 이는 프로그래밍에 있어 문제점들을 만든다. for문이나 while 문 같은 순환문을 실행하는데 제한이 있는 등 한계가 있다.
가치 무지 : 비트코인상에서의 화폐는 가치가 오르락내리락하게 된다. 이 때문에 비트코인의 가치를 정해줄 제 3의 금융시스템이 있어야만 한다.
상태표현제한 : UTXO를 활용하여 보여질 수 있는 상태는 사용되거나 안되거나 뿐이다.

이더리움

분산제작 어플리케이션을 위한 프로토콜이다. 빠른 개발시간, 여러 어플리케이션을 위한 보안, 효율적인 상호작용에 중점을 두고 개발이 되엇다. 또한, 비트코인과 다르게 이더리움은 튜링완전 언어를 내장하여 개발자가 임의의 규칙, 트랜잭션 형식, 상태변환 함수 등을 생성 할 수 있게 하여 비트코인의 단점을 보완하였다.

이더리움은 어떻게 구성되어 있는가?

이더리움은 아래 규칙들을 따른다

간결함
공용성
모듈화
차별 금지

와 같은 규칙들을 따른다.

이더리움 계좌

이더리움에서의 상태는 account라고 하는 오브젝트로 구성이 되어있다. 이는 각각 20바이트의 주소가
있으며 이를 통해 계정간의 거래가 이루어진다.
이더리움의 계정예는 4가지 필드가 있다

논스(거래가 중복하여 이루어지지 않도록 해준다)
이더 잔액
계좌 컨트랙트 주소
계좌 저장소

ether는 이더리움에서의 내부연료로서 작동을 하게 되고, 거래를 실행시킬때 이 이더를 소모하게 된다.

이더리움에는 두가지 계정이 존재하는데, 하나는 외부 소유 계정, 그리고 하나는 컨트랙트 계정이다.
외부 소유 계정은 말 그대로 사용자의 지갑과 같은 계정이다. 외부소유계정은 트랜잭션을 승인할 수 있고,
계정간의 거래를 서로 주고받게 된다.

계약 계정은 스마트컨트랙트와 같은 계약을 실행할 때 사용되는 계정이다.
이 스마트컨트랙트는 외부소유계정에 의해 만들어지게 되는데, 외부소유계정이 스마트컨트랙트를 만들고,
이를 계약계정에 보내면, 계약계정은 그저 이를 실행하는 것이다.

메세지와 트랜잭션

이더리움에서 메세지는 외부소유계정에서 보내지는 서명된 데이터패키지를 뜻한다.
메세지는 이렇게 구성이 되어있다.
메세지 수신자
메세지 송신자
전달할 이더의 양
선택적 데이터 필드
StartGas 값

이더리움의 컨트랙트는 코드에 컴파일될 실행파일이라기보단, 호출이 왔을때 필요한 작업을 수행해주는 수행원에 가깝다.
이더리움의 블록과 비트코인의 블록 또한 차이를 보인다. 이더리움 블록은 트랜잭션 리스트와 가장 최근 상태의 복사본을 가지고
있게 된다.

이더리움을 활용한 애플리케이션

이더리움을 통해서 크게 세가지 종류의 어플리케이션을 제작할 수 있다.

  1. 금융 어플리케이션
  2. 준금융 어플리케이션
  3. 금융 외 어플리케이션

이외 어플리케이션

  1. 예금용 전자지갑
  2. 작물보험
  3. 탈중앙화 데이터피드
  4. 클라우드 컴퓨팅
  5. p2p 도박
  6. 예측시장
  7. p2p 장터

문제점과 해결책

수정된 GHOST 프토로콜 도입

GHOST 는 Greedy Heaviest Object subTree 의 약자인데, 이는 fork 현상이 발생했을 때 더 무거운 체인을 메인으로 선택하는 프로토콜이다. fork 현상은 두명의 채굴자가 동시에 같은 블록을 채굴했을 때, 분기되는 현상을 말한다. 이렇게 된다면 둘 중 하나만 사용하게 되는데, 이 때문에 한개의 블록채굴은 낭비되는 현상이 발생한다. 과거 비트코인은 10분에 한번씩 블록을 생성하는데, 이더리움은 이에 비해 약 12초마다 새로운 블록을 생성한다. 이렇게 된다면 분기현상이 비트코인보다 자주 일어나게 된다. 이를 막기 위해 대입한 것이 GHOST 프로토콜이다. 낭비되는 블록에 대한 보상을 지급함과 동시에 가장 긴 체인이 아닌 가장 무거운 체인을 채택함으로서 짧은 블록생성 주기로 생기는 보안성의 문제를 막는 것이다.

채굴의 중앙집권화

기존에는 개인이 컴퓨터로 채굴을 하여 블럭을 증명하는 방식이었지만, 채굴풀이 생기고 기존 Gpu로 상대할 수 없는 채굴기들이 오면서 채굴이 중앙집권화되는 문제가 발생하였다.

확장성

이는 오직 이더리움의 문제이기보단 블록체인 기술을 활용함에 있어 문제점인데, 이는 바로 용량의 문제이다. 블록체인은 append만 하기 때문에 시간이 갈수록 용량이
점점 늘어날 것이고, 단순히 거래기록만 저장하는 비트코인에 비해 여러가지 애플리케이션까지 지원하는 이더리움은 이 용량문제가 더 가깝게 다가올 것이다.
물론 용량을 간소화시킨 라이트노드를 활용할 순 있지만, 그렇게 되면 나중에는 오직 소수의 기업이나 자금력을 확보한 사람들만 풀노드를 돌리게 될 것이고, 이 소수가
결탁했을시에 장부를 조작할 수 있는 위험성이 생기게 된다.
이더리움은 이런 문제를 해결하기 위해 여러가지 방안을 내놓고 있는데, 최소한의 완전노드 개수 의무화, 중간상태 트리루트 도입 등이 방법들 중 하나이다.

결론

이더리움은 기존 비트코인의 문제점들을 보완함과 동시에 여러 애플리케이션이 동작할 수 있는 하나의 플랫폼이다. 단순히 기존에 각광받던 금융분야에서의 활용, 혹은 그저 화폐로서의 가치뿐만 아니라 더 넓은 분야에서 다양한 활용 방안이 탄생할 수 있는 기술인 것이다.

0개의 댓글