比特币改进协议BIP14(翻译)

来源:互联网 发布:手机天使玻璃优化软件 编辑:程序博客网 时间:2024/05/17 18:27

比特币改进协议BIP14(翻译)

英文原文地址:

https://github.com/bitcoin/bips/blob/master/bip-0014.mediawiki


背景

Bitcoin作为协议与中本聪客户端一起诞生。现在社区正在多样化,一些使用各种语言(Java,Python,Javascript,C ++)编写的代码库的替代客户端正在快速开发自己的功能集。

本协议要阐述的是一个版本号。这个版本号主要在“version”和“getblocks”消息中,但也在“block”消息中指示创建该块的软件版本。目前此版本号与客户端版本号相同。本文档是将协议版本与客户端版本分开的建议,以及实施的方法。

合理性

使用非分隔版本号,Satoshi客户端的每次发布将增加其内部版本号。首先,这将使每个其他客户都能够与Satoshi版本号码方案相提并论。这通过迫使每个软件发布与一组比特币开发人员的发布时间表保持同步,从而阻止了比特币的分散性。

版本碰撞也可能引入不兼容性并破坏网络。为了保持网络的健康,作为共同协作过程的协议的开发需要从该协议的实现中分离出来。中立的第三方实体向所有团体的代表指导协议,提供了比特币以最小的风险发展的机会。

通过使用协议版本,我们将网络上的所有实现设置为一个通用标准。每个人都能够在他们的范围内对于什么是协议,什么是实现依赖达成一致。用户代理字符串被表示为客户端的“虚拟盘”,以区分网络中的自己。

网络协议与实施分离,并通过参与者之间的相互共识形成所述协议的发展,在有争议的问题上难以达成一致时具有民主劣势。为了减轻这个问题,需要强大的沟通渠道和快速发布的时间表,这个不属于本文档的范围(涉及流程BIP类型)。

客户端提供额外的跟踪信息,这对于保持网络数据的标签(例如使用的客户机实现或常见架构/操作系统)非常有用。在极少数情况下,他们甚至可能提供一种避免故障客户端威胁网络健康的客户端的紧急方法 -尽管这是非常不建议和非常糟糕的形式。用户代理不会为客户端提供一种对不同的实现方式有不同的行为的解决方法,因为这将导致协议夭折。

简而言之:

协议版本:区分节点和行为的方法。

用户代理:简单的信息工具。 不应根据用户代理修改协议。

浏览器用户代理

RFC 1945将用户代理模糊地指定为具有可选注释的产品字符串。

  Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.6) Gecko/20100127 Gentoo Shiretoko/3.5.6

用户代理程序常用电脑解析而不是人类。空格分隔格式,不提供简单,快速或高效的解析方式。 数据不包含此展示位置中指示层次的结构。

最直接的信息是浏览器产品,渲染引擎和构建(Gentoo Shiretoko)以及版本号。还有其他信息,如桌面环境,平台,语言和版本号等内容。

提议

“version”和“getblocks”数据包中的版本字段将成为协议版本号。“blocks”中的版本号反映了该块创建时的协议版本。

“version”数据包中当前未使用的sub_version_num字段将成为新的用户代理字符串。

比特币用户代理是一种经过修改的浏览器用户代理,具有更多的结构来帮助解析并提供一些连贯性。 比特币软件通常以栈结构方式工作,从核心代码库开始到最终图形界面都是这样。 因此,用户代理字符串编码这种关系。

基本格式

  /Name:Version/Name:Version/.../

例子:

  /Satoshi:5.64/bitcoin-qt:0.4/  /Satoshi:5.12/Spesmilo:0.8/

bitcoin-qt和spesmilo可能使用协议版本5.0,但是它们使用的内部代码库是同一软件的不同版本。 版本号没有被定义为任何严格的格式,尽管本指南建议:

Major.Minor.Revision(2.6.41)形式的版本号存储库使用YYYYMMDD(20110128)格式的日期生成对于git仓库构建,实现可以免费使用git commitish。然而,问题在于,如果没有代码仓库哪个版本先于另一个版本,则不会立即显现。 因此,我们以上述格式推荐日期,尽管这绝对不是要求。可选的-r1,-r2,…可以附加到用户代理版本号。 这是另一个轻微的建议,但不是要求。只要不包括(,),/或/干扰用户代理语法,实现可以以任何所需的格式指定版本号。

版本号后的允许加可选的注释字段。注释应用括号(…)分隔。注释的内容完全根据实现来定义,尽管BIP建议使用分号;作为信息段之间的分隔符。

例子:

  /BitcoinJ:0.2(iPad; U; CPU OS 3_2_1)/AndroidBuild:0.8/

保留符号是 / : ( )

他们不应超出本节规定的使用范围。

“/” 分隔代码栈

“:” 指定特定堆栈的实现版本

“( 和 )” 定义一个可选择使用的数据分隔的注释

时间表

当本文档发布时,比特币协议和中本聪客户端版本为0.5,并且正在进行更改。为了最大限度地减少干扰并允许正在进行的更改完成,0.6的下一个协议版本将从客户端版本(也以0.6)剥离。 截至当时(2012年1月),协议和实现版本号彼此不同。

原创粉丝点击