이더리움 백서 요약 - 1편

이동창·2021년 3월 19일
0

백서 요약

목록 보기
2/3
post-thumbnail

서론

  • 블록체인 기술을 이용한 다양한 어플리케이션이 등장함
  • 하지만 비트코인은 튜링 불완전함 (순환 명렁어 등의 부재)
  • 따라서 튜링완전 프로그래밍 언어가 심어진 블록체인을 제공해 다양한 앱 만들 수 있게

비트코인과 기존 개념들에 대한 소개

  • 여기서는 비트코인 백서와 거의 유사한 내용이다
    https://velog.io/@leedc0101/%EB%B9%84%ED%8A%B8%EC%BD%94%EC%9D%B8-%EB%B0%B1%EC%84%9C-%EC%9A%94%EC%95%BD

  • 저번 비트코인 백서에서 UTXO에 대한 개념을 이해하지 못했었는데
    이더리움 백서를 통해 조금 이해할 수있었다.

    UTXO란?

    Unspent Transaction Output (쓰지 않은 거래 기록)
    거래 기록을 토대로 거래하는 방식

    A가 B에게 10비트코인을 준다고 할때
    "내 지갑에 10비트코인 있으니까 이거 줄게!" 가 아니라
    "전에 C에게 10비트코인 받았던 기록 보이지? 이거 줄게!"
    이런 느낌

비트코인의 한계

1. 튜링불완전성

  • while이나 for 같은 순환 명령어가 빠져있음
  • 프로그래머가 극복할 수는 있지만, 굉장히 공간 비효율적임

2. 가치 무지

  • UTXO만으로는 인출 액수를 세밀하게 나누기가 어렵다.
  • 내가 1비트코인이 있는데, 10000원 어치의 비트코인만 보내고 싶다면,
    이를 잘게 쪼개서 보낼만큼만 보내고, 나머지 금액은 다시 나에게 보내는 불편한 방법을 써야 함

3. 상태표현제한

  • UTXO가 표현할 수 있는 것은 spent인지 unspent인지 밖에 없음
  • 따라서 다른 내부적 상태를 갖는 다중 단계 계약이나 스크립트를 만들 수 없음

4. 블록체인 무지

  • UTXO는 논스, 타임스탬프, 이전 블록해시 같은 블록체인 자료를 해독하지 못한다.

이더리움 등장

이더리움은 분산 어플리케이션 제작을 위한 대체 프로토콜을 만들며
튜링 완전 언어를 내장하고 있는 블록체인임
따라서 유용한 개발 기법과 개발 시간 단축, 높은 보안성을 통해 생태계를 구축
또한 스마트 컨트랙트를 이용해 누구든 분산 어플리케이션 작성 가능

이더리움 어카운트

이더리움에서 state는 어카운트로 이루어져있음
이더리움 어카운트는 다음 네 개의 필드를 갖고 있음

  • 논스
  • 어카운트의 현재 이더 잔고 (이더는 트랜잭션 수수료를 지불하는데 사용)
  • 어카운틔 계약 코드
  • 어카운트의 저장 공간

메시지와 트랜잭션

트랜잭션이란 보낼 메시지를 갖고 있는 서명된 데이터 패키지를 말하고, 다음을 포함

    1. 메시지 수신처
    1. 보내느 사람을 확인할 수 있는 서명
    1. 보내는 이더의 양
    1. optional 데이터 필드
    1. 트랜잭션 실행이 수행되도록 허용된 최대 계산 단계수 (STARTGAS 값)
    1. 계산단계마다 받는 사람이 지불하는 수수료 (GASPRICE 값)

4~6번은 이더리움에서 추가된 것
4번 데이터 필드는 스마트 컨트랙트를 가능하게 하는, 기능적 부분을 포함하는 곳
5,6번은 DoS 공격을 막기 위해 추가된 수수료, 악의적인 반복 공격을 막도록 해준다.
계산이 많아질 수록 비싸지는 수수료

메시지

컨트랙트는 다른 컨트랙트에게 메시지 전달 가능
메시지는 따로 저장될 필요가 없고, 이더리움 실행환경에서만 존재하는 가상의 오브젝트임

다음 항목을 포함함

  • 메시지 발신처
  • 메시지 수신처
  • 메시지와 함께 전달되는 이더
  • 선택적 데이터 필드
  • STARTGAS 값


이더리움 상태 변환 함수

계좌를 변경하는 매커니즘에 대한 설명이다.

    1. 먼저 보낸 사람이 올바른지, 트랜잭션 수수료 낼 돈 있는지 확인 후 잔고에서 차감
    1. 수신처 어카운트로 트랜잭션 값을 보낸다.
    1. 만약 어카운트가 컨트랙트이면 코드를 gas가 소모될 때까지 수행한다.
    1. 돈이 없거나, gas가 부족하면 모든 상태를 돌려놓는다. (단, 수수료는 채굴자에게로)
    1. 그 외에 정상적으로 동작했다면, 남은 gas는 발신처에게 주고, 소모된 gas는 채굴자에게


코드 실행

이더리움 컨트랙트 코드는 EVM 코드로 작성된다.
연산을 수행하기 위한 데이터 타입은 3가지가 있다.

  • 스택 (일반적인 스택)
  • 메모리 (바이트 배열)
  • storage (스택이나 메모리와 달리 영속적으로 유지됨)


블록체인과 채굴

이더리움 블록체인은 비트코인 블록체인과 유사하나, 몇 가지 차이점이 있다.

  • 이더리움 블록은 트랜잭션 리스트와 가장 최근의 state 복사본을 갖고 있다.
  • 블록 넘버와 difficulty를 블록내에 저장한다.

언뜻 보면, 모든 state를 블록에 저장하는 것이 비효율적으로 보일 수 있다.
하지만, state를 패트리시아 트리(머클 트리와 비슷) 구조로 저장해서 저장공간을 절약 가능


가능한 어플리케이션 종류

크게 3가지로 나뉜다

  • 금융 어플리케이션 (고용계약, 금융파생상품 등등)
  • 준금융 어플리케이션 (돈을 지불하는 여러가지 서비스 상품)
  • 비금융 어플리케이션 (온라인 투표, 거버넌스 등등)


토큰 시스템

  • 이더리움 기반으로 누구나구나 토큰을 쉽게 발행 가능하다.
  • 토큰은 이더로 환전 가능




이더리움 백서 요약 2편에서 계속...

0개의 댓글