跳到主要内容

状态转移

每个系统都遵循系统状态演变所依据的规则。当网络处理新的输入数据时,状态会根据状态转换规则前进。这些输入数据被打包在被称为交易 (transactions) 的细粒度信息中。

Gear 节点维护和同步一个交易池,其中包含所有新交易。当任何节点(无论是否为验证者)收到一个交易时,该节点会将这个交传播给所有连接的节点。关于交易池如何运作的更高级内容,请参考 Substrate 文档 。链接替换为 https://docs.substrate.io/v3/concepts/tx-pool/

当 Gear 验证节点生成新块时,池中的一些(或所有)交易将合并到一个区块中,网络将通过该块进行状态转换。在生成下一个块之前,上一个块中未打包的交易将保留在池子中,直到产生下一个区块。

Gear 网络支持以下类型的交易:

  1. 上传程序 - 用户上传新的程序(智能合约)
  2. 上传代码 - 用户上传代码,以便以后用它来创建程序
  3. 创建程序 - 程序或用户根据先前上传的代码创建一个程序
  4. 发送消息 - 程序或用户将消息放入消息队列
  5. 发送回复消息 - 与消息类似,但只能作为对收到的信息的回复来发送
  6. 从 mailebox 提款 - 用户要求提走与他的 mailbox 中的信息相关的余额
  7. 取出消息 - 验证器(区块生产者)对多个信息进行排队,运行相关程序
  8. 转账交易 - Gear 引擎执行 用户—程序—验证者 之间的转账交易

消息处理在块构建/导入时的预留空间中进行。它保证消息处理将在每个块中执行,并且至少以当前实例设置确定的某个特定速率执行。

上传程序

Gear 网络的指定机构 (或任何公开实现的用户) 可以提出一个新的程序保存到状态种。对于公共网络,还提供与程序相关的余额。这个新的余额将会设置为初始余额(存在抵押)。

上传代码

无需初始化即可上传 Wasm 代码。此代码不能作为程序执行,但它会保存到存储中,并可用于从中创建新程序。用户和程序都可以从上传的代码创建程序。

创建程序

用户和程序都可以从上传的代码创建新程序。代码可以多次重用以生成多个程序。

发送消息

终端用户通过向 Gear 网络发送信息与程序进行交互。发送到 Gear 网络的消息填充全局消息队列。这个队列可以被看作是一个运行时驱动的交易队列,但是要保证它接收的任何消息最终都会被处理。将消息放入队列不是免费的,因此可以保证消息会被发送。

程序之间也会交换消息。接收到的消息的结果可以是另一个消息 (回复),发送给另一个程序或用户或指定的行为,用于它接收到的下一个消息。一个程序还可以发送一个消息,其执行结果将是创建另一个程序。

发送回复消息

回复与上述消息类似,唯一不同的是,回复只能作为对收到的消息的回应而发送。用户可以将回复发送给他们 mailbox 中包含的信息。

从 mailebox 提款

在接收到具有关联的资产的消息后,用户必须提取资产,才能将其从消息转账到用户。未认领的将在邮件耗尽 gas 限制后离开 mailbox 后返回给发件人。

取出消息

当轮到验证器生成下一个区块时,验证者可以选择让哪些消息出列。它不需要每个特定的验证器来维护完整内存状态。出队列只发生在每个块的末尾。在退出队列期间,可以生成新的消息。它们也可以在此阶段被处理,但也可以留在队列中等待下一个块 (和另一个验证器)。

转账交易

常规转账交易可以通过两种方式进行。第一种方法是使用相应的外在因素 (例如transfer, setBalance等)。第二种方式是将一个用户的信息发送给另一个用户,并附附带相关的余额。

消息、区块和事件的生命周期

下图说明了 Gear 的全生命周期。正如面向通信领域的 actor 模型所规定的,除了消息可以共享,再没有任何东西是可以共享的了。以“系统”为目的地的消息最终会出现在事件日志中,以便在用户空间进行检查。

alt text