BlockChain/Ethereum 백서

이더리움 백서 개념

seongduck 2022. 7. 4. 22:30

1. 이더리움이란?


  • 비탈릭 부테린이 2015년 개발한 2세대 블록체인
  • Ethereum is a decentralized platform that runs smart contracts: applications that run exactly as programmed without any possibility of downtime, censorship, fraud or third-party interference.

스마트 컨트랙


  • 스마트 컨트랙즉, 어느 조건에 맞으면 자동으로 실행되는 계약조건
  • 사기, 중간, 검열 등 제 3자의 방해 가능성이 전혀없이 프로그래밍된 대로 동작하는 프로그램

스마트 컨트랙

기존의 계약
스마트컨트랙

2. 비트코인의 문제점 해결


1. 튜링 불완정성

  • 비트코인 스크립트로 할 수 있는 작업(서명, 검증 등)이 많긴 하지만 모든 경우의 프로그래밍을 다 지원하지는 않는다. 특히 반복문을 지원하지 않아서 공간 비효율적이다.
  • 왜 비트코인이 반복문을 사용하지 않았는가?
    • 코드 실행시 무한 루프에 빠지는 것을 방지하기 위해

2. 가치의 불투명성

  • 코인의 가치를 외부에서 받아와서(오라클 문제) 해당 가치만큼을 분배하려고 할 때, 비트코인의 경우 UTXO에서 일부만 사용이 불가능하다. 일부만 사용하기 위해서는 전체를 input으로 하고 일부를 수신자에게 보내고 나머지를 자신에게 보내는 비효율적인 작업을 해야 한다.
  • acount 개념 도입
    • 모든 트랜잭션의 실행 주체이자 기본 단위로서 모든 것은 어카운트에서 시작한다.
    • 이더리움 내의 화폐 단위 ETH(이더) 잔액을 가지고 있다.
    • 스마트 컨트랙트 코드를 포함하고 있다.
      • 넌스(nonce) : 해당 어카운트로부터 보내진 트랜잭션의 수, 0으로 시작한다. 트랜잭션을 오직 한 번만 실행되게 할 때 사용하는 카운터.
      • 잔액(balance) : 어카운트의 이더 잔고
      • 루트(root) : 해당 어카운트가 저장 될 머클 패트리시아 트리의 루트 노드
      • 코드해시(codehash) : 스마트 컨트랙트 바이트 코드의 해시어카운트 정보

3. 상태의 단순성

  • 비트코인은 애초에 지불 수단으로 개발되었기 때문에, 비트코인을 주고 받는 용도로 밖에 사용할 수 없다. 다른 데이터를 넣을 수 없다.
  • 트랜잭션에 잔액뿐만 아니라 다른 데이터를 넣을 수 있는 공간을 마련

4. 블록체인 해석 불가

  • 비트코인의 트랜잭션에서는 블록체인 내에서 랜덤성을 띄고 있는 값들(논스, 이전 블록의 해시, 타임스탬프)을 불러서 사용할 수 없다. 그래서 비트코인은 지급 결제 기능 외의 랜덤성을 요구하는 도박과 같은 어플리케이션을 만드는게 한계가 있다. 비트코인 스크립트의 한계
  • World States 개념 도입
    • 블록의 상태를 읽어 올 수 있는 명령어 등을 제공
  • Solidity 제공
    • Block과 Transaction의 정보를 가져올 수 있는 함수를 제공한다.

3. Message와 Transaction


트랜잭션

  • EOA의 개인키로 서명된 메세지 패키지
  • 구성 요소
    • AccountNonce : 발신자가 보낸 트랜잭션의 개수를 의미하며, 0으로 시작한다.
    • Price : 수수료로 지급할 Gas 가격 (Wei)
    • GasLimit : 최대 Gas 사용 범위
    • Recipient : 수신처의 주소
    • Amount : 전송할 이더의 양 (Wei)
    • Payload : 옵션 필드로 스마트 컨트랙트 호출 시 필요한 매개변수를 저장할 수 있다. => Lack of state 해결
    • V,R,S : 서명에 필요한 값들

