# 36 - 이더리움 백서(5편)

in #kr7 years ago (edited)


43_1.png


안녕하세요. 어미새입니다.


이더리움 백서를 쉽게 이해할 수 있도록 풀어서 설명하는 연재물을 작성하고 있습니다. 5편부터는 본격적인 이더리움에 관한 설명이 시작됩니다. 이전 내용들과 연관되어 설명이 진행되니, 혹시 지난 포스팅을 읽지 못하셨던 분들은 먼저 아래의 포스팅을 읽어보시는것을 추천드립니다.



Remind

비트코인 프로토콜은 별도의 확장 없이도 낮은 수준의 "스마트 계약"을 구현할 수있지만, 튜링 불완전성, UTXO의 상태표현의 한계점, 블록체인을 해독할 수 없는 문제점이 있습니다.

비트코인의 스크립팅은 while이나 for와 같은 순환(loop) 명령 카테고리를 사용할 수 없으며, 순환 명령어를 제외한 가장 큰 이유는 거래 증명시 무한 루프에 빠지는것을 방지하기 위함입니다.

UTXO가 표현할 수 있는 상태는 사용되었거나, 안되었거나 두가지 표현방법만 존재하며, 다양한 상태 표현을 할 수 없습니다. 또한, 블록체인을 해독할 방법이 없기때문에 여러 다른 부야의 어플리케이션을 만들기 어려운 한계점들이 존재합니다.


그렇다면 이더리움에서는 위의 문제점들 어떻게 해결했을까요? 본격적으로 이더리움 백서에서 말하는 이더리움이 무엇인지 살펴보도록 하겠습니다.


이더리움


이더리움의 목적은 분산 어플리케이션 제작을 위한 대체 프로토콜을 만드는것이며, 튜링 완전 언어를 내장하고 있는 블록체인이라는 필수적이고 근본적인 기반을 제공함으로써, 대규모 분산 어플리케이션에 유용한 개발 기법을 제공하고, 개발 시간 단축, 높은 보안성, 다른 어플리케이션과 상호작용할 수 있는 생태계를 만들고자합니다.

누구든지 이 언어를 통해 스마트 컨트랙트, 즉 분산 어플리케이션을 작성하고 소유권에 대한 규칙을 생성할 수 있으며, 트랜잭션 형식(transaction format), 상태변한 함수(state transition function)등을 생성할 수 있습니다.

어떤 값을 저장하고, 특정한 조건들을 만족했을 때만 그 값을 얻을 수 있게 하는 일종의 암호 상자인 스마트 컨트랙트 또한 이 플랫폼위에서 만들 수 있으며, 네임코인과 같은 형태는 두 줄정도의 코드 정도로 작성할 수 있고, 통화나 평판 시스템 관련 프로토콜은 스무 줄 내외의 코드로 만들 수 있습니다.

이러한 방법은 비트코인의 스크립팅(scripting)이 제공하지 못했던 튜링-완전(Turing-completeness), 가치 인지능력(value-awareness), 블록체인 인지능력(blockchain-awareness), 상태(state)개념 등을 포함함으로써 가능해졌습니다.


이더리움 어카운트


이더리움에서 상태(state)는 어카운트(account)라고 하는 오브젝트(object)들로 구성되어있습니다. 각각의 어카운트 오브젝트는 20바이트의 주소와, 값과 정보를 직접 전달해 주는 상태변화(state tansition)을 가지고 있으며, 아래와 같이 4개의 필드 정보로 구성됩니다.


  • 논스(nonce) : 각 트랜잭션이 오직 한번만 처리되게할 수 있는 일종의 카운터 역할 수행
  • 이더(ether) : 어카운트의 현재 잔고
  • 계약 코드 : 계약 코드 (존재할수도, 존재하지 않을수도 있음)
  • 저장 공간 : 초기 설정 값, 즉 default 상에는 비어있는 정보


이더는 이더리움의 기본 암호-연료(cryto-fuel) 이며, 트랜잭션 수수료를 지불하는데 사용됩니다. 이더리움의 어카운트 정보는 프라이빗 키에 의해 통제되는 외부 소유 어카운트(Externally Owned Accounts)와 컨트랙트 코드에 의해 통제되는 컨트랙트 어카운트(Contract Accounts) 두가지 종류로 구성됩니다.

프라이빗 키에 의해 통제되는 외부 소유 어카운트는 아무런 코드 정보도 가지고 있지 않으며, 외부 소유 어카운트에서 메시지를 보내기 위해서는 새로운 트랜잭션을 생성하고, 서명(signing)을 해야합니다. 컨트랙트 코드에 의해 통제되는 컨트랙트 어카운트는 메시지를 받을 떄마다, 메시지를 읽거나, 내부 저장 공간에 기록 하거나 다른 메시지들을 보내는 컨트랙트들을 차례로 생성하게됩니다.

