이더리움 백서 이해하기

RedTiger·2023년 9월 15일

Blockchain

목록 보기
2/7

비트코인 : 상태변환 시스템

  • 비트코인의 상태(state) : 거래내용과 거래 후 잔고들의 내역
  • 비트코인은 사용되지 않은 트랜지션 출력(UTXO)을 추적해서 사용하지 않은 비트코인의 내역을 추적하여, 여러개의 잔고로 장부에 기록됨
  • 튜링 불완전성 : while이나 for와 같은 순환 명령이 불가능하다
    UTXO와 같은 간단한 형태의 스마트 컨트랙트 구현만 구현하지만, 복잡한 스마트 컨트랙트 불가
  • 비트코인은 디지털 자산의 저장, 교환, 유통을 위한 목적으로 구현되었음

이더리움의 목적

비트코인은 제3자 신뢰기관 없이 상호간 거래가능한 디지털 자산이지만, 이더리움은 제3자 신뢰기간 없이 사용가능한 어플리케이션 플랫폼
탈중앙화 플랫폼 : 어플리케이션을 개발하여 플랫폼에 배포하는데 있어서 자유롭고, 이용자 또한 어플리케이션을 이용하는데 자유롭다.

  • 튜링 완전 : 블록체인 위에서 운용되는 어플리케이션을 쉽게 개발,배포 가능
  • 스마트 컨트랙트 프로그램
  • 분산화된 환경에서의 응용프로그램
  • 소유권에 대한 규칙을 적용한 응용프로그램
  • 영구히 블록체인에 기록되는 트랜잭션형식의 프로그램
  • 이더리움은 디지털자산을 운용하는 서비스들을 탈중앙화된 환경에서 자유롭게 운영할 수 있는 플랫폼 제공

Ehtereum Account

이더리움의 state는 account라는 object로 구성되어있음
이때, 이더리움 계정은 [nonce, 이더리움잔고, 계약코드, 저장공간]의 4가지 field를 가진다

nonce

  • 탈중앙화된 방식에서 순차적인 처리를 위해 작용
  • nonce값을 확인하여, 일종의 프로그램 처리에 대한 순차적인 규칙

이더리움잔고

  • 이더리움은 비트코인과 달리, 직접적으로 account에 남아있는 잔고를 확인 할 수 있음

계약코드

  • 스마트 컨트랙트의 실행코드가 저장되어있고, 저장된 코드를 통해 스마트 컨트랙트가 실행됨

저장공간

  • Externally owned account(EOA) : 이더리움을 타인과 전송하고 받을때 사용되는 주소
    주소 + 비밀키로 구성
    비밀키로 통제할 수 있는 계정
    다른 계정으로 이더리움을 송신,수신가능
    CA에 트랜젝션을 보내서 스마트 컨트랙트를 요청 할 수 있음
  • Contract account(CA) : 스마트 컨트랙트 주소
    코드 + 개인키x
    스마트 컨트랙트를 블록체인에 배포할 때 생성
    다른 계정과 이더리움을 송신,수신가능
    EOA의 요청이나, 다른 컨트랙트의 요청을 받아 트랜잭션 발생(스스로 동작하지 않음)

Transactions

Transaction : EOA가 메세지(요청)을 CA에 보내는 행동
-> 이는 탈중앙화 환경에서 이루어지기에, Gas(수수료)를 필요하도록 설계함

Transcation 구성요소

  • 메세지 수신처
  • 발신처를 확인할 수 있는 서명
  • 발신처가 수신처로 보내는 이더리움
  • 선택적 데이터 필드
  • 서비스를 실행하는 비용 : StartGas, Gasprice
    Gas : 프로그램을 실행하는데 들어가는 비용(CPU, 메모리, 프로그램 수행비용)을 사용자가 지불

Ethereum APPLY()

