来源:BixinInstitute,原题《UTXO合并》
DavidA.Harding文
本文由币信研究院原创编译,原文链接:
https://github.com/bitcoinops/scaling-book/blob/6a7b1e9cc64ddf832b86276e7569604334f9012c/x.consolidation/consolidation.md
本文版权归原作者所有,仅代表作者本人观点,不代表币信或币信研究院的观点或立场。
本文约6500字,阅读全文需约20分钟。
未使用交易输出合并是指将存储在多个UTXO中的比特币价值合并为一个UTXO。这样可以减少你控制的UTXO的数量,同时使你的余额保持大致相同,从而在为了获得快速确认需要支付的时候,更有机会能够创建更小、更实惠的交易。
合并示例
把交易想象成一个矩形,其高度是它的费率,其长度是它的大小,其面积是它的总费用。例如,以下所示为一笔简单交易,它从一个P2WPKHUTXO花费到两个P2WPKH输出——一个输出给客户,另一个作为找零回到花费者那里。
大多数钱包最终都会遇到这样的情况,即它们在一个UTXO中没有足够的价值来支付它们想要花费的金额。这就要求它们通过花费更多的UTXO为交易增加更多价值。例如,让我们在示例交易中花费两个额外的P2WPKHUTXO:
尽管这似乎是一个很小的变化,但它几乎使我们的交易大小和成本增加了一倍。这就是合并发挥作用的地方。通过提前准备,我们可以把大型交易的三个UTXO,通过一笔自己发给自己的低费率交易,合并到一个UTXO。然后,我们可以在高费用交易中使用单个UTXO向客户付款,交易形式与上述第一个示例交易相同:
NEAR基金会与Kakao Games旗下Web3游戏METABORA SG达成合作:3月6日消息,NEAR基金会和Kakao Games旗下Web3游戏项目METABORA SINGAPORE(简称METABORA SG)签署了一份战略谅解备忘录。
根据协议条款,NEAR和METABORA SG将相互合作以发掘一个基于IP的全球Web3联合业务,通过跨链提高区块链生态系统的整体流动性,提高品牌知名度,通过赛事推动全球营销,建立一个积极的支持系统以加强核心网络。(PR Newswire)[2023/3/7 12:45:41]
比较总成本,我们发现两次交易的版本比使用三个UTXO的单笔高费率交易便宜40%。即使两次交易的版本使用了更多的总区块空间,这也是可能的。
如果合并交易在你发送第二笔给客户的交易之前得到确认,那么,与单笔交易相比,客户不会遇到任何额外的延迟,因此你可以节省少量的钱而完全无需改变接收方的体验。
平均花费的UTXO
从前面的示例中,我们可以看出,当需要在一个交易中使用多个UTXO时,支出是低效的,而合并才有用。这对你来说有多频繁?如果你可以获取以下两个数据,则可以使用下面提供的简单公式估算每个交易使用的UTXO的平均数量。
转入——你的钱包从其他人处获得的输出数量。
转出——钱包创建的将比特币发送给其他人的交易数量。如果你使用批量付款,请注意,这是交易数量,而不是付款数量。为了提高精度,你可以在此总数中包括你期望在钱包为空之前进行的交易数量。
要计算每笔交易花费的UTXO的平均数量,请使用以下公式:
average_utxos=(转入+转出)/转出
之所以转出在除号的上下都有,是因为我们预期你创建的大多数交易,也会产生一个找零输出,把未使用的价值作为一个新UTXO返回到你的钱包。
上面等式的最小现实结果是1.0,这也是交易可包含的UTXO的最小数量。你的结果越是高于1.0,你将从UTXO合并中受益越多,这将在下一部分中看到。
预计节省
要估计使用合并可以节省多少,让我们看看一笔典型交易的总费用如何取决于它花费了多少UTXO。查看此图表时,请将x轴与你在上一节中计算的UTXO平均数量进行比较。
如果我们能使用仅支付上图所用费率的1/10的合并交易,将所有多余的UTXO合并为一个UTXO,会怎么样?然后,我们可以按足额费率只用一个UTXO去创建常规支出。将这些数据覆盖在上图的顶部,我们可以看到可以节省多少:
巨鲸从Crypto.com转出2.5亿枚DOGE,价值6300万美元:2月16日消息,根据lookonchain链上监测,北京时间2月16日18:23:27,DOGE巨鲸地址「D7vrVR」从Crypto.com收到2.5亿枚DOGE(约6300万美元),现已成为Dogecoin前20名持有人之一,其地址余额为7.09亿。昨日,该地址也从Crypto.com收到2亿枚DOGE(约3900万美元)。[2023/2/16 12:11:33]
让我们以百分比的形式绘制节省的量:
显然,我们节省的实际金额将取决于用于合并的低费率和用于支付客户的较高费率之间的比率。使用本文附录中提供的数据,在撰写本文时,通常可以实现以下比率:
另一个会影响我们节省金额的事情是,为了花费每笔UTXO,我们需要向交易中添加多少数据;即交易输入的大小。对于P2WPKH,大约为每UTXO68vbytes;但是对于P2SH2-3多签,大约为294vbytes。假设我们将常规支出的费率统一为1/10,则各种常见脚本模板的节省为:
根据以上估计,我们预计,至少在某些时候,几乎所有活动的比特币服务都可以通过合并节省大量费用。例外情况是,UTXO的平均数量非常少,或者在快速费率和慢速费率之间的差额持续小的时候尝试合并的服务。
UTXO池
上面的示例假定你将从拥有n个UTXO变为仅有一个UTXO,但是,如果你需要广播一笔交易而你的交易其中一笔又没有被确认,那么这可能会造成问题。
美国财政部:加密货币需要严格监督:金色财经报道,根据《华盛顿邮报》最近的一篇文章,美国财政部打算告诉白宫,加密资产是投资者的主要金融风险来源,除非政府针对加密货币推出新的强有力的法规,否则这些风险超过了投资者的潜在利益。[2022/9/8 13:17:33]
从全节点的角度来看,UTXO有两种形式:已确认和未确认。已确认UTXO是最佳区块链上一笔交易的输出。大多数现有节点将始终接受第一眼看到的已确认UTXO的支出,前提是该支出是有效的,即支付了适当的费率,小于100000vbytes,并且遵循其他一些简单规则。
一个未确认UTXO是一笔仍在内存池里的交易的输出。为了防止针对节点内存池的DoS攻击,节点对使用未确认UTXO的交易设置了其他限制。这意味着,你无法保证能够在任意时间使用未确认UTXO。例如,在第一个交易被确认之前,钱包可能无法传播以下所示的第二个交易:
由于许多用户希望在请求付款后的几秒钟内就在钱包里收到新的未确认交易的通知,因此许多支出者不希望自己陷入这种状态:等待之前的一笔交易得到确认,而无法向网络提交新交易。这会导致这些花费者维护一个UTXO池——一套可以随时使用的已确认UTXO。
UTXO池不会显著影响前面所述的节省,因为你始终可以等到以后将池子合并为一个UTXO。但是,你在不同UTXO之间分配资金以确保即时可花费性的次数越多,你需要付款超出你控制的任何单个UTXO的价值的可能性就越大——这削弱了UTXO合并的费用节省。
如果你很少在UTXO池中遇到该问题,则可以忽略这种情况,因为它的效率很低。如果经常发生,则有几种选择:
1.通过保持输出数量相同并增加每个输出的价值,来增加UTXO池中输出的平均价值,从而总体上增加池子里的资金量。请注意,这还会增加你因盗窃或热钱包意外而蒙受的金钱损失。
2.通过保持总量不变但减少输出数量,增加UTXO池中输出的平均价值。你可以通过批量付款来减少在任何特定时间所需的UTXO数量来完成此操作。
3.如本章稍后所述,专注于创建不找零的交易。由于后面小节中所描述的原因,不找零的交易通常不如合并有效,但可以为你节省一些钱。当优化你的UTXO池以进行不变的交易时,你希望UTXO拥有各种金额,以便你有尽可能多的不同金额组合。
最佳合并大小
要合并UTXO,你要在交易中包含的数据不只是UTXO,还必须包括输出,该输出将资金返还给自己,并包含一些交易样板。你在单个交易中合并的UTXO越多,该交易的固定成本在UTXO之间的分配就越好,每个UTXO的成本渐近地接近其中一项输入的平均大小。
数据:Uniswap上USDC的交易量达到4个月低点:金色财经报道,据glassnode数据显示,Uniswap上USDC的交易量刚刚达到4个月低点的47,511.58美元。
此前2022年5月21日观察到的低点为112,906.39美元。[2022/9/6 13:10:42]
如上所示,通过同时合并额外UTXO所节省的金额并不是特别大,因此即使你不注意合并大小,也可以获得合理的效率。
冷钱包合并
某些服务在其钱包之间有着基本的职责划分。收到的客户存款或付款都将存入冷钱包。付款或提款是使用热钱包进行的。必要时,一个或多个工作人员将钱从冷钱包转移到热钱包。
一个简单的合并策略是将在一定时期内收到的所有UTXO都放到冷钱包里,然后将它们合并到一个UTXO。但是,你可能会想知道这是否产生了浪费,因为你可能最终在以后将单个UTXO拆分为热钱包UTXO池的多个UTXO。例如,如果将10个UTXO合并为1个UTXO,则将其转移回5个UTXO似乎效率很低。
但是,两种替代选项可能更糟。第一种替代选项是你不合并冷钱包。你只用等到需要转账到热钱包并执行合并。这最大程度地减少了区块链空间的使用——但所有这些空间都用在了单笔大型交易里。如果你需要交易进行快速确认——例如,因为你需要这笔钱才能动热钱包——你可能会为该交易支付高额费率,从而失去合并冷钱包的好处。
第二种替代选项是,将10个UTXO合并到冷钱包中的5个UTXO,然后将5个冷的UTXO转移到5个热钱包UTXO。在所有可用选项中,这将使用最多的区块空间。它以低合并费率创建了一笔大型交易,并以较高的费率创建了一笔中等规模的交易来把钱发送到热钱包。这使它成为表现最差的选项。
虽然最大程度地合并UTXO然后在以后进行拆分似乎有点愚蠢,但本节开头描述的简单合并策略确实可以提供最大的节省。
隐私问题
当你收到从未使用过的新地址的付款时,查看区块链历史的分析人员将不知道谁拥有该UTXO。但是,如果你将UTXO与他们已确定属于你的其他UTXO合并,则分析师可以做出合理的假设,即所有合并的资金均属于你。
数据:超6%合格地址已领取超31% HOP空投:6月10日消息,据Dune Analytics的数据显示,截止发稿,已有8,255位用户完成 HOP 的空投申领,占所有具备申领资格用户(145,329)的 6.35%,共计领取 31.06%(17,730,197 枚)HOP。[2022/6/10 4:16:09]
因此,试图最大化自己的比特币余额或交易历史的私密性的用户不应使用本文档中描述的UTXO合并。以前使用过诸如混币之类的技术来将其UTXO的所有权历史与其他UTXO混合在一起的用户,尤其应该避免这种情况。
有可能在混币期间执行一种限量的合并,例如,在Joinmarket或Wasabi中的实现。此外,未来协议开发的构想,例如通道工厂或混合池,可能会使由多个人拥有的多个UTXO合并为一个UTXO,然后用于定期支出的情况变得更为普遍,使得分析者更不清楚谁拥有来自合并的币。
选择UTXO进行合并
你的目标是使用一个UTXO完成尽可能多的付款,因此你应该首先合并最低价值的UTXO。此外,通过确保每次选择接收到特定地址的UTXO时,还选择接收到同一地址的所有其他UTXO,可以减少隐私损失。例如,假设你想在下面的示例钱包中合并三个UTXO:
你应该选择abcdef:0,因为它是价值最低的UTXO。然后选择cdefab:0,因为它被发送到与abcdef:0相同的地址。最后,选择bcdefa:0,因为它是价值次低的UTXO。
关于选择相关UTXO的更多信息,请参阅BitcoinCore里的-avoidpartialspend配置选项。
合并与竞争技术
在使用UTXO合并的同时,无法有效地使用另一些节省费用的技术,因此以下小节将它们与合并进行了比较,同时突出了它们的优缺点。
不找零的交易
不找零的交易不包含找零输出,这使典型交易的大小减少了约31至43vbytes。尽管在仅花费一个UTXO的时候有可能创建一笔不找零的交易,但是,通常需要同时花费两个或更多UTXO才能产生一笔不找零的交易。这是因为,如果你愿意使用任意数量的输入,那么,可以在交易中包括的UTXO组合的数量会极大地有助于寻找一笔不找零的交易。
不找零的交易节省了区块空间和费用,因此强烈建议你使用。但是,与需要在同一笔交易中花费两个或多个UTXO的不找零交易相比,有效使用UTXO合并几乎总是可以节省更多的钱。这是因为,所有常用脚本的交易输入都比交易输出大得多,因此可以省略输出省下的成本并不能弥补必须包含额外输入的成本。
不找零的交易还会从你的钱包中删除一个UTXO,与UTXO合并一样,减少了你未来的交易费负担。节省下来的钱更难分析,因为通常你会凑整交易费来创建不找零的交易,从而增加支出费率。但是,即使我们忽略这一点,因为输入远远大于输出,所以,以较低的费率进行合并仍将比以较高的支出费率创建两个输入的不找零交易节省更多的钱。考虑一个示例:Alice和Bob分别收到10个UTXO。Alice将其UTXO合并为单个UTXO,费用为正常支出费用的1/10,然后发送五笔付款。Bob将自己的UTXO分开存放,并自己发送五笔付款,每笔付款都使用两个UTXO来按正常支出费率创建不找零的交易:
Alice的合并交易为679.25vbytes;她随后的五笔付款交易是136.50vbytes。Bob的五笔不找零的交易大小为169.25vbytes。
如果Alice和Bob都以相同的费率发送他们的付款交易,我们可以使用一些简单的代数来计算Bob进行合并交易所需的费率百分比,以便与Alice使用不找零的交易节省的钱相等:
719.25*x+5*140.50=5*177.25
x=0.26
总之,如果Alice能够以她通常花费费率的1/4或更低进行合并,她将比Bob省下更多的钱,即使她使用了比他多将近一倍的区块空间。本章附录中的费率数据表明,在我们粗略的假设下,超过96%的时间都有可能节省费用。
如果Bob需要为每个交易使用两个以上的输入来创建不找零的交易,即使Alice为合并交易使用了相应较高的费用率,她也可以节省更多的钱。
就是说,与合并交易相比,不找零的交易的明显优势在于,它们使支出者节省了区块空间并节省了适度的交易费,同时保留了他们的隐私以防上述「合并隐私」部分所述的问题。对于大多数个人消费者,甚至是花费不频繁的小企业而言,隐私优势对他们来说比合并节省的交易费更为重要。
预测性/有机UTXO管理
预测性UTXO管理是由BitGo提供的一种服务:「通过在高费率减少交易大小,同时在低交易费时自动清理和处理币的小片段,来降低总体成本。」这种技术的具体实现是专有的,但它可能类似于DmitryPetuhov所描述的有机UTXO合并。
此类技术消除了合并交易使用的额外区块链空间,从而使其可能更有效率并节省更多交易费。它可能更容易实现某些服务,因为不需要等待数小时或数天即可确认合并交易。此外,BitGo的预测性UTXO管理系统尤其似乎可以使用上一节中所述的不找零的交易实现部分节省,以及其中描述的额外的节省和隐私好处。
但是,在节省费用方面,对于希望在接下来的几个区块里确认其支出交易的支出者,UTXO合并通常会比预测性/有机技术节省更多的钱。这是因为,利用预测性/有机交易在区块链空间上省下的几十个字节,与能够通过在较低费率支出UTXO来节省很大比例的UTXO支出成本并不匹配。实际上,在前面的插图中对此进行了量化:
对于平均每笔交易花费两个或更多UTXO且可以按正常费率的50%或更少的价格进行合并的人,合并至少可以使成本达到收支平衡,并且可以轻松地比发送普通交易节省更多的钱。本章附录中包含的费率数据显示,在我们分析的2019年11月和12月期间,有99.85%的可能性为名义上的2个区块确认目标节省至少50%的费率。
同样,预测性/有机方法的确具有以下优势:与现有服务的合并相比,它的实现可能要容易得多,并且与不找零的交易相结合,可以实现适度的额外节省并增强隐私性。不过,专注于最大程度地节省费用的支出者可能会希望专注于UTXO合并。
增加交易费
节省最大的合并交易,应该以你认为允许交易在需要之前确认的最低费率发送。例如,如果你可以等待一周的时间来确认交易,那么你应该使用交易费估算工具的目标费率在1008个区块内进行确认。
但是,来让一笔先前发送的合并交易更快地确认,或者因为费率意外上涨,有时你可能需要增加其手续费。在这种情况下,你有几种选择:
对于从热钱包到热钱包的合并,你应发出BIP125信号,这样你可以使用费用替代来增加交易费,这是最有效的增加交易费类型。
对于从冷钱包发送到热钱包的合并,你可以轻松地使用「为父辈付费的子辈」来增加交易费。
对于从冷钱包发送到冷钱包的合并,你可能需要设计你的交易,以便它们始终包含支付给热钱包的少量输出。这样,你就可以通过热钱包使用CPFP收费功能,而无需重新打开冷钱包。但是,除非你打算把钱转到你的热钱包里,否则这种额外的输出可能会稍微降低合并效率。
结论
对于既频繁接收又频繁发送付款的组织来说,合并是省钱的最有效方法之一。它相对容易实现,如果做得好,收到你付款的人将永远不会注意到你正在这样做。
另见
AnthonyTowns的《田野报告:在Xapo合并了400万个UTXO》
MarkErhardt的《演讲:unspent管理与币的选择》
附录A:
下图显示了使用BitcoinCore的交易费估算的2个区块确认目标和1008个区块确认的目标,在一段时间内可用的预计节省。
下表总结了达到一定节省率的频率。我们看到,几乎总是可以通过等待一周来节省50%的费率,并且通常可以节省90%或更多。
我们使用上述的一周目标是因为,这是BitcoinCore的评估器所提供的最长期限,并且对于许多组织而言,等待一笔合并交易一周的时间来确认是很容易的。后续的有关费率估算和紧急权衡的章节将更详细地分析不同确认目标之间的费率差异。
-TheEnd-
标签:ALIBYTESBOBALICEVitalick NeuterinBYTES价格bob波币钱包容易被抓吗Chalice Finance
来源:LongHash编者注:原标题为《尽管议论纷纷,比特币与黄金的价格依然不存在相关性》众所周知,比特币被视为“数字黄金”.
1900/1/1 0:00:00作者:FYJ?来源:区块律动BlockBeats编者注:原标题为《加密消亡史2020》「大家都在布局A股。」听到这句话,我的思路好像被卡住了。两秒后,我确认朋友没有在跟我讨论加密市场.
1900/1/1 0:00:00PA周刊第九十期1.6-1.12文|周文怡编辑|毕彤彤?出品|?PANews概述:北京金融局局长称本周内将公布监管沙箱第一批入箱项目.
1900/1/1 0:00:002019年是Libra崛起的一年,它是由Facebook引导的创建一种新型数字货币和银行系统的一个尝试.
1900/1/1 0:00:00走过2019年的跌宕和起伏、热闹与喧嚣,2020年已经到来,区块链行业那些是是非非、或喜或悲的故事还在继续…我是巴比特国际站编辑Lylian,专注于向国外读者传递中国区块链动态.
1900/1/1 0:00:00来源:互链脉搏作者:元尚继迅雷集团旗下网心科技于2018年5月发布“迅雷链开放平台”后,2019年11月.
1900/1/1 0:00:00