EIP-158은 이더리움 상태 트리에서 빈 계정을 제거하는 상태 정리 메커니즘을 도입한 제안으로, 최종 승인되었습니다. 스폰지밥 DoS 공격으로 인해 불필요하게 생성된 수많은 빈 계정을 정리하기 위해 도입되었습니다.
문제 배경
2016년 DoS 공격에서 공격자들은 의도적으로 수많은 빈 계정(잔고 0, 논스 0, 코드 없음)을 생성했습니다. 이 빈 계정들이 상태 트리를 비대하게 만들어 노드 처리 성능을 저하시켰습니다.
빈 계정 정의
잔고가 0이고, 논스가 0이며, 코드가 없는 계정을 "빈 계정"으로 정의합니다. EIP-158은 이러한 계정들이 트랜잭션에 의해 "터치"될 때 상태에서 삭제되도록 규정합니다.
구현 세부 사항
빈 계정에 닿는 트랜잭션(이더 전송 포함)은 해당 계정을 상태에서 제거합니다. 이는 Spurious Dragon 하드포크에서 EIP-161과 함께 활성화되어 상태 크기를 크게 줄였습니다.
EIP-161과의 관계
EIP-158과 EIP-161은 함께 이더리움 상태 정리를 완성합니다. EIP-161은 새로운 빈 계정 생성을 방지하고, EIP-158은 기존 빈 계정을 점진적으로 제거합니다.
역사적 논란
이 EIP는 빈 계정 제거 과정에서 일부 엣지 케이스로 인해 논란이 있었습니다. 특히 특정 컨트랙트 주소에서 예기치 않은 동작이 관찰되어 세심한 분석이 필요했습니다.