跳到正文

研究指南

加密现货研究

紧凑区块过滤器:匹配只是候选而非付款

紧凑区块过滤器用于筛选值得进一步检查的区块。命中不会直接告诉研究者付款笔数、接收金额或受益所有人。把过滤器命中直接变成使用量或转账总额,就跳过了完成这些判断所需的证据。

应交付一张从候选到完整区块核验的记录表,同时说明查询了哪些脚本、非命中区块为何排除,以及过滤器本身如何确认来源。筛选性能与经济解释是连续但不同的工作阶段。

确定实际可检索的对象

BIP158的Block Filters与Contents部分规定basic类型包含有关输出脚本和普通输入对应的前序输出脚本,并列出包括OP_RETURN输出在内的排除项。它不是任意地址文本、交易备注或全部交易字节的通用索引。

建立冻结的目标脚本集合,保存每项字节及纳入原因。从界面复制地址时,需要按网络和地址类型得到正确脚本,再用于查询。“财库”标签本身不是过滤器元素;同符号地址也不保证对应相同网络对象。

派生覆盖范围要单列。如果研究只监测零至九十九索引,过滤过程不会因为对已查元素具有规定性质,就自动发现索引一百。目标集不全时,正确筛选仍然不能形成完整钱包研究。

对于脚本重复项,应先固定去重口径。同一脚本由两份标签清单重复提供,不应被误报成两个不同监测目标;但来源关系可以保留,以便追踪为何纳入这个脚本。

区分构造正确与来源可信

BIP中的Golomb编码集合允许集合外元素偶然匹配。basic类型参数M为784931,规定构造下单个集合外元素的假匹配概率为一除M。这不是所有正候选中无关候选所占比例。

BIP157摘要与Motivation部分讨论匹配后取回完整区块、过滤器头历史检查,以及协议保证涉及的诚实节点假设。过滤器头链不自动等于普通比特币区块头中的共识承诺;应说明如何选择正确过滤器,不能把单一服务未核响应标成已验证。

保存区块哈希、过滤器类型、原始字节、过滤器哈希、可用头参照和节点观察。节点之间有冲突时,保留冲突并调查相应区块。伪造命中可能增加工作,伪造非命中则可能隐藏重要活动,两者后果不同。

假设的八个候选复查

设一次虚构研究对选定链上一千个区块,用已声明钱包脚本集合筛选,得到八个正候选。假设全部完整区块均成功取得,复核发现三个确有目标脚本出现在被过滤器覆盖的字段中,另五个没有。

阶段数量含义
已筛区块一千按规定窗口查询的总体
正候选八需要详细复查的区块
精确脚本匹配三已确认有关区块内容
假候选五概率筛选命中但无目标元素
非命中区块九百九十二此处未逐个独立审查

这次运行的候选精度为三除八,即百分之三十七点五。正候选中的假候选占比为五除八,即百分之六十二点五。两者都不是总体假阳性率,因为后者分母是真正不存在目标的测试。

本例没有独立确认全部负测试的真值,也没有统计整个目标集合在各区块中有多少集合外查询。因此,不能把五除一千宣称为实测实现假阳性率。若明确命名,它只能描述每筛一千块多查了五个无关区块的工作量,不能替代元素层的一除M。

所有数字均为假设,既非钱包或库的性能实测,也不能反向用八候选结果推断过滤器参数已经改变。复查样本的分母和概率构造的分母必须同时保留。

真匹配仍不等于付款笔数

继续检查三个真匹配区块。假设第一个创建零点四BTC目标输出,第二个创建零点六BTC目标输出,第三个则花费第一个输出。它们都与脚本集合有关,但只有两个属于本例定义的接收输出。

毛接收量为零点四加零点六等于一个BTC。不能因为三个有关区块就写成三笔收款,更不能写成三个BTC。当前余额还需另外追踪输出是否花费,以及是否存在其他有关输出。

记录交易标识、创建输出索引或被消费outpoint、数量与脚本关系。一个区块命中多个目标时,完整区块只检查一次,同时保留每个匹配目标。若按目标重复整块并相加整块交易量,就会放大无关活动。

精确脚本字节说明技术匹配,官方地址声明等材料才说明为何把它放进某实体的研究集合。不能让概率筛选过程顺手生成身份归属,更不能推断转账人的出售意图。

目标越多,候选工作量可能越大

单个不存在元素与包含许多脚本的钱包是不同查询设计。若有q个集合外元素,在每项规定概率适用时,至少一次假匹配的概率可用并集上界min(一,q除M)约束。该上界无需假定查询独立,也不是特定区块的精确预期结果。

仅作计算示例,q为一千时,一千除784931约为零点零零一二七四,也就是百分之零点一二七四。单元素概率约为百分之零点零零零一二七四。小数位置差一千倍,不能拿钱包整体范围代替单元素概率。

在运行记录保留q与重复脚本处理。扩大派生范围可能同时找回旧活动、增加筛查候选;这首先是覆盖和工作量改变,不自动说明数据服务变差。原始窗口不变但目标集合改变时,也不能把新找到的历史活动称为近期新增需求。

不同失败需要不同处理

过滤器命中后,若完整区块取不到,应标“待复查”,而非假阳性。区块取回后若哈希不符,应先解决区块身份,再检查脚本。使用错误分支完整区块得出无匹配,不能算对原候选的有效否定。

若问题是检索OP_RETURN负载文本,basic过滤器的排除规则使它不能提供这项任务的完整性保证。这是目标与工具覆盖不匹配,不是适用成员检验中的随机假阴性。

若目标集合漏了变更分支,可扩展集合后重跑同一窗口。保留旧集合和旧结果,说明新增来自查找范围改变。若过滤器头冲突,则调查节点或重建材料,而非仅扩大目标集;两种修复针对不同故障。

检查漏斗是否闭合

候选状态应有互斥分类:精确命中、已复查无目标、完整块未取得、身份冲突待解决。四类合计应等于原始正候选数,不能删除难查项后再把已知结果除以缩小分母。比如八候选中若只有七块取回,原表的五个假候选便不能沿用,应改为三真、四假、一未知,并说明精度尚未完整确定。

对同一原始过滤器重跑时,先比候选区块身份,再比分类结果。若候选集合改变,检查目标集、分支、过滤器字节和实现;若候选不变但真值分类改变,检查取回材料和解析逻辑。两种差异都不能只用新的总计覆盖旧结果,这样才能定位修复发生在哪一步。

候选区块唯一身份应含网络和哈希,而非只有高度。同高度替换区块需要自己的过滤器与内容核验;保留旧分支候选身份,避免重组静默覆盖实际检查过的对象。

发布前核验表

检查应有记录失败处理
目标身份脚本字节与纳入理由隔离不明目标
区块身份网络、哈希及范围解决分支差异
过滤器来源类型、字节、头与节点核验保留冲突
正候选复查完整块和精确匹配字段缺块保留未知
经济分类创建或消费的输出与数量不将原始命中算付款
指标分母区块、元素、候选或真负测试更正没有支持的精度名称

目标集修订、头冲突、解析器更正或缺块补回后,都应重核。最终说明已筛覆盖、已验证候选、未知候选和定义明确的经济事件。这样既能量化复查工作,也不会制造本次运行没有测量的钱包完整性或全局错误率。

常见问题

过滤器命中能证明地址收到了币吗?

不能。需要取回完整区块,核对准确字段,再分类输出创建或花费。

八个候选中五个是假匹配,是否是假阳性率百分之六十二点五?

这是本次假设运行中正候选的假候选占比。假阳性率以真正不含目标的测试为分母。

相关阅读