Filecoin 区块链中的 Actor 等同于以太坊虚拟机中的智能合约。Filecoin 虚拟机(VM)是认真执行所有参加者代码的系统组件。在 Filecoin VM 上执行参加者(即链上执行)会发生 GAS 用度。
在 Filecoin VM 上执行的任何操纵都将以状态树的形式输出。最新的状态树是 Filecoin 区块链中的当前来历。
1
VM Actor 接口? v? ? ipfskj2020
Actor 是以太坊虚拟机中智能合约的 Filecoin 等效项。因此,Actor 是系统的焦点组件。Filecoin 区块链当前状态的任何变动都必需通过参加者要领挪用来触发。
以下会描写 Actor 与 Filecoin 虚拟机之间的接口。
(这意味着下面描写的大大都内容并不严格属于 VM。相反,逻辑位于 VM 和 Actors 逻辑之间的接口上)
总共有十一种范例的内置 Actor,但并非所有范例都与 VM 交互。一些 Actor 不会挪用对区块链的 StateTree 的变动,因此不需要与 VM 的接口。
这里 Actor State 的布局由参加者的余额,参加者所拥有的令牌以及用于查询,查抄链状态并与之交互的一组状态要领构成。
2
状态树
状态树是对 Filecoin 区块链应用的任何操纵的执行输出。链上(即,VM)状态数据布局是将地点绑定到参加者状态的映射(以哈希数组映射树(HAMT)的形式)。VM 在每次执行 actor 要领时城市挪用当前的 State Tree 函数。
3
VM 动静-Actor 要领挪用
动静是两个参加者之间举办通信的单元,因此是状态变革的基础原因。一条动静团结了:
从发送方转移到吸收方的令牌金额,以及具有在吸收方上挪用的参数的要领(可选 / 在合用的环境下)。
Actor 代码可以在处理惩罚收到的动静时向其他 Actor 发送其他动静。动静是同步处理惩罚的,也就是说,参加者在规复节制之前期待发送的动静完成。
动静的处理惩罚耗损了计较和存储单元,两者均以瓦斯暗示。动静的气体限制为处理惩罚该动静提供了所需的计较上限。动静的发件人以其确定的汽油价值来付出动静执行所耗损的 gas 单元(包罗所有嵌套的动静)。区块出产者选择要包括在区块中的动静,并按照每个动静的 gas 价值和耗损量得到嘉奖,从而形成市场。
动静语法验证
语法无效的动静不得传输,保存在动静池中或包括在块中。假如收到无效动静,则应将其扬弃,而且不要进一步流传。
当单独发送时(在包括在块中之前) SignedMessage,无论利用哪种签名方案,都将动静打包为 。有效的签名邮件的序列化总巨细不大于 message.MessageMaxSize。
v? ? ipfskj2020
语法上有效的 UnsignedMessage:
具有名目正确的非空 To 地点,
具有名目正确的非空 From 地点,
具有 Value 不小于零且不大于令牌总供应(2e9 * 1e18),而且
具有非负数 GasPrice,,
具有 GasLimit 至少便是与动静的序列化字节关联的气体耗损的值,
具有 GasLimit 不大于区块气体限制网络参数的值。
从中提取信息 Message struct,譬喻发件人和收件人地点,要转移的值,执动作静所需的资金以及动静的 CID。
假定动静最终应包括在一个块中并添加到区块链中,则应查抄动静的发送者和吸收者的动静有效性,该值(应为非负值,而且始终小于轮回供给),gas 费价值(该价值又应为非负数)且 BlockGasLimit 该价值不该大于该区块的 gas 费限额。
动静语义验证
语义验证是指需要动静自己之外的信息的验证。
语义上有效的 SignedMessage 必需带有签名,以验证有效载荷是否已被 From 地点标识的帐户执行者的公钥签名。请留意,当 From 地点是 ID 地点时,必需在块所标识的父状态下的发送帐户参加者的状态下查找公钥。
留意:发送方必需以包括动静的块所标识的父级状态存在。这意味着单个块包括建设新帐户 actor 的动静和来自同一 actor 的动静是无效的。来自该参加者的第一条动静必需比及下一个纪元。动静池大概会解除来自参加者的,尚未处于链状状态的动静。
动静没有进一步的语义验证,大概导致包括该动静的块无效。每个语法有效且正确签名的动静都可以包括在一个块中,并会从执行中发生一个收据。个中 MessageReceipt sturct 包罗以下内容:
可是,动静大概无法执行到完成,在这种环境下,它不会触发所需的状态变动。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。