tfb
tfb
账户抽象
Substrate使用多组公私密钥对来代表区块链网络的参与者。
基础节点使用指定的利益证明算法作为选择验证者的一致机制。验证人和被指定人可能有大量资金,因此基板的抵押模块引入了账户抽象,以确保资金的安全性。
这些抽象包括帐户密钥和会话密钥
密钥账户包括:
Stash Key:存储账户用于存储资金,私钥要尽量安全,最好放在冷钱包里;
控制器密钥:控制器账户代表存储账户发出的只需持有少量资金支付交易费用的信号;
会话密钥是存储在验证器节点客户端的“热”密钥。验证者使用会话密钥来签署与共识相关的信息。这个密钥不应该持有基金。
您可以声明任意数量的会话密钥,默认的基底节点使用4个会话密钥
在实际应用中,验证者将所有会话公共密钥合并为一个对象,用“控制器”帐户签署公共密钥集,并将事务发送到链中的密钥注册,这在前面的文章《搭建自定义Substrate区块链网络》中已经实际使用过。
资源和权重
区块链上的可用资源是有限的,包括内存使用、存储、计算(CPU)、事务/块大小和状态数据库大小。不同的区块链平台可能会为这些资源定义不同的名称。比如EOSIO把这些资源抽象成RAM、CPU、NET,但本质上是一样的。
衬底有几种机制来管理对资源的访问,并防止链中的每个组件消耗过多的资源。
权重是一种管理验证数据块所需时间的机制,不用于限制对其他资源的访问。
基底定义一个权重单位作为固定参考硬件的执行时间。硬件标准是英特尔酷睿i7-7700K CPU、64GB内存和NVMe固态硬盘。
参考硬件上的基准测试可以使权重在各种运行时之间具有可比性,从而使来自不同来源的软件组件可以组合。
权重(重量)表示验证块所需的有限时间,包括计算周期和存储I/O。权重只是源代码中的一个数值:
除了影响手续费之外,权重系统的主要目的是防止块被太多的事务填满,以至于执行这些事务花费太长时间。
当处理一个块内的事务时,系统模块计算该块的总长度(以字节为单位)和该块的总长度权重。如果这些数字中的任何一个超过限制,该块将不接受其他事务打包。
这些限制在trait frame _ system : trait中定义:
键入MaximumBlockLength: Get
键入MaximumBlockWeight: Get
指示最大块长度和最大块权重。
还有一个可配置的比率参数
类型可用锁定:获取
它指示正常事务可用的块部分,其余部分只能由业务事务使用,并且可以应用于系统模块管理的任何资源限制,包括块权重和块长度。
例如,如果块长度限制为1MB,AvailableBlockRatio设置为80%,则所有事务只能填充块的前819.2KB,其余只能由操作类填充。
链外工人;脱产工人
目前,区块链的大部分业务都是在连锁上完成的。如果操作结果的时间不确定,操作不适合在链上进行,会影响达成共识的时间。
链下操作适用于以下情况,可由基底链下的作业机器完成:
如果计算量大,就委托给一个节点进行计算,然后写回链中。区块链需要一个核查机制;
处理时间不确定,可以长也可以短,比如通过http/https从外部访问数据;
某些类型的节点可以专门分工;
某个工种存储量大,不需要每个节点都存储;
基底链下的工作机具有以下特征:
链下的工作机操作和块生成计算是异步操作,如大量的计算操作,不影响块的生成;
可以读取区块链上的状态信息;
可以进行已签名和未签名的交易(系统交易);
可以通过https API获取外部互联网数据;
具有专用离线工作机的存储系统;
您可以指定只有一些节点正在运行;
链条下工作机的操作机构如下图所示: