千家信息网

EOSIO区块链的通信模型是什么

发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,这篇"EOSIO区块链的通信模型是什么"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"
千家信息网最后更新 2025年02月06日EOSIO区块链的通信模型是什么

这篇"EOSIO区块链的通信模型是什么"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"EOSIO区块链的通信模型是什么"文章吧。

EOS 智能合约

每个EOS智能合约都有一组操作和类型。action表示单个操作。你可以将其视为JavaScript中的函数或C#中的方法。type定义合约中使用的所需内容和结构。大多数时候我们将它们用于我们的表。

EOSIO中的合约可以相互通信。它是通过基于消息的通信架构实现的。

EOS通信模型就是他们沟通的方式。通信模型有两种类型:Inline Communication Model(内联通信模型)和Deferred Communication Model(延时通信模型)。

内联操作(内联通信模型)

内联操作是内联通信模型的一部分。如果你了解它们,就能理解内联通信。

我们来看看下图:

用户从智能合约A执行操作(Action #1)。当操作开始执行时,它会触发另外两个操作:来自智能合约B的操作Action #1.1来自智能合约C的操作Action #1.2。一切都在当前交易中完成。

在当前交易中执行并与其完成相关的操作,称为inline action内联操作

重要的是要记住内联操作是作为调用操作的一部分执行的。因此,它们与原始交易的范围和权限相同。这是他们将被执行的保证。如果其中一个操作失败,则整个交易将失败。

所以,你应该已经知道内联通信是什么意思了吧。

请求将执行操作作为调用操作的一部分是inline communication内联通信的示例。

延时操作(延时通信模式)

第二种类型是延时通信模型。表示模型的延时操作非常有趣,因为它们不在同一交易中执行。我们来看看下图:

我们有相同的交易工作流程。这里唯一的区别是从智能合约C执行的第二个操作不是内联而是延时。延时操作计划在将来运行。

根据生产者的判断,延时的操作最好可以安排在稍后的时间运行。无法保证延期操作将执行。

即使它们不属于同一交易,它们也具有发送它们的合约的权限。

所以基本上,延时通信在概念上采用发送给对等交易的操作通知的形式。

交易与操作

在继续演示之前,让我们检查一些有趣的东西。

在EOSIO中,交易和操作之间存在差异。操作表示单个操作,而交易是一个或多个操作的集合。

交易可以包含N个操作。但是,每个交易必须在30ms或更短的时间内执行。如果交易包含多个操作,并且这些操作的总和大于30毫秒,则整个交易将失败。

机器人工厂

我们要做个机器人。你可以在我们的GitHub中找到包含所有智能合约和代码的项目。

作为一家创造未来的机器人公司,我们希望一切都是完美的。新建新的机器人时,应发送出售信息,并在终端上打印相关信息。为了实现这三个操作,我们将使用内联操作。

看一下下面的代码片段。

void RobotFactory::create(account_name account, robot newRobot) {        robotIndex robots(_self, _self);        auto iterator = robots.find(newRobot.series_number);        eosio_assert(iterator == robots.end(), "Robot with this series number already exists");        robots.emplace(account, [&](auto& robot) {            robot.series_number = newRobot.series_number;            robot.model = newRobot.model;            robot.operating_system = newRobot.operating_system;            robot.profession = newRobot.profession;            robot.owner = name{account}.to_string();            robot.manufactured = now();        });        // Execute INLINE ACTION from another contract        // action({permission_level}, {contract_deployer}, {contract_action}, {data_to_pass}).send();        action(permission_level(account, N(active)), N(market), N(forsale), make_tuple(account,             newRobot.series_number,             newRobot.model,             newRobot.manufactured        )).send();        // Execute INLINE ACTION from another contract        // action({permission_level}, {contract_deployer}, {contract_action}, {data_to_pass}).send();        action(permission_level(account, N(active)), N(messenger), N(printmessage), make_tuple(newRobot.model)).send();    }

首先,我们开始创建一个新的机器人。操作完成后,它将出现第一个内联操作。我们让发送机器人一个出售信息,所以我们要求RobotMarketplace智能合约的forsale

请注意,当我们要求智能合约A从智能合约B执行操作时,应首先添加适当的权限。我们将在下一部分介绍,目前,请务必遵循README.md中的指南。

第一个内联操作完成后,第二个内联操作就会完成。这次我们从Messenger智能合约中请求printmessage。 同样应该添加适当的权限。

在这两种情况下,当我们通过终端执行创建操作时,我们已收到操作已完成(或失败)的通知。

cleos push action weyland create '{"account":"weyland","newRobot":{"series_number":14441992,"model":"A330","operating_system":"DX42","profession":"engineer","owner":"","manufactured":0}}' -p weylandexecuted transaction: 9874a8a5f516ca540c44cafd8b9b371c856fe7958be1fc6268641cc7ab67fdaf  136 bytes  6000 us#      weyland <= weyland::create             {"account":"weyland","newRobot":{"series_number":14441992,"model":"A330","operating_system":"DX42",...#        market <= market::forsale              {"account":"weyland","robotForSale":{"series_number":14441992,"model":"A330","manufactured":0}}#     messenger <= messenger::printmessage      {"message":"A330"}>>  ==== For sale | Robot model: A330

让我们将printmessage操作从内联更改为延时。为此,我们需要使用EOSIO的transaction.hpp标头。

void RobotFactory::create(account_name account, robot newRobot) {        robotIndex robots(_self, _self);        auto iterator = robots.find(newRobot.series_number);        eosio_assert(iterator == robots.end(), "Robot with this series number already exists");        robots.emplace(account, [&](auto& robot) {            robot.series_number = newRobot.series_number;            robot.model = newRobot.model;            robot.operating_system = newRobot.operating_system;            robot.profession = newRobot.profession;            robot.owner = name{account}.to_string();            robot.manufactured = now();        });        // Execute inline action from another contract        // action({permission_level}, {contract_deployer}, {contract_action}, {data_to_pass}).send();        action(permission_level(account, N(active)), N(market), N(forsale), make_tuple(account,             newRobot.series_number,             newRobot.model,             newRobot.manufactured        )).send();        // Execute DEFERRED ACTION from another contract        eosio::transaction tx;        tx.actions.emplace_back(permission_level{account, N(active)}, N(messenger), N(printmessage), make_tuple(newRobot.model));        tx.delay_sec = 12;        tx.send(N(newRobot.model), account);     }

要创建延时交易,我们首先从类型交易声明一个变量tx。然后我们在其操作集合中添加一个新操作。我们可以选择设置延时。如果它为0,则延时交易将在调用之后立即进行。

设置完所有后,我们只需调用send方法即可。

但是,不保证将执行延时交易。此外,我们不会像在内联操作中那样收到有关其成功或失败的任何通知。

cleos push action weyland1 create '{"account":"weyland1","newRobot":{"series_number":14441993,"model":"A330","operating_system":"DX42","profession":"engineer","owner":"","manufactured":0}}' -p weyland1executed transaction: 5f45b48877aac9d03172616a2443b7a9079ee9f74a124a0976d2fcf0b756e985  176 bytes  2722 us#      weyland1 <= weyland1::create             {"account":"weyland1","newRobot":{"series_number":14441993,"model":"A330","operating_system":"DX42",...#        market <= market::forsale              {"account":"weyland1","robotForSale":{"series_number":14441993,"model":"A330","manufactured":0}}# No notification for printmessage action

正如你在12秒后看到的那样,执行延时交易。

以上就是关于"EOSIO区块链的通信模型是什么"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

交易 通信 合约 模型 智能 内容 机器 机器人 权限 类型 区块 信息 保证 有趣 相同 适当 下图 代码 单个 多个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 杨浦区智能软件开发店 召唤师查询服务器升级中 网络安全法是第一部网络 桌面窗口管理服务器 第五人格服务器异常怎么回事 dns主从服务器搭建 777285惠普服务器风扇参数 大专学机械一般会软件开发吗 厦门加固服务器生产厂商定制 网络技术对汽车的影响有哪些 参与软件开发的工作经历 广西微易微网络技术公司 通达信服务器正在运行中怎么处理 绵阳网络技术哪个好 日常生活无线传感器网络技术 北京律点网络技术 北京国际互联网科技大学博览会 2u服务器一般多少千瓦 数据库安装技术员 服务器运营外包还有前途吗 软件开发模型选择的原则 网络安全专业比较好的大学 网络安全知识宣传的目的 保险公司 软件开发 数据库维护报告表格 新加坡用什么代理服务器 linux连接服务器 服务器电脑电源的好坏是哪两条线 拳皇下载软件开发 长沙有涯科技网络技术
0