Reading:
开发状态更新、外部审计结果及CoinNet测试版开放计划
Image

开发状态更新、外部审计结果及CoinNet测试版开放计划

2022-04-18

2021.10–2022. 01开发报告

活动日志

这份月度报告虽然有点晚,但包含了许多令人振奋的更新。 在 2021 年 10 月 1 日星期五至 2022 年 1 月 21 日星期五期间,团队一共创建了 291 个拉取请求,其中 271 个已被合并。 共有484 次提交,以多于34,000 行更改超过 177 个文件。 这都只是为了Agora! 我们的开发团队还负责多个相关项目,包括使用许多 Agora藏库(示例),以及 Agora 的 API 服务器、钱包、区块浏览器等。

团队使用 Github 版本来跟踪稳定版本,并部署在我们的个人测试网(TestNet)。 在此期间共发布了 10 个版本,最新的是 v0.32.0。 像往常一样,任何人都可以从 Docker 注册表下载一个版本,然而团队还提供了最新版本的 Ubuntu 20.04 和MacOS 11 的原始构建。

以下是对我们团队在这几个月中,工作的项目的更详细说明。 如需更深入了解,请参阅 v0.23.1(10 月 1 日发布)和 v0.32.0(1 月 19 日发布)之间的版本。

Highlights

审计报告

我们的焦点之一为应对保安审计中提出的要点。然而, 所有问题都得已解决,根据SlowMist报告,于审计中并没有发现任何漏洞。

一些已报告且现已修复的项目如下(依重要性顺序):

  • 跨链重放攻击(例如,将交易由TestNet 轉移至 CoinNet);
  • DoS(阻断服务)向量,例如交易池如何处理大量交易;
  • 推荐一些代码风格;

BOSAGORA 网络中的名称注册

“名称注册表”或“DNS 服务器”这些專名詞已经出现在好幾份开发报告中。 或許並不太清楚它在网络中擔當什么角色,因此在讨论近期的改进前,我们认为最好先复习一下。

名称注册表是每个 Agora 节点的组成部分:它允许将公钥与一个或多个 IP 地址連接。 而这是必要的,因为当一个节点请求成为验证者时,他们不会提供他们的公共 IP, 而它亦能随时更改。 因此,网络的其他成员需要联系该验证器的方法。 这就是注册表的作用。

在后台,注册表从头开始实现了一个完整的 DNS 服务器。 这有多个优点:

  • 它使用了一个完善的协议,该协议是当今互联网的支柱;
  • 可以在浏览器中输入节点地址,或者在 google.com 访问该节点;
  • 它极大地简化了与其他服务的互操作性;

如前所述,每个 Agora 节点都有一个注册表。 可以将节点配置为公开此注册表,为其他节点提供 DNS 服务器以查找他们想联系的验证者。

以下是注册表改进的更详细列表:

持久化和集成到 Agora

在 10 月之前,名称注册表是一个单独的实体,独立配置,亦缺乏持久性。 10 月初,它已集成到 Agora,提供更大的灵活性、增强的对等验证和持久性。

已认证的对等端、验证器和其他国家

注册表以前以黑白方式工作。 对等端是验证器,可以注册,也可以不是验证器,不能注册。 但是由于注册到期,注册表和 Agora 侧可能会出现一些不理想的抖动。 因此,注册表在存在待定注册(在池中注册)时首先被变更为接受注册,如果公钥拥有可用于注册的 UTXO,则简单地接受注册。 虽然Agora 尚未完全更新以遵循相同的逻辑,但须尽快完成。

多项改进以符合 RFC,包括 EDNS(0)

名称注册表的初始实现只是HTTP服务器。 此后,Votera需要使用DNS服务器。 首次入侵DNS LAND时,DNS服务器的最基本功能已实现,但部分功能仍丢失。 包括: 名称压缩、处理一些边缘情况以及对 DNS 扩展的支持。 这些都通过各种客户端进行实施和测试,确保客户端按照规范进行。

支持 AXFR

与 BareHTTP 服务器相比,DNS 提供的一个巨大优势是内置复制。 可以将主服务器设置为 Agora,将任何辅助/缓存服务器设置为常用软件之一,例如 BIND9。 为了支持这一点,我们的团队实施了 AXFR,允许服务器彼此共享其区域。 该支援最初于 11 月实施,最近(1 月)已扩展到仅限于一组白名单对等方,就像 DNS 服务器的自定义一样。

Realm(移动数据库)、验证者、闪存区

