EIP-4345 난이도 폭탄 2022년 6월로 연기 (Difficulty Bomb Delay to June 2022)

최종 확정 · 합의·스테이킹 · 원문 상태 Final · 2021-10-05 작성

블록 난이도 계산에 실제 블록 번호 대신 10,700,000블록을 뺀 가짜 번호를 쓰도록 바꿔 난이도 폭탄의 효과가 2022년 6월부터 나타나도록 미룹니다.

왜 필요한가

이더리움에는 시간이 지날수록 블록 생성 난이도를 기하급수적으로 올려 블록 간격을 점점 늘리는 장치인 난이도 폭탄(difficulty bomb)이 심어져 있습니다. 네트워크를 다음 단계로 넘어가게 강제하는 장치지만 업그레이드 준비가 끝나기 전에 터지면 블록이 느려져 모든 사용자가 불편을 겪습니다. 이 제안이 나온 2021년 10월 시점에는 작업증명을 지분증명으로 바꾸는 전환 작업인 머지(The Merge)를 2022년 6월 전에 끝내는 것이 목표였습니다. 그래서 폭탄의 효과가 딱 그 무렵부터 아주 완만하게 나타나도록 시점을 다시 맞춰 머지 작업에 시간 여유를 주면서도 전환을 미루지 못하게 하는 압박은 유지합니다. 머지가 그때까지 준비되지 않으면 폭탄을 다시 미룰 수 있습니다.

무엇이 바뀌나

지금

EIP-4345 이후

누구에게 영향이 있나

심층 설명

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

calc_difficulty에서 지수 빙하기(exponential ice age) 구성요소에 쓰이던 block.number를 다음 식으로 치환합니다. fake_block_number = max(0, block.number - 10_700_000) if block.number >= FORK_BLOCK_NUMBER else block.number. 즉 FORK_BLOCK_NUMBER 이후의 블록에서는 실제 번호에서 10,700,000을 뺀 값(최소 0)을 폭탄 계산에만 사용하고 그 외의 난이도 조정 로직은 건드리지 않습니다. 결과적으로 클라이언트는 폭탄이 실제보다 10,700,000블록 늦게 조정된다고 보고 난이도를 계산합니다.

오프셋 10,700,000의 근거가 된 예측

원문의 예측 스크립트는 2021년 10월 15일 기준 블록 번호 13423376, 난이도 9545154427582720, 블록 조정값 10700000을 입력으로 씁니다. 한 달치 블록 수를 (86400 * 30) // 13.3으로 잡고 미래 블록 번호에서 diff_adjustment = 2 ** ((future_blknum - block_adjustment) // 100000 - 2)를 구한 뒤 현재 난이도 대비 비율로 환산합니다. 이 계산으로 7.5개월 뒤인 2022년 6월에는 블록 시간이 약 0.1초, 8.5개월 뒤인 7월에는 약 0.5초 늘어난다고 예측했습니다. 효과가 눈에 보이기 시작하되, 필요하면 대응할 여유가 남는 수준을 노린 값입니다.

머지 일정과의 관계

이 연기는 머지가 2022년 6월 전에 일어나는 것을 목표로 잡았습니다. 폭탄을 완전히 없애는 대신 그 시점에 맞춰 두어 전환 작업을 마칠 시간을 확보하면서 업그레이드 유인은 유지합니다. 원문은 그때까지 머지가 준비되지 않으면 폭탄을 추가로 연기할 수 있다고 명시합니다.

보안 고려사항: 해시레이트 급락 변수

폭탄의 효과를 잘못 추정하면 다음 하드포크가 나올 때까지 블록 시간이 예상보다 길어질 수 있습니다. 난이도가 급격히 변하면 이 오차가 커지고 장기적인 난이도 변화는 폭탄 에포크의 시점에도 영향을 줍니다. 특히 머지 전에 네트워크 해시레이트가 크게 떨어지면 폭탄이 블록 시간에 체감되는 시점이 앞당겨질 수도 있는데, 10,700,000이라는 오프셋은 이 가능성을 감안해 고른 값입니다. 원문은 이런 변수가 네트워크 사용성에는 영향을 주지만 보안 문제로 이어질 가능성은 낮다고 평가합니다.

하위 호환성과 상태

알려진 하위 호환성 문제는 없습니다. 난이도 계산의 폭탄 항에 들어가는 블록 번호만 바꾸는 단일 변경이기 때문입니다. 이 EIP의 상태는 Final로, 명세가 확정되어 더 바뀌지 않습니다.

EIP 원문 · ← EIPs