이더리움에서 컨트랙트는 수행되거나 컴파일 되어져야하는 어떤 것이라기 보다는, 이더리움 프레임워크 환경안에 서 살아있는 일종의 자율 에이전트(autonomous agent)로서, 메시지나 트랜잭션이 도착했을 경우 항상 특정한 코드를 실행하고, 자신의 이더 잔고와, 영속적인 변수들을 추적하기 위해서 자신의 키/값 저장소를 직접적으로 통제하는 역할을 수행하게됩니다.


메시지와 트랜잭션


이더리움에서는 외부 소유 어카운트가 보낼 메시지를 가지고 있는 서명된 데이터 패키지를 트랜잭션(transaction) 이라고 하며, 아래와 같은 구성요소를 포함하고 있습니다.


  • 메신지 수신처
  • 발신처를 확인할 수 있는 서명
  • 선택적(optional) 데이터 필드
  • STARTGAS 값, 트랜잭션 실행이 수행되도록 허용된 최대 계산 단계수
  • GASPRICE 값, 매 계산마다 발신처가 지불하는 수수료


메신저 수신처, 발신처를 확인할 수 있는 서명, 선택적(optional) 데이터 필드는 암호 화폐에서 거의 표준처럼 사용되는 값입니다. 여기서 데이터 필드는 초기 값으로 설정된 특별한 기능(function)은 가지고 있지 않습니다. 하지만 버추얼 머신(virtual machine)은 컨트랙트가 이 데이터에 접근할 때 사용할 수행코드(opcode)를 가지고있습니다.

예를 들어, 블록체인 위에 도메인 등록 서비스 기능의 컨트랙트가 있다고 가정할 경우 컨트랙트에 보내지는 데이터 필드는 두개의 필드가 있다고 해석할 수 있습니다. 첫번째 필드는 등록하고자 하는 도메인이며, 두번째 필드는 IP 주소 정보 입니다. 컨트랙트는 메시지 데이터로부터 이 값들을 읽어서 저장소 내 적당한 위치에 저장하게됩니다.

STARGAS 와 GASPRICE 필드는 이더리움의 앤티-서비스거부(anti-DoS) 모델에 있어서 매우 중요한 역할을 수행합니다. 코드내의 우연적이거나 악의적인 무한 루프, 또는 계산 낭비를 방지하기 위해 각각의 트랜잭션은 사용할 수 있는 코드 실행의 계산 단계 수를 제한해야합니다.

계산의 기본 단위는 gas이며, 보통의 연산 과정은 1 gas의 비용이 소요되나, 어떤 연산은 더 비싼 계산 비용이 발생할 수 있고, 특히 상태를 저장하는 데이터의 양이 많을 수록 더 많은 gas 비용이 필요하게 됩니다. 또한 트랜잭션 데이터에 있는 모든 바이트는 바이트당 5 gas의 수수료가 소요됩니다.

시스템에서 이러한 수수료의 정책은 어떤 공격자가 계산, 밴드위스, 저장소 등을 포함해 그들이 소비하는 모든 리소스에 비례하여 강제로 수수료를 지불하게 함으로써 악의적인 공격을 방지하기 위한 정책입니다. 따라서 네트워크 자원을 많이 소모하는 트랜잭션은 대략 증가분에 비례한 gas 수수료를 가지고 있어야합니다.


마무리


이더리움 백서 5편에서는 드디어 본격적인 이더리움에 대한 설명이 시작되었습니다. 이더리움의 목적은 분산 어플리케이션 제작을 위한 대체 프로토콜을 만드는 것입니다.


이더리움에서는 튜링-완전(Turing-completeness), 가치 인지능력(value-awareness), 블록체인 인지능력(blockchain-awareness), 상태(state)개념 등을 포함함으로써 분산 어플리케이션 제작을 위한 프로토콜을 만들 수 있다고 설명하고 있습니다. (이더리움 백서 4편에서 비트코인의 한계점으로 지목되었던 부분들을 어떻게 해결한것인지에 대한 내용입니다.)


이더리움 프레임 워크에서 사용할 수 있는 암호화폐의 이름을 흔히 이더리움이라고 알고 있지만, 정확한 암호 화폐의 이름은 이더(ehter)이며, 크게 EOA(Externally Owned Accounts : 외부 소유 계정)와 CA(Contracts Accounts : 컨트랙트 계정) 2가지 타입으로 분류할 수 있습니다.(EOA와, CA가 어떤 역할을 수행하고, 무슨 차이가 있는지에 대한 설명은 하나의 포스팅으로 다뤄야하는 주제이니 만큼 추후 별도의 포스팅으로 다루겠습니다.)


