블록체인 12강,13강

이더리움

Posted by 동식이 블로그 on June 12, 2019

이더리움 블록채굴과 합의프로토콜

제12강 이더리움 블록채굴과 합의프로토콜1

이더리움의 블록 채굴과 합의

  • 목적
    • 누구나 블록 생성자(채굴자)로 참여 가능
    • 채굴자들의 합의로 거래들이 블록체인에 저장되는 순서를 정의하고, 동기화된 블록체인 유지를 보장
  • 기본 정책

    • 작업 증명(proof of work) 기반의 블록 생성
    • 채굴자에게 블록 인센티브(block incentives) 지불
  • 설계 목표

    • 거래 승인 성능 향상

      → 10초 단위의 블록 생성

    • 작업 증명 자원 낭비 축소(블록 생성간격 대비 전달시간 비중 상승에 따른)

      → 수정 GHOST 프로토콜

    • 채굴 역량 집중화 방지(ASIC화에 따른)

      → 메모리 하드(memory-hard) 형 Ethash 작업 증명 알고리즘

블록 생성 간격

  • 블록 생성 간격과 난이도 조절
    • 블록 생성 간격이 10~19초 이내가 되도록 조정
    • 부모 블록과의 시간 간격이 9초 이하이면 난이도 상향
    • 20초 이상이면 난이도 하향 조정
  • 짧은 블록 생성 간격의 문제점
    • 블록 전달지연시간 비중이 커짐
    • 블록 전달시간 동안 생성되는 부실 블록 발생률 상승
  • 부실 블록(stale block)
    • 적합하게 생성된 블록이지만 다른 채굴자에 의해 생성된 블록과의 승인 경쟁에서 패배하여 메인 체인에 포함되지 못하고 브랜치에 연결된 블록
  • 부실 블록의 문제점
    • 채굴 역량이 높은 채굴자가 다음 블록 채굴 조기 개시확률이 높음
    • 채굴 역량 집중화 심화 초래 → 네트워크 안전성 훼손

수정 GHOST 프로토콜

  • 이더리움의 수정 GHOST 프로토콜

    • 최장 체인 대신 GHOST 프로토콜을 기본적으로 채택
    • 구현의 복잡성을 고려하여 단순화된 GHOST 프로토콜 적용
    • 삼촌 블록(uncle block) : 수정 GHOST 프로토콜에서 포함하는 부실 블록

    • 새롭게 생성되는 블록은 부모 블록을 지정하여야 하고, 0~2개까지의 삼촌 블록을 포함할 수 있다.
    • 새로운 블록에 포함되는 삼촌 블록은 2대의 부모 블록부터 시작하여 7대까지의 조상 블록에 직접 연결된 자식 블록이어야 한다.
    • 삼촌 블록은 새로운 블록의 조상 블록이 아니어야 한다.
    • 삼촌 블록은 적합한 블록 헤더를 가져야 한다.
    • 삼촌 블록은 이전 블록에 포함된 블록이 아니어야 하고, 같은 블록에 포함된 다른 블록과 동일하지 않아야 한다.(이중 포함 금지)
    • 삼촌 블록의 채굴자와 삼촌 블록을 포함시키는 블록(조카 블록)의 채굴자는 그에 따른 소정의 블록 인센티브를 지불 받는다.

블록 선택 : GHOST 프로토콜

  • GHOST(Greedy Heaviest Observed Subtree) 프로토콜
    • 비트코인 : 최장 길이 체인(longest chain)을 메인 체인으로 선택
    • 이더리움 : 가장 무거운 서브 트리(heaviest subtree)의 최장 길이 체인을 메인 체인으로 선택
  • GHOST 프로토콜 안전성
    • 공격자가 B2 블록으로 교체하려면 B1 블록 이후에 현재 연결되어 있는 10개의 블록보다 많은 11개 이상의 블록을 생성해야 함
    • 부실 블록이 블록체인 조작 방지에 기여 → 네트워크 안전성 제고
  • 부실 브록과 거래의 적합성
    • 메인 체인의 블록의 거래들만 승인된 거래로 인정

13강 이더리움 블록채굴과 합의프로토콜2

블록 인센티브

  • 블록 인센티브
    • 블록 보상(block reward)
    • 거래 수수료(transaction fees) : 이더리움 거래 강의 참조
  • 정규 블록 보상
    • 5 ETH로 고정(2017년 10월 Metropolis-Byzantium 버전에서 3 ETH로 축소)
    • 향후 Serenity 버전에서 지금의 작업 증명(proof of work)보다 훨씬 자원 소요가 적은 소유 증명(proof of stake)으로 합의 알고리즘이 변경될 경우 블록 보상 체계도 획기적으로 변경될 것으로 예상

