就在三年多前,当我加入 BitGo 时,比特币现金尚未分叉,SegWit 也尚未激活。当时的钱包结构更为简单,合并交易大多还停留在理论层面,而人们对支付批处理的认知也远不如现在。 虽然偶尔会出现网络拥堵,但年底比特币价格飙升至 20,000 美元时,却引发了比特币网络迄今为止最严重的交易积压。

Mempool UTXO

2017 年 10 月至 2018 年 1 月期间的内存池大小(单位:MB)。颜色表示手续费率区间。提供该数据的全节点并未强制执行内存池大小限制。图表显示交易积压量超过 300 MB,相当于两天以上的区块总量。来源: https://jochen-hoenicke.de/queue

从 12 月初到 1 月底,手续费率从未跌破每字节 40 聪。在此期间的大部分时间里,手续费率都远高于每字节 100 聪,仅在除夕前后有几天短暂回落。 网络交易队列多次超过默认内存池(mempool)的大小,导致大多数节点将费率最低的交易剔除--有时甚至剔除了所有每字节低于 100 聪的交易。 2017 年 12 月 22 日,下一个区块的交易费率峰值超过了每字节 1,000 萨托什。

Mempool UTXO

2017 年 12 月内存池大小(单位:MB)。全节点数据来源采用默认的 300 MB 内存池限制。该图表显示了 2017 年 12 月 22 日,该节点内存池中所有低于 100 satoshi/vB 的交易被移除的情况。来源: https://jochen-hoenicke.de/queue

SegWit 的采用才刚刚开始;许多钱包仍在使用简化的币种选择机制构建交易;几乎没有任何钱包原生支持"子支付父"(CPFP)手续费上调机制;而且,许多钱包的未花费交易输出(UTXO)池已经变得极其碎片化。 由于交易被卡住长达数周,尽管用户已为交易支付了巨额手续费,相关服务仍被支持请求淹没。部分企业级钱包甚至完全耗尽了已确认的 UTXO。 对于众多钱包而言,其大部分 UTXO 实际上已无法花费:花费这些 UTXO 的成本超过了它们各自的价值。简而言之,UTXO 管理当时还远未成熟。无论是钱包软件还是钱包运营商,都未曾为如此大规模的手续费事件做好准备。

UTXO 集合从 2017 年 10 月的 5000 万个 UTXO 激增至 2018 年 1 月中旬的 6400 多万个。随着积压问题缓解,人们对钱包运营最佳实践的重视程度也随之提高。 许多钱包运营商利用随后相对平静的时期对钱包进行了整合,使 UTXO 总量在 2018 年 3 月前缩减回 5100 万。

尽管仍有改进空间,但自 2017 年以来,企业级钱包已取得了长足进步。在接下来的案例研究中,我将介绍两种常见的用于企业运营的钱包配置方案,并探讨 BitGo 如何与客户合作以降低费用支出。

设置:仅发送型热钱包

Send only hot wallet

仅支持发送的热钱包:向外部收款方的提币操作由热钱包发起。来自外部方的充币将存入温钱包,该温钱包仅限向热钱包(或可选的冷存储,图中未显示)发送资金。

这种设置至少需要两个钱包,通常是三个。

  • 一个仅用于转账的热钱包

  • 一种用于接收资金的热钱包

  • 一种可选的冷钱包,用于存储该组织的大部分资金

每当热钱包资金不足时,便会从温钱包中补充资金。温钱包中的多余资金则会被转移至冷钱包。如果温钱包和热钱包都资金不足,则可从冷钱包中向热钱包注入资金。典型用户:经纪商、借贷服务商

优点

  • 大额存款的强力保障


    存款将直接存入热钱包,该钱包可设置为仅允许向热钱包和冷钱包转账,且转账需经批准。

  • 热钱包中的简单未花费余额管理


    由于热钱包仅支持发送操作,因此未花费交易的管理只需确保资金充足且未花费交易数量足够多即可。与此同时,温钱包中的资金可以进行整合,且时间偏好较低。

