cosmos主网即将上线,对文档做了大量更新。特地翻译了一下,方便小伙伴们阅览, 之后会持续更新
第四章客户端:
轻客户端概览
在这里查看Cosmos SDK轻客户端的RPC服务文档
介绍
轻客户端允许手机这样的客户端从任何全节点接收区块链状态的证明。轻客户端不必信任任何全节点,因为他们能够验证他们收到的任何证明,因此全节点不能虚构网络状态。
轻客户端可以提供与全节点相同的安全性,对带宽,计算和存储资源的要求最小化。同时,它还可以根据用户的配置提供模块化功能。这些出色的功能允许开发人员构建完全安全,高效且可用的移动应用,网站或任何其他应用程序,而无需部署或维护任何区块链全节点。
什么是轻客户端
Cosmos SDK轻客户端(Gaia-lite)分为两个独立的组件。第一个组件对于任何基于Tendermint的应用程序都是通用的。它处理链的区块头的安全性和连接性,并验证来自全节点的证明,证明针对本地信任的验证人集合。此外,它暴露和任何Tendermint核心节点完全相同的API。第二个组件专用于Cosmos Hub(gaiad
)。它用作查询的入口,并公开特定的应用程序的功能,这些功能可以是任意的。针对应用程序状态的所有查询都必须通过查询入口。查询入口的优点是它可以验证应用程序返回的证明。
高级架构
想要为Cosmos Hub(或任何其他分区)构建第三方客户端应用程序的应用程序开发人员应该遵循API规范。该API由多个部分的组合。所有分区都必须暴露ICS0(TendermintAPI)。此外,任何分区都可以任意选择模块API来组合,具体取决于状态机使用的模块。Cosmos Hub最初将支持ICS0(TendermintAPI),ICS1(KeyAPI),ICS20(TokenAPI),ICS21(StakingAPI),ICS22(GovernanceAPI)和ICS23(SlashingAPI)。
预计所有应用程序仅针对Gaia-lite运行。Gaia-lite是唯一一款稳定提供API的软件。
比较
ABCI的全节点与其轻客户端的区别如下:
全节点 | 轻客户端 | 描述 | |
---|---|---|---|
执行和验证交易 | Yes | No | 全节点会执行和验证所有交易但是轻客户端不会 |
验证和保存区块 | Yes | No | 全节点会验证和保存区块但是轻节点不会 |
参与共识 | Yes | No | 只有当全节点是验证人节点时,才会参与共识。轻客户端节点不会参与共识 |
带宽消耗 | 巨大 | 少 | 全节点会接收所有的区块。如果带宽受限制,节点会落后于主网。更重要的是如果全节点正好是验证人,将拖延共识过程。轻客户端只需要很少的带宽。只有在提供本地请求时才会消耗带宽 |
运算资源 | 巨大 | 少 | 全节点将执行所有交易并验证所有需要大量计算资源的区块 |
存储资源 | 巨大 | 少 | 全节点将保存所有区块和ABCI状态。轻客户端只保存验证人集和一些检查点 |
电力资源 | 巨大 | 少 | 必须在具有高性能并且将持续运行的机器上部署全节点。因此功耗将是巨大的。轻客户端可以部署在与用户应用程序相同的机器上,也可以部署在独立的机器上,但性能较差。此外,轻客户端可以在必要时随时关闭。所以轻客户端只消耗很少的功率,即使移动设备也能满足功率要求 |
API接口提供 | 所有cosmos的API | 模块化的API | 全节点支持所有cosmos API。 轻客户端根据用户的配置提供模块化API |
安全级别 | 高 | 高 | 全节点将自行验证所有交易和区块。轻客户端无法执行此操作,但它可以查询来自其他全节点的任何数据并独立验证数据。因此,全节点和轻客户端都不需要信任任何第三方节点,它们都可以实现高安全性 |
根据上表,轻客户端可以满足所有用户的功能和安全要求,但只需要很少的带宽,计算,存储和电源资源。
安全实践
可信的验证人集合
轻客户端的基本设计遵循两个原则:
- 不信任任何区块链节点,包括验证人节点和其他全节点
- 只信任整个验证人集合
最初的可信验证人集合应该预先放置到其可信存储中,通常这个验证人集合来自创世文件。在运行期间,如果轻客户端检测到不同的验证器集合,它将验证它并将新的通过验证的验证人集合保存到可信存储中。
信任广播
从上面的内容,我们了解如何获得可信验证人集合以及lcd如何跟踪验证人集合的变化。验证人集合是信任的基础,信任可以传播其他区块链数据,例如区块和交易。传播架构如下所示:
通常,通过可信验证人集合,轻客户端可以验证包含所有预提交数据和区块头数据的提交区块。然后,区块哈希,数据哈希和appHash是可信的。基于此和merkle证明,所有交易数据和ABCI状态也是可以被验证的。