2.6 Transaction Weight
对于链来说,资源是有限的。这些资源包括内存使用、存储I/O、计算、交易区块的大小和状态数据库大小。Substrate提供了几种不同的机制去管理对资源的访问,以防止链上的单个组件对某种资源过多的消费,Weight用来管理验证区块的时间。通常而言,这受限于存储 I/O和计算
注意:
Weight不用于限制对其它资源的访问,比如存储本身或内存占用。为此必须添加其它机制
一个区块包含的Weight数量是有限的,一个可选的Weight消耗通常通过经济措施来限制(例如weight不需要作为区块的初始化或者完成的一部分被部署也不需要在inherent extrinsics强制使用),或者简单而言,通过交易费用限制。Weight系统费用的影响被包含在交易费用文件中
Substrate定义Weight单元为1picosecond的执行时间。10的12次方picosecond=1s,或者1000weight = 1nanosecond,在固定参考硬件上(Intel Core i7-7700K CPU with 64GB of RAM and an NVMe SSD)
基于参考硬件的基准测试使weight在运行时之间具有可比性,这让不同来源的软件原件有了组合性。为不同验证器硬件消耗调试运行时,你可以设置不同的最大的区块权重。例如,为了让验证人参与的速度只有参考机器速度的一半,最大块的weight应该设置为默认值的一半,保持默认的块时间
最大块weight应该等于目标块时间的三分之一,分配三分之一用于块构建、三分之一用于网络传播、三分之一用于导入和验证。将区块时间加倍会让最大区块weight加倍。这些调整选项给运行时开发者提供了一个方法,可以