缺点

  • send 钱包中的同质 UTXO 池


    由于发送钱包中的所有资金要么是先前转账产生的找零输出,要么是通过充值进入钱包的,因此该钱包的 UTXO 值范围并不广泛。这对交易构建不利,因为这样更难避免产生找零。 几乎每次支付都会产生找零输出。通过批量处理支付,从而减少每次支付产生的找零输出数量,可以很大程度上缓解这一弊端。

  • 为提供可汇款资金而进行的其他交易


    由于所有资金最初都是存入温钱包的,因此在资金可供使用之前,必须将其转入热钱包。即使在为转账而合并资金时,与资金直接存入热钱包的模式相比,仍会生成额外的交易输出。

挑战

  • 支付笔数较多


    由于发送钱包的未花费交易数量通常较少,因此每笔交易仅发送一笔支付,可能会迅速耗尽钱包中的已确认资金。在这种情况下,我们过去曾观察到某些钱包会产生非常长的未确认交易链。 未确认交易的链条过长,最终会导致后续交易无法提交至网络,因为比特币节点默认不会中继超过 25 笔的未确认交易链。

  • 区块处理速度变慢或出金量激增


    由于热钱包中仅存放必要的资金,因此有时只需几个区块确认速度变慢,或者流出量急剧增加,就可能迅速耗尽钱包中已确认的资金。

建议

  • 保持充足的资金


    请在热钱包中保留足够的资金,以确保能够支撑至少三小时的峰值流量。根据统计数据,比特币每天会有一个 1 小时的区块。这通常会导致少量交易积压,从而造成部分交易确认延迟。因此,务必尽早为钱包充值,并保留足够的资金以应对拥堵期。

  • 批处理


    在单笔交易中发送多笔支付,可以优化交易流程并减少钱包的交易次数。由于输入集、交易头和找零输出的开销在各笔支付之间分摊,且生成的找零输出数量减少,这可以降低 每次支付的交易手续费最高可达 80%。 一种采用批量处理的仅发送型钱包,即使只有几百个 UTXO,也能轻松应对轻微的网络拥堵。 为了使批量处理发挥应有的作用,每笔交易应至少包含五到十笔支付。根据钱包执行的支付数量以及向网络提交支付的时效要求,我们发现一到十五分钟的批量处理间隔效果良好。建议从五分钟的批量处理间隔开始,并在此基础上进行调整。

  • 更改拆分


    由于仅支持发送功能的钱包的 UTXO 池完全由充值输出和找零输出组成,因此为了确保运行顺畅,必须将大型 UTXO 迅速拆分为数量更多的 UTXO。 对于交易量较大的钱包,BitGo 会自动执行此操作。但在批量支付时,应将 UTXO 数量控制在较低水平,以避免过度拆分。

  • 整合"温钱包"


    由于热钱包中的资金并不都需要立即可用,因此可以定期发起低费用的合并交易,将较小的 UTXO 合并为较大的 UTXO,从而降低未来为热钱包补充资金的成本。

  • 原生 SegWit 变更地址

    由于"仅发送"钱包仅从其所属组织接收资金,因此即使在交易的接收端可能无法实现,它仍可立即切换至原生 SegWit 地址。 原生 SegWit 多签地址(p2wsh)的转账费用比 p2sh 略高,但从该地址消费的费用则更低。以 BitGo 使用的 2-of-3 多签为例,从包装式地址切换到原生 SegWit 地址可将钱包手续费降低约 15%。

BitGo 的福利

  • 对费用敏感的未使用选项


    BitGo 的币种选择会考虑当前的手续费水平。 在手续费较低时,BitGo 的未花费交易选择机制将允许使用更大的输入集来合并较小的 UTXO;而在手续费较高时,则会优先选择较小的输入集。对于仅支持转账的钱包而言,这种基于手续费的未花费交易选择机制的影响并不明显,因为此类钱包的 UTXO 池通常已经相当同质化。

  • 改进的变更拆分功能


    BitGo 的自动找零拆分功能会将找零金额分散到一系列数值中。这使得在为钱包创建额外 UTXO 时,找零拆分策略更为保守,同时也增加了钱包内各 UTXO 之间的价值方差。钱包内各 UTXO 之间的方差越大,找到一套金额较小且能避免找零的输入集的可能性就越高。

