cosmos及特定应用程序的区块链

特定应用程序的区块链,简单来说,一个区块链就是一个专门的应用程序。为了实现某一特定的去中心化应用而专门实现一个区块链。

传统的用智能合约构建去中心化应用不行吗?

  1. 灵活性不足:智能合约本质上受到虚拟机本身的限制。例如,以太坊虚拟机不允许开发者实现代码的自动执行。
  2. 效率低:智能合约全部由同一虚拟机运行。当实现的应用多了,他们会争夺资源。智能合约需要由虚拟机解释,这与在状态机级别(智能合约是状态机的一部分)实现的本机应用程序相比会限制性能。(cosmos团队测试删除虚拟机后,性能提高了 10 倍左右)
  3. 主权限制:智能合约的利益相关者对其的主权非常有限,并最终被底层区块链的治理所取代。如果应用程序中存在错误,则对此无能为力。

如何构建特定应用程序的区块链?

在这里插入图片描述

在cosmos生态中构建区块链,基于tendermint共识引擎 (tendermint core、CometBFT) + Cosmos SDK来实现。

tendermint 共识引擎:封装了底层的网络层和共识层,并提供ABCI接口(应用区块链接口),使得转态机(具体的应用功能)与底层的共识引擎相连接。

Cosmos SDK:是用来构建区块链状态机(具体的应用功能)的框架。

借助 Cosmos SDK,开发人员只需定义状态机,tendermint 共识引擎将为他们处理网络上的复制。

共识引擎CometBFT

CometBFT是一个与应用程序无关的引擎,负责处理区块链的网络和共识层。实际上,这意味着 CometBFT 负责传播和排序交易字节。CometBFT 依靠同名拜占庭容错(BFT)算法来就交易顺序达成共识。

CometBFT共识算法与一组称为验证器的特殊节点一起工作。验证者负责将交易块添加到区块链中。在任何给定的区块中,都有一个验证者集合 V。算法会选择 V 中的验证者作为下一个区块的提议者。如果超过三分之二的 V 在该块上签署了 a prevote和 a precommit,并且该块包含的所有交易均有效,则该块被视为有效。验证器集可以通过状态机中写入的规则进行更改。

ABCI

CometBFT 通过一个名为ABCI 的接口将事务传递给应用程序,应用程序必须实现该接口。

在这里插入图片描述
CometBFT 仅处理交易字节。它不知道这些字节的含义。CometBFT 所做的就是确定性地对这些交易字节进行排序。CometBFT 通过 ABCI 将字节传递给应用程序,并期望返回代码来通知它事务中包含的消息是否已成功处理。

以下是 ABCI 最重要的信息:

  • CheckTx:当 CometBFT 收到交易时,会将其传递给应用程序以检查是否满足一些基本要求。CheckTx用于保护全节点内存池免受垃圾邮件交易的影响。。称为 的特殊处理程序AnteHandler用于执行一系列验证步骤,例如检查是否有足够的费用和验证签名。如果检查有效,则交易将被添加到内存池并转发到对等节点。请注意,交易尚未被处理(即没有发生状态修改),CheckTx因为它们尚未包含在块中。
  • DeliverTx:当CometBFT 收到有效区块DeliverTx时,区块中的每笔交易都会通过 via 传递给应用程序进行处理。正是在这个阶段,发生了状态转换。再次执行AnteHandler,以及事务中每条消息的实际Msg服务RPC。
  • BeginBlock/ EndBlock:这些消息在每个块的开头和结尾执行,无论该块是否包含交易。触发逻辑的自动执行很有用。不过,请谨慎行事,因为计算成本高昂的循环可能会减慢您的区块链,如果循环是无限的,甚至会冻结它。

Cosmos SDK

Cosmos SDK 的强大之处在于其模块化。Cosmos SDK 应用程序是通过聚合可互操作模块的集合来构建的。每个模块定义状态的子集并包含自己的消息/事务处理器,而 Cosmos SDK 负责将每条消息路由到其各自的模块。

举例:

                                      +||  事务通过DeliverTx从整个节点的CometBFT|  引擎中继到节点的应用程序|  ||+---------------------v--------------------------+|                 APPLICATION                    ||                                                ||     Using baseapp's methods: Decode the Tx,    ||     extract and route the message(s)           ||                                                |+---------------------+--------------------------+|||+---------------------------+|||  Message routed to|  the correct module|  to be processed||
+----------------+  +---------------+  +----------------+  +------v----------+
|                |  |               |  |                |  |                 |
|  AUTH MODULE   |  |  BANK MODULE  |  | STAKING MODULE |  |   GOV MODULE    |
|                |  |               |  |                |  |                 |
|                |  |               |  |                |  | Handles message,|
|                |  |               |  |                |  | Updates state   |
|                |  |               |  |                |  |                 |
+----------------+  +---------------+  +----------------+  +------+----------+||||+--------------------------+|| Return result to CometBFT| (0=Ok, 1=Err)v

