深入浅出比特币交易延展性问题和隔离见证
时间:2016-10-26 来源:vatten 作者:vatten
如果你读过我深入浅出系列的前几篇文章 深入浅出比特币交易 (transaction):http://www.wanbizu.com/baike/201610257786.html 深入浅出比特币签名(1):http://www.wanbizu.com/baike/201610267787.html 深入浅出比特币签名(2):http://www.wanbizu.com/baike/201610267788.html 现在就可以来看所谓交易延展性问题和隔离见证是怎么回事了 之前说过,乙盖章的时候,是先用铅笔填上前一个交易甲的收款信息,然后数笔画数 tx4 然后再把铅笔填写的部分擦掉,把数出来的总笔画数12345填回去盖章,并附上公章,完成汇款单的填写 比特币交易在网络中传送的时候,都有一个索引值(TXID),就是数这个汇款单中所有文字的笔画数(哈希)产生的,包括盖章的12345和公章里的笔画数 盖章的方式不是很严格,可以竖着盖,可以横着盖,两种都有效,但这两种盖章方式盖完以后因为覆盖掉的地方不同,所以最终数出来汇款单里所有文字的总笔画数就不同了,也就是TXID会因为盖章方式不同而异,不是唯一的 此外,因为最后擦掉铅笔填的数以后把盖章的12345和公章填进去的时候,又需要填一些操作码进去,图中的47,41等等,而这些操作码也不止一种写法,这样一来也会导致两个不同的汇款单里数出来的总笔画数不一样,但交易却都同时有效 这就是交易延展性问题,即两张具有不同总笔画数的汇款单同时都有效 问题的根源出在哪儿 就出在最后填回去的私章和操作代码是可变的,而变化又不会影响到这个私章的有效性也即汇款单的有效性 怎么才能彻底解决这个问题 很容易想到的就是,既然要让汇款单的总笔画数不变,那只需要先数这个最后的总笔画数,然后再盖私章(签名),这样总笔画数稍有变化,签名就失效而无法验证了。但因为在盖章之前是没法数最后的总笔画数的,所以只要那个章包含在汇款单里,就永远解决不了这个问题,这是个逻辑先后问题 很容易想到,私章应该移到汇款单外面来,另外验证。这就是最近Pieter提出的隔离验证,即把验证部分即私章隔离开来。原来先盖章的情况下,盖章以后对汇款单付款信息部分的改动都不会影响到私章和交易的有效性,却会导致汇款单的总笔画数(TXID)变化,但如果先把汇款单最后的总笔画数(TXID)数好,再用私章盖章,私章不放进汇款单里,那汇款单只要稍微改动一点,导致TXID变了,私章就变了,导致验证无法通过,交易就无效 这样一来,原来的汇款单格式要经过改动,比如说象这样: 保留公章,但总笔画数和私章那部分则移到单子的下面(图中蓝色部分)。而在数总笔画数的时候,就只数上面的部分,不数下面蓝色部分的字。蓝色这部分可叫做汇款单的延展段,虽然也在汇款单上,但其字数不计入汇款单的总笔画数 显而易见,这个改动将使得比特币新的汇款单格式和之前7年所用的大不相同,验证的流程也有很大不同,因此全网所有客户端都要升级,也即会计全都需要重新培训过。账簿每页的格式也全都要改过,矿工也要全部升级才能打包新格式的交易。【玩币族(http://www.wanbizu.com)专业币圈媒体,重点关注炒币本身。】 但程序员们发现了一点,即干脆把私章移到汇款单的反面,而正面不变。这样,原来的那串数加私章处就是空的,按照原来的验证规则,操作码47是取私章,但现在没了私章,那私章就成了0,那任何人只要能提供一个让公钥签名的结果为0的数(也就是0)即可花这个地址的币,这就导致地址B的币变成了“任何人都可以花”,而这个交易单却仍然是有效的,没受过培训的会计只是觉得比较怪而已。这就是说,新格式汇款单仍能通过原来的规则验证,因为旧的会计不知道把汇款单翻过来看反面蓝色部分的私章,就算看到了也不知道怎么处理 这就是隔离见证软分叉 的原理:因为私章部分转移到了延展段也即汇款单反面,而反面是旧的会计(全节点)所不懂的,所以没培训过的会计对新的汇款单仍然会接受,尽管他们没有了私章无法验证交易是否正确,全都认为合法 当然了虽然这种汇款单在旧会计的眼里是什么人都可以花的,但一旦绝大多数算力都到了新版,无论任何人想在旧版软件里花这个币,发出去的交易一定会被新版矿工拒绝,因为新版软件要求交易要有反面的延展段里的私章 此外,因为私章也就是签名占了交易很大一部分体积,约40%,移出去以后,这部分体积就减小了,这样意味着原来的汇款单的体积减小了,单子就可以小一些,也就是说在同样大小的一页内可以贴更多的汇款单了,这就是隔离见证部分扩容的能力 但实际上,私章移出去并不代表不占地方了,它只是不算在原来汇款单的正面里了,而是放在汇款单的反面了,这样账簿每一页的反面都贴满了私章,在区块链里则呈现为一个新的数据结构叫做见证块,这个块随同原来的区块一起发送,但包含签名(私章)数据。可以看到,这本质上不是扩容,而仅仅是把数据换一种方式储存,避开原来每页只能储存1MB的限制 可见,隔离见证是一种对比特币底层运行机制也即交易格式的改变,相比起简单的扩容区块,是个非常复杂的变动,这个变动将导致过去七年里围绕比特币开发的大量库和教学资料统统需要重新写过,而从市场角度来说也是一种完全没有经时间考验的架构,风险是未知的 |