共识算法说起

区块链系统首先是分布式系统,而一致性是分布式系统的基础问题,要保证系统满足不同程度的一致性,则就要用到共识算法。

现在主流的算法有POW、POS、DPOS等等,比特币采用的POW共识算法运行9年之久,已被证明稳定可靠,然而因为巨大的硬件和能源消耗而饱受诟病,特别是专用矿机,在被淘汰之后就变成了废铁。

POS和DPOS为了避免资源的浪费,直接采取抛弃计算的方式,通过持有证明和选举来进行共识,牺牲了一定准入性和去中心化。而比原链从另一个角度来切入和解决POW资源浪费的问题。

比原链共识算法Tensority设计思路

首先我们基于以下思路来设计共识算法:

  • 计算是一种权力,不能因为能源消耗而抛弃计算的方式,为了维持系统的稳定能源消耗是必要的,而且POW已经被证明稳定可靠,同时准入门槛低。(CPU、GPU、ASIC矿机皆可进入,同时也不需要持币或者选举)
  • 矿机功能单一是原罪,只能进行哈希运算造成矿机的极大浪费,如果能够将矿机功能多样化将更有利于发展。
  • 人工智能技术的迅猛发展,AI智能加速市场需求量增大。

为此我们设计了AI友好型的共识算法Tensority。矩阵乘运算与卷积运算是人工智能常用的两种算法,相比后者,前者的应用范围更广。

为了使得比原链共识算法对人工智能友好,同时兼容所有主流的AI加速设备,比原链在算法选型上采用了矩阵乘运算。算法确定之后需要选取参与运算的数据类型,选取的标准有二:

第一,选取的数据类型需目前所有主流AI加速设备都能支持。

第二,神经网络推理的主力数据类型均要支持。

综合来看,int8数据类型满足条件。

比特币POW共识算法回顾

在说到比原链的POW共识算法Tensority之前,我们回顾一下比特币的POW共识算法:

我们知道比特币的POW共识算法是通过不停的迭代计算区块头的哈希值,不断修改参数,直到哈希值匹配的过程。

比原链POW共识算法总览

那么让我们看一下比原链的共识算法总体过程:

整个Tensority算法过程中,区块头的哈希的选取和难度值的比较仍然作为头尾衔接的步骤,但是中间穿插了很多涉及到矩阵的运算过程,而这些运算在AI计算中比较常见,所以支持比原挖矿的矿机就有能力提高AI加速服务。

下面我们来进一步细化每个过程:

种子生成

我们在总览图中可以看到Tensority有两个输入,一个是和比特币相同的哈希头,另外一个就是种子seed,那么种子是怎么来的? 我们可以看到论文中对于种子的描述:种子是一个由一段时间内的区块历史决定的32位的字节数组。种子来自于每256块的第一个块的区块头,一般来说每256个块会更换一次seed,在256块以内都会使用相同的seed。

Cache Calculation

这个步骤主要使用种子通过一定的变换获得一个矩阵。我们首先通过一定次数的哈希将种子进行扩展,以满足Scrypt的输入要求,然后使用Scrypt函数生成一个32x1024x128的矩阵。值得注意的是,我们使用的Scrypt算法就是使用在莱特币中的算法。

Matrix Construction

该步骤会将上一步产生的矩阵变成一个更为规整的矩阵从而适合后续的处理,具体过程将会比较复杂,请参考论文。

Martix Operation

该步骤比较复杂,也是最有意思的步骤。采集的区块头哈希分割为四份,每份做一次哈希生成一个新的哈希值,新的哈希值的每一个比特作为Matrix Construction生成矩阵切片的索引值,从而切片获得一个矩形。经过上述步骤后将获得128个矩形,对这些矩形进行矩阵相乘最后得到一个矩阵。

Work Generation

这个步骤是输入上一步生成的矩形变成一个32位的哈希值,从而进行最后的难度比较。首先将256x256的矩形变形位256x64的矩形,然后通过FNV函数转换为一个32位哈希值。

我们将得到的哈希值和难度值做比较,看是否满足条件,这一轮的共识算法就结束了。

