EIP-7668 블룸 필터 제거 (Remove bloom filters)

Hegota 포함 검토 (CFI) · 네트워크·노드 · 원문 상태 Stagnant · 2024-03-31 작성

실행 블록과 트랜잭션 영수증에 들어 있던 로그 블룸 필터를 비우도록 강제합니다. 모든 클라이언트가 계산하던 블룸 필터 처리 작업이 사라집니다.

왜 필요한가

이더리움의 로그(log)는 앱이 체인에서 일어난 일을 기록해 두고 나중에 쉽게 찾아 쓰라고 만든 기능입니다. 블룸 필터(bloom filter)는 그 검색을 돕는 요약 장치입니다. 전체 기록을 다 뒤지지 않고도 내 앱과 관련된 블록이 어디 있는지 빠르게 추려 주는 것이 원래 목표였습니다. 그런데 실제로는 이 방식이 너무 느립니다. 과거 기록을 조회하는 앱 대부분이 이더리움 노드에 직접 묻지 않고 프로토콜 바깥의 중앙화된 서비스를 씁니다. 그런데도 모든 클라이언트는 블록을 만들고 검증할 때마다 아무도 쓰지 않는 블룸 필터를 계산해야 합니다. 이 제안은 그 현실을 인정하고 블룸 필터를 프로토콜에서 걷어내자는 것입니다. 기록 조회가 필요한 앱은 영지식 증명 같은 기술로 검증 가능한 로그 색인을 만드는 탈중앙 프로토콜을 쓰도록 유도합니다.

무엇이 바뀌나

지금

EIP-7668 이후

누구에게 영향이 있나

심층 설명

명세: 블룸 필드를 빈 값으로 강제

실행 블록의 logs bloom은 비어 있어야 합니다(0바이트 길이). 트랜잭션 영수증의 logs bloom도 마찬가지로 비어 있어야 합니다(0바이트 길이). 필드 자체를 지우는 것이 아니라 값을 빈 상태로 요구하는 방식입니다. 명세는 이 두 문장이 전부일 만큼 단순합니다.

필드 삭제가 아니라 비우기를 택한 이유

원문은 이 방식을 클라이언트가 블룸 처리를 하지 않아도 되게 만드는 가장 덜 파괴적인 방법이라고 설명합니다. 블록과 영수증의 데이터 구조를 당장 바꾸지 않고 값만 비우므로 구현 변경이 작습니다. 이 필드를 완전히 제거하는 일은, 이미 폐기된 다른 필드들과 함께 나중의 별도 EIP가 정리하도록 남겨 둡니다.

LOG 가스 비용은 내리지 않습니다

블룸 필터를 오염시키는 외부 비용은 이제 계산에 넣을 필요가 없지만 원문은 LOG의 가스 비용을 줄이지 않습니다. ZK-SNARK 기반 EVM 구현의 필요 때문에 해싱 비용이 올라갔기 때문이라고 설명합니다. 즉 한쪽 비용이 사라진 만큼 다른 쪽 비용이 늘어 가격 인하 요인이 상쇄된다는 논리입니다.

하위 호환성: 영향 범위가 작다고 보는 근거

블룸 필터에 의존해 이벤트를 읽던 앱은 동작을 멈춥니다. 다만 원문은 현재 이 기능에 의존하는 앱이 매우 적다고 평가합니다. 지금의 가스 한도에서는 블룸 필터의 거짓 양성(false positive) 비율이 너무 높고 긴 기록 조회에서 로그를 처리하는 속도가 너무 느리기 때문입니다. 이 기능의 원래 주 수혜 대상이던 라이트 클라이언트에서 특히 그렇다고 지적합니다. 새 기능을 추가하거나 무언가를 싸게 만들지 않으므로 보안 우려는 제기되지 않는다고 밝힙니다.

대안: 증명 가능한 로그 색인

프로토콜이 기록 조회를 책임지는 대신, 원문은 ZK-SNARK와 점진 검증 연산(incrementally-verifiable computation) 같은 기술로 증명 가능한 로그 색인을 만드는 탈중앙 프로토콜을 개발해 쓰도록 권장합니다. 현실에서 이미 대부분의 앱이 프로토콜 바깥 서비스로 기록을 조회하고 있으므로, 그 조회 계층을 검증 가능하게 만드는 쪽이 맞다는 방향입니다.

문서 상태와 포크 논의

원문 문서의 상태는 Stagnant(정체)로, 저장소 기준으로는 갱신이 멈춘 상태입니다. 다만 코어 개발자 콜에서는 논의가 이어졌습니다. 07.30 ACDE #242에서 헤고타(Hegota) 후보(PFI)로 접수됐고 09.24 ACDE #246에서 EIP-7906, EIP-8250, EIP-8272, EIP-8253, EIP-3298, EIP-8131 등과 함께 헤고타 포함 검토(CFI)로 올라갔습니다. 포함이 확정된 것은 아니며 내용은 아직 바뀔 수 있습니다.

EIP 원문 · ← EIPs