每个模块都可以看作一个小状态机。开发人员需要定义模块处理的状态子集,以及修改状态的自定义消息类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/338109.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法第十二天-最大整除子集

最大整除子集 题目要求 解题思路 来自[宫水三叶] 根据题意:对于符合要求的[整除子集]中的任意两个值,必然满足[较大数]是[较小数]的倍数 数据范围是 1 0 3 10^3 103,我们不可能采取获取所有子集,再检查子集是否合法的暴力搜解法…

字体图标操作步骤

网站 直接点击 进去后长这样,点免费的添加 保存下载 保存后解压 把fonts文件夹复制粘贴到我们自己项目 可以放在同images的路径下 引入 来源于 再style中粘贴 font-face {font-family: icomoon;src: url(fonts/icomoon.eot?jyg4cp);src: url(fonts/icomoo…

数据结构及单链表例题(下)

上次我们已经了解了单链表的数据结构定义以及创建单链表的两种方法,这节介绍几道例题. 文章目录 前言 一、已知L为带头结点的单链表,请依照递归思想实现下列运算 二、单链表访问第i个数据节点 三、在第i个元素前插入元素e 四、删除第i个结点 五、查找带头结点单链表倒数第…

从0开始python学习-45.pytest框之将所有的用例封装到一个类中,实现极限封装,并测试用例校验

目录 1. 封装一个用于校验yaml测试用例参数的方法:model_util.py 2. 校验方法是否正确 3. 封装一个方法,用于读取所有的用例:test_all_case.py 1. 封装一个用于校验yaml测试用例参数的方法:model_util.py from dataclasses imp…

Python从入门到网络爬虫(23个Python开源项目)

前言 随着互联网的快速发展,大量的信息被不断地产生和积累,这也使得网络爬虫变得越来越重要。而Python作为一门高效、易用的编程语言,被广泛地应用于网络爬虫领域。本文将从多个角度分析Python开源爬虫项目的优缺点、应用场景以及未来发展方…

Kubernets(K8S)启动和运行01 快速入门

简介 Kubernetes is an open source orchestrator for deploying containerized applications. It was originally developed by Google, inspired by a decade of experience deploying scalable, reliable systems in containers via application-oriented APIs. Kubernete…

智能合约笔记

前言: 首先了解下为什么会出现智能合约,打个比方现在有两个人A和B打赌明天会不会下雨,每个人赌注100元,如果第二天下雨则A拿走200元,否则B拿走200元,这样就有一个问题,赌注要到第二天才能见效&…

three.js实现雷达扫描效果(纹理贴图)

three.js实现雷达扫描效果&#xff08;纹理贴图&#xff09; 图例 步骤 创建两个平面&#xff0c;分别纹理贴图&#xff0c;底图模型.add&#xff08;光波模型&#xff09;关闭材质的深度测试光波旋转 代码 <template><div class"app"><div ref&q…

RT-Thread:SPI万能驱动 SFUD 驱动Flash W25Q64,通过 STM32CubeMX 配置 STM32 SPI 驱动

关键词&#xff1a;SFUD,FLASH,W25Q64&#xff0c;W25Q128&#xff0c;STM32F407 说明&#xff1a;RT-Thread 系统 使用 SPI万能驱动 SFUD 驱动 Flash W25Q64&#xff0c;通过 STM32CubeMX 配置 STM32 SPI 驱动。 提示&#xff1a;SFUD添加后的存储位置 1.打开RT-Thread Sett…

Python 日志模块 logging 的最佳实践,内容干练简洁

文章目录 1. 引言2. 定义日志类3. 引用日志4. 参考 1. 引言 每次写 python 代码&#xff0c;想找一个日志模块 logging 的最佳实践&#xff0c;都要找一大圈&#xff0c;确不一定可以找到合适的最佳实践。 痛定思痛&#xff0c;我决定下笔记录目前觉得合适的 python 日志的用…

206. 反转链表(Java)

题目描述&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 输入&#xff1a; head [1,2,3,4,5] 输出&#xff1a; [5,4,3,2,1] 代码实现&#xff1a; 1.根据题意创建一个结点类&#xff1a; public class ListNode {int val…

【AI】CycleGan对抗生成网络遥感影像生成地图效果测试

今天看到一个有趣的项目&#xff0c;CycleGan对抗生成网络把马生成成斑马&#xff0c;还有一个测试用例是用遥感影像生成平面地图的效果&#xff0c;效果如下图所示&#xff0c;我大学是遥感专业&#xff0c;看到遥感影像就触动了我的原神&#xff0c;于是原神启动&#xff0c;…