案例研究:仅支持转出的钱包:"SatSource"

SatSource 拥有一个仅支持转出的钱包。作为一家初创企业,其初期交易量较小,因此会针对每位收款人发起单独的交易。随着支付量增加,SatSource 发现,当区块确认时间较长或提现需求激增时,其钱包中的已确认资金有时会耗尽。

SatSource 已转为批量支付模式。在采用批量支付之前,每个收款输出都会产生至少一个交易输入、一个找零输出以及交易头部的开销。这意味着每笔支付的交易权重为 215 虚拟字节 (vB) 或更多。现在,通过将三笔支付合并为一笔交易,该额外成本被分摊至每笔支付约 93 vB,使每笔支付的成本降低了约 57%。随着公司用户基数的增长,合并规模随时间推移逐渐增加--目前每笔交易约包含九笔支付。 每笔支付的交易权重降至约 52 vB,与最初每笔交易仅包含一笔支付的情况相比,每笔支付的成本降低了约 76%。

由于定期间隔的批量处理使得交易频率更加可预测,SatSource 得以减少其钱包中未花费的地址数量。这降低了平均输入集大小,从而进一步略微降低了交易费用。

在审查 SatSource 的账目时,BitGo 建议其开始使用原生 SegWit 找零地址。虽然这会导致输出权重从 32 字节增加到 43 字节,但其交易输入的权重仅为 105 字节(而非 140 字节),从而使手续费进一步降低了 13%。即使使用仅支持发送的钱包,SatSource 约 3.5%的交易也能避免生成找零输出。按每天 1,000 笔交易计算,这意味着每天可节省约 5 千字节的交易数据,相当于节省约 1%的交易手续费。

总体而言,仅发送型钱包在批量处理以及将找零输出转换为更高效的地址格式方面获益匪浅。SatSource 成功将交易费用总计降低了近 80%。

设置:发送和接收热钱包

Setup- Send-and-Receive Hot Wallet

收发热钱包:热钱包既接收存款,也处理提现。当热钱包余额不足时,会从温钱包中补充资金;同样地,热钱包中多余的资金也会转入温钱包。这种配置至少涉及两个钱包,通常为三个。

  • 一种用于收发资金的热钱包

  • 一种热钱包,用于为热钱包预留额外资金

  • 一款可选的冷钱包,用于存储大部分资金

当热钱包中的资金过多时,多余部分会被转移到温钱包;当热钱包余额不足时,则从温钱包中补充资金。温钱包中的多余资金会被存入冷钱包。

典型用户:交易平台、托管钱包服务

优点

  • 自动补货


    存款会直接进入热钱包,这在很大程度上抵消了提款金额。这减少了通常需要人工审批的补仓操作次数,同时也降低了为内部资金管理而产生的额外交易数量。

  • 异质未消耗池


    由于热钱包会直接接收存款,其 UTXO 池的构成往往包含种类更丰富的未花费余额。这扩大了选择输入集的组合空间,并增加了无需找零的交易数量。

缺点

  • 可能更具挑战性的未动用资金管理


    由于此类钱包的入账交易数量通常多于出账交易数量,因此为了实现最佳的未花费余额管理,需要考虑的因素要广泛得多。

  • 平均而言,输入集更大


    由于批量提现的输入集所对应的平均接收金额往往远小于所需金额,因此与通过合并资金进行补仓的"仅发送"钱包相比,在高手续费率下,发送和接收钱包往往会使用更大的平均输入集。

挑战

  • 较高的入站交易量


    由于收发型热钱包常与交易量大的零售场景结合使用,因此往往会出现入账交易过多的情况。 例如,我们观察到 BitGo 上的某些钱包,其入账交易与出账交易的比例最高可达 20:1。由于每笔入账交易都会产生至少一个未花费交易输出(UTXO),此类交易流量会迅速导致钱包中的 UTXO 数量膨胀至数十万个。

  • 高昂的费用


    收发钱包中的资金往往分散在众多未花费交易输出中,因此需要使用多个输入来支付这些输出。由于交易通常具有时效性,钱包会设置较低的区块目标,力求将交易纳入接下来的几个区块中。交易手续费可能会吞噬相当大一部分收入。

