比特币系统没有分解者,最终会导致系统的崩溃

2020-09-29 18:29:48 +08:00
 weitch
我们都知道,比特币交易过程是需要手续费的(资源有限,不然很难打包),而当系统持续运行下去,不停的交易就会生成很多很多份小额的比特币,当这些比特币连支付手续费都不够的时候,它们永远无法再进行转账,但是因为这些都是属于未使用的比特币依旧要记录在系统里,这样整个系统的负担就越来越重,最终被压垮崩溃。

这个过程有点类似于熵增原理,整个宇宙系统运行的时候会产生不可再利用的能量(并不是说不能用,而是如果你想要用它们,你就需要付出比它更多的能量)。

比特币的生态里,挖矿属于生产,交易属于消费,但却没有分解者,这样持续运行下去,死亡的币(余额少于手续费,不能再使用的币)就越来越多,所以必须得有这样一个机制,把那些不可再使用的币重新回收,从而形成生态循环。

有两种解决方案:
1,丢弃,直接把这些币丢弃,客户端不再承认这些币,减轻系统压力,但这不解决根本问题,因为死亡的币会越来越多。
2,回收,按一定的机制强制回收这些币,通过挖矿重新产出,但是强制回收似乎违背比特币的初衷。
528 次点击
所在节点    Bitcoin
11 条回复
frienmo
2020-09-29 20:58:57 +08:00
0. 支付的时候有阀值的,就是为了防粉尘,现在是 546 聪。
1.再多也多不过 1M 每十分钟
2.自己可以趁手续费低的时候整理 outx
3.应该有其他解决方法
acess
2020-09-29 22:36:55 +08:00
我也觉得这是个问题,但是我不觉得这和什么熵增、生态系统、分解者什么的有多大关系。

貌似这也不是什么新鲜的话题(但我没有这个问题不严重的意思),就是 UTXO 膨胀。隔离见证也号称可以缓解这个问题,因为原本比特币的交易格式是输出项字节数少、输入项(含有数字签名)字节数多,所以创建 UTXO 比销毁 UTXO 便宜。隔离见证加了一个人为的折扣规则,让输入脚本的字节数被统计时除以 4 (这也就是隔离见证所谓的“扩容”),把这个不平衡的现状往回拉了一下。

这种碎币被叫做 uneconomical UTXO,搭配大额的 UTXO 付出足额矿工费还是可以花出去的,并不是 unspendable (像是烧币地址那种才是 unspendable ),只不过矿工费要盖过币值本身(所以才叫 uneconomical )。
weitch
2020-09-29 23:39:07 +08:00
@frienmo #1
0, 很多这种不可再用的币的确是在粉尘攻击时产生的,但是还有很多是自然产生的,小额支付、使用的人数越多产生的就越多,现在有很大成分的 UTXO 都是这些已经没用的币,以后会更多,这是避免不了的。
1,正因为比特币产生的速度相对来说慢一些,所以这个问题相对来说还不显得那么严重。
2,整理也只是单独个体的整理(相当于独善其身),但是无法阻挡整体系统不断膨胀的趋势。
3,我很悲观的看待这问题,认为它无法解决,因为从共识层修改系统机制太难了。
weitch
2020-09-30 00:30:20 +08:00
@acess #2

的确这些碎币非要用还是可以用的,但假使大家都足够“理性”的条件下,应该没人会去用这些币。

所以,即使存在一些“人傻币多”的人愿意花高额手续费去“拯救”这些币,但很显然它并不是常态,这些碎币只会越来越多,现在只是无法判断这种影响什么时候会对整个系统产生实质性的影响。
acess
2020-09-30 00:44:44 +08:00
@frienmo
0.这个限制貌似并不是共识层面的,如果矿工愿意,还是可以把小于这个阈值的粉尘直接打包进区块。
1.所以这还是会增长,哪怕没有恶意制造粉尘也会无意地产生粉尘。而且矿工费率因为拥堵而升高的时候,有些原来不是粉尘的小额碎币也会变成“花不出去”的粉尘。
2.固定的新币奖励再减半几次就几乎枯竭了,然后如何激励矿工继续挖矿呢?理论上貌似也是个悬而未决的问题。很多年前就有篇论文 On the instability of Bitcoin without the block reward,里面提到,如果内存池里可挖的手续费很少,也许恶意矿工会把前一个区块已经打包的交易拆出来、自己抢过来重新打包,同时可以分一半给愿意同流合污的矿工,由此来增加获胜几率。


@weitch “很显然人傻币多(应该说是“对比特币无偿的爱”吧,哈哈)并不是常态”——你说的对,其实我也是这个观点,不过前面一条回复没怎么写出来。
weitch
2020-09-30 01:26:00 +08:00
@acess #5

最近一直在思考,能不能设计出一套完备的系统,能保证整个系统在尽可能少的干预下一直不停的持续运行下去。
也许哪天就能创造出三体里的“小宇宙”了,嘿嘿。
qdwang
2020-10-11 09:33:38 +08:00
@weitch 可以推算一下,比如假设每个用户会有 1000sat 的无效币,70 亿人,也就是 7*10^12 sat 。一个 btc = 一亿 sat 。

那也就是最多浪费 70000 个 btc 。
acess
2020-10-15 23:05:57 +08:00
@qdwang 重点并不是浪费多少币,而是处理这些花不掉的死币也需要占内存,比特币是去中心化系统,而且每一个节点都需要独立完成全网所有交易的验证,所以死币越攒越多很显然问题很大。
acess
2020-10-15 23:11:05 +08:00
Bitcoin Core 全节点里那个 chainstate 目录里放的就是 UTXO 集合数据库。chain state,这名字是什么意思很显然了。
还有,貌似以太坊也有如出一辙的状态大爆炸问题。
acess
2020-10-15 23:15:33 +08:00
这里还可以扯上一个梗,就是中本聪白皮书里那个裁剪(回收磁盘空间)其实是不可行 /没意义的。

把一笔交易裁剪掉,只留下 hash 值,确实可以不影响 Merkle 树的验证;但是裁掉了交易,交易历史记录就不完整了,不再可以自证清白。
比如一个币本来被花掉了,如果把花掉它的交易“裁剪”掉,那本来被花掉的币看上去又变回还没花掉的状态了。

经常说比特币没有账户余额,但实际上 UTXO 集合不就是全网账户余额数据库么……形式上,比特币没有账户;但是实质上,我觉得其实没有什么不同。
qdwang
2020-10-16 10:03:51 +08:00
@acess 所以价格要涨上去,涨到天上,都当作古董一样储值,日常没人交易了,体积增大就慢了,嘿嘿

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/711655

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX