热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

11月15日BCH协议升级提案又双叒啜来了,请查收!

​​BCH告别了5月的纷扰,迎来了新的篇章。对于BCH来说,一年中有两件大事,一是5月15日的升级,二是11月15日的升级。

​​BCH告别了5月的纷扰,迎来了新的篇章。对于BCH来说,一年中有两件大事,一是5月15日的升级,二是11月15日的升级。上半年的网络升级已经顺利完成并告一段落,下半年的升级工作正在被BCH开发者写入到日程中。

5月29日,BCH开发者在bitcoincashorg的github上提交了2019年11月15日升级提案草案规范的帖子,旨在将此作为下一次升级讨论的基地以及正在审议的项目的聚集地。

 

与此同时,名为EyeOfPython 开发者提交了将OP_REVERSE添加到脚本的提议。OP_REVERSE和之前的BCH网络中添加的所有的OP-code一样,属于协议底层的脚本操作码。了解BCH的都知道,BCH在去年5月以及11月份的升级中都引进了一些OP-code,在这些OP-code的作用下,BCH的功能变得日益完善,也为一些应用的开发提供了帮助。尤其在智能合约方面有了非常大的突破,而OP_REVERSE的引入也是为了能够进一步优化智能合约功能。

 

根据介绍,OP_REVERSE的作用是反转顶部堆栈项的字节。之所以会添加OP_REVERSE,开发者的理由如下:

 

比特币的协议几乎只使用little-endian编码,脚本提供的各种工具也是用于little-endian排序,诸如OP_NUM2BIN和OP_BIN2NUM。使用OP_CHECKDATASIG构建的合约,我们可以创建复杂的智能合约,并且脚本已经拥有大量的算术运算符(操作码139到165)来强制执行,例如如何关联交易的输入和输出数量。

 

但是,许多协议并不使用little-endian编码,并且也不清楚其中一个是否优于另一个。例如,AMQP 和Apache Thrift 都使用 big-endian编码。SLP协议也使用 big-endian编码。Bitdb在使用hN元素时,返回的堆栈项的格式可以直接解释为base16 big-endian编码的数字,要使用这个特性,必须能够将值编码为big-endian。

 

此外,现在是可以使用OP_CHECKDATASIG的oracles,它可以用于检索数字数据,假设所有的oracles将使用little-endian编码则是不必要的限制。

 

在编码的过程中,如果编码的大小既固定又不太大,则可以将值转换为big-endian编码。目前,Script仅支持32位整数,并且可以只使用OP_SPLIT,OP_SWAP和OP_CAT以big-endian编码:

 

从以上代码看出,该过程是比较复杂的。如果使用OP_REVERSE,这将变得简单:只需保存11个字节(9个操作和3个pushdata)。

除了更加简单,采用OP_REVERSE操作码还有更好的特点:

 

· 合约和循环脚本通常将preimage 的脚本代码作为输入,这意味着每个操作都会计算两次:一次是包含脚本代码的堆栈项,一次是P2SH脚本堆栈项。对于转换为8字节的big-endian,这将为每次转换节省32个字节,如果在脚本中有三个转换,那么它已经达到了96个字节 ——对于交易来说,这个字节数有点多。

 

 · 使用上面较大的片段开发脚本,对于开发者的认知负荷产生不必要地增加。手动或使用诸如宏或Spedn等工具开发脚本已经给开发人员带来了很多认知负担,而错误对社区来说可能是毁灭性的。这种失败的一个突出例子是以太坊链上的有争议性硬分叉,那就是由DAO智能合约中的一个错误引起的。

 

· 第一个版本假定脚本使用32位数字,一旦实现了具有更大宽度的整数,脚本将随着每个附加字节线性地变长(4 bytes/byte) 。对于256位数字,它需要124个字节(93个操作和31个pushdata)才能转换为big-endian。由于当前的操作码限制为201,因此不会为其他操作留下太多空间。相反, OP_NUM2BIN OP_REVERSE始终将整数编码为N字节的big-endian,并且具有与N无关的常量脚本大小。

 

· 另外,假设oracle返回1字节项的有序列表(例如索引),但是如果脚本要求字节处于相反的顺序,那么OP_REVERSE将允许这样做。

 

关于OP_REVERSE的提议,BCH的开发者也对其进行了深入的讨论。针对是否有必要引入OP_REVERSE相关的一系列问题进行了提问。诸如:为什么SLP不使用little-endian?为什么在与“比特币之外的协议”交互时,big-endian与little-endian的转换不会发生在链外?除了字节序转换之外,是否有其他用例?EyeOfPython也对此进行了解释。

 

目前关于OP_REVERSE是否会被添加到BCH在11月15日的升级内容中暂时还未确定。不过,OP_REVERSE的提出对于BCH接下来的升级起着抛砖引玉的作用。在接下的时间中,会有更多的升级方案被提出。BCH开发者将会对每一个方案进行讨论和把关,将最有必要的更改通过升级带到BCH的协议中。

 

相信在BCH的协议开发者以及社区中的开发人员的共同努力下,BCH会拥有越来越完善的功能,竞争力远远超过其他的加密货币。

 

关于OP_REVERSE更多内容可以查看:

https://github.com/bitcoincashorg/bitcoincash.org/pull/358​​​​


推荐阅读
author-avatar
mobiledu2502871567
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有