[모두의 연구소] Introducing Ethereum and Solidity 6장 요약본
안녕하세요, 모두의 연구소 블록체인 연구실입니다.
11월 9일 6회차 스터디에서 진행한 Introducing Ethereum and Solidity의 6장 요약본입니다.
6장 이더리움 채굴
채굴이란?
- 채굴은 일정 기간 동안 이더리움 네트워크가 트랜잭션 순서에 대한 합의에 이르는 과정으로, EVM은 채굴을 통해 유효한 상태 전환을 만들 수 있다.
- 채굴 보상은 EVM의 상태 전이 기능에 프로그래밍된 계정 잔액 증가를 통해 이루어짐. 이 보상은 블록을 찾아내는 임의의 채굴자에게 지급
- 채굴의 정의: 주어진 버전의 역사를 올바른 것으로 교정하기 위한 계산적인 노력을 분담하는 행위
- 채굴 과정은 ‘작업 증명 알고리즘(proof-of-work algorithm)’으로 알려진 메모리 집약적 해시 알고리즘을 실행하기 때문에, 노드의 계산 능력을 크게 요구함.
- 이더리움 프로토콜의 작업 증명 알고리즘(또는 PoW 알고리즘)인 Ethash는 비트코인에서 드러났던 채굴의 중앙 집약 문제를 해결하기 위해 핵심 개발자가 만든 새로운 알고리즘으로, 이더리움의 합의 알고리즘(consensus algorithm), 또는 이더리움의 합의 엔진(consensus engine)이라고도 불림
- 해시파워: 채굴자가 네트워크에 기여하는 계산량. 개별 컴퓨터의 부품 및 사양과 전원 공급, 특히 그래픽 처리 카드의 속도, 전력 및 수량에 따라 결정.
채굴 난이도
- 이더리움과 비트코인은 자율 규제 네트워크; 네트워크에 참여하는 사람이 늘어남에 따라 더 많은 채굴 해시파워가 이익을 위해 합류하고, 블록을 찾아내는 시간이 심히 단축될 수 있음
- 이 문제의 해결책으로써, 15초 정도의 이상적인 블록 시간을 유지하기 위해 동적으로 조절되는 난이도(difficulty)라는 값을 관리. 블록을 찾아내는 시간이 너무 빠르거나 느리면 시스템은 난이도를 조정하여 블록 시간을 이상적인 값으로 조절.
- 일반적으로 시간이 갈수록 네트워크 난이도는 높아지지만 실제 난이도 값은 여러 변수가 포함된 수식으로 계산
- 채굴자가 네트워크에서 떨어져나가거나 전체 해시파워가 감소하면 네트워크 난이도가 감소하거나 평탄하게 유지될 수 있음
- DAO 사태 이후 채굴자들이 기계를 끄면서 해시율이 감소하고 가격 회복되면서 다시 상승
- EVM에서는 난이도가 블록의 점수(중량)도 결정 (가장 무거운 체인이 정식 체인)
블록 검증을 위한 요소
- 블록에 포함되는 데이터
1 블록에 대한 트랜잭션 원장의 해시 (해당 채굴기가 수신한 트랜잭션에만 해당)
2 전체 블록체인의 루트 해시
3 체인이 시작된 이후의 블록 번호
4 해당 블록의 난이도 - 위 데이터가 모두 유효하면 승자 블록 후보 (승자 블록이 아님)
- 논스를 제대로 먹으면 승자가 될 수 있음. 랜덤. 유효한데 승자가 아니면 엉클 블록이 됨.
작업증명과 블록 시간 규율
- 비트코인의 세계에서는 채굴의 중앙화를 통해 상당한 수익을 얻을 수 있음. 중앙화된 채굴자들이 블록을 더 빠르게 찾을 수 있고, 대부분의 블록 보상을 얻을 수 있기 때문
- 반면 이더리움에서는 엉클 블록이 승자 블록을 보강. 엉클 블록이 승자 블록에서 많이 분리될수록 네트워크는 진짜 블록을 찾기 힘들게 되기 때문에, 엉클 블록의 유효성 역시 중요한 요소
- Ethash 알고리즘: Dagger-Hashimoto로부터 파생되었으며, 비트코인 채굴 기업에서 널리 쓰이는 ASIC(주문형 특수 집적 회로)을 사용하여 강제로 수행할 수 없는 메모리 하드 알고리즘. DAG(directed acyclic graph) 파일에의 의존성이 핵심.
- DAG 파일은 125시간, 또는 30,000블록마다 새로 생성되는 1GB 크기의 데이터 세트로 이 30,000블록이라는 시간을 에폭(epoch)이라고도 부름. 트리 구조의 일종으로, 각 노드가 루트를 포함하여 10개 단계에 걸쳐 최대 225개의 상위 트리 개체를 가질 수 있는 구조를 일컫는 용어
DAG와 논스
- 각 노드는 현재의 블록을 유효하게 만들 수 있는 논스를 찾아내는 추측을 반복. 올바른 논스를 찾는 데 성공하면 블록 보상을 획득하게 되며, 찾아내지 못하면 네트워크의 다른 노드가 승자 블록을 찾았다는 소식을 들을 때까지 계속 논스 추측을 반복.
- 다른 노드가 승자 블록을 찾으면, 노드는 채굴 중이던 블록을 버리고 새로운 블록을 다운로드한 다음 그 위에서 다음 블록을 채굴하기 시작
- 마지막 승자 블록의 해시를 보고 시드를 얻을 수 있음
- 작업증명 과정
1 채굴 노드는 블록 헤더에서 파생된 암호화 시드로부터 16MB의 의사 임의 캐시를 생성한다.
2 캐시는 노드 사이에 일관성이 유지되는 대규모 1GB 데이터셋을 생성하는 데 사용(이것이 DAG). 이 데이터셋의 크기는 시간이 지남에 따라 선형적으로 증가하며 모든 전체 노드에 저장
3 논스를 추측하려면 컴퓨터가 DAG 데이터셋의 임의의 조각을 잡고 함께 해시해야 함. 이것은 해시 함수에 솔트(salt)를 사용하는 방식과 유사.
블록시간 단축의 꿈
- 진짜 블록이 발견되면 다른 노드가 그 블록을 발견하기 전까지 약간의 시간이 걸림. 이 시간 동안, 고아 블록을 버리고 새로운 블록 위에서 채굴하기 전까지는 새로운 블록에 대한 합의가 아닌 경쟁이 일어나며, 그 결과 고아 블록에 소비된 에너지는 낭비됨
- 채굴자가 대기 시간으로 인해 진짜 블록에 대한 정보를 전달받는 데에 평균 1분이 소요되고, 새 블록이 10분마다 발생하면 전체 네트워크는 해시파워의 10%를 낭비하는 셈. 사토시 나카모토는 이 정도를 허용 가능하다고 봤다는 견해.
- 스마트 계약이 없는 비트코인에서는 이론적으로 블록 시간이 평균 10분이지만, 실제로 블록 시간 내에 트랜잭션이 처리되는 경우는 전체의 63% 정도. 전체의 약 13% 정도는 트랜잭션 확인이 이루어지기까지 20분 이상이 소요. 이 시간 동안 취소될 수도 있는 트랜잭션은 최대 20 %
- 이더리움은 블록 시간을 단축한 덕택에 더 빠른 트랜잭션 확인이 가능해졌지만, 빠른 블록 시간으로 가져온 인한 보안성의 감소를 해결하기 위한 위해 프로토콜 상에 대안을 마련해야 함
- 분산된 소프트웨어 애플리케이션을 구동하도록 설계된 스마트 계약 플랫폼에서는 이러한 조건을 수용할 수 없으므로, 이더리움은 블록 시간을 단축하기 위해 약간 다른 방식으로 채굴에 접근
- 이더리움 또는 비트코인 네트워크를 통해 트랜잭션이 전파되는 데에는 평균적으로 latency 약 12초, 이 시간의 상당 부분은 노드가 트랜잭션 다운로드하는 데 쓰임
- 유효한 블록이 네트워크의 다른 위치에서 발견된 후에도 계속 채굴되는 엉클 블록은 스테일 블록(stale block), 또는 멸종된 블록(extinct block)이라고 불림
- 블록 시간이 빨라지면 스테일 블록이 발생할 확률이 높아지고, 스테일 블록이 많을수록 네트워크는 공격에 취약
스테일 블록 활용을 위한 GHOST 프로토콜
- 이더리움의 GHOST 구현을 통해, 블록과 함께 유효성 검사를 받는 엉클 블록은 정식 블록 보상의 7/8, 또는 4.375 이더를 받는다.
- 블록당 최대 두 개의 엉클 블록이 허용된다.
- 두 개의 엉클 블록은 선착순으로 선택된다.
- 엉클 블록에 대해서는 트랜잭션 수수료의 징수나 지불이 이루어지지 않는다. 왜냐하면 사용자는 유효한 블록에 이미 한 번 비용을 지불했고 명령을 실행하기 때문이다.
- 보상을 받기 위해서는 엉클 블록이 지난 7블록 이내의 승자 블록과 동일한 조상을 가져야 한다.
난이도 폭탄
- GHOST 프로토콜은 결점이 있다고는 알려져 있지만 크지 않다고 함
- PoW->PoS로 이전하는 과정에서 GHOST 프로토콜은 더 이상 쓰이지 않게 될 것이므로, 그 구현을 수정하는 작업은 의미가 없음.
- 이더리움은 작업 증명 방식의 채굴을 종결하는 방식으로 발행을 제한. 이더리움의 채굴이 유효한 기간은 이더리움 시스템의 합의 알고리즘이 전환되는 2017년에서 2018년 사이에 종료. PoS 방식의 큰 특징 중 하나는 하나는 채굴과 그에 수반되는 에너지 소비 없이도 네트워크가 합의에 도달할 수 있다는 점.
- 합의 알고리즘을 전환하고 동시에 이더 발급 기간을 제한하기 위한 노력의 일환으로, 이더리움 핵심 개발진은 난이도 폭탄(difficulty bomb)을 발동시켜 2017년 하반기부터 작업 증명 채굴의 효율성을 낮추고 있으며 최종적으로 2021년에 이르면 이더리움에서의 채굴이 불가하도록 준비 중
PPT 링크는 아래와 같습니다.
https://drive.google.com/open?id=1_fucSOxYh7F7AHQGimK9ff889ACMTbaWPfYcBGoWiVU
감사합니다.
Cheer Up! 음~? 흥미로운 포스팅이군요.
thank you for usefull article
You're welcome!