你的比特币明明够,为何铸造铭文时UTXO会不足?
【摘要】为何在铸造比特币铭文时,明明钱包中还有比特币却会提示UTXO不足?本篇文章将详细介绍什么是UTXO?其与铭文的铭刻有什么关系?我们又该如何解决UTXO不足的问题?
比特币铭文各种百倍、千倍收益神话的传出,已经吸引了越来越多的人来此淘金。但是,对于新手小白或常玩以太坊生态的人来说,刚开始参与铭文市场打新多多少少会遇到些问题。
比如,会出现在连续铸造铭文时,明明钱包中还有钱却提示没有足够可用的UTXO。其实这个问题本质上与比特币独特的记账系统和铭文的铭刻过程有关。
下面笔者将详细介绍什么是UTXO?其与铭文的铭刻有什么关系?我们又该如何解决上述的问题?
什么是UTXO
UTXO模型是比特币网络的记账系统,全称为Unspend Transaction Output,翻译为未花费的交易输出,因为区块链中transaction的缩写是tx,所以我们习惯性的将其简称为UTXO。
那么比特币是如何通过UTXO模型转账的呢?我们可以通过举例子和与账户余额模型比较的方法来理解。
例如A和B各有10元,现在A要给B转账5元。如果使用支付宝或以太坊采用的账户余额模型来实现,那么只需要将A账户余额修改成5元,将B账户余额修改成15元即可。
但如果使用比特币采用的UTXO模型来实现情况就不一样了。与物理世界的纸币类似,A需要将这张10元作为一个整体花出去,然后这张10元会在网络中被拆成两张5元,一张转移给B,一张又返回给A。最后的结果为A会被找零一张5元,而B有一张原来的10元和一张5元。两种模型的转账差异如下图:
在上述对比例子中的10元、5元在比特币网络中都是以UTXO的形式存在。因此,在比特币网络中一个UTXO就代表一定数量的比特币,也代表一个比特币交易的输出,当一个UTXO被当做输入花费时又会产生新的UTXO。
同时,因为UTXO模型与现金系统类似,所以能够很好的处理并发交易。例如,接着上面的例子说,现在B想给A转账6元,在同一时间给C转账5元,如果使用以太坊这两笔交易是无法发生的,必须要有先后顺序;但使用比特币网络的话这两笔交易就可以同时进行,因为B可以把包含10元的UTXO给A并等待找零,同时把包含5元的UTXO给C,这是不冲突的。具体的对比如下所示:
在任意时间节点,现有UTXO的集合都被称为UTXO集。比特币节点只要追踪UTXO集,就能确定哪些比特币未被花费,以及哪些人可以花费它们。
因此,比特币的UTXO模型是没有专门的发送方账户/地址的,我们现在用的地址虽然被用来接收UTXO,但是永远不会直接记录在区块链上,不过可以通过计算包含签名与公钥数据的编码得出地址。
我们之所以能在钱包和比特币浏览器看见自己的余额,是因为它们跟踪了所有的UTXO并计算了其中与地址相关的数据,用与地址相关的输入减去输出显示出了比特币余额。
比特币铭文与UTXO有何关联
那么,比特币铭文(包含Ordinals协议与Atomicals协议等)与UTXO有什么关系呢?
实际上比特币铭文铭刻有提交和揭示两个阶段。在提交阶段用户会花费了一个承诺包含铭文内容脚本的UTXO给Taproot脚本,如下图,如果这笔UTXO包含的比特币大于Taproot脚本铭刻铭文所需的比特币(被铭刻转移的聪数量+揭示阶段所需Gas费),则会生成一个新的UTXO将多余的比特币转回原地址。从UTXO角度来说,用户付款地址的UTXO没有变。
在揭示阶段,Taproot脚本会将收到的UTXO花掉,将包含铭文的聪转移给铭文接收地址,因为减去包含铭文的聪其他比特币都被当成Gas支付给矿工了,所以没有多余的比特币转回。从UTXO角度来说,铭文接收地址增加了一个UTXO。
了解了以上过程,我们就可以搞明白开篇提出的明明钱包还有钱但连续铸造却显示UTXO不足的问题。
还是以举例子的方式来说明,我们为打铭文创建了一个新的比特币地址,并从交易所提了0.1BTC,那么此时这个地址就只有一个包含0.1BTC的UTXO。当铸造铭文时,这唯一的一个UTXO会在提交阶段被花费,假设Taproot脚本需要0.05BTC,那多余的比特币就会以上图一样的方式回到原地址。
但因为该地址只有一个UTXO,而且假设比特币的出块时间是10分钟,那在这10分钟内该比特币地址的UTXO相当于为0(花费的UTXO不能再次被花费),意味着其无法再创建一个承诺包含铭文内容脚本的UTXO,因此铭刻会失败,这也是为什么会显示UTXO不足的原因。
同时,还有第二种情况也会造成铭刻失败,即假设地址中有1个包含0.1BTC的UTXO和2个包含0.005BTC的UTXO。如果此时因为链上Gas高,铸造铭文需要0.05BTC,那么钱包会优先花费包含0.1BTC的UTXO,但在这笔交易确认之前,该地址依然无法进行铸造。
两种问题情况如下图所示:
因为虽然钱包显示还有0.06BTC,而且也还剩两个UTXO,但剩下两个UTXO组合起来也只有0.01BTC,完全不够支付此时铸造铭文所需的比特币,所以只有等另一包含0.05BTC的UTXO返回钱包时才能再次铸造。
如何拆分UTXO
那么,我们该如何解决这样的问题呢?实际上有两种方式,一种是从交易所或其他比特币地址向付款地址多转几次比特币,增加付款地址的UTXO数量。但这种方式的缺点是操作不仅有些麻烦,而且每次转移还会花费许多Gas。
第二种方式是直接拆分地址中的UTXO,即将一个UTXO拆成多个UTXO,以下我们将详细介绍如何拆分UTXO。
1、登陆Ordinals Wallet
先打开Ordinals Wallet网站:https://ordinalswallet.com/
点击右上角连接钱包,Ordinals Wallet支持多种钱包,一般使用Unisat,注意连接的钱包地址是要拆分UTXO的地址
2、查询UTXO
连接成功后,再次点击右上角进入地址主页。如下图,“1”代表的是被冻结的比特币,因为这些比特币中包含铭文,防止用户将其当普通比特币花掉;“2”代表的是地址中可用UTXO的数量;“3”代表的则是该地址中铭文的数量。
我们点击进“2”,就能够看到该地址中的UTXO数量及每个UTXO包含的比特币数量,并且这些UTXO是剔除掉那些包含铭文的UTXO的,所以可以放心大胆的拆分。
3、拆分UTXO
先点击左上角的“Manage UTXOs”。
然后选择想要进行拆分的UTXO,Ordinals Wallet给我们提供了两个快捷键,“Select all above 10000 sats”表示一键选择包含10000sats以上的UTXO,“Select all below 10000 sats”表示一键选择包含10000sats以下的UTXO。
实际上,Ordinals Wallet是支持一拆多、多拆多、多合一的操作。如下图,只需在“1”处改变UTXO的数量就能控制要拆成多少个UTXO。如果将数量设置为1就是将多个UTXO合并成一个。不过就打铭文的需求来说,我们一般都进行一拆多操作。但是也要注意不要将一个UTXO拆的太“碎”,不然可能也会出现上述所说的铭刻失败的第二种情况。
同时,可以在“2”处调节网络Gas,在“3”处添加接受UTXO的地址,如果不填,UTXO将会默认转回原地址。
最后点击“Create UTXOs”会弹出钱包签名,签名完成后等待交易在链上确认即可。如下图所示,将一个包含0.001BTC的UTXO拆成7等份,那么这个地址就至少可以连续铸造7次铭文。
不过实操中,建议拆分的每个UTXO至少包含价值50刀以上的比特币,因为现在比特币生态热度极高,当热门资产出现时链上Gas甚至会飙到十几刀以上,如果将UTXO拆的太小就不实用了。
如下图所示,就是因为地址中的UTXO太“碎”,所以在进行这笔交易时就组合了5个UTXO,而最后找零也只返回了一个UTXO,如果从铸造铭文的角度来说这是不划算的。
参考资料:
【3】比特币 NFT 协议 Ordinals 万字研报:比特币生态的关键里程碑?全景式拆解其构成背景、技术原理、生态现状与未来挑战
免责声明:本站所有内容可能涉及项目风险事项,仅供科普与参考之用不构成任何投资建议。请理性看待,树立正确的投资理念,提高防范风险意识。建议在交互与持有之前,综合考虑各种相关因素,包括但不限于个人购买目的以及风险承受能力等。
版权须知:引用信息版权属于原媒体及作者。如未经鉴叔J Club同意,其他媒体、网站或个人不得转载本站文章,鉴叔J Club保留追究上述行为法律责任的权利。