《Cosmos开发更新 – 2019年7月》

《Cosmos开发更新 - 2019年7月》

开发团队自从上次网络升级以来一直在努力工作,而且未来几个月还会有一些令人兴奋的事情发生。这篇文章主要是描述了这项工作的最新进展以及它对IBC的推动。而且,本文还包括目前处于RC(候选发布版)阶段的Gaia 1.0版本的主要功能概述 (https://github.com/cosmos/gaia/releases/tag/v1.0.0-rc1)。随着7月22日testnet的成功升级(https://github.com/cosmos/testnets/),该版本有望作为cosmoshub-3部署在主网上。让我们回顾一下接下来的一些变化:

LTS保证

此次发布的Cosmos SDK (https://github.com/cosmos/cosmos-sdk)是Tendermint Inc首次提供长时间服务(LTS)保证版本。这意味着在实践中,Tendermint Inc将在六个月内保证我们将支持0.36.x系列的安全关键更新。此外,我们承诺不破坏此版本系列上的REST和CLI API。SDK开发团队还将为应用从0.36.x系列更新到下一个LTS版本发布一个指南。

开发过程变更

LTS保证并非凭空而来的。在过去的几个月中,有许多内部流程已经成熟,可以实现这一承诺:

  • Gaia代码库 – Gaia (https://github.com/cosmos/gaia),枢纽的应用已经分离出了自己的代码库。这一点很重要,因为它将Gaia的发布与SDK的发布分离,并允许这两种产品能够独立地发展。这将允许我们开始定期发布Cosmos SDK,并为依赖它的链修复故障。这一变化将大大减轻新用户的困惑。也有助于他们区分Gaia和Cosmos SDK。
  • 可重复的构建 (https://medium.com/tendermint/reproducible-builds-8c2eebb9a486)- 这保证了Gaia套件始终可以从源代码构建,提供可独立验证的可执行文件,并允许任何人保护自己免受目标攻击。
  • 分支策略 – 以前我们所有的项目都有单独的’master’和 ‘develop’分支。现在我们转换到只用 ‘master’ 的分支策略,然后将每个版本的长期分支分离,这将使我们能够更轻松地支持之前的版本。

治理提案

自从上次硬分叉以来,已经通过了4个治理提案。这些提案已经被纳入Gaia网络升级。简要总结如下:

  1. 社区基金提案(https://hubble.figment.network/cosmos/chains/cosmoshub-2/governance/proposals/7)- 社区基金已获批准,使治理能够使用社区资金池中的资金。完整的提案可以在这里找到:https://ipfs.io/ipfs/QmNsVCsyRmEiep8rTQLxVNdMHm2uiZkmaSHCR6S72Y1sL1
  2. 只在被否决的提案上销毁治理抵押 (https://stargazer.certus.one/governance/6)- 以前,提交和拒绝治理提案会销毁提交人的抵押。该提案发生了变化,现在被拒绝的提案的存款除非被否决,否则不会被销毁。
  3. 安全硬分叉 (https://cosmos.bigdipper.live/proposals/8) – 这个治理提案用于升级到0.34.6版本。此次发布是针对一个关键的安全问题,我们的安全主管Jessy Irwin在另一篇文章中详细介绍了这个问题:https://forum.cosmos.network/t/critical-cosmossdk-security-advisory-updated/2211/11
  4. 增加最大验证人集的大小 (https://www.mintscan.io/proposals/10)- 最近通过的提议将验证人的数量从100增加到125。这将减少验证人需要抵押在投票集中的ATOM数量。在撰写此文时,相当于要绑定约17万美元等值的(通证)质押到验证人,使他可以进入投票集(成为活跃验证人)。

主要功能

作为Gaia的0.36.0版本的一部分,其中有许多故障修复,功能,重构和其他更改。您可以阅读CHANGELOG.md (https://github.com/cosmos/cosmos-sdk/blob/rc1/v0.36.0/CHANGELOG.md)中的完整详细信息,而且本文也概述了这个版本提供的主要功能.

参数更改提案

(https://github.com/cosmos/cosmos-sdk/pull/4206)

Cosmos SDK现在支持创建治理提议并对其投票,这些提议可以修改链上参数,并且不必停止或分叉网络。不仅如此,而且治理模块已经进行了重构,现在任何模块都可以注册并设置自己的提案流程。这一过程也被纳入分配模块,以便允许社区资金的支出。不久的将来,我们会对这个功能进行更全面的描述。

模块重构

(https://github.com/cosmos/cosmos-sdk/pull/4159)

从构思开始,Cosmos SDK被定义为一个模块化框架,主要用途是构建基于区块链的应用程序,但它并不总是像模块一样。因为我们在同一个代码库中开发SDK和Gaia,所以有时会以牺牲模块性为代价来开发功能。随着时间的推移,模块间的交叉关联依赖而组成一个紧密的网不断扩大,使得使用SDK进行开发变得更加困难。

这个问题是我们在发布很快就发现的,是开发人员的主要痛点,也是我们可以解决的问题。我们完成了一些初步工作,以削弱内部模块之间的交叉关联依赖关系。完成后,会创建一个golang界面,明确定义实现Cosmos SDK模块时需要的内容。您可以在此处找到此界面:https://github.com/cosmos/cosmos-sdk/blob/master/types/module/module.go

供应模块

(https://github.com/cosmos/cosmos-sdk/pull/4255)

供应模块允许链被动地跟踪代币的总供应量。每次铸造一枚代币(例如:作为通货膨胀机制的一部分)或销毁一枚代币(例如:由于惩罚或如果治理 提案被否决),总供应量就会更新。

它还引入了一种新类型的帐户ModuleAccount,模块可以使用这个账户用作托管,来分配通政并跟踪记录模块中流入和流出的代币。模块帐户可以被授予一组权限,以执行与供应相关的某些操作,例如铸币或销毁代币。Staking keeper (https://github.com/cosmos/cosmos-sdk/blob/master/x/staking/keeper/pool.go) 在行动中展示了这种模式的良好用法。

高度查询

(https://github.com/cosmos/cosmos-sdk/issues/4318)

现在,REST和CLI客户端支持高度查询,即在任意区块高度查询网络状态的能力。可以针对任何全节点调用高度查询,但是,如果全节点启用了修剪,则如果节点已修剪到该高度,则查询可能会失败。因此,提案仅针对归档节点(无剪切的全节点)调用高度查询。

事件重构

(https://github.com/cosmos/cosmos-sdk/issues/4387)

SDK现在支持更丰富与事件相关的功能集,以前称为标签(tags)。之前,Tendermint ABCI仅允许以非常有限的方式从交易和ABCI方法(例如BeginBlock和Endblock)退回标记。例如,不支持重复键。当需要查询汇总数据点(例如奖励分配和惩罚事件)时,这就带来了许多挑战。

随着新事件的重构有两大优势。首先,这为开发人员的人机工程学带来了巨大的改进。应用程序开发人员不必担心从消息,BeginBlocker或EndBlock处理程序来返回事件。相反,开发人员可能只是通过SDK发出事件,特别是EventManager。这样可以实现更清晰的接口抽象,和改进的工作流程。其次,SDK现在使用这个新的EventManager来发出像惩罚和奖励分配之类的聚合事件。这允许客户端和其他上游应用程序查询和订阅更多聚合数据点。以下是分配模块中EventManager的使用示例: https://github.com/cosmos/cosmos-sdk/blob/master/x/distribution/keeper/allocation.go#L57

每个模块都会发出自己的一组独特事件。发出的确切事件可以在每个模块的相应规范目录中找到,例如,分配事件(https://github.com/cosmos/cosmos-sdk/blob/master/docs/spec/distribution/06_events.md)

偿还技术债务

如果你查看CHANGELOG,你就会发现很多之前讨论过的事项。有一些功能,如为REST服务器添加可配置的超时(https://github.com/cosmos/cosmos-sdk/issues/4263),以及像CLIContext(https://github.com/cosmos/cosmos-sdk/pull/4588)和Bank Module (https://github.com/cosmos/cosmos-sdk/pull/4663) 那样的重构。这项工作回过头来修复已知问题,并将推动更快、更不容易出错的开发。

潜在的升级时间表

自从我们首次从cosmoshub-1升级到cosmoshub-2以来,作为一个社区,我们已经就枢纽升级过程进行了大量讨论,但并没有对如何批准对枢纽的升级这一问题达成共识。来自Figment Networks人员的这份提案草案包含了对我们上次使用的方法的书面解释:https://docs.google.com/document/d/1fh9iD2GIElE_hR4iR6puiH0gcP_-AOSyUairR7CImdI/edit#heading=h.sv89gva33iyz

用它来作为指导,下面是将Cosmos Hub升级到Gaia 1.0软件的时间表。请注意,这取决于社群投票并同意这些更改。

  • Testnet升级:7月23日成功完成
  • 第一次治理投票:7月25日
  • 2周的测试网稳定性:8月7日
  • 第一次治理投票通过:8月9日
  • 第二次治理投票:8月9日
  • 在第二次治理投票时设置的时间/高度的网络升级

即将推出的功能

  • IBC支持 – ICS流程 (https://github.com/cosmos/ics)已经全面展开了几个月,并且刚刚提供了1.0版本的规范,正在积极开发工作实施(https://github.com/cosmos/cosmos-sdk/pulls?q=is%3Apr+is%3Aopen+label%3AIBC) Tendermint和SDK都有一些变化,特别是在支持所需的轻客户端实现方面。该版本将增加其他链通过IBC连接到枢纽的能力。
  • Gaia的不停机状态机升级 – 来自Regen Networks团队(https://github.com/regen-network/regen-ledger)的Aaron一直致力于实现链上升级(https://github.com/cosmos/cosmos-sdk/pull/4233)我们将与他们合作将这些更改合并到Cosmos SDK和枢纽中。可重现的构建和模块重构工作是实现此功能的关键。
  • 子密钥 – 此功能将允许创建具有给定链的权限子集的”子密钥”。Sunny Aggarwal以最初的要求开始了对话(https://github.com/cosmos/cosmos-sdk/pull/4380)。这项工作由来自Regen团队的B-Harvest和Aaron Craelius负责,他们一直致力于完整的规范和实施(https://github.com/cosmos/cosmos-sdk/pull/4616).
  • Amino序列化兼容性 – 努力使amino(我们的编码格式)完全序列化兼容正在收尾。完成后,我们将为SDK和Tendermint中编码的每种类型提供规范的.proto文件。在处理轻客户端证明和交易时,从客户端角度来看,这样的交流会变的更容易。
  • 收入报告 – 随着升级的事件系统和高度查询的添加,基于链上数据为验证者创建详细的收入报告现在变得非常简单。我们将在标准工具中添加了一个给验证人的版本,以简化报告。
  • 新模块 – 目前正在许多模块上进行工作。最激动人心的例子是在HackAtom 柏林期间启动的WASM模块(https://github.com/cosmwasm)该团队在ICF资助下完成这项工作。同时在工作中还有uniswap样式交换模块 (https://github.com/cosmos/cosmos-sdk/pull/4644)(一个NFT模块:https://github.com/cosmos/cosmos-sdk/pull/4209)和一个EVM模块(https://github.com/ChainSafe/ethermint),两者都在积极开发中。
  • 您可以在下一个SDK 里程碑 – v0.37.0中跟踪这些功能和其他功能的开发(https://github.com/cosmos/cosmos-sdk/milestone/19)

感谢Cosmos SDK开发团队和所有外部贡献者的代码提交使此版本得以发布。

如果您正在构建Cosmos SDK或有兴趣了解它的更多信息,请在此处加入我们的Cosmos SDK社区线上会议(https://calendar.google.com/calendar/r?cid=dGVuZGVybWludC5jb21fZHFkZW8wOGVxMWxzNjNvcWU4cjJ2ZHJodjRAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ),该会议每两周进行一次。

来源:cosmos

本文由用户:跳舞精灵 发布,不代表网站的立场,转转请注明出处:http://www.maiyaotop.com/hangye/49857.html

发表评论

登录后才能评论