什么是比原链Tensority算法

当前位置:首页 > 币圈百科 > 什么是比原链Tensority算法

什么是比原链Tensority算法

2022-11-22币圈百科194

张量算法是原链发布的新POW一致性算法。它将矩阵和张量计算集成到一致性算法过程中,使矿机可以用于AI加速。在整个张量算法过程中,块头hash的选取和难度值的比较仍然是头尾相连的步骤,但是中间穿插了很多矩阵相关的操作,这些操作在AI计算中是常见的,所以支持矿机相对于原矿机可以提高AI加速服务。

与原有的链张量算法相比,

张量算法可以通过难度值来调整计算的难度。

张量算法在算法过程中穿插了矩阵生成、矩阵变换、矩阵乘法等运算。

矿机可以用来加速AI的服务,从而提高矿机的资源利用率。

算法流程

张量算法一般分为以下步骤:

生成种子

生成缓存

构造矩阵列表

矩阵乘法运算

工作负载生成

什么是比原链Tensority算法

[x种子每256块变化一次。块0 ~ 256(这里有257个块)使用块0的块头hash,块257 ~ 512使用块256的块头hash,块513 ~ 768使用块512,以此类推。

生成缓存

缓存是由种子生成的,种子和缓存是对应的,所以缓存的生成周期和种子是一样的。缓存的作用是填充256个矩阵的列表。因为每个矩阵有256行和列,每个元素都是长度为一个字节的整数数据int8,所以缓存的大小是256x256x1b=1677216b=16mb。使用Scrypt算法生成缓存,Scrypt算法在计算过程中会生成相应的伪随机数集,作为蓑衣网小编2022缓存值。由于Scrypt算法的特点,需要输入一个128字节的种子作为输入值。所以首先需要对2.1中得到的32字节种子值进行扩展,得到一个128字节的扩展种子extseed。之后extseed在Scrypt中的smix进程中循环128次,将128次产生的随机数集连接起来形成缓存。算法如下:算法calcseedcache。

算法:calcSeedCache -输入:seed输出:cache - 1?初始化?外部?=?3,scryptround?=?128;2?extseed?=?种子;3?tmphash?=?种子;4?为了什么?我?=?1;我?=?外部的;我?do5?tmphash?=?sha 256(tmphash);6?extseed?=?追加(extseed,tmphash);7?end8?缓存?=?null9?tmpv?=?null10?为了什么?j?=?1;j?=?scryptround?j?do11?tmpv?=?Scrypt.smix(extseed,tmpv);12?缓存?=?追加(缓存,tmpv);13?end14?回归?cache——每组中32个元素为一个单元,这样就可以得到一个规格为321024128的缓存矩阵列表tmpmatrix,每个元素为uint32。recomposedmatrix列表与tmpmatrix具有相同的规范。tmpmatrix中奇数索引的元素值对应于recomposedmatrix中的元素1到512。类似地,tmpmatrix中even index的元素值对应于recomposedmatrix中的元素513到1024。之后转换成规格为256X256X256的矩阵列表cachematrix,每个矩阵元素为int8的一个字节。算法如下:算法构造CacheMatrix。

算法:构造缓存矩阵-输入:cacheOutput:cachematrix - 1?初始化?dim1?=?32;dim2?=?1024;dim3蓑衣网小编2022?=?128;暗淡?=?256;2?tmpmatrix?=?矩阵(缓存,dim1,dim2,dim 3);3?composedmatrix?=?NewMatrix(dim1,dim2,dim 3);4?cachematrix?=?NewMatrix(dim,黯然,dim);5?重组矩阵[:][1:dim 2/2][:]?=?tmpmatrix[:][all?奇怪吗?index][:];6?重组矩阵[:][dim 2/2 1:dim 2][:]?=?tmpmatrix[:][all?甚至?index][:];7?cachematrix?=?float 64(Matrix(int 8 array(重组矩阵),黯然,黯然,dim)));8?回归?缓存矩阵-

矩阵乘操作

矩阵乘之前需要生成矩阵乘的索引,将区块头哈希值分成四组,之后将每一组进行哈希运算,得到32字节的哈希值。每个字节的值正好取值为0至255,对应着256个矩阵。矩阵相乘的过程中将每个矩阵元素由int8类型转化为int32类型。相乘的中间结果是int32类型,这个时候可以将int32数值的低位两个字节相加取模256,得到一个新的值,这就完成了32位转8位的操作。两个矩阵乘相乘遵从线性代数的运算法则,左矩阵与右矩阵的转置矩阵相乘。具体算法如算法构造哈希矩阵。

算法:构造哈希矩阵-输入:cachematrix,headerhashOutput:hashmatrix - 1?初始化?drawround?=?4;mulround?=?2;暗淡?=?256;2?hashmatrix?=?矩阵(黯然,黯然);3?drawmatrix?=?矩阵(headerhash,画图?sizeof(头哈希)/draw round);4?为了什么?我?=?1;我?=?drawround?我?do5?马?=?我;6?mc?=?矩阵(黯然,黯然);7?序列?=?sha 256(绘制矩阵[I]);8?为了什么?j?=?1;j?=?mulround?j?do9??为了什么?k?=?1;k?=?sizeof(序列);k?do10??指数?=?uint 8(sequence[k])1;11?mb?=?src矩阵[索引][:][:];12?mc?=?马?*?mb .t();13?为了什么?元素??mc?do14???元素?=?float 64(将32压缩为8(int 32(element)));15?end16??马?=?mc17??end18?end19?为了什么?划?=?1;划?=?暗淡;划?do20??为了什么?科尔?=?1;科尔?=?暗淡;科尔?do21??i32vhashmatrix?=?int 32(hash matrix[row][col]);22?i32vma?=?int 32(ma[row][col]);23?i8v?=?int 8(i32v哈希矩阵i32v ma);24?hashmatrix[row][col]?=?浮动64(i8v);25?end26?end27?end28?回归?哈希矩阵-

工作量生成

为了提高计算效率,生成工作量时使用FNV算法简化矩阵。因为FNV函数的特性,需要将四个元素合并组成一个uint32类型的数字,组成新的256X64的矩阵mat32,然后进行FNV简化操作。之后将简化的结果进行哈希运算。具体算法如算法?二进制转发FNV .

算法:二进制?转发?FNV -输入:垫子32输出:hash - 1?初始化?dim1?=?256;dim2?=?64;2?为了什么?k?=?dim1?k?1;k?=?k/2?do3?为了什么?我?=?1;我?=?k;我?do4??为了什么?j?=?1;j?=?dim2?j?do5??mat32[i][j]?=?FNV(mat32[i][j],mat 32[I k][j]);6?end7?end8?end9?哈希?=?sha 256(ToByteArray(mat 32[0][:]);10?回归?哈希;-

工作量验证

将2.5得到的哈希值与区块要求的难度值相比较,小于规定值则说明挖矿成功,否则更换随机数重新生成区块头,开始新的计算

随机性分析

可以参考张量性算法白皮书十.

什么是比原链Tensority算法 | 分享给朋友: