记录 | 以太坊团队·2017年第四季度总结

在过去几个月中,以太坊非常迅猛地成长。区块链上的交易量已经比原来的两倍还多,连日同一时间每秒超过10笔交易。每天新创建的账户数量超过10万,尽管系统要求提高,节点的数量还是增加了。因为对整个区块链空间的关注和兴趣持续高涨,我们正在进入一个行业增长的新阶段:一个我们将从实验和测试最终走向真实的、可行的应用的阶段。

Casper

一个 基于 pyethereum 的 Casper 权益证明测试网络已被放出。
多种对该算法的简化,包括减少到一种信息类型,已经被最终确认了(也在Isabelle中升级了可追责的安全性证明)
Casper FFG 基本说明已被放出。
观看来自 Karl Floersch 的关于 Casper FFG 的演示 (i) 和 (ii) ;来自 Jon Choi 关于加密经济学的演示 (iii) ;还有 Jon Choi 关于 Casper 的这种解释。

分片

分片版本一的一份详细说明已被放出:https://github.com/ethereum/sharding。
分片客户端的开发已经从 pyethereum 转移到了 py-evm 。
所有不同的组成部分,包括账户抽象、新的交易形式、通道引用限制、二进制前缀树(Binary Trie)、分片监控(Shard Watching)和验证算法(Validating Algorithm),已在开发过程中。
观看 Hsiao-Wwei Wang 关于分片的演示。

Py-EVM

分片的实现已经在 分片分支上起步。
JSON远程调用(JSON-RPC)服务实现已经起步。
一份非常粗糙的初始文件。
轻客户端开发还在继续。你现在可以运行一个极简主义的轻节点了。
全面支持拜占庭分叉规则。

EIP(以太坊升级提议)

自上一次总结发放以来,我们接受了12项以太坊升级提议。

正式的验证

我们从 Sidney Amani 和他在 Data61 的同事那里收到一份贡献,它可以减少在 EVM 代码验证过程中的推理步数。
修复了与 JSON 二进制接口格式相关的 Bamboo 中的一个bug。

测试

Testeth 现在正在检查 .json 文件是否与测试填充文件一起升级了。每一个测试都有其填充文件的一个哈希。
如果某个测试中缺失了填充文件,Testeth 将发布警告。
交易测试填充文件现在是一般格式了。一个测试会为所有不同的分叉规则描述一个案例。
为了通过 ctest 更好地运行帖子上,一些大型测试套件(包含许多测试)被分割成了独立的更小的套件。
Testeth 随机码操作被恢复。使用 -createRandomTest , Testeth 将生成一个智能随机状态测试。这一指令同样接受生成一个随机码的操作。
如果它被错误地使用,Testeth 操作会弹出错误警告。
新的测试已从工作表中加入。
对测试文件的 YAML (译者注:一种标记语言)支持的PR(Pull Request,GitHub上的一种分布式代码改进行为)已在进行中。不像 JSON 格式, YAML 格式允许用户评论和多线程文件,可获得更好的智能合约展示。

重组(Remix)

最新升级(remix.ethereum.org)包括:

一种记录交易(以在稍后执行它们)的方式。
为 Solidity 编译器使用标准的 JSON IO 交互界面。
提升 Solidity 编辑器。
直接使用二进制接口与合约互动。
普遍的交互界面提升。
新的静态分析模组。
感谢 @ninabreznik (Solidity 编辑器), @serapath (记录器), @ryestew (交互界面)他们的主动贡献。

我们现在致力于提升代码编辑器,强化 Remixd (对于大文件夹来说它现在是很难使用的)以及刷新主题。

我们在继续工作,尽我们所能做到每个月以及为每一个重要的 bug 修复升级 remix.ethereum.org 。因为重组已经处于深度开发中,总是有一些新性能会加入进来,所以,请愉快地贡献反馈和代码吧。

Solidity

我们正在为我们的新的中间语言 IULIA 开发一个完善版本。第一个目标是将新的二进制代码组的非常模块化的代码转到高效代码中。当然,最终来看,所有串联的团体和主要的代码生成器都将从中获益。旧的完善版本,基本上会将字节码沉浸到内部显示中,然后从头开始重新生成代码;与之不同,新的完善版本是由直接运行在 IULIA AST的许多小而精简的独立阶段组成的,因此对修正来说也是可轻而易举验证的。

这项工作的第二个大块的部分是 SMT检查器组成部分。它现在能够正确地遵循控制流分支或控制流加入,并记录条件。实验性的循环展开是下一个阶段。

除了这些,我们正在给编译器和语言添加许多 细微的 改变,并修复在近来全面的编辑器审计中确定的问题中遗留的部分。

