主页 > 苹果可以下载imtoken钱包吗 > 优化未使用输出选择的挑战

优化未使用输出选择的挑战

比特币美元指数英为_防止比特币病毒_为防止同一比特币被用户

当我们谈论比特币存储在区块链上时,大多数人会称之为“比特币地址余额”,这从会计的角度来看是有道理的,但比特币存储在区块链上并不是事实。 数据结构的表示。 “硬币”实际上存储为“未翻译的输出”(UTXO),而不是包含硬币的地址。 一个 UTXO 可以与一个比特币地址相关联,尽管你也可以有许多不同的 UTXO 与同一个比特币地址相关联。 “地址余额”是与地址关联的所有 UTXO 值的总和。 要从非技术角度理解 UTXO,我建议您阅读 Richard Gendel Brown 的“欢迎来到比特币岛”。 有关技术内容的概述,请查看开发人员指南。

比特币美元指数英为_为防止同一比特币被用户_防止比特币病毒

(交易包括输入和输出;未花费的输出是实际的比特币)

当比特币钱包软件创建一个新的交易时,它有同样的灵活性来安排交易中的数据。 这是因为用户指示钱包:“发送X个比特币到地址Y”,钱包需要梳理用户的UTXO,才能找到足够多的输出,使总价值达到X个比特币。 不幸的是为防止同一比特币被用户,没有简单易懂的方法来选择 UTXO,因为需要考虑几个因素。

天真的方法是简单地寻找大于你想要花费和使用的数量的最小输出,如果没有,添加下一个最大的输出,直到你有足够的输出来满足目标花费。 但是,这会导致输出被拆分,直到钱包中装满无法再使用的小额余额。 这可能是一个性能问题,如果用户试图清空余额较小的钱包,它也可能会导致用户终止交易。 这个钱包已经被用于许多交易,并且可能产生了大量的 UTXO,这些 UTXO 在一次交易中是不可行的。

虽然比特币交易可以包含数百或数千个输入和输出数字,但这是有代价的。 交易的输入和输出越多,交易规模就越大。 在撰写本文时,比特币的节点将拒绝大于 100KB 的交易。 同时,由于区块大小有限(目前为 1 MB),您与其他人竞争以获得矿工确认您的交易,矿工会将您的交易添加到区块中。 如果你广播一笔没有手续费或手续费可忽略不计的交易,你将承担以下两种风险, 1. 节点拒绝广播交易 2. 矿工选择不确认,转而确认每字节更高数据的交易手续费。 作为参考,我跟踪了一些交易和费用指标——在这里你可以看到写入的平均费用是每字节 30 聪。

防止比特币病毒_比特币美元指数英为_为防止同一比特币被用户

(交易数据大小和费用支付)

如果我们要优化算法,而钱包是用这个算法来选择UTXO来建立交易的,那我们就要确定我们的目标是什么,我们要优化的交易属性是什么? 我可以想象的优化 UTXO 选择的三个最大目标如下:

1. 防止区块链通胀:

A) 如果可能,尽量避免产生小的变化输出。 因为它们会给钱包和摄取区块链的每个人带来性能成本。 由于微观监管和市场竞争,它们还可能产生费用,因此最终用户的费用变得更高。

B) 小 UTXO 的排序:自然地,随着时间的推移,钱包会产生许多小 UTXO。 为了减小钱包的 UTXO 集的大小,以及整个区块链的 UTXO 集的大小,最好在一次交易中花费许多非常小的 UTXO,以便将它们从 UTXO 集中移除。

2.隐私:

A) UTXO 的选择应该是非确定性的,并且有几个不同的公钥。 当钱包选择一个 UTXO 时,应首先选择分配给同一公钥的其他 UTXO。

B) 小输入——小于零钱输出,且不与大输入共享公钥,则不要使用,因为这些小输入会增加交易费用,降低隐私。

C) 如果要创建找零输出,最好创建一个值与支付值相同的找零输出。 这有助于混淆哪些输出到接收方,哪些输出返回到发送方。

D) 找零输出应该插入到一个随机位置,因为交易有很多输出,并不总是在第一个或最后一个位置。

3.降低交易费用:

a) 当发送成本较小时,应优先使用交易输入集。 这意味着交易的数据量尽可能简单,尽可能小,几乎没有输入和输出。 优先使用单个 UTXO 作为交易的输入。

B) 按币龄对 UTXO 进行优先排序。 通过发送足够旧的硬币,足够大的交易将有资格被矿工识别为“高优先级”,无需额外费用。

C) 如果花费 UTXO 的成本(通过所需的附加费)高于交易输出,则不要添加此 UTXO。

现实世界的钱包是如何运作的? Bitcoin Core 钱包使用了一些相当复杂的逻辑:

1. 如果有任何 UTXO 与目标(支出值)匹配,则使用此 UTXO。

2、如果所有UTXO的总和小于target,但恰好匹配target,则使用这些UTXO。 (这可以防止扫描钱包时出错。)

3. 如果所有UTXO的总和小于target且不超过target,则使用大于target的最小UTXO。

4. Bitcoin Core 随机组合 UTXO 1000 次,直到它们的和大于或等于目标。 如果它碰巧找到一个精确匹配,它会提前停止并使用它。 对于这一步的推理,代码中也指出:“这是随机的,不能起到真正的安全作用,只是用来防止降级行为。”

5. 否则,最终结算要么是大于目标的最小UTXO为防止同一比特币被用户,要么是第4步中最小的UTXO组合。

6. 在构建最终交易时,如果任何变化输出小到足以被视为“尘埃”而不是创造输出,那么 Bitcoin Core 将剔除它们,将价值作为交易费用的一部分捐赠给矿工。

优化 Bitcoin Core 的逻辑以减少零钱输出的大小,即上面列出的目标 1A。 这是选择 UTXO 的“最佳”或“正确”方式吗? 这取决于你的观点——如果你重视隐私、交易费用降低或 UTXO 合并,那么它不是最佳选择。

为防止同一比特币被用户_比特币美元指数英为_防止比特币病毒

(UTXO 集的大小与未花费输出的数量成比例增长)

显然,这个问题没有万能的解决方案。 实际上,以上三个优化目标的方向是相反的。 鉴于这三个不兼容的目标,钱包作者认为最终用户将对选择钱包的 UTXO 的算法有更多的控制权。 对于高级用户来说,这是一个高级功能,但是当用户在“成本/性能/隐私”之间选择优化时,我可以想象用户会为了追求平衡而妥协。

这些选择取决于钱包工程师(我称他们为区块链的好管家)。 我们正在写入数据的是共享资源,因此我们最好小心。 在撰写本文时,有 17.6 个 UTXO 需要 596 MB 的数据来存储。 如果比特币的受欢迎程度继续上升,这些数字也必然会上升。 但在细心的区块链工程师的注视下,至少有一个可以防止 UTXO 集增长得比必要的更快。

----