{"content":{"title":"比特币生态开发 - UTXO 的那些坑","body":"# 0x00 为啥会有坑\r\n\r\n哈哈，有路的地方，就会有坑...\r\n\r\n比特币生态今年意外爆发，我有幸也参与了一些比特币生态项目。比特币这个东西，因为没有智能合约，给人一种假象，以为做比特币开发就是调用一些接口和比特币开发库，但真正做进去，就会碰到各种想象不到的坑，精彩纷呈。\r\n\r\n# 0x01 Too many unspent transaction outputs\r\n\r\n如果还没碰到过这个问题，大概率是你做的应用还没有资深玩家在用...\r\n\r\n构造比特币交易，第一步要做的就是获取 UTXO，如何获取 UTXO 呢？\\\r\nmempool.space 提供的有个现成的接口：[https://mempool.space/api/address/1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY/utxo](https://links.jianshu.com/go?to=https%3A%2F%2Fmempool.space%2Fapi%2Faddress%2F1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY%2Futxo)\\\r\n免费又方便，正常使用也没啥问题，直到有一天，不断有用户抱怨说应用用不了，然后自己怎么试怎么是好的，最后把用户地址要过来，发现获取 UTXO 这步就出错了。\r\n\r\n怎么办？\r\n\r\n1. 换供应商\\\r\n   mempool.space 有限制，其它比特币浏览器是不是会好呢？你可以尽管去尝试，按我们的经验，免费供应商最多能返回的 utxo 是 2500 个。\r\n2. 自己搭节点\\\r\n   这其实也有几个选项，一个是自己搭比特币节点去跟踪存储所有的 UTXO，一个是自己去跑个 mempool.space 开源代码，可能都没那么轻松\r\n\r\n有没有更方便的做法呢，也是有的\r\n\r\n## 0x02 把资产当矿工费花了出去\r\n\r\n这是另外一个初做比特币生态经常碰到的问题。这次比特币生态带来的最大变化，就是让很多看起来普普通通的铭文，有可能附带有价值连城的铭文。这就要我们在花费 UTXO 的时候格外小心。\r\n\r\n1. 目前铭文的 UTXO 大多是 546 聪，还有一些是 330 聪，293 聪，一般来说最大步会超过 10000 聪，这里可以做个简单的过滤，只花费大于 10000 聪的 UTXO\r\n2. 如果做更精细的筛选，就要自己把 UTXO 和铭文索引放在一起进行过滤了，这个如何做的效率更高是个技术活\r\n\r\n## 0x03 花费未确认的 UTXO\r\n\r\n比特币是允许使用未确认的 UTXO 来支付的，我们在铭刻铭文的时候经常这样做。但是有两个限制是要注意的：\r\n\r\n1. 比特币对未确认 UTXO 的反复使用是有限制的\r\n2. 如果前面某个 UTXO 由于矿工费太低迟迟得不到确认，后面的一连串交易都不会轻易得到确认\r\n\r\n## 0x04 UTXO 投毒\r\n\r\n出于某些特别原因，有人可能会往你地址里发送一笔小金额面值的 UTXO，但这个 UTXO 级连带了很多未确认的交易，这个被称为 UTXO 投毒。\\\r\n当你不小心用了这个 UTXO，就中毒了。中毒后的典型表现就是你发出去的交易迟迟得不到链上确认，需要花比预期多很多的矿工费来解毒。\r\n\r\n## 0x05 UTXO 合并\r\n\r\n当你钱包里有几万甚至几十万个 UTXO 的时候，你会发现想把这些钱转出去并没那么容易，相当于自己有一卡车的硬币，一个个的花费太费事，大部分钱包也不支持一次性转太多 UTXO。\r\n\r\n## 0x06 后记\r\n\r\nUTXO 这东西有很好用的地方，比如很容易实现批量发送。但也有不少坑，从以太坊赛道过来的同学很容易掉坑里。"},"author":{"user":"https://learnblockchain.cn/people/29","address":null},"history":null,"timestamp":1705962272,"version":1}