Ethereum WhitePaper 뿌셔보기

Steven Lee·2023년 3월 24일
2

블록체인 학회

목록 보기
1/4
post-thumbnail

✔️ 이더리움이란

  • 2013년 Vitalik Buterin에 의해 제안된 탈중앙화, 오픈소스 블록체인 플랫폼

✔️ 이더리움의 목적

  • 개발자들이 블록체인 네트워크 위에 decentralized applications(dApps) 즉, 분산 어플리케이션을 자유롭게 만들 수 있도록 지원

  • 튜링 완전 언어의 내장을 통해 다른 종류의 제작 기법 제공, 빠른 개발 시간, 보안, 다른 dApp과의 효율적인 상호작용을 지원

    ❗튜링 완전 언어란?

    무한한 저장공간이 있다면 이 세상 모든 문제를 풀 수 있다는 튜링 머신을 구현하는 언어

    다시 말해, 모든 기능을 구현할 수 있는 언어, 어떠한 어플리케이션이던 만들 수 있는 언어라고 말할 수 있다.

  • Peer-to-Peer 금융 거래를 지원하도록 설계된 비트코인의 기능(디지털자산)에 더해 Smart contract로 불리는 자동 계약 시스템을 사용할 수 있는 어플리케이션을 만들 수 있도록 지원

✔️ 비트코인의 한계

1. 튜링 불완전성:

비트코인 스크립트 언어는 while이나 for과 같은 순환 명령어를 지원하지 않는다. 따라서 다양한 기능의 어플리케이션을 모두 구현하는 것이 어렵다.

2. 가치 무지 :

UTXO 스크립트만으로는 인출 액수를 세밀하게 통제할 수가 없다.

❗UTXO(Unspent Transaction Outputs)란?
말 그대로, 사용되지 않은 트랜잭션 출력값이다.

비트코인은 잔고라는 개념이 없고, 거래 내역을 각각의 카드로 가지고 있다고 생각하면 된다. 그 거래내역에 적혀있는 뭉텅이 금액들이 UTXO이다.

이 뭉텅이 금액들은 쪼갤 수가 없기 때문에(10000원 실물 지폐를 찢어서 5000원 두 장으로 만들 수 없음과 비슷하다) 출금을 할 때, 그 것보다 큰 UTXO를 찾아 보내서 거스름돈을 받던가, 작은 UTXO 여러 개를 합쳐서 보내야한다.

UTXO를 거래에 이용하면 사용한(spend) 것이 되기 때문에 UTXO는 소멸된다.

3. 상태 표현 제한:

UTXO는 오직 사용됐는지, 안됐는지만을 표현할 수 있다. 따라서 단순하고 1회적인 거래에만 사용될 수 있을 뿐, 다른 어떤 내부적인 상태를 가지는 다중 단계 계약과 같은 스크립트를 만들 수가 없다.

4. 블록체인 무지:

UTXO는 여러 정보가 들어있는 블록체인 헤더 데이터 등을 전혀 해독하지 못하기 때문에 여러 다른 분야의 어플리케이션을 만드는데 제약이 생긴다.

비트코인은 탈중앙화된 디지털 자산이라는 개념에 초점이 맞춰져있기 때문에 다양하고 복잡한 형태의 컨트랙트 구현이 어려웠다. 이더리움은 이 부분(스마트 컨트랙트)을 개선함으로서 블록체인을 활용한 다양한 탈중앙화된 애플리케이션을 개발할 수 있는 플랫폼으로 등장하게 되었다.


✔️ 이더리움 계정(Account)

  • 로그인할 때 쓰이는 ID 계정과 비슷한 역할을 함

구성요소

  • Nonce : 트랜젝션의 수를 카운트 하는 숫자로, 트랜잭션이 발생할 때마다 증가한다. 따라서 트랜잭션들을 순차적으로 처리할 수 있도록 도와준다.
  • Balance(이더 잔고) : UTXO와 달리, 가지고 있는 이더의 잔고를 직접 확인 가능하다.

    ❗이더(Ether)란?
    이더리움 내의 화폐라고 생각하면 되는데, 트랜잭션 수수료를 지불하는데 사용된다.

  • Code Hash(계약 코드) : 스마트 컨트랙트의 실행 코드가 저장되고, 이 코드에 의해 스마트 컨트랙트가 실행된다. Contract Account에 존재한다.
  • Storage(저장 공간)

Account의 종류

1. 외부 소유 어카운트(Externally Owned Accounts)

  • 일반적으로 이더리움을 주고받는 거래를 수행하는 계정.(개인 ID)
  • 개인키에 의해 통제되기 때문에 다양한 명령을 이더리움 네트워크에 요청할 수 있다(Smart Contract를 트랜잭션 형태로 요청할 수 있다)
  • 아무런 코드도 가지고 있지 않으며, 메세지를 보내기 위해서는 새로운 트랜잭션을 만들고, 개인키로 서명을 하여 보내야한다.

