Конструкция фильтра Блума SPV — это ложные срабатывания, взятые из блокчейна или просто из-за совпадения с другими адресами.

Насколько я понимаю, ложноположительные адреса, сгенерированные фильтром Блума SPV, не обязательно должны находиться в блокчейне (т. е. быть адресами, которые уже использовались). Это правильное представление о фильтрах Блума SPV?

Ответы (2)

Фильтры Блума являются вероятностными, каждая попытка совпадения, которую вы делаете с ним, имеет определенный шанс быть ложным срабатыванием. Частота ложных срабатываний определяется конструкцией фильтра (насколько он широк и сколько в него добавлено элементов). Транзакция либо, вероятно, соответствует, либо определенно не соответствует заданному фильтру Блума.

BIP37 не включает биткойн-адреса в систему сопоставления фильтров, вместо этого для каждой транзакции в блоке данный фильтр сопоставляется с TXID, каждым выходным скриптом, каждым входным скриптом и каждым элементом данных во входном скрипте. Если какой-либо элемент соответствует, транзакция отправляется клиенту, ложное срабатывание или нет, решает клиент.

Насколько я понимаю, ложноположительные адреса, сгенерированные фильтром Блума SPV, не обязательно должны находиться в блокчейне (т. е. быть адресами, которые уже использовались).

Фильтрация BIP37 SPV всегда будет возвращать только транзакции из блока (включая путь дерева Меркла к заголовку блока) или транзакции из их пула памяти, которые соответствуют заданному фильтру. Ложные срабатывания не создаются из ниоткуда, они просто являются другими транзакциями, которые соответствуют критериям, заданным клиентом.

Первоначально предполагалось, что клиенты будут настраивать уровень ложноположительных транзакций, чтобы скрыть свое истинное намерение от партнера, с которым они разговаривают, но на практике это оказалось совершенно неэффективным .

адреса ложных срабатываний... не обязательно должны быть в блокчейне

Вы можете думать о сопоставлении фильтра Блума как о функции.

def matches(tx, filter):
    ...

Вы можете сделать транзакцию, которая возвращает true для этой функции с заданным фильтром, который также не должен возвращать true для этой транзакции, поэтому ложные срабатывания могут существовать вне данных блокчейна. Но чтобы увидеть это на практике, ложное срабатывание почти всегда будет исходить от сети блокчейн/p2p.