比特币的启发式方法主要有两种:共输入所有权启发式方法和变更地址检测启发式方法。在单个事务中,公共输入所有权启发式假设输入地址全部来自一个实体。但是,在某些情况下,输入地址可以是多个实体。这称为coinjoin,它打破了这一假设。 (例如,下图中的地址3)更改地址检测启发式使用了UTXO的特性。由于很难将确切的指定金额的资金发送给接收者,因此剩余的资金将通过更改地址退还给实体。因此,更改地址检测是必要的,因为它是实体的一部分。在本文中,我们将重点介绍更改地址检测的启发式方法。更改地址检测启发式算法我们公司主要致力于研究最可靠的启发式检测集群。这是我们在开发启发式方法时偶然发现的一些方法,以及我们对它们的见解。地址重用此方法通过检查输出地址来检测更改的地址。如果有一个以前从未发现过的地址,则很可能是一个已更改的地址。这是因为在交易中创建新地址的目的是退还剩余的资金。要使用此启发式方法,它必须符合以下条件。 1.此地址必须在之前没有被通知过。2.它必须是之前没有被通知的唯一地址。启发式方法相当简单,但是它是最常用的启发式方法之一。我们相信,这种方法可以在许多情况下检测地址更改。十进制数检测会更改假定比任何其他输出地址长得多的地址值中小数位数的长度。之所以可行,是因为现在每笔交易都要收取交易费,并且交易中指定的金额会降低准确性,以便于快速进行人工说明和注释(例如,您只需要向朋友发送$ 5,发送$ 4.93)。应该注意的是,过去,大量的事务处理降低了更改地址的准确性值,但是现在所有输出地址都包含小数。因此,找到正确的参数对于正确检测更改后的地址至关重要。在我们的实现中,我们首先搜索一个十进制长度大于7的地址。如果所有其他输出值的十进制长度小于2,则接受该地址作为更改地址(您可以将这两个参数调整为提高性能)。尽管这种启发式方法由于其简单性而有许多例外,但只要两个参数之间的差异很大,它就可以很好地执行。等额输入货币混合的原理如上所述,货币混合原理是输入地址来自多个实体的情况。这些实体将确切数量的资金发送到多个地址,从而增加了匿名性。在上图中,地址21和地址32具有相同的输出值。这使得很难区分哪个实体将资金发送到地址21和地址32。但是,可以简单地计算输出值和输入值的子集(例如(0.006 + 0.005)-0.01 = 0.001)。硬币混合原理的问题在于,我们必须从一次交易中处理两个或多个实体。我们的实现:1.通过检查两个或多个输出值是否相等来确定交易是否是混合货币原理2.如果条件1为真,则增加要聚类的实体的数量3.当前,我们假设实体数等于具有相同值的输出数。为了准确地估计实体,有必要实现输入数量不等于相等值的输出数量的情况。脚本类型实体在整个事务中可能仅使用一种脚本类型。这意味着,如果所有输入地址都具有相同的脚本类型,而输出地址不是,那么与输入地址具有相同脚本类型的输出地址就是更改地址。在上图中,我们可以推断出地址4是更改地址,因为它是唯一具有相同脚本类型的输出地址。整数启发式假设付款金额通常是一个低精度数字,例如$ 5.50或$ 19.00。在此假设下,具有不降低精度的值的输出地址被视为更改地址。这种方法的问题在于,以不同的货币(例如美元),数字的准确性可能会有所降低。因此,当交易发生时,我们需要导入汇率,但是资源成本超过了性能。不必要的输入试探法此试探法基于“什么成本,什么成本”的逻辑