APPLY(S,Tx) -> S'
S : 현재상태 | Tx : 사용자에 의한 트랜잭션 요청 | S' : 다음상태

    1. 트랜잭션이 형식에 제대로 맞는지(즉, 올바른 개수의 값을 가지고 있는지) 체크하고, 서명이 유효한지, 논스가 발신처 어카운트의 논스와 일치하는지를 체크한다. 그렇지 않다면 오류를 반환한다.
      트랜잭션의 형식과 서명, 논스를 체크합니다. 트랜잭션의 형식은 기본적인 메세지 규약을 따르고 있는지 체크하는 것이며, 서명의 유효성 확인을 통해서 트랜잭션을 요청한 개인키에 대한 검증을 확인합니다.

    1. STARTGAS * GASPRICE 로 트랜잭션 수수료를 계산하고, 서명으로부터 발신처 주소를 결정한다. 발신처 어카운트 잔고에서 이 수수료를 빼고 발신자 논스를 증가시킨다. 발신처 잔고가 충분하지 않으면 오류를 반환한다.
      : 이더리움의 트랜잭션은 채굴자가 처리하기 위해서 가스비를 요구합니다. 이 가스비에 대한 수수료를 계산하는 과정입니다. 그리고 첫 번째 과정에서 체크했던 서명으로부터 발신자의 주소를 확인할 수 있습니다. 이 과정을 통해서 이더리움 블록체인에서 발신자 주소로부터 수수료나 기타 이더의 정보를 수정할 수 있게 됩니다.

    1. GAS = STARTGAS 로 초기화한 후, 트랜잭션에서 사용된 바이트에 대한 값을 지불하기 위해 바이트당 gas 의 특정양을 차감한다
      : 실제 가스비용을 처리하는 과정입니다. 이더리움 내부에는 각 명령어마다 정해진 가스비용이 있습니다. 그 비용에 대한 계산 후에 사용자가 트랜잭션 요청에 부과하기 원했던 가스비용에서 해당 사용하는 양만큼 가스비를 차감하는 과정이 수행됩니다.

    1. 발신처 어카운트에서 수신처 어카운트로 트랜잭션 값을 보낸다. 수신처 어카운트가 존재하지 않으면 새로 생성한다. 수신처 어카운트가 컨트랙트이면, 컨트랙트의 코드를 끝까지 또는 gas가 모두 소모될 때 까지 수행한다.
      : 수신처로 트랜잭션의 값을 보내고 처리하는 과정입니다. 수신처의 주소가 이더리움에 블록체인에 한번도 기록된 적이 없다면, 해당하는 수신처의 주소를 등록합니다. (개인키-공개키 방식의 주소는 개인이 먼저 주소를 만들고 이후에 채굴자들이 블록체인에 주소를 등록하는 방식입니다.) 수신처의 주소가 EOA(외부소유계정)가 아닌 CA(컨트랙트 계정)인 경우에는 해당하는 컨트랙트 코드를 GAS를 모두 사용할때까지 수행하게 됩니다.

    1. 발신처가 충분한 ‘돈'을 가지고 있지 못해서 값 전송이 실패하거나, 코드 수행 시 gas가 부족하면, 모든 상태 변경을 원상태로 돌려놓는다. 단, 수수료 지불은 제외되고, 이 수수료는 채굴자 어카운트에 더해지게 된다.
      : 트랜잭션을 요청한 발신저의 이더잔고나 가스비가 부족한 경우는 1~4번까지 진행했던 모든 내역을 취소합니다. 그렇지만 이걸 수행한 채굴자에게는 보상이 주어져야 하므로 수행했던 과정까지 소모되었던 가스비만 채굴자에게 전송이 됩니다.

    1. 그 외에는 모든 남아있는 모든 gas에 대한 수수료를 발신처에게 돌려주고, 소모된 gas에 지불된 수수료를 채굴자에게 보낸다.
      : 5번의 예외상황 없이 모든 게 정상적으로 진행되었다면 총 사용된 가스비에서 남은 가스비를 원 발신처에 돌려주고 트랜잭션 처리에 소요된 가스비를 채굴자에게 전송을 하고 모든 과정을 마치게 됩니다.
  • APPLY()를 실행시키는데는 Gas(수수료)가 발생한다,
  • 채굴자(풀노드)는 APPLY()를 실행하고, 결과에 따른 블록체인 과정에서 Gas를 수수료로 받는다.
profile
Communication & SW

0개의 댓글