建议

  • 定期合并

    特别是对于入账交易过多的钱包,我们建议定期合并未花费余额,以防止未花费余额池膨胀。虽然保留一定数量的未花费余额有助于在发送交易时选择合适的未花费余额,但通过合并所有较小的未花费余额,可以节省最多的手续费。 定期合并可通过每小时执行的 cron 任务来实现:当小于 1 mBTC(100,000 聪)的未花费余额超过 200 个时,该任务将生成一笔合并交易。 合并交易可采用当前默认的最低中继交易手续费率--每千字节(kvB)1,000 聪,过去几个月该费率通常每天至少能清算一次。 在网络拥堵时,将手续费率设定为该标准的数倍,可使合并交易提前数天获得确认,因为每千字节(kvB)1,000-2,000 聪的交易带宽可能扩展至数十兆字节(MvB)。 自动合并流程应在待处理的合并交易达到限定数量时暂停。将过多资金锁定在合并交易中,会降低钱包的灵活性,却收益甚微。当出现较长的交易积压时,钱包运营商可能会选择以更高的手续费率进行合并,但如果资金已被锁定,则无法实现。 我们曾看到一些预算较小的钱包,因在积压的合并交易中锁定了过多资金,导致流动资金耗尽。 防止资金耗尽的一种方法是,不仅将合并操作限制在最高未花费余额内,还应附加最低存留时间限制,例如低于 1 mBTC 且至少 2,000 个确认。 最佳参数在很大程度上取决于钱包的消费模式,范围可能包括高达 0.1 BTC 的金额、不同的存留时间限制,并可能针对不同未花费余额区间设置不同的合并费率,以便更快地释放更多流动性。

  • 维持金额差异


    多样化的未花费余额有助于获得更好的未花费选择结果。根据钱包的交易流量特征,合理的未花费余额池规模通常在 200 到 5,000 个 UTXO 之间。 如果您的资金过于集中,当区块确认速度变慢且网络流量达到高峰时,您可能会耗尽未确认资金;或者,您最终会生成本可通过完全匹配的输入集来避免的找零输出。

  • 批处理


    如上文关于"仅发送"钱包的说明,将多笔支付合并为一笔交易,可以减少出账交易数量、降低找零输出中处于传输状态的资金量,并将总交易手续费降低多达 80%。 当然,批量处理会提高入账交易与出账交易的比例,因此应在"收发两用"钱包中定期进行合并操作,以遏制 UTXO 池的膨胀。

BitGo 福利

  • 高效地址


    BitGo 钱包支持使用原生 SegWit 地址。将收到的资金从原生 SegWit 地址中支出,费用可降低 25%--即 105 vB 而不是 140 vB。 即使无法立即将所有入账交易都切换为原生 SegWit 地址,但至少将找零输出切换为原生 SegWit 地址,可使找零输出的费用降低多达 15%。

  • 对费用敏感的未使用选项


    BitGo 的未花费交易选择机制已得到优化,以考虑当前的手续费率水平。在手续费率较低时,BitGo 钱包将允许使用更多输入,并优先选择地址格式效率较低的 UTXO。 与此同时,在手续费较高时,软件将致力于构建包含较少高价值未花费交易输出(UTXO)的输入集,并优先选择权重更高效的地址格式。由于比特币网络中的手续费率不断变化,这将部分区块空间的使用转移到区块空间更充裕、成本更低的时候。 总体而言,这显著降低了总手续费,并持续缩减了 UTXO 池的规模。

  • 回避变化


    BitGo 的"未花费选择"机制旨在挑选与交易收款金额完全匹配的输入集。以这种方式构建的交易能够降低总体交易费用,因为交易规模较小--既避免了生成找零输出,又避免了日后花费找零输出所产生的额外成本。

  • 更改拆分


    当 BitGo 的交易构建将找零拆分为多个部分时,输出值会分布在一定数值范围内。由于每个输出值较大,这会导致找零拆分在为钱包创建额外未花费余额时采取更保守的做法,并有助于增加钱包中未花费余额之间的数值差异。 钱包中未花费余额的变异性越大,就越有利于更频繁地选择能够规避找零的输入集。

