EIP-649 메트로폴리스 난이도 폭탄 연기와 블록 보상 축소 (Metropolis Difficulty Bomb Delay and Block Reward Reduction)

최종 확정 · 합의·스테이킹 · 원문 상태 Final · 2017-06-21 작성

비잔티움 포크부터 난이도 폭탄 작동을 약 1년 반 늦추고 발행량이 늘지 않도록 블록 보상을 3 ETH로 낮춥니다. 엉클과 조카 보상도 같은 비율로 조정합니다.

왜 필요한가

이더리움에는 난이도 폭탄(difficulty bomb)이라는 장치가 있습니다. 시간이 지날수록 채굴 난이도를 기하급수로 끌어올려 평균 블록 시간을 점점 길게 만드는 장치로, 아이스 에이지(ice age)라고도 부릅니다. 이 폭탄이 서서히 작동하면서 블록 생성이 이미 느려지고 있었습니다. 그런데 지분증명(proof-of-stake)으로 전환할 캐스퍼(Casper) 개발이 지연된 것이 문제였습니다. 폭탄을 그대로 두면 작업증명(proof-of-work) 채굴로 15초마다 블록을 만드는 일이 어려워집니다. 그래서 폭탄을 약 1년 반 늦춰 채굴이 계속 가능하게 하자는 것입니다. 다만 폭탄만 늦추면 채굴자 보상이 갑자기 늘어나는 셈이 됩니다. 이를 상쇄하려고 블록 보상을 3 ETH로 낮춰 시스템을 이전과 비슷한 상태로 유지합니다. 보상 축소는 지분증명 전환이 다가올 때 채굴자가 주도하는 체인 분리가 일어날 가능성도 낮춥니다.

무엇이 바뀌나

지금

EIP-649 이후

누구에게 영향이 있나

심층 설명

가짜 블록 번호로 난이도 완화

calc_difficulty의 지수형 아이스 에이지 항에서 block.number를 다음 식으로 바꿉니다. fake_block_number = max(0, block.number - 3_000_000) if block.number >= BYZANTIUM_FORK_BLKNUM else block.number. 즉 비잔티움 포크 이후에는 클라이언트가 실제보다 300만 블록 이전 시점인 것처럼 난이도를 계산합니다. 홈스테드 포크에서 정한 일정보다 폭탄 조정이 약 300만 블록 늦게 일어나는 효과입니다.

블록 보상을 3 ETH로 조정

이더 발행을 일정하게 유지하기 위해 블록 보상을 new_block_reward로 바꿉니다. new_block_reward = 3_000_000_000_000_000_000 if block.number >= BYZANTIUM_FORK_BLKNUM else block.reward, 즉 3E18 wei(3 ETH)입니다. 폭탄 연기만 하면 블록이 더 자주 나와 발행이 늘어나므로, 보상 축소로 이를 상쇄해 시스템을 이전과 같은 일반적 상태로 유지한다는 것이 동기입니다.

엉클·조카 보상 공식 유지

엉클이 포함된 블록에서 block.number - uncle.number = k일 때 new_uncle_reward = (8 - k) * new_block_reward / 8입니다. 엉클을 포함한 블록의 채굴자가 받는 조카 보상은 new_nephew_reward = new_block_reward / 32입니다. 두 식 모두 메트로폴리스 이전부터 쓰던 기존 공식 그대로이며 기준이 되는 블록 보상만 3 ETH로 바뀐 것입니다.

연기 효과 계산과 대안 비교

이 변경은 아이스 에이지를 4,200만 초, 약 1.4년 연기합니다. 그 결과 체인은 2018년 말에야 다시 30초 블록 시간에 도달하게 됩니다. 대안으로는 난이도 계산에 특별 규칙을 넣어 특정 블록 구간에서 난이도를 사실상 멈추는 방식이 제안됐는데, 결과는 비슷했을 것이라고 원문은 설명합니다.

하위 호환성과 포크 배치

이 EIP는 난이도 계산과 블록·엉클·조카 보상 구조를 바꾸므로 이전 규칙과 호환되지 않습니다. 따라서 특정 블록 번호에 예정된 하드포크로 활성화해야 하며 두 번의 메트로폴리스 하드포크 가운데 첫 번째인 비잔티움(Byzantium) 포크에 포함하는 것이 제안됐습니다. 테스트 케이스는 ethereum/tests #269에 있습니다.

합의 과정과 EIP-186 대체

이 제안은 All Core Devs Meeting #09, #12, #13, #14에서 논의됐고 Meeting #19에서 명세에 대한 합의가 이뤄졌습니다. Meeting #20과 #21에서 기존의 발행량 축소 제안인 EIP #186을 대체해 난이도 폭탄 연기와 블록 보상 축소를 함께 포함하기로 결정했고 Meeting #22에서 수용됐습니다.

구현 현황과 확정 상태

Geth #15028, Parity #5855, EthereumJ #927, Cpp-Ethereum #4050, PyEthereum #383이 EIP-649를 구현했고 옐로 페이퍼에는 #333으로 반영됐습니다. 그 밖에 Eth-Isabelle #459, Py-EVM #123 구현이 있습니다. 이 EIP의 상태는 Final로, 명세가 확정되어 더 바뀌지 않습니다.

EIP 원문 · ← EIPs