EIP-7668 블룸 필터 제거 (Remove bloom filters)
Hegota 포함 검토 (CFI) · 네트워크·노드 · 원문 상태 Stagnant · 2024-03-31 작성
실행 블록과 트랜잭션 영수증에 들어 있던 로그 블룸 필터를 비우도록 강제합니다. 모든 클라이언트가 계산하던 블룸 필터 처리 작업이 사라집니다.
왜 필요한가
이더리움의 로그(log)는 앱이 체인에서 일어난 일을 기록해 두고 나중에 쉽게 찾아 쓰라고 만든 기능입니다. 블룸 필터(bloom filter)는 그 검색을 돕는 요약 장치입니다. 전체 기록을 다 뒤지지 않고도 내 앱과 관련된 블록이 어디 있는지 빠르게 추려 주는 것이 원래 목표였습니다. 그런데 실제로는 이 방식이 너무 느립니다. 과거 기록을 조회하는 앱 대부분이 이더리움 노드에 직접 묻지 않고 프로토콜 바깥의 중앙화된 서비스를 씁니다. 그런데도 모든 클라이언트는 블록을 만들고 검증할 때마다 아무도 쓰지 않는 블룸 필터를 계산해야 합니다. 이 제안은 그 현실을 인정하고 블룸 필터를 프로토콜에서 걷어내자는 것입니다. 기록 조회가 필요한 앱은 영지식 증명 같은 기술로 검증 가능한 로그 색인을 만드는 탈중앙 프로토콜을 쓰도록 유도합니다.
무엇이 바뀌나
지금
- 모든 실행 블록과 영수증에 로그 블룸 필터가 들어가고 클라이언트가 매번 이를 계산합니다
- 블룸 필터로 과거 로그를 찾을 수 있지만 실제로는 너무 느려 거의 쓰이지 않습니다
- 기록 조회가 필요한 앱 대부분이 중앙화된 외부 서비스에 의존합니다
EIP-7668 이후
- 블록과 영수증의 로그 블룸 필드는 비어 있어야 하며(0바이트), 클라이언트는 더 이상 블룸을 계산하지 않습니다
- 블룸 필터에 의존하던 로그 조회 방식은 동작하지 않습니다
- 앱은 영지식 증명 기반의 검증 가능한 로그 색인 같은 탈중앙 대안을 쓰도록 권장됩니다
누구에게 영향이 있나
- 클라이언트 팀: 블록 생성과 검증 때마다 하던 블룸 필터 계산이 사라져 처리 부담이 줄어듭니다.
- 앱 개발자: 블룸 필터로 이벤트를 읽던 앱은 동작을 멈춥니다. 원문은 현재 이 기능에 의존하는 앱이 매우 적다고 설명합니다.
- 라이트 클라이언트: 원래 블룸 필터의 주 수혜자로 설계됐지만 긴 기록 조회가 특히 느려 실익이 없었다고 원문은 밝힙니다.
- 인덱싱 서비스: 검증 가능한 로그 색인을 만드는 탈중앙 프로토콜 개발이 권장됩니다.
심층 설명
명세: 블룸 필드를 빈 값으로 강제
실행 블록의 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)로 올라갔습니다. 포함이 확정된 것은 아니며 내용은 아직 바뀔 수 있습니다.