이더리움 이론 및 실습 - 이동현 연구원

강의 기간: 2019.12.24



이더리움 개요


  • 비트코인보다 훨씬 빠른 처리시간을 가진다. (블록 합의시간 약 20초)

  • 스마트 컨트랙트의 완전 튜링성을 제공한다. (Dapp 기반의 편리함 제공)

  • 기존 애플리케이션은 중앙 집중화된 서버와 여러 개의 클라이언트들이 통신하는 구조라면 Dapp (분산형 애플리케이션)은 각각의 클라이언트가 서로 간에 연결할 수 있어 데이터 및 스마트 컨트랙트를 공유하면서 탈중앙화 방식으로 통신을 한다.



이더리움 구성 요소


[상태]

  • 거래 기록뿐만 아닌 스마트 컨트랙트를 실행하기 위한 정보

  • 어느 한 시점에 대한 ETH의 잔액 및 기타 정보를 담고 있는 계정들의 집합

  • 상태 전이: 블록 채굴로 인한 거래내역 추가 시 상태 전이가 발생한다. (업데이트)


  • 머클 패트리시아 트리 (Merkle Patricia Trie, 상태 전이 트리)
    • 상태 전이 데이터를 기존 머클 트리에 저장하면 낭비가 너무 심하다는 생각에 비탈릭 부테린이 변형된 방식으로 개발



[계정]

  • 거래에 필요한 계좌 같은 정보

  • 외부 소유 계정 (EOA, External Owned Account)
    • 거래를 위한 잔액 관리, 컨트랙트 실행, 개인 키를 통한 주소 관리

  • 컨트랙트 계정 (CA, Contract Account)
    • 주소는 있으나 개인 키는 없음, 컨트랙트 코드 보유, 스마트 컨트랙트에 대한 해시 값

  • 생성을 위해 PKI (Public Key Infrastructure) 구조를 이용한다.

  • 개인키 생성: 256bit의 무작위 숫자 (64자리의 Hex 값으로 인코딩)


  • 타원곡선 전자서명 알고리즘 (ECDSA, Secp256k1)을 사용하여 공개키 생성

    • 타원곡선 형태의 그래프에 대입하여 키의 쌍을 만듦
  • Keccak-256 Hashing: 해시하는 함수 - 마지막 20Byte만 추려서 계정 주소를 결정한다.



[Consensus Algorithm - 합의 알고리즘]

  • Ethash (Proof of Work)

  • 기존 비트코인의 문제점인 ASIC (특수 목적 반도체)을 사용한 마이닝 풀의 독점을 막기 위해 도입


  • 모든 노드들이 블록을 생성하기 위해 캐시 데이터(쓰레기 값)로 데이터 셋을 생성하고 일부를 함께 해싱하게 한다.
    • ASIC 저항성은 높지만 캐시 데이터를 가지고 있는 자체만으로 불필요한 연산이 이루어지고 이로 인한 전력 낭비와 마이닝 풀의 집중화 문제는 해결하지 못하였다.

  • Casper FFG (Friendly Finality Gadget, Proof of State)를 도입하고자 시도 중에 있다.
    • PoW + PoS의 하이브리드 방식
    • 1~49번째 블록은 PoW, 50번째 블록은 PoS 방식으로 채굴



[GHOST - Greedy Heaviest Object Sub-tree]

  • 블록이 생성되다가 분기가 생기는 시점에 엉클 블록이 생성되는데, 이러한 문제점을 개선하기 위한 프로토콜이다.

  • 특정 주기마다 분기가 발생한 블록을 새로운 체인으로 연결하며, Genesis 블록부터 시작하여 가장 많은 sub-tree를 가진 쪽을 선택하도록 한다.



[Smart Contract]

  • Solidity Language로 계약서를 작성

  • 거래를 하고자 할 때 조건을 만족하는 지를 판단하는 코드가 작성되어 있다.



[GAS]

  • 이더리움 네트워크를 구동하게 하는 기본 단위

  • 컴퓨팅 파워를 사용하는 데 쓰는 수수료 (트랜잭션, 스마트 컨트랙트 실행)

  • 기본 단위: Gwei (0.000000001 ETH)


  • 필요 수수료: 최대 가스 * 가스 가격



[EVM - Ethereum Virtual Machine]

  • 이더리움 스마트 컨트랙트를 실행하기 위한 가상 머신
    • 튜링 완전 머신
    • 스택 기반 구조
    • 32Byte의 메모리

  • 이더리움 주소 연산(160bit), 256bit 암호화 알고리즘 등이 이더리움 구조 연산에 최적화 되어있다.





이더리움 동작 메커니즘


계정, 트랜잭션 생성 → 서명 → 검증 → 채굴



머클 패트리시아 트리 특징


  • Transaction Trie: 각 블록마다 트랜잭션을 위한 별도의 트리 존재

  • Storage Trie: 컨트랙트에 관련된 모든 데이터가 있는 트리, 각 계정에 존재

  • Receipts Trie: 모든 블록에 저장

  • State Trie: World State를 가지기 위한 트리



관련 기술 및 용어 정리


  • 엉클 블록: 동일한 시점에 채굴된 블록 중 채굴 난이도가 낮아 메인 체인에 연결되지 못한 블록

  • 이더리움 네트워크 구축에 필요한 가상 머신은 vagrant 또는 docker 등을 이용한다.

  • EIP: 이더리움 제안사항 정보

  • Coinbase: 토큰의 베이스가 되는 구조

  • Geth: Go-Ethereum Client

  • 노드 연결: add peer를 해도 네트워크 연결이 바로 되지 않을 수도 있다.



기타 전문가 의견


  • 블록체인 개발 환경에서 TPS는 구성 형태에 따라 매우 빠른 속도 구현도 가능하기 때문에 이보다는 네트워크 구성(Public or Private)과 합의 알고리즘을 우선적인 평가 지표로 봐야 한다.

  • 인터넷을 통해 네트워크를 연결하는 과정이 필요하기 때문에 절대적인 탈중앙화는 불가능하다.
    • 실질적으로는 분산형 네트워크에 가깝다고 봐야 한다.
    • 완전히 구현되려면 전체적인 구조 변화가 필요하다.

  • 스마트 컨트랙트에서 예외처리가 잘 되어 있는 것이 상당히 중요하다.



이더리움 네트워크 구축 실습 자료: https://github.com/ldh1428a/etheruem



이더리움 이론 및 실습 - 이동현 연구원

https://y8ncastle.world/2020/01/12/education/ethereum/sogang/ethereum/

Author

Alec J

Posted on

2020-01-12

Updated on

2021-02-09

Licensed under