2. 컨트랙트 어카운트(Contract Accounts)

  • 개인키가 아닌, 컨트랙트 코드에 의해 통제된다.(서비스를 제공하는 웹사이트)
  • 스마트 컨트랙트를 네트워크에 배포시킬 때 생성된다.
  • 스스로 동작하는게 아닌, 트랜잭션을 받아야 자신의 코드를 활성화시키고, 이에 따라 메세지를 읽거나 저장공간에 기록하고, 다른 메세지를 보내거나, 컨트랙트들을 차례로 생성한다.
  • 사람이 EOA를 통해 트랜잭션을 보내면서 동작시킨다.

✔️ 메세지와 트랜잭션(Messages and Transactions)

Transanction

  • EOA가 보낼 메세지를 가지고 있는 서명된 데이터 패키지

Transaction의 구성요소

  • 메시지 수신처 : 메세지를 받는 상대
  • 발신처를 확인할 수 있는 서명 : 전자서명
  • 발신처가 수신처로 보내는 이더의 양
  • 선택적 데이터 필드 : 컨트랙트의 종류에 따라 달라질 수 있는데, 컨트랙트를 실행시킬 때 컨트랙트 코드가 사용할 데이터들이 들어가있다.
  • STARTGAS 값 : Gaslimit 값이라고도 하는데, 계약을 실행할 때 사용할 용의가 있는 전체 gas 양의 한도. 즉, 이 스마트 컨트랙트 실행을 위해 얼만큼의 gas까지 지불할 용의가 있는지를 의미한다.
    스마트 컨트랙트에 트랜잭션을 보내는 사람은 그 트랜잭션과 모든 하위 실행에 소모된 총 gas 양을 감당해야하고, 실행 중 gas가 다 떨어지면 실행이 초기화되기 때문에(없는 일) startgas 값을 여유 있게 설정하는 것이 좋다.
  • GASPRICE 값 : 1gas 당 가격. 이 값이 높을수록 수수료가 높기 때문에 블록 생성자가 빠르게 거래를 처리해 줄 가능성이 높다.

    ❗GAS란?

    • 이더리움에서 송금이나 스마트 컨트랙트를 실행할 때 얼마나 계산을 했는가를 세기 위해 만든 단위(거리 단위인 km, 부피 단위인 L와 비슷)
    • Ethereum yellow paper(황서)에 각 스마트 컨트랙트 당 필요한 gas의 양이 측정되어있다(ex. EOA간 송금에는 21000gas 소요)
    • 수수료 = 사용된 gas의 양 * gasprice(Ether per gas)
      • 이더리움 네트워크를 향한 공격자의 무차별적인 공격을 GAS를 통해 방지할 수 있다. 네트워크 안에서의 모든 실행에는 GAS를 지불해야하기 떄문에 무한 루프나 과도한 실행을 통한 공격을 시도한다면 비용이 기하급수적으로 증가하게 된다.

Message

  • 컨트랙트 계정(CA)은 다른 컨트랙트 계정에게 "메세지"를 전달할 수 있다 - 이 메세지를 통해 다른 컨트랙트 계정의 컨트랙트와 정보를 사용할 수 있다.
  • 외부 실행자가 하는 것과 정확히 동일한 방식으로 다른 컨트랙트와 메세지를 주고 받고, 코드를 실행하며 관계를 맺을 수 있다.

구성요소

  • (암묵적으로) 메세지 발신처
  • 메세지 수신처
  • 메세지와 함께 전달되는 이더
  • 선택적 데이터 필드
  • STARTGAS 값

✔️ 이더리움 상태 변환 함수(Ethereum State Transition Function)

상태 전이 함수 : Apply(S,TX) → S'

  • S라는 현재 상태와, Transaction인 TX를 함수에 넣으면 함수에 정의된대로 프로그램이 작동하고, S'라는 출력값을 내놓음과 동시에 S'라는 상태로 바뀐다. 이러한 출력값들이 블록체인에 지속적으로 업데이트되며 기록된다.

실행 단계

  1. 트랜잭션이 형식에 맞는지, 서명이 유효한지, Nonce 값이 발신처 Account의 Nonce 값과 일치하는 지 체크
  2. Gas 수수료 값을 결정한다. 발신자 잔고에 수수료 값이 있는지 알아봐야하기에 발신자의 서명을 통해 발신자 주소와 정보를 얻는다. (Gas 수수료 값은 블록을 만드는 채굴자가 가져간다)
  3. 트랜잭션에 소모되는 Gas 수수료 값을, 발신자가 낸 총 Gas 비용 중에서 차감해서 가져간다.
  4. 발신처 어카운트에서 수신처 어카운트로 트랜잭션의 값을 보낸다. 수신처의 주소가 없다면, 이더리움 네트워크에서 한번도 기록된 적이 없다는 것임으로, 해당하는 수신처의 주소를 등록한다.(개인키-공개키 방식의 주소는 개인이 먼저 주소를 만들고 이후에 채굴자들이 블록체인에 주소를 등록하는 방식) 수신처의 주소가 EOA가 아닌 CA인 경우에는 해당하는 컨트랙트 코드를 끝까지 혹은 GAS를 모두 사용할때까지 수행하게 된다.
  5. 발신처의 잔고에 충분한 돈이 없어서 값 전송을 실패하거나, gas값이 부족해서 실행이 멈춘다면 모든 상태는 초기화된다(없는 일). 그러나 그 과정에서 채굴자들은 일을 했기 때문에 소모된 gas의 수수료는 채굴자의 어카운트에 더해진다.
  6. 남아있는 gas에 대한 수수료는 다시 발신처에게 돌아가고, 소모된 gas 수수료는 채굴자에게 보내진다.