Ethash 작업 증명 알고리즘

  • 비트코인 해시캐쉬(Hashcash) 알고리즘
    • 고정 크기의 블록 헤더에 대해 넌스를 변경하며 해시 함수 반복 적용
    • ASIC화 용이 : 비교적 적은 투자로 해시파워 집중화 가능
  • 이더리움의 Ethash 알고리즘
    • 표준 메모리에 유지되어야 하는 크기의 DAG(Directed Acyclic Graph) 데이터셋 생성
    • 넌스와 블록 헤더에 의해 반복적으로 결정되는 믹스(mix)에 의해 지정되는 DAG 페이지를 반복적으로 접근(64회)
    • 최종 믹스의 해시값인 믹스 다이제스트(mix digest)를 난이도 목표 임계값과 비교
    • 성공하는 경우 넌스와 믹스 다이제스트를 블록 헤더에 저장
  • DAG 데이터 생성

    • 한 세대(generation)의 의미인 에퍽(epoch)이라 불리는 30,000개의 브록마다 한 번씩 반복
    • DAG 데이터셋은 2015년 당시 ASIC 메모리에 저장하기에 충분히 어려운 크기로 초기화
    • 매 에퍽마다 조금씩 증가하도록 알고리즘이 설정
    • 매년 약 75% 정도 증가하여 ASIC 기술 발전에 따른 메모리 용량 증가 속도를 능가하도록 설계
    • 현재 블록 수(block number)에 의존하는 유사 난수를 생성한 후 이에 근거하여 임의의 큰 데이터로 생성
    • 128 바이트 데이터 페이지의 조합으로 구성
  • 이더리움의 Ethash 알고리즘과 GPU

    • Ethash 알고리즘은 메모리 I/O 대역폭을 충분히 활용하는 것이 성능에 큰 영향
    • OS를 포함하여 많은 S/W가 메모리를 접근하는 CPU를 사용하는 것보다 메모리 대역폭 활용이 용이하고 충분한 크기의 메모리를 제공하는 GPU를 사용하여 구현하는 것이 성능 향상에 유리
    • CPU에 비해 GPU가 DDoS 공격 등의 악성 S/W의 영향을 덜 받기 때문에 현재 대부분의 Ethash 기반의 이더리움 채굴 소프트웨어는 GPU 상에서 구현되어 사용
  • Ethash 해싱 알고리즘

    1. 블록 헤더와 너늣 초기값을 HSA3해시 함수와 유사한 keccak512 해시 함수에 적용하고 그 결과를 2배 확장하여 128바이트 믹스값(mix0)을 생성한다.

    2. 믹스값에 의존적인 인덱스 결정 함수를 사용하여 DAG 데이터셋 중에서 어떤 페이지를 접근할 것인지 결정하고 해당 DAG 페이지를 읽는다.

    3. 기존 믹스값과 읽은 DAG 페이지를 믹스 함수에 입력하여 새로운 믹스값을 생성한다.
    4. 2와 3을 63회 반복하여 최종 믹스값(mix64)을 생성한다.
    5. 최종 믹스값을 후처리 과저을 거친 다음 keccak256 해시 함수를 적용하여 32바이트 믹스 다이제스트(mix digest)를 생성한다.
    6. 믹스 다이제스트가 난이도 목표 임계치(target threshold) 보다 작거나 같으면 해당 넌스와 믹스 다이제스트가 작업 증명 결과가 된다. 그렇지 않으면 넌스를 증가시켜 2~6의 과정을 반복한다.

블록 난이도 조정

  • 블록 생성 간격과 난이도 조절
    • 블록 생성 간격이 10~19초 이내가 되도록 조정
    • 부모 블록과의 시간 간격이 9초 이하이면 난이도 상향
    • 20초 이상이면 난이도 햐향 조정
  • 난이도 폭탄 로직
    • 난이도를 점차 지수적으로 증가시켜 블록 채굴을 어렵게 함
    • 현재의 작업 증명 기반의 블록 생성 합의 알고리즘을 새로운 소유 기반의 블록 생성 합의 알고리즘으로의 전환을 유도하기 위해 도입
    • 2017년 10월 중순 적용이 개시된 Metropolis Byzantium 버전에서 블록 보상은 5 ETH에서 3 ETH로 조정