EIP-1234 난이도 폭탄 연기와 블록 보상 조정 (Constantinople Difficulty Bomb Delay and Block Reward Adjustment)

최종 확정 · 합의·스테이킹 · 원문 상태 Final · 2018-07-19 작성

난이도 폭탄의 작동을 약 12개월 미루고 그 대신 블록 보상을 2 ETH로 낮추는 변경입니다. 메트로폴리스의 두 번째 단계인 콘스탄티노플 하드포크에 포함하자고 제안합니다.

왜 필요한가

이더리움에는 난이도 폭탄이라는 장치가 있습니다. 시간이 지날수록 채굴 난이도를 자동으로 올려 블록 생성을 점점 느리게 만드는 코드로, 아이스 에이지(ice age)라고도 부릅니다. 네트워크를 지분증명(proof-of-stake)으로 옮기도록 압박하는 역할인데 전환 프로젝트인 캐스퍼(Casper) 개발이 늦어지면서 폭탄만 먼저 작동하기 시작했습니다. 그 결과 평균 블록 생성 시간이 조금씩 늘어나고 있습니다. 앞으로 약 12개월은 작업증명(proof-of-work) 채굴로 15초마다 블록을 만들 수 있어야 하므로 폭탄을 미뤄야 합니다. 다만 폭탄만 미루면 채굴자 수익이 갑자기 늘어나는 셈이 되므로 연기 효과를 상쇄하도록 블록 보상을 함께 줄여 시스템을 이전과 비슷한 상태로 유지합니다. 보상을 줄이면 지분증명 전환을 앞두고 채굴자가 주도하는 체인 분열이 일어날 가능성도 낮아집니다.

무엇이 바뀌나

지금

EIP-1234 이후

누구에게 영향이 있나

심층 설명

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

난이도를 구하는 calc_difficulty에서 지수적으로 커지는 아이스 에이지 항에 쓰이는 block.number를 가짜 값으로 바꿉니다. 공식은 fake_block_number = max(0, block.number - 5_000_000) if block.number >= CNSTNTNPL_FORK_BLKNUM else block.number 입니다. 포크 블록(CNSTNTNPL_FORK_BLKNUM) 이후에는 실제 번호에서 500만을 뺀 값으로 폭탄 항을 계산하므로 클라이언트 입장에서는 폭탄이 홈스테드 포크에서 정한 것보다 약 500만 블록 늦게 작동하는 것처럼 보입니다.

블록 보상 2 ETH로 조정

이더 발행량을 일정하게 유지하기 위해 블록 보상을 new_block_reward로 바꿉니다. new_block_reward = 2_000_000_000_000_000_000 if block.number >= CNSTNTNPL_FORK_BLKNUM else block.reward 이며, 이 값은 2E18 wei, 곧 2 ETH입니다. 포크 블록 이후부터 적용되고 그 전에는 기존 보상이 그대로 쓰입니다.

엉클·네퓨 보상도 같은 공식으로 따라감

포크 이후 블록에 엉클이 포함되고 block.number - uncle.number = k일 때 엉클 보상은 new_uncle_reward = (8 - k) * new_block_reward / 8 입니다. 엉클을 포함한 채굴자가 받는 네퓨 보상은 new_nephew_reward = new_block_reward / 32 입니다. 두 공식 모두 콘스탄티노플 이전부터 쓰던 기존 공식 그대로이고, 기준값만 new_block_reward로 바뀝니다.

보상을 같이 줄이는 이유

아이스 에이지만 미루면 채굴자 보상이 갑자기 늘어나는 효과가 생깁니다. 연기를 상쇄하는 만큼 블록 보상을 줄이면 시스템이 이전과 같은 일반적인 상태로 유지됩니다. 또 이더리움이 지분증명에 다가가는 시점에 보상을 줄여 두면 채굴자가 주도하는 체인 분열이 일어날 가능성이 낮아진다고 원문은 설명합니다.

연기 기간의 계산과 대안

이 변경은 아이스 에이지를 2,900만 초, 약 12개월 미룹니다. 그 뒤 체인은 2019년 겨울에 다시 30초 블록 시간에 도달하게 됩니다. 대안으로는 난이도 계산에 특별 규칙을 넣어 블록 구간 사이에서 난이도를 사실상 멈추는 방식이 제안되었고 비슷한 결과를 낸다고 원문은 적습니다. 이 내용은 올 코어 데브 미팅 #42와 이후 회의에서 논의되었고 콘스탄티노플 세션 #1에서 수용되었습니다.

하위 호환성과 포크 포함

이 EIP는 난이도 계산과 블록·엉클·네퓨 보상 구조를 바꾸므로 이전 버전과 호환되지 않습니다. 따라서 정해진 블록 번호에서 일제히 적용하는 예정된 하드포크에 포함해야 하며 원문은 메트로폴리스의 두 번째 하드포크인 콘스탄티노플에 넣자고 제안합니다. 구현 로직은 EIP-649와 다르지 않고 패리티 이더리움(Parity-Ethereum) 구현이 parity-ethereum#9187 풀 리퀘스트에 있습니다. 이 EIP의 상태는 Final로 확정되어 있습니다.

EIP 원문 · ← EIPs