上周你们想我了吗?要是回答是肯定的,请让我为你们献上这一次超多的更新,小小地弥补一下哦。要是回答是否定的,呵呵,我的感受如同这只青蛙

移除预验证区块

当你往Tezos区块链提交一份操作的时候,这部分操作将被包含在区块的上下文中。所谓上下文是指Tezos中所有合约/账户的当前状态,包括它们是否初始化、它们的储存空间、它们的账户收支以及它们的管理人。这样的上下文经常使用于区块链的头文件中表达状态信息,然而Tezos的节点在先前额外使用到了一个“预验证”上下文。所谓“预验证”上下文,是指那些被验证为有效但是尚未写入区块中的操作。这次的合并请求从节点和客户端中移除了这部分的预验证功能。

之前你可以利用预验证区块来创建大量顺序执行的操作,然而比起假定一系列的初始化/传输需要顺序执行来说,Tezos实际上拥有一个更好的方法:宏处理。如果你查看过Tezos区块的结构,你会发现区块中关于操作的字段是一个包含列表的列表。这是因为你可以在Tezos中提交需要顺序执行的操作。这些顺序已经自动包含在区块中,所以当执行的时候,所包含的操作自然会被按照顺序执行。

客户端:对于操作包含指令和RPC的等待

有些时候在查看你的操作是否已经提交到区块链之前等待一小段时间是很重要的,而不是频繁地去刷区块浏览器。在这个合并请求之后,我们添加了一些RPC和新的指令。你可以利用它们在你的操作进入区块之后让区块浏览器等待一个指定的确认数。

增加测试

这次的合并请求是我们持续努力地对Tezos增加更多测试的一部分。它对增量类型增加了一个新的功能,这个功能允许在测试过程中生成一个新的区块。

Proto/Env: 使用合适的‘init’功能替代‘configuresandbox

本次合并请求中最大的一个改动是关于节点如何初始化。之前有一个configure_sandbox功能。它可以无效化外部的p2p层并改变节点的工作方式,进而停止向网络中播送该节点的信息变动。这个功能仍然存在,但是现在我们把他嵌入进了init代码。这也带来了一些数据处理方面的变动。

这次的合并请求还包含一些额外的更改。

  • Jbuilder升级到1。
  • 增加一个脚本用来生成base58编码的前缀。tz1和TZ1不是一样的。存在一些神奇的数字,当添加到前缀之后,会生成一些很美妙的哈希值。这个脚本会帮助我们自动寻找这些神奇的数字。
  • 重构Ed25519模块,移动一些内容到新的子模块上。

节点,状态,链:随机计算定位器

当两个节点同步的时候,它们互相交换定位器信息。这些信息实际上是区块哈希值的一个序列,可以用来辨别它们已有的数据和需要的数据。这次的改动增加了交换数据的随机性。这个随机性取决于该功能的参数,所以会导致两个不同的节点有可能接收到不同的信息。这项功能仍需要被测试。

测试:对testlib.inc.sh的一点改善

这里的变动极小,但是我还是想要谈一谈。因为如果你想要对Michelson智能合约做一些测试,那么这里的脚本改动会非常有帮助。比如说你要写一份合约用来储存你的一部分财富,那么你必定会先写一个测试用的合约,就像其他类型的合约开发一样。这里的脚本提供了一个完美的方式,通过建立一个节点、提供各种流程来让你开发测试用的脚本。所以当你需要开发Michelson测试脚本的时候,记得使用它们。

数据编码:和32位的平台兼容

这次的合并请求使得Data_encoding库在32位平台下能够运作。它增加了一些类型比如unit30(30比特无符号整数)。因为OCaml在32位平台上使用31位的整数,它无法表达超过30位的无符号整数,所以上述类型会非常重要。而且当你需要保证一个数字将会是无符号整数的时候也会需要用到这种类型。这一定程度改变了整数范围的工作方式。系统将无法支持超过31位的整数范围。

Alpha/Tests:常量

这次的合并请求改变了非内容依赖的常量的储存方式。同时也增加了一个方便的RPC用来取得它们的值。

客户端:修复了一个密钥签署过程中的错误

这次的合并请求修复了一个使用密钥过程中会发生的错误。这个错误和密钥储存时的关联方式有密切关系。

作者:Tezos核心开发者Milo Davis
编译:Tezos中文社区成员/Song.W