图解比原链Tensority算法:如何让POW做到人工智能友好的更多相关文章

  1. 比原链CTO James | Go语言成为区块链主流开发语言的四点理由

    11月24日,比原链CTO James参加了Go中国举办的Gopher Meetup杭州站活动,与来自阿里.网易的技术专家带来Kubernetes.区块链.日志采集.云原生等话题的分享.James向大 ...

  2. [区块链] 共识算法之争(PBFT,Raft,PoW,PoS,DPoS,Ripple)

    近几天对区块链中几种常见的共识机制(PBFT,Raft,PoW,PoS,DPoS,Ripple)进行了总结.尽量使用简单易懂语言,篇幅较大,想了解的可以只读每个算法介绍中前边的原理.本篇文章主要参考& ...

  3. 图解JVM垃圾内存回收算法

    图解JVM垃圾内存回收算法 这篇文章主要介绍了图解JVM垃圾内存回收算法,由于年轻代堆空间的垃圾回收会很频繁,因此其垃圾回收算法会更加重视回收效率,下面博主和大家来一起学习一下吧 前言 首先,我们要讲 ...

  4. 浅析Facebook LibraBFT与比原链Bystack BBFT共识

    如果说什么是区块链的灵魂,那一定是共识机制. 它是区块链的根基.无论公链或是联盟链,共识机制都从基础上限制了区块链的交易处理能力和扩展性. 2019年6月18日,Facebook 发布了自己 Libr ...

  5. 比原链设计思考: 扩展性UTXO模型

    用户模型是比原链在最初就需要确定的重要数据结构, 团队的选择还是聚焦在两种典型的模型系统中,Account模型和UTXO模型,和其他大多数区块链设计一样, 选择了模型就决定了协议层的重要实现,两种模型 ...

  6. [转帖][区块链]共识算法(POW,POS,DPOS,PBFT)介绍和心得

    [区块链]共识算法(POW,POS,DPOS,PBFT)介绍和心得 置顶 2017-03-12 18:31:19 乐扣老师lekkoliu 阅读数 127953  收藏 更多 分类专栏: 技术管理 区 ...

  7. 社区观点 | 理解比原链MOV链上交换协议

    去中心化交换协议的发展 从Bitshare,Stellar到以太坊上的Etherdelta,Bancor,0x协议,去中心化交换协议也经过了好几代发展和很多模式的探索,每一代都通过前面的协议的痛点来进 ...

  8. 比原链(Bytom)正式开源Bytom-JavaScript库

    12月13日,比原链(Bytom)正式开源Bytom-JavaScript库,这个库是官方原生支持的新一代JavaScript SDK接口.JavaScript是世界上最多人使用的解释性脚本语言,JS ...

  9. 社区观点 | 关于比原链MOV巡查官制度的几点思考

    在ChainNode白皮书解密读书会01期活动中,比原链高级研究员刘秋杉带领大家领读「MOV:下一代去中心跨链 Layer 2 价值交换协议」白皮书,得到了很多粉丝的关注,其中gentledog的读书 ...

随机推荐

  1. Django之模型的_meta属性

    Python有反射机制,Django也不例外,也有很好的反射机制,每个Django模型都有一个属性_meta,_meta也有属性和方法,这些属性和方法反射出了模型的一些特性,如果_meta用的好的话, ...

  2. Cordova总是弹出Connection to server was Unsuccessful

    开发环境:Cordova版本:6.x 安卓版本:6.0 解决方案一: 在config.xml中添加以下内容: <preference name="LoadUrlTimeoutValue ...

  3. 关于PowerShell调用Linq的一组实验

    Windows PowerShell 版权所有 (C) Microsoft Corporation.保留所有权利. 尝试新的跨平台 PowerShell https://aka.ms/pscore6 ...

  4. vue配置 less 全局变量

    在使用Vue开发的过程中,通常会用到一些样式的全局变量,如果在每个组件中引入就太繁琐了,维护性也不好,因此全局引入是个不错的想法.下面以less为例,记录一下全局引入less变量的步骤: 1.首先安装 ...

  5. UVA 10653.Prince and Princess

    题目 In an n * n chessboard, Prince and Princess plays a game. The squares in the chessboard are numbe ...

  6. 如何将elementUI 表格(el-table)和分页器(el-pagination)连接起来

    el-table表格的代码: <template> <el-table :data="tableData" style="width: 100%&quo ...

  7. 面试高频SpringMVC执行流程最优解(源码分析)

    文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star! 搜索关注微信公众号 码出Offer 领取各种学习资料! SpringMVC执行流程 SpringMVC概述 Spri ...

  8. 【线性表基础】基于线性表的简单算法【Java版】

    本文描述了基于线性表的简单算法及其代码[Java实现] 1-1 删除单链表中所有重复元素 // Example 1-1 删除单链表中所有重复元素 private static void removeR ...

  9. 【Laravel】为Eloquent 模型设置全局作用域和局部作用域进行查询

    全局作用域 所谓「全局作用域」,指的是预置过滤器在注册该「全局作用域」的模型类的所有查询中生效,不需要指定任何额外条件. 以 User 模型类为例,我们在系统中可能只想针对已经验证过邮箱的用户进行操作 ...

  10. Java-每日学习笔记(数据库与idea技巧)

    Java杂记-2020.07.28 简单记录下今天项目用到的东西还有技术公众号学到的一些知识点 Java事务 idea编码技巧 数据库快速插入100万条数据 Java实现sql回滚 Java事务 事务 ...