一个extrinsic 是来自于链外的一片信息并且被包含进区块中,extrinsics 分为三类,inherents,签名交易和未签名的交易
注意:events不是extrinsics,链为链本身固有的信息片段发出事件。例如,质押奖励是事件,不是extrinsics,因为奖励是由链内部的循环逻辑引发的
Block structure
在Substrate中的区块是由header和一组extrinsics,header包含区块高度,前一个节点的哈希,extrinsics root,状态root和摘要。本节点只会关注 extrinsics root
Extrinsics被绑定在一个区块中,作为一系列在运行时中定义的要执行的块。extrinsics root是这系列的密码摘要。它服务于两个目标,首先,在header被构建和发布之后,阻止对于一系列extrinsics的改变。第二,它提供了一种方式,可以让轻客户端简洁地验证任何给定的extrinsic的确存在于区块中给定的header信息中
-Block Reference
Inherents
Inherent是一片没有被签名的、只是被块作者嵌入进区块中的信息片段。它们不会在网络上传播或者存储在交易队列中。从技术上讲,没有什么能够组织在Substrate链上传播inherents,但是不会有基于费用的垃圾邮件预防机制
Inherents代表数据以自定义的方式描述有效的信息片段之一,它们被认为是可靠的,因为已经有足够多的验证者同意它们是合理的
举个例子,区块作者可能会在区块中嵌入一个时间戳inherent。没有办法证明时间戳是真实的,就像用签名证明发送资金一样。相反,验证者根据通过其它验证者发现时间戳的合理程度来拒绝或者接受块。这意味着时间戳在他们自己时钟系统里是在接受范围内的
Signed transactions
签名交易包含了账户的签名,这个账户发出交易并且需要支付一定的费用才能将交易包含在链上。因为可以在执行之前识别在链上包含签名交易的价值。所以他们可以在网络中的节点上传播,并且风险很低、
签名交易概念在以太坊和比特币中仍然适用
Unsigned transactions
有些情况需要未签名的交易,请谨慎使用未签名的交易,因为它们的验证逻辑非常难
因为交易未被签署,因此无需支付费用。因为没有费用,所以交易队列也没有经济逻辑阻止垃圾邮件,未签名的交易也缺少随机数,这也让避免重复交易变的困难。很少交易使用未签名的变体,但是它们需要某种形式的基于签名扩展的自定义实现垃圾邮件的预防,这可以存储在未签名的交易中
在Substrate中未签名交易的一个例子是authorities发送 I’m online heartbeat 交易。交易包含来自会话的签名,该密钥不控制资金因此也无法支付费用,交易池会通过在会话中检查 heartbeat是否已经被提交来控制垃圾邮件
Further reading
-Reference documentation
-Runtime Execution
-Transaction Fees
-Transaction Pool