每个节点在其设置中都包含一个realm(移动数据库)。 这个realm是网络生存的域名。 例如,对于 TestNet,realm为 testnet.bosagora.io。 在此realm中,注册表当前保留两个区域: 验证器和闪存。 如名称所示,前者用于验证器注册,后者用于跟踪闪存节点。 这也可以以类似于比特币的方式进行seeding(也就是说,节点只需知道其realm即可启动 IBD-Initial Block Download)。 这些区域可以位于同一注册表中,也可以分割为多个注册表。

其他 Agora 改进

除了注册表改进外,团队还不断修改代码,以确保在任何情况下都能正常工作。改进主要包括两种性质:协议改进(调整协议协议)和一般改进(协议相同但节点行为不同)。改进的其中一个示例为添加Chain ID。在此示例中,更改了生成散列的方式,以防止TestNet 生成的交易转移至 CoinNet 中。另一方面,与固定间隔重试相比,更普遍的改进是利用指数退避(Exponential backoff )来连接。指数退避能更完善地处理长时间的停机时间或错误,并且比固定间隔重试更具”逻辑”地供人类观察者。

以下列表仅包含协议改进,因其为主要改进,而一般改进数量过多,且即技术性。若果对更详细的信息感兴趣,请在版本列表中列出两者。

引入Chain ID

如前所述,审计的好处之一是引入Chain ID。 虽然应该没有人在 TestNet 和 CoinNet 中使用相同的密钥对,但新的Chain ID 机制确保,即使存在,也无法将消息从一个网络复制到另一个网络。

Commons 支付间隔现在在 TestNet 上工作

我们的测试网出块间隔更短,验证者周期更短:出块速度比 CoinNet 快十倍,节点重新注册的频率要高出一百倍。 在这种情况下,所有共识常量都被参数化,使我们的团队能够快速测试各种场景。 Commons 支付的初始实现在 TestNet 中出现了错误,此间隔未正确处理不同的块间隔,但已修复。

区块签名方案的变

块签名方案被设计为可添加的:使用预映像方案,节点可以执行 Schnorr 签名,而无需此技术通常所需的设置。但是,发现了一个严重漏洞,攻击者窃取验证者的私钥。然后更改该方案以修补此漏洞,同时保留附加属性。目前已修补此漏洞,同时保留附加属性。但是,在相同高度的多个块上签名时,还发现验证器私钥不正确的问题。目前团队正在寻找替代方案解决。

块标题已更改为包含预映像

区块头之前包含两个组件,missing_validators 和 random_seed。 前者预计几乎总是空的(因为它是被削减这个块的验证者列表),而后者是一个哈希,它是预映像的组合。 然而,由于块本身依赖于其签名方案的预映像,这给验证者带来了一些问题,需要分别请求两个数据。

块标题已更改为包含预映像,并从中导出缺少的验证器及其随机seed。 预映像仍可由验证器在内部压缩,因为只需保留注册的最终预映像(有时小于预映像),即可重新构建整个列表。

时间偏移(Time offset)已消除

当块的外部化时间固定在共识参数中时,节点基于本地时间 (误差范围 ),导出需要到达哪个高度。 创世时间戳是共识参数的另一部分。 由于外部化进程的多次改进,以前块标题中的 time_offset 已被删除,以解决外部化延迟。

解决已改善的区块冲突之方案

当出现竞争块和/或提名时,节点(和验证者)应该更喜欢那些有更多注册的节点,因为网络越大,安全性就越高。 已把此概念引入在共识协议中。

冻结交易被重组为包括明确的手续费

原先, 被大幅削减的冻结交易是隐含进行的,此成为在钱包中成为问题。新的实现使slashing更加明确,同时使客户端更加清晰。

提名人数现受限制

提名大小现在有一个上限,这意味着块大小现在也受到隐式限制。

现需使用目标块高度对注册进行签名

当某个节点决定注册时,他们正在闲聊包含一些关键信息的结构。 但是,此注册可能会因此而被延迟,并且未能包含在适当的高度,从而导致节点侧的调整问题。 更糟糕的是,在某些情况下,敌对对等点可能会在罕见的情况下再次使用注册来尝试注册节点,所以,如果不在线注意,节点可能会被大幅削减。 注册基于块高度进行签名。也就是说,这些注册仅适用于特定目标高度。

CoinNet 测试版发布计划

我们计划在 CoinNet 正式上线前, 于 2 月 16 日向外部自愿人士发布测试版本。当测试版本发布时,任何人都可以以验证者参与当中并观看网络运作的方式。我们开发的钱包和区块浏览器亦已链接到CoinNet 测试版,方便大家查看。

我们还计划在发布 CoinNet 测试版的同时举办活动。作为验证者参与或在测试版本验证过程中发现并报告错误的人士, 将通过抽奖能获得奖励。 CoinNet测试版公开活动详情将另行通知,敬请关注。

 


0 Comments

发表评论

Related Stories

Arrow-up