메세지

  • CA가 다른 CA에서 보내는 트랜잭션
  • CA가 보내기 때문에 서명이 되어 있지 않다.

상태 변환 함수

  • 상태 변환 시 오류가 없는 지 체크하고 오류가 없을 경우 해당 상태로 변환시킨다.

4. 프로그래밍 언어


⇒ 튜링 불완전성 해결

  1. Solidity
  2. Serpent
  3. LLL(Low Level OPCODE)

EVM(Ethereum Virtual Machine)

  • 프로그래밍 언어로 작성 된 코드가 플랫폼(윈도우, 리눅스, 맥)에 상관없이 할 수 있도록 통역해 주는 역할

5. 블록체인과 채굴


블록 구조

  • 비트코인 블록
    • 구성
      • 이전 블록헤더 해시
      • 타임스탬프
      • 트랜잭션 머클트리 루트
      • 논스
    • 논스 예시

(출처 :  https://ethereum.stackexchange.com/questions/2286/what-diagrams-exist-to-illustrate-the-ethereum-blockchain-creation-process )

 

어카운트 상태 저장 - 머클 패트리시아 트리

  • 블록에 연결되어 있는 트리 종류
    • 트랜잭션 머클 트리 루트 (불변)
    • 리시트(트랜잭션 수행 결과) 머클 트리 루트 (불변)
    • 상태 머클 패트리시아 트리 루트 (가변)
  • 수시로 변경 되는 상태(어카운트 잔액 및 컨트랙트 데이터)를 효율적으로 저장하기 위한 자료구조
  • 변경 된 부분만 새로 저장하고 나머지는 그냥 이전 데이터의 주소로 연결한다.

https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/

블록 검증 알고리즘

  • 기본적으로 블록 생성 시 수행하는 트랜잭션 자체에 대한 검증 수행
  • 트랜잭션을 전체 다 수행 할 때 소모된 총 Gas가 블록의 GasLimit을 초과하지 않는 지 검증
  • 이전 블록 마지막 상태에서 시작해서 모든 트랜잭션을 수행 한 후의 상태가 현재 블록에 기록 된 상태와 같은지 검증

채굴

  • 합의 알고리즘
    • 작업증명(PoW, Proof of Work)
    • 순차적으로 지분증명(PoS, Proof of Stake)으로 변환할 예정.
    • Casper
  • Etash - Anti-ASIC 작업증명
    • SHA256 해시만 수행하면 됐던 비트코인과 다르게, 범용적인 명령어들을 수행해야 됨
    • CPU 뿐만 아니라 수 GB에 해당하는 메모리를 사용해야 함
    • ASIC(Application Specific Integrated Circuit, 주문형 반도체) 사용이 어렵게 만들었다.

수수료 (Gas)

트랜잭션

  • Price : Gas 당 트랜잭션 요청자가 지급할 금액
  • GasLimit : 트랜잭션 수행에 소비될 총 가스 예상량 (무한 루프 방지)
  • 기본 개념

  • 트랜잭션 성공 시

https://ropsten.etherscan.io/tx/0x2d1adffaea2fd77d99cbf07880441a3b6caaa3de5420012fd5b0a4a9c914bd84

  • 트랜잭션 실패 시

https://ropsten.etherscan.io/tx/0xf188425dd5dee1de1e9a637da2c05a3fa74284e477e8f31b52527abccbc8c99a

  • 어떻게 Gas Price, Limit을 결정해야 하는가?

블록

  • GasLimit : 블록에 담을 수 있는 트랜잭션 GasLimit의 총 합 (2018.4.27 기준 7,996,549 Gas)
  • 담을 수 있는 트랜잭션 개수 : 그때 그때 다름 https://etherscan.io/block/5520289
  • 어떤 기준으로 트랜잭션을 담는가 : 수수료를 많이 받는 방향으로

참고자료