热门标签 | 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​​​​


推荐阅读
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • Ansem 最新雄文:软着陆后,加密市场下阶段趋势与核心叙事
    市场最糟糕的时候已经过去,以太坊合并前不太会看到新的低点;但仍需来自关注宏观市场的不确定风险。撰文:Ansem ... [详细]
  • 作者|COLINHARPER译者|火火酱责编|徐威龙封图|CSDN下载于视觉中国“通过使用微支付通道网络,借助当今现代台式计算机上可用的计算能力,比特币 ... [详细]
  • 【指南】我们可以从去中心化的社区建设中学到什么?
    本文属于老雅痞原创文章,转载规矩不变,给我们打声招呼~转载请微信联系:huangdiezi,更多 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 在2022年,随着信息化时代的发展,手机市场上出现了越来越多的机型选择。如何挑选一部适合自己的手机成为了许多人的困扰。本文提供了一些配置及性价比较高的手机推荐,并总结了选择手机时需要考虑的因素,如性能、屏幕素质、拍照水平、充电续航、颜值质感等。不同人的需求不同,因此在预算范围内找到适合自己的手机才是最重要的。通过本文的指南和技巧,希望能够帮助读者节省选购手机的时间。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ... [详细]
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
  • 本文主要介绍了gym102222KVertex Covers(高维前缀和,meet in the middle)相关的知识,包括题意、思路和解题代码。题目给定一张n点m边的图,点带点权,定义点覆盖的权值为点权之积,要求所有点覆盖的权值之和膜qn小于等于36。文章详细介绍了解题思路,通过将图分成两个点数接近的点集L和R,并分别枚举子集S和T,判断S和T能否覆盖所有内部的边。文章还提到了使用位运算加速判断覆盖和推导T'的方法。最后给出了解题的代码。 ... [详细]
  • angular.element使用方法及总结
    2019独角兽企业重金招聘Python工程师标准在线查询:http:each.sinaapp.comangularapielement.html使用方法 ... [详细]
  • Jmeter对RabbitMQ压力测试
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Jmeter对RabbitMQ压力测试相关的知识,希望对你有一定的参考价值。Jm ... [详细]
  • 范式转移:构建超级应用——胖应用 + 胖协议
    范式转移:构建超级应用——胖应用 + 胖协议 ... [详细]
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社区 版权所有