我想谢谢许多志愿的外部贡献者,因为他们的辛勤工作(我们会一贯地把具体的描述放在放出声明上)!

安全性

我们正持续投入到 以太坊虚拟机(EVM)的模糊测试(Fuzz-test)中,我们也正在申请对以太坊平台的其它部分,比如 geth 网络堆栈和 Solidity 管道,进行模糊测试,我们正在检查它们是否可以被用来作一些新的 IULIA 组件的质量保证。

我们正创造一种新的签名以使更多帐户管理会从网络节点中独立出来的高级用例成为可能。这个想法是拥有一种“所见即所签”的体验,敏感的组件可以运行在一个独立的虚拟机、一台隔离的电脑或者手机上。

有非常多的前沿降魔,尤其是针对 Mist 的,我们也想提醒所有新加入的用户:请不要在不受信任的网站或是不受信任的网站上使用 Mist 浏览器。

同样地,EthereumJ 正被最终添加到运行蜂群测试(Hive-testing)的一组客户端中,而 EthereumJS 正被添加到支持共享 json 输出的一组客户端中,以使它可以与以太坊虚拟机实验工具(Evmlab Tools)中的其它工具独立交互。

Python 生态系统

我们已经完全地将储存的代码从许多 python 库中迁移到了以太坊基金会 GitHub上。这些库中的大部分都在适应单一命名惯例的过程中被重新命名。如果你使用了下列库,你应该更新你的依赖代码库:

ethereum-utils renamed to eth-utils
ethereum-abi-utils renamed to eth-abi
ethereum-keys renamed to eth-keys
ethereum-keyfile renamed to eth-keyfile
ethereum-tester renamed to eth-tester
此外,大部分的 python 工具

以太坊测试者

以太坊测试者的 python 库已经获得了一小部分更新和提升。这一库仍然处在预放出的测试版中。

后端的新的 pyethereum 的版本会 >= 2.1.0, < 2.2.0
更新后的 py-evm 后端支持最新的拜占庭规则。
修复多个bug。

Web3.py

Web3.py让你的 python 代码可以与一个以太坊节点交互。版本4,作为测试版,已被放出,包括下列变更:

自动的以太坊域名服务(ENS)查找:支持十六进制的查找方法现在也支持ENS域名了。
与本地私钥一起工作:签名以及验证简单的交易,合约交易和消息。
更好地猜测联系参数(connection parameter),因为在初始化 Web3 的时候更少样板代码(boilerplate)。
EIP 55:校验地址可以从任何地方返回,并作为输入被请求。
更好的字符串和字节的本地提交类型:更多 字节(bytes) ,更少十六进制 字符串 。

EthereumJS 生态系统

我们的拜占庭升级被充分地接受了(在 v2.2.2版本 前拜占庭仍然是可用的),而且准备好被 Remix 和 Ganache(之前的 TestRPC)使用了。
Devcon 3 上关于 web3.js 1.0 , EthJS 开发工具箱和 被演示的 Remix 开发的演讲;以及多个与相关技术背景有联系的演讲。
新的 rustbn.js 库,支持将椭圆曲线匹配预编译在虚拟机(基于来自 Zcash/Parity 的 Rust 库)上。
支持在默克尔-帕特里夏树上的默克尔证明创建和验证。(来自 @jbaylina 的贡献)
EIP-8:对我们的 devp2p 库的兼容性和更优秀的成文化。
许多来自 Devcon3 的 EthJS 反馈,以及后续的升级:为 Node.js clarity 和简易的 BLS 签名库移除可能的回调函数(callback)支持(感谢 DFinity!),为使测试更容易而使用的一个以太坊节点封装器,补丁管理帮助者库,以及更好的筛选支持。

Web3.js 1.0

1.0 分支已经在许多社区贡献者的帮助下演化了。虽然它仍在测试中,许多开发者已经准备好为他们的项目使用 1.0,而且反馈是压倒性的好评。在下周,web3-账户将被审核,因为它可以被用来生成私钥以及对信息和交易进行签名。

eWASM (以太坊网页支持,Ethereum WebAssembly)

ewasm-kernel 以及 evm2wasm 上的流程还在继续,从以用 JS 携程的虚拟机原型和转译器开始。Hera(一个用 C++ 写成的兼容 EVM-C 二进制接口的虚拟机)上的流程也在继续。我们正在开发,将以太坊虚拟机的状态测试转译为一个 eWASM 测试套件,它可以被用来测试 Hera。一个名义相近的目标是建立一个 “Geth + Hera” 客户端并使用它去启动一个 eWASM 测试网络。

C++ 以太坊

