bloom filter는 데이터 구조의 타입으로, 특정 요소가 어떤 집합에 속해있는지를 쉽게 확인할 수 있다.

bloom filter는 요소들의 집합을 표현해주는 bit array로, 요소가 set에 추가되면 여러 번의 hashing을 거쳐 (각기 다른 해싱함수들로), 대응하는 bit array의 bit가 1로 설정된다.

만약, 요소가 set의 일원이라면 element는 동일한 함수들을 거쳐 해싱된 후, bit array의 해당 bit가 확인한다.

모든 대응하는 bit가 1이라면 요소가 집합의 일원일 가능성이 높다.

이더리움에서 이게 사용되는 곳은 몇 군데 있는데, 그중 하나의 케이스는 ethereum state trie로, 이는 이더리움 체인의 현재 state를 표현하는데 사용되는데 데이터 구조이다.

state trie의 각 account에는 특정 스토리지 슬롯이 설정되어 있는지 여부를 효율적으로 테스트하는 데 사용되는 해당 블룸 필터가 있습니다. 이를 통해 상태 테스트에 있는 계정의 저장소 값에 빠르고 효율적으로 액세스할 수 있습니다

블룸 필터는 스마트 콘트랙트 이벤트에 의해 생성된 로그 항목을 저장하기 위해 이더리움 블록 헤더에도 사용됩니다. 블룸 필터는 특정 로그 항목이 블록에 포함되는지 여부를 빠르고 효율적으로 테스트하는 데 사용됩니다.

eth block header의 logbloom도 이와 연관되어 있다.

이더리움에서 스마트 콘트랙트가 이벤트의 결과로 log entry을 생성하면, 해당 로그 항목은 블록의 트랜잭션 영수증에 포함됩니다. 블록 헤더의 logsBloom 필드는 블록에 포함된 로그 항목 집합을 나타내는 데 사용되는 블룸 필터입니다.

이더리움에서 스마트 컨트랙트는 contract의 실행 과정에서 나타나는 이벤트의 결과로 log entry를 생성한다. 이 log entry는 컨트랙트가 외부와 상호작용하고, 본인들의 정보를 전달하는 (state, activities)데 사용된다.

컨트랙트가 log entry를 생성하면 여기엔 발생한 관련된 파라미터와 데이터를 포함한 이벤트에 관한 데이터가 들어있다.

log entry를 발생시키려면 컨트랙트는 emit 키워드를 사용한다.

다시 돌아와서, block header의 logsBloom은 블록에 포함된 log entries의 집합을 표시하는데 사용되는 bloom filter이다.

logsbloom은 256비트 hash로 , 각 log entry의 bloom filter는 로그 항목의 주제와 데이터를 해싱해 계산하고, 그 다음 bloom filter를 사용해 block header의 logsbloom 필드에 해당 비트를 설정한다.