比特币现金又要升级了,又要升些啥东西?
第0章 引言
半年一次的BCH升级计划,正在被执行下一次5月15日的硬分叉升级。我想搞明白开发者在搞些啥玩意。看了他们的视频会议。来来,支持者们来学习下,反对者们来讽刺一下,都凑个热闹,反正热闹过后,大家该干吗就干吗去。
第1章 拯救BCH上的隔离见证币
BCH下一次升级准备拯救用户错误将BCH发到BTC的隔离见证地址上的BCH币。
因为BCH和BTC的地址是通用的,BCH的地址在BTC上是合法的,BTC的地址在BCH上也是合法的。这两个币的地址是可以接收对方的币的。地址对应的私钥都可以控制收到的币,无论收到的是BTC还是BCH。
上面这段话真绕口。打个比方说,如果你家门口楼下有收信的那个小信柜,很多小区都会有。本来这种信柜是用来收信的。但这种信柜有些小区会被用来收快递包裹收牛奶这些。信柜就像是BTC和BCH的地址,都是一样的。信就类似于BTC,包裹类似于BCH。而信柜的钥匙就像是私钥。信柜即可以收BTC,也可以收BCH。你想花收到的BTC或BCH,只要你用钥匙去控制就好了。
但BTC在2017年部署了隔离见证,隔离见证的地址和其他的BTC/BCH的地址是有区别的。如果是BCH发到了隔离见证地址上,你就不能用这个隔离见证地址里的私钥去花费了。
这个隔离见证地址就像是一个“没有锁的信柜”,任何人都可以将信柜里的信和包裹拿走。但BTC网络还定义了一个新规则,以防止在隔离见证里的币被“任何人都可以拿走”。这个不好理解,我再打个比方。就类似于在“没有锁的信柜”旁边装一个“监控摄像头”,如果你拿走了不属于你的信柜里的币,那整个网络就不承认你拿走了,整个网络还认为那封信在信柜里,直到被相应的私钥花走。
现在在BCH网络上是没有这个“监控摄像头”的,如果你将BCH发到了这种“没有锁的信柜”里,那别人是可以将你的币偷走的。但这个偷,也不是随便就能偷。因为你要偷走这种币,在BCH网络上属于是“非标准交易”,所有的节点是不会帮你广播这种非标交易,而且矿池一般也不会接受这种非标交易。
但如果矿池想偷这种隔离见证地址上的BCH,那就可以实现了。现在如果将BCH错误发到了BTC的隔离见证地址上,需要找矿池去帮你找回。
在BCH上,在2018年4月26日,高度为527464的BCH区块,里面就包含了大量的从隔离见证地址上花费出来的BCH。你可以去查这个区块,看里面有好多输入为3开头的地址,而输出只有一个1开头地址,没有找零地址。这就是从隔离见证地址里花出去的BCH。这是一个匿名矿池偷了别人的隔离见证地址上的BCH币。
Bitcoin abc计划在下一个硬分叉版本上部署一个叫BIP62的改进协议,就可以让用户用私钥花掉自己错误发送到隔离见证上的币。至于什么原理,我也不知道。
我个人觉得,既然BCH本来就没设计隔离见证,用户错误发到隔离见证地址上的BCH币也可以主动找矿池帮忙花出去。用户和矿池之间讨论手续费就好了。开发者没有必要专门为这种自由市场可以解决的问题专门去设计一个补丁。自由市场能干的事,就优先让自由市场干吧。万一设计出来的补丁有啥问题呢?
我发现,开发者怎么这么爱管闲事呢?你操心啥呢,除了共识层,能少整些有的没的吗?
第2章 BCH有望优先部署Schnorr签名
如果你是一个挖矿的小矿工,比如你一天收0.01BTC,然后你收了30天,一共收到0.3BTC。你想充值到交易所卖掉,你可能要付0.1BTC的矿工费。
现在有很多交易所都限制比特币的充值金额下限,比如不接受0.001BTC的充值。否则交易所收到一大堆0.001BTC的币,然后想发1BTC出去,你会发现,可能要交0.5BTC的矿工费。
现在我们发币,BTC和BCH都一样,一个输入就有签一个名。一个签名约80字节,占交易数据的大头。矿工费是按数据大小来计算的,如果一笔交易里有10个输入,那就要花掉800字节的签名数据。所以多个输入的交易,签名数据会占据一大笔费用。这就是为什么小矿工要背上沉重的矿工费的原因。
Schnorr签名就是让一笔交易,无论有多少个输入,都变成只有一个签名的办法。这样就可以大大减少多输入交易的尺寸。如果使用这种技术,那小矿工就不需要承担很多的矿工费。
Schnorr签名这种技术,有用。但看起来风险挺大,在BTC上收益还是可以的。但在BCH和BSV上,矿工费也不用节省啊,收益不大。
目前我不清楚Schnorr签名会造成啥后果。如果我是BCH的总设计师,我会选择让Schnorr签名设计好,并且合并到主代码仓库,但不在主网上激活。让市场去抄,在别的币上先测试着,比如让BTC也测试。
第3章 BCH计划放宽零确认链式交易25个数量限制
如果你收到一笔币,还没有确认,你是可以立刻发给另外一个地址的,下一地址收到币后,还是零确认,也还可以再往下发,这样可以一共发25次。再多,现在主流钱包和节点就拒绝了。这种零确认交易,再往下发的交易,就是一种零确认链式交易。这个25个链式的零确认交易并不是一个共识层的约束。只要矿池愿意接受,其实你可以构造250个链式交易。
这个25个数量的限制主要是考虑到安全性。如果这个不做限制的话,是可以构造出一种对全网内存池进行几乎零成本的攻击。攻击原理如下。
我用一笔1BCH的UTXO发一次(1亿聪-300聪)的交易,没有找零地址,300聪就是为了凑够1聪/字节的矿工费。我按这一笔交易记为tx1。我也不广播,肯定是零确认下。我继续将(1亿聪-300聪)的这个输出作为输入再转一次(1亿聪-300聪-300聪)的交易。然后再继续转一次(1亿聪-300聪-300聪-300聪)的交易……,一直这样,直到将1亿聪的UTXO消耗到只剩下600聪为止。
接下来,我构造一最后一笔交易,我记为txn。
同时对tx1使用交易可延展性进行构造一笔完全合法的tx1'交易。也一并广播tx1'。
只要有矿池打包了tx1',那上面所有的tx1到txn全变成非法的交易。
如果tx1'被打包了,那攻击者就成功攻击了全网所有节点的内存池,并且只使用了一笔交易的手续费,那攻击成本是几乎为零的。
这种攻击是可以被矿池用来攻击其他矿池的。让全网其他矿池浪费时间去验证tx1到txn,他自己偷偷打包tx1’。爽歪歪。
但25个数量的限制,这玩意不在共识层,矿池想要不被攻击,自己限制就好了。所以我觉得这种25个零确认交易链数量的限制是完全没有必要的。
底层协议应该尽可能把这些可以由自由市场处理的限制给删了,我说开发者就爱瞎操心,对自由市场不够放心,完全没必要啊,担心啥啊。
第4章 结束语
BCH老改,不知道要改到哪一年。
作者:黄世亮
欢迎关注微信公众号:闪电HSL
欢迎打赏BTM:bm1qefc720au672awrgazgw5c3kx7etr5kejju02p7