从拜占庭第一个区块开始,cpp-ethereum 就具备了拜占庭特性。
EVM-C 的交互界面正在升级。Go-ethereum 的一个实验性的分支出现了,出现在 geth 被 EVMJIT 虚拟机通过 EVM-C 二进制接口赋能的地方。你可以时不时在 https://ethstats.net 上找到一个运行着的 “Geth + EVMJIT” 类型节点。
EVMJIT 也支持拜占庭了。我们正努力将 LLVM 从 3.9 升级到 5.0(谢谢 @dmakarov)。一些人同样希望最终使用 ORC JIT 二进制接口而不是 MCJIT 。
清理了远程过程调用(RPC)的二进制接口。
Ropsten 签名的提升。
修复了 更多 多线程 问题 。
以太坊虚拟机使用记录 有了 标准化的格式。
修复了 与 devp2p 版本5节点的交流问题。
修复以支持使用 high CHAIN_ID value 的网络。
重新设置 以及 提升了 命令行交互界面。
外部的代理工具现在被用于 帮助 HTTP 远程过程调用请求 而不是将 HTTP 服务器内置于客户端。
大量围绕着连续整合(Continuous Integration)和开发经验的多样修复。
新的贡献者指南。代码格式现在可以使用 clang-format 被自动化。
快照签名的工作在继续:快照入口现在使用更少的内存; cpp-ethereum 节点现在可以给其他节点提供截图;为那些想从快照中尝试签名的人加入了一些工具。

Geth

自上一份总结以来,我们已经放出了一个 Geth ,v1.7.3 。这次放出值得突出显示,包括:

Les 轻客户端协议的版本2。 Les/2 加入对检索部分记录的布隆过滤器(bloom filter)的支持,它将使轻客户端上快速的记录筛选成为可能。
geth -dev 快了很多,并且使用了权威证明(Proof of Authority)而非工作量证明。
为了放出下一版,当前的工作集中在:

对虚拟机追踪基础设施的彻底检查:
支持追踪一个范围的区块,包括重构历史状态。
预定义跟踪函数,比如,用于收集所有的内部交易或是一个特定调用的状态关闭。
将账户私钥体将从 Geth 转移到帮助者工具:
签名者,一个用于签署交易的工具
ethkey, 一个用于处理私钥文件的命令行工具
开发一个工作对等的发现版本5原型并出版相关的 EIP。
使支持连续整合开发的更多的静态分析工具成为可能。

Mist

以太坊钱包和 Mist 测试版结合起来已经超过了 3百万 下载量。最新版本,0.9.3,被下载超过 45万 次。

我们的团队迎来了两位新成员: Marc Garreau 以及 Ryan Ghods。稍后,我们会回复到一个完整的团队。

上一次更新以来的主要变更:

轻客户端整合与钱包 Dapp 接受,虽然 Les 版本2仍在实验中。
重写了 Mist 的核心代码,允许一个更好的状态控制和应用资源处理。
关系到节点、交易和帐户管理的下一步的研究和许多模仿/示意图。
不计其数的 bug 修复和问题处理。
考虑到 Chromium 的漏洞会影响到 Mist 浏览器的测试版,我们最近放出一个安全的替代版。

蜂群网络(Swarm)

PSS 是我们正在进行的项目之一,它是一个基于蜂群网络实时通讯系统。第三版概念验证所具功能已经基本实现。PSS 已经被用做主架构中聊天工具原型的后端来使用。

PSS通过蜂群网络的路由网络在节点之间传送消息。它已经实现了以下功能:加密(具握手模块生成临时秘钥选项),透明度控制(通讯节点之间可选择全部,部分或者完全不公开相互的地址),RPC 二进制接口以及溢出防护。我们还有一些需要完成的任务,主要包括压力测试以及基准化分析,另外我们还需要与以太坊 go 主要代码进行合并。

我们也在研究交换,宣誓,诈骗激励系统。我们已经在蜂巢网络的代码中初步实现了诈骗,交换,和支票簿,其他部分在进度报告里面有更详尽的阐述。我们的目标是尽快定稿然后开始实现激励层。

在我们的网络测试与模拟项目中,我们实现了一个创建以及运行devp2p节点网络模拟的框架。我们为模拟这部分实现了节点转换器,它可以为节点创建测试环境。我们也创造了3d可视化 app 用来展示网络结构以及行为.

我们同时与 Wolk (为了在蜂巢网络之上开发数据库层),与 Livepeer (为了实现蜂巢网络上的视频直播),以及与 Status (为了实现移动轻蜂巢网络节点)展开了合作。

耳语协议(Whisper)

耳语协议第六版已经开始开发。我们希望在二月末完成。第六版让节点更能够控制网络负荷,探索 libp2p 在 go 代码库中的运用,以及增加了与耳语 Parity 版本的兼容度。