✔️ 코드 실행(Code Execution)

  • 스마트 컨트랙트를 실행시키는 코드는 "Ethereum Virtual Machine code"(EVM code)로 작성된다.

    ❗EVM이란?

    • 어떤 프로그래밍 언어든지 사람이 쓴 언어를 컴퓨터가 알아볼 수 있도록 변환해주는 과정인 "컴파일"이 필요하다.
    • 그리고 이더리움 네트워크에서, 컴파일된 스마트 컨트랙트 코드를 실행하고 블록체인에 기록을 담당하는 곳이 EVM이다.
      • 코드 실행 순서 : 스마트 컨트랙트 코드 → 이더리움 컴파일러(컴파일 해주는 곳) → EVM 바이트 코드 → EVM에서 실행
    • 구성요소
      • 스택 : 스마트 컨트랙트 코드가 실행되는 공간(코드가 실행하는 다양한 방식 중 스택을 이용하는 방법이 있다)
      • 메모리 : 컴퓨터 메모리와 비슷한 개념으로, 스마트 컨트랙트 코드가 실행되기 위한 임시 공간. 계산(실행)이 끝나면 리셋
      • 저장소 : 영속적으로 유지되는 저장소로, 스마트 컨트랙트가 완료된 이후에 블록체인에 기록할 데이터 공간. 영구적으로 저장해야할 데이터들을 저장하는 곳
    • EVM 코드는 블록 헤더 데이터부터 특정 값, 발송 및 수신되는 메세지 데이터에 접근할 수 있고, 결과값으로 데이터의 바이트 배열을 반환할 수 있다.
  • 이더리움 생태계는 하나의 상태(World State)로 볼 수 있는데, 트랜잭션에 따라 계속 변화하게 된다.

  • 이 상태는(block_state,transaction,message,code,memory,stack,pc,gas)의 데이터들로 정의될 수 있고, 특히 block_state는 모든 어카운트를 포함하며 잔고와 저장소를 가진다.

  • 결국 스마트 컨트랙트 코드가 EVM에서 실행된다면 각각의 명령에 따라 World State의 내부 데이터 값들이 각자의 정의에 따라 변화하고, 따라서 World State의 값은 변한다. 그리고 그 최종 상태 값은 이더리움 블록체인에 기록되게 된다.


✔️ 블록체인과 채굴(Blockchain and Mining)

이더리움 블록체인과 비트코인 블록체인의 구조적 차이

  1. 이더리움 블록은 트랜잭션 리스트와 가장 최근의 상태 복사본을 지님
  2. 블록 넘버(이더리움 블록은 번호가 있다)와 difficulty(블록의 작업 난이도)가 블록에 저장

이더리움 블록 검증 알고리즘

  1. 참조하고 있는 이전 블록의 존재 유무와 유효성 확인(해시값 비교)
  2. 이전 블록보다 현재 블록의 타임스탬프가 큰지? 현시점 기준 15분 후보다 작은 값인지 확인
  3. 블록 넘버,difficulty, 트랜잭션 루트 등 여러 값이 유효한지 판단
  4. 블록에 포함된 작업 증명이 유효한지 판단
  5. S[0]이 이전 블록의 마지막 상태로 가정
  6. TX = 현재 블록의 n개의 트랜잭션 리스트.
    0~n-1에 대해 S[i+1] = APPLY(S[i],TX[i])로 설정.
    어플리케이션이 오류를 반환하거나, 블록에서 소모된 총 gas가 GASLIMIT을 초과하면 오류를 반환
  7. 채굴자에게 지불된 보상 블록을 S[n] 덧붙인 후 이것을 S_FINAL
  8. 상태 S_FINAL의 머클 트리 루트가 블록 헤더가 가지고 있는 최종 상태 루트와 같은지 검증. 이 값이 같으면 유효한 블록, 다르면 유효하지 않은 블록

✔️ Reference

이더리움 백서 톺아보기 - 업비트 투자자보호센터
Ethereum Development Documentation
[이더리움] 가스와 수수료 체계 - feyee95님

profile
AI와 Blockchain을 사랑하는 학부생입니다.

1개의 댓글

comment-user-thumbnail
2023년 3월 25일

비트코인의 한계라.. 좋네요. 잘 읽었습니다~

답글 달기