Spurious Dragon 하드포크
메인넷 2016-11-22
서명에 체인 ID를 넣어 다른 체인에서의 재사용(리플레이)을 막고, 빈 계정을 정리했습니다.
무엇이 달라졌나
- 사용자
- 거래 서명에 체인 ID(chain ID)가 들어가면서 메인넷에서 보낸 거래를 누가 복사해 다른 체인에서 다시 실행하는 리플레이(replay)가 막혔습니다. 같은 해 이더리움과 이더리움 클래식이 갈라진 뒤에는 한쪽에서 한 송금이 다른 쪽에서도 그대로 재현될 수 있어 사용자가 직접 조심해야 했는데, 이 포크 이후에는 체인 ID가 다른 서명을 네트워크가 거부하게 되었습니다. 지갑을 쓰는 방법 자체는 달라지지 않았습니다.
- 지갑·앱 개발자
- 지갑과 라이브러리는 서명에 체인 ID를 넣는 새 규격(EIP-155)에 맞춰 거래를 만들도록 바뀌었습니다. 메인넷은 1번처럼 체인마다 고유 번호가 있어 어느 체인용 거래인지 서명 단계에서 구분해야 했습니다. 컨트랙트 개발자에게는 한 번에 배포할 수 있는 코드 크기에 약 24KB의 상한(EIP-170)이 생겨 이보다 큰 컨트랙트는 여러 개로 나누어 배포하는 방식으로 바뀌었습니다.
- 노드 운영자
- 같은 해 가을 네트워크를 느리게 만든 공격으로 상태(state)에 잔액도 코드도 없는 빈 계정이 대량으로 남아 있었습니다. 이 포크에서 그 빈 계정들이 정리되고 앞으로도 빈 계정이 상태에 남지 않게 되었습니다(EIP-161). 노드가 들고 있어야 하는 데이터가 줄어 동기화와 블록 처리 부담이 가벼워졌습니다. 운영자는 포크 블록 전에 클라이언트를 새 버전으로 올려야 했고 올리지 않은 노드는 포크 뒤 체인에서 갈라졌습니다.