비트코인 스크립트는 거래 증명시 무한 루프에 빠지는것을 방지하고자, while이나 for와 같은 순환(loop) 명령 카테고리를 사용할 수 없지만, 이더리움에서는 이 문제를 gas라는 수수료로 해결할 수 있다고 주장하고 있습니다.

어떤 공격자가 계산, 밴드위스, 저장소 등을 포함해 그들이 소비하는 네트워크의 모든 리소스에 비례하여 강제로 수수료를 지불하게 함으로써 악의적인 공격을 방지할 수 있다는 의미입니다.


최종적으로 조금 정리를 해보자면..


  1. 이더리움의 목적은 분산 어플리케이션 제작을 위한 대체 프로토콜을 만드는것이다.
  2. 튜링-완전(Turing-completeness), 가치 인지능력(value-awareness), 블록체인 인지능력(blockchain-awareness), 상태(state)개념 등을 가짐으로써 분산 어플리케이션 제작을 위한 프로토콜을 만들 수 있다.
  3. 이더리움에서 화폐는 이더(ether)로 표기되며, EOA와 CA 두가지 타입의 계정으로 분류된다.
  4. 수수료(gas) 정책이 필요한 이유는 악의적인 공격자가 네트워크 리소스를 소비하는 만큼 강제로 수수료를 지불하게 함으로써 악의적인 공격을 방지할 수 있었다.
  5. 이더리움은 수수료 정책을 통해 튜링-완전(Turing-completeness)을 가능하게 하였다.


백서의 내용과, 부족했던 설명을 최대한 이해하기 쉽게 풀어서 작성했지만, 부족한 부분들이 참 많이 있는것 같습니다. 정리를 하면서 어느 정도 완벽히 이해한 부분도 있고, 아직 이해가 완벽히 되지 않은 부분들도 있습니다만.. 이더리움 백서를 계속해서 정리하도록 하겠습니다.(공부는 계속되어야하니간요!)

부족한 부분들은 이더리움 백서 시리즈가 완료되는 시점에서 다시 정리하여 포스팅하도록 하겠습니다. 다음 이더리움 백서 6편에서는 메시지(Message)에 대한 설명, 여력이된다면 코드 실행 부분까지 정리하여 찾아뵙도록 하겠습니다.


이상 긴 글 읽어주셔서 감사합니다!(보팅, 리스팀, 팔로워는 제게 큰 힘이됩니다!)


혹시나 이더리움 백서를 먼저 읽고 싶으신분은 아래의 링크를 통해 이더리움 백서를 먼저 확인해보시는것도 좋을것 같습니다.



[참고문헌]


https://github.com/ethereum/wiki/wiki/%5BKorean%5D-White-Paper#%EC%83%81%ED%83%9C%EB%B3%80%ED%99%98%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9C%BC%EB%A1%9C%EC%84%9C%EC%9D%98-%EB%B9%84%ED%8A%B8%EC%BD%94%EC%9D%B8bitcoin-as-a-state-transition-system

https://github.com/ethereum/wiki/wiki/White-Paper

[다음편 보기]

Sort:  

어미새님 글 잘 읽었습니다. EOA와 CA 계정의 차이 다음 편 기대하고 있겠습니다. 고맙습니다.

EOA와 CA 계정의 차이에 대한 포스팅은 백서 시리즈가 끝나면 구성해보겠습니다~ 즐거운 점시간 보내세요~:)

글 잘봤어요~

방문해주셔서 감사합니다 ^^;

5편을 먼저 보게 되었는데, 글이 너무 좋아 1편부터 정독하러 가겠습니다! :) 미미하지만 앞으로도 좋은 분석 응원하고자 보팅과 팔로잉 누르고 갑니다.ㅎㅎ

정독 감사합니다~! 아주 큰힘이됩니다~😄

저도 다음편이 기대되네요!

다음편도 열심히 분석해보겠습니다~ 👍

잘읽었습니다. 저는 이오스에 관심이 있습니다 ㅎㅎㅎ
보팅누릅니다.

이더리움이 다 끝나면 이오스도 분석해봐야겠네요~ ㅎㅎ

글 잘 읽었습니다~~ 감사합니다. 투표와 팔로우하고 갑니다^^ 제 블로그도 보러와주세요~ https://steemit.com/kr/@recordfoundation/record

넵~ 오늘도 힘찬 하루 보내세요 👍