什么是比特币启发式
扫描二维码
随时随地手机看文章
有两种主要的比特币启发式: 共同输入所有权启发式和变更地址检测启发式。
在单个交易中,共同输入-所有权启发式假设输入地址都来自一个实体。然而,在某些情况下,输入地址可以是多个实体。这叫做coinjoin,它会打破这个假设。(例如下图中的地址3)
更改地址检测启发式利用了UTXO的特性。由于很难向接收方发送准确的指定金额的资金,其余的资金将通过更改地址返回给实体。 因此,更改地址检测是必要的,因为它是实体的一部分。在这篇文章中,我们将重点介绍更改地址检测启发式。
更改地址检测启发式我们公司主要致力于研究最可靠的启发式检测集群。以下是我们在开发启发式时偶然发现的一些方法,以及我们对它们的见解。
地址重用此方法通过检查输出地址来检测更改的地址。如果存在一个以前从未被观察到的地址,那么它很可能是一个更改地址。这是因为在交易中创建新地址的目的是返回剩余的资金。
要使用这种启发式,它必须匹配以下条件。
1. 这个地址以前一定没有被注意到
2. 它必须是唯一一个以前没有被注意到的地址
该启发式相当简单,但它是最常用的启发式之一。我们相信这种方法能够在很多情况下检测到地址的变化。
十进制数检测更改地址值中的小数位数的长度假定比任何其他输出地址长得多。这是可能的,因为现在每笔交易都要收取交易费,而且交易中指定的金额往往会降低精确度,以便于快速的人为解释注释(例如,您只需向您的朋友发送5美元,而不是发送4.93美元)。
需要注意的是,在过去,有相当数量的交易降低了更改地址的精度值,但是现在所有的输出地址都包含小数。因此,找到正确的参数对于正确检测更改地址是至关重要的。
在我们的实现中,首先搜索一个十进制长度大于7的地址。如果所有其他输出值的十进制长度都小于2,则接受该地址作为更改地址(可以调整这两个参数以提高性能)。尽管这种启发式由于其简单性而有许多例外,但只要两个参数之间的差异较大,它就可以很好地执行。
平等的输入混币原理如前所述,混币原理是一种输入地址来自多个实体的情况。这些实体将确切数额的资金发送到多个地址,提高了匿名性。
在上图中,地址21和地址32具有相同的输出值。这使得很难区分是哪个实体把基金送到了地址21和地址32。然而,可以通过简单地计算输出值与输入值子集 (eg(0.006 + 0.005) - 0.01 = 0.001)。混币原理的问题是我们必须从一个交易中处理两个或多个实体。
我们的实现:
1. 通过检查两个或多个输出值是否相等来确定交易是否为混币原理
2. 如果条件1为真,则增加要集群的实体数量
3. 目前,我们假设实体的数量等于具有相同值的输出的数量。
必须实现输入的数量不等于具有相等值的输出的数量的情况,以便准确地估计实体。
脚本类型一个实体很可能在整个交易中只使用一种脚本类型。这意味着,如果所有输入地址都具有相同的脚本类型,而输出地址不是,那么脚本类型与输入地址相同的输出地址就是更改地址。
在上面的图中,我们可以推断地址 4是更改地址,因为它是唯一具有相同脚本类型的输出地址。
整数这种启发式假设支付金额通常是某个精度较低的数字,例如$5.50或$19.00。在此假设下,具有不降低精度值的输出地址被认为是更改地址。这种方法的问题是,数字可能以某种形式在不同货币(如美元)的精度降低。因此,我们需要导入交易发生时的汇率,但是资源成本超过了性能。
不必要的输入启发式这种启发式是基于“什么不需要花费,什么保留”的逻辑。例如,我们有:
2 + 3→4 + 1,其中左:输入量,右:输出量
如果我们想发送1BTC,我们只需要发送两个输入地址中的一个。但是,因为我们发送了4BTC,所以我们需要这两个地址。
这种方法的问题在于,有些钱包使用的代币选择算法不符合这种逻辑。
由于上述问题,没有使用这种启发式。此外,该方法本身的性能较低。
结论我们探索了一些最广为人知的比特币实体集群启发式。根据我们使用这些技术的经验,我们能够发现这些方法中的许多缺陷,从而使集群变得不可靠。因此我们公司致力于开发能够进行有效集群实体的健壮算法。