EIP-2384 뮤어 글레이셔 난이도 폭탄 연기 (Muir Glacier Difficulty Bomb Delay)
최종 확정 · 합의·스테이킹 · 원문 상태 Final · 2019-11-20 작성
난이도 폭탄이 블록 시간을 다시 늘리기 시작하자, 난이도 계산에 실제 블록 번호 대신 9,000,000을 뺀 가짜 번호를 쓰게 해 폭탄을 4,000,000블록(약 611일) 뒤로 미룹니다.
왜 필요한가
이더리움에는 난이도 폭탄(difficulty bomb)이라는 장치가 내장되어 있습니다. 블록이 쌓일수록 채굴 난이도를 지수적으로 끌어올려 블록 생성 시간을 점점 늘리는 코드로, 아이스 에이지(ice age)라고도 부릅니다. 이 폭탄의 효과가 2019년 10월 5일 블록 8,600,000 무렵부터 다시 눈에 띄기 시작했습니다. 평균 13.1초이던 블록 시간이 블록 8,900,000 시점에는 약 14.3초로 늘었고 이 효과는 100,000블록마다 지수적으로 커집니다. 원문 추정으로는 2019년 12월 말에 20초, 2020년 2월부터는 30초가 넘는 블록 시간이 나타납니다. 블록이 느려지면 체인이 비대해지고 쓰는 비용이 올라갑니다. 그래서 Eth2 파이널리티 가젯 출시가 예상되는 시점 근처까지 폭탄을 한 번 더 미루자는 제안입니다.
무엇이 바뀌나
지금
- 난이도 폭탄 때문에 평균 블록 시간이 13.1초에서 14.3초로 늘었고 100,000블록마다 지수적으로 더 느려집니다
- 원문 추정대로면 2019년 12월 말 20초, 2020년 2월부터 30초 이상의 블록 시간이 나타납니다
- 블록이 느려지면 체인이 비대해지고 이용 비용이 올라갑니다
EIP-2384 이후
- 난이도 계산에 실제 블록 번호 대신 9,000,000을 뺀 가짜 블록 번호를 사용합니다
- 폭탄이 약 52,000,000초(약 611일) 뒤로 밀려 당장의 블록 시간 증가가 멈춥니다
- 블록 시간이 다시 20초에 이르는 시점은 2021년 7월경으로 늦춰집니다
누구에게 영향이 있나
- 사용자: 블록 시간이 20~30초대로 늘면서 생길 체인 혼잡과 이용 비용 상승을 피합니다.
- 채굴자: 난이도 계산 방식이 바뀌어 폭탄 효과가 빠진 난이도로 블록을 생성합니다.
- 클라이언트 팀: calc_difficulty의 블록 번호 치환을 구현하고 예정된 하드포크(이스탄불 직후 권고)에 포함해 배포해야 합니다.
심층 설명
폭탄이 다시 나타난 경위
난이도 폭탄의 효과는 2019년 10월 5일 블록 8,600,000부터 다시 관측되기 시작했습니다. 평균 블록 시간은 약 13.1초였는데 블록 8,900,000 시점에는 약 14.3초가 되었고 이후 100,000블록마다 지수적으로 가속합니다. 원문은 폭탄의 추가 영향을 추정해 2019년 12월 말에 20초, 2020년 2월부터 30초 이상의 블록 시간을 예상했습니다. 이 상태가 이어지면 체인이 비대해지고 사용 비용이 커지므로, Eth2 파이널리티 가젯의 예상 출시 시점 근처까지 폭탄을 미루는 것이 낫다고 판단했습니다.
가짜 블록 번호 공식
명세는 한 줄입니다. calc_difficulty에서 지수적 아이스 에이지 항에 쓰이는 block.number를 다음 식으로 바꿉니다. fake_block_number = max(0, block.number - 9_000_000) if block.number >= MUIR_GLACIER_FORK_BLKNUM else block.number. 즉 뮤어 글레이셔 포크 블록부터는 난이도 폭탄 계산에 한해 체인이 실제보다 9,000,000블록 어린 것처럼 취급합니다. 포크 블록 이전에는 기존대로 실제 블록 번호를 사용합니다.
9,000,000이라는 기준점
MUIR_GLACIER_FORK_BLKNUM부터 클라이언트는 난이도 폭탄이 홈스테드(Homestead) 포크보다 9,000,000블록 늦게 조정되는 것처럼 계산합니다. 이는 비잔티움(Byzantium) 포크 기준으로는 7,000,000블록, 콘스탄티노플(Constantinople) 포크 기준으로는 4,000,000블록 늦은 값입니다. 앞선 두 연기(EIP-649의 3,000,000, EIP-1234의 5,000,000)에 4,000,000블록을 더 얹은 누적치가 9,000,000인 구조입니다.
611일의 계산과 기준 시점
이번 연기는 아이스 에이지를 52,000,000초, 약 611일 미룹니다. 그 결과 체인이 다시 20초 블록 시간에 도달하는 시점은 2021년 7월경이 됩니다. 다만 4,000,000블록의 기준은 EIP가 포크로 활성화되는 블록이 아니라 약 블록 8,800,000입니다. 즉 폭탄이 체감되기 시작한 지점에서 4,000,000블록을 미는 것으로, 활성화 시점부터 새로 세지 않습니다.
하위 호환성과 포크 일정
이 EIP는 앞으로 호환되지 않고 난이도 계산에 하위 비호환을 만듭니다. 포크 블록 전후로 같은 블록에 대해 서로 다른 난이도가 계산되기 때문입니다. 따라서 특정 블록 번호에 예정된 하드포크에 포함해 모든 클라이언트가 함께 전환해야 합니다. 원문은 이스탄불(Istanbul) 포크 직후에 포함할 것을 권고합니다. 테스트 케이스는 개발자들이 명세를 수용하거나 클라이언트가 구현하는 시점에 만들기로 했습니다.
구현: 앞선 연기와 같은 로직
구현 로직은 비잔티움의 EIP-649, 콘스탄티노플의 EIP-1234와 다르지 않습니다. 빼는 블록 수만 9,000,000으로 바뀌었을 뿐 가짜 블록 번호로 폭탄 항을 되돌리는 방식은 동일합니다. Parity-Ethereum 구현은 parity-ethereum#9187 풀 리퀘스트에 있습니다. 이 EIP는 상태가 Final로, 뮤어 글레이셔 포크에 포함되어 확정된 명세입니다.