案例研究:热钱包的收发--"TradeCorp"

TradeCorp 是一家配备了收发热钱包的公司。作为一家成熟的交易平台,他们每天大约处理 500 笔入金和 400 笔出金交易。在本场景开始时,该钱包已累计约 63,000 个未花费交易,且每周大约新增 500 个未花费交易。 TradeCorp 每分钟批量处理一次提现,并已明确禁止使用合并交易。

由于该钱包启用了 BitGo 的"未花费选择"功能,在前四周内,该钱包生成的交易中有 93% 属于"无找零"交易。 仅通过避免产生找零,每周就可减少约 0.45 个比特币区块的数据写入区块链。在同一时间段内,该钱包的未花费余额池从之前的增长趋势转为减少,降幅达 20%。

几个月后,该钱包的未花费交易单位(UTXO)数量稳定在 500 以下。由于该钱包持有的资金总额与之前相当,但分布在更少的未花费交易单位中,因此其平均 UTXO 价值大幅提高,这显著降低了 TradeCorp 交易的平均输入集大小。 我们估计,仅通过 UTXO 池的碎片整理,就能将总交易手续费降低 50%以上。

即使在资金合并之后,该钱包在三个月内的无变更交易占比仍平均达到 58.5%,交易总量达 3.5 万笔,交易手续费节省了约 20%。 基于手续费敏感性的未花费交易选择机制,导致低手续费环境下的平均输入集规模约为高手续费环境下输入集规模的 1.4 倍。鉴于约 32%的交易发生在低手续费环境下,该钱包近 45%的输入数据来自低手续费交易。 这种向低手续费率消耗更多 UTXO 的转变,使该钱包的总体手续费支出至少降低了 13%。此时,TradeCorp 启动了向原生 SegWit 存款地址的过渡。该钱包目前使用约 19.4%的原生 SegWit 输入,从而进一步节省了 5%的区块空间。

总体而言,对该特定收发热钱包影响最大的因素是资金的整合。该钱包还从"避免找零"和"基于手续费优化的未花费交易选择"策略中获益匪浅,同时受益于更高效的地址格式,交易手续费总计降低了 65%以上。 TradeCorp 还向 BitGo 报告称,即使在手续费率居高不下的时期,其交易费用支出也变得更加平稳。我们推测,若将这些措施与更长的批量处理间隔(例如 5 分钟)相结合,将进一步降低每笔支付的成本。

展望

这些案例研究展示了 BitGo 钱包的实用性,希望能够激发业界对钱包流程的探索,从而提高整个行业的区块空间利用效率。

Upper bound for input and output sizes

Taproot 将显著降低多签名交易的成本,同时在使用密钥支出路径时,使输入和输出与单签名支出无法区分。BitGo 正在持续优化我们的钱包设计。 例如,我们对 Taproot 提案感到兴奋,它为钱包功能开辟了全新的可能性,并在许多情况下将多签输入大小缩减至与单签相同的水平。 即使是来自包装型 SegWit 和原生 SegWit 输入,通过密钥路径支出的"支付到 Taproot"输入,在 2-of-3 多签场景下的大小也减少了 45-58%。

感谢黛布拉.巴尔、大卫.哈丁和亚当.乔纳斯审阅。

该 一家数字资产基础设施公司。

Connect with us

Thousands of businesses around the world run on BitGo

最新动态

全部新闻

关于 BitGo

BitGo 是一家数字资产基础设施公司,通过受监管的冷存储提供托管、钱包、质押、交易、融资和结算服务。自 2013 年成立以来,我们一直致力于加速金融体系向数字资产经济的转型。 凭借全球业务布局和多家受监管的实体,BitGo 为数千家机构提供服务,其中包括众多行业顶尖品牌、交易所和平台,以及全球数百万散户投资者。