DAG blockchain (byteball)
转载参考自:
- https://www.jinse.com/bitcoin/116184.html
- https://www.jinse.com/blockchain/116175.html
- https://www.jinse.com/blockchain/68896.html
Byteball和Lota项目都采用了DAG(Directed Acyclic Graph)技术,DAG具有如下的性质:
- 1、DAG具有拓扑顺序,即DAG的所有节点可以转换为节点序列(线性化),使得每条边的起始节点位于终止节点之前,且该过程可以在线性复杂度条件下完成;
- 2、DAG中相互连通的节点可以进行排序,如果从节点u出发可到达节点v,则可称为u≤v
- 3、DAG具有唯一的传递闭包;
- 4、DAG具有唯一的传递规约,传递规约的边数最大不超过V−1条,V是DAG的节点数
- 5、DAG中给定两个节点,其最短路径和最长路径可以在线性时间内求解。
DAG常用来做任务的调度规划,比如Spark在做并行处理时使用DAG来任务规划,Git采用DAG来做版本管理。DAG在区块链上的应用可以参考 《DAG也许是真正的区块链3.0》,下面将对使用DAG作为区块链的Byteball原理进行详细的解析。
Byteball的区块链结构

Byteball区块链如上图所示,其基本组成为单元(unit),所有单元共同构成DAG。其中,单元G为创世交易,它与所有单元连通,且是从所有单元出发到达的终点。
父单元与子单元:从单元A出发可直接到达单元B,即单元A到单元B的路径长度为1,则单元B称为单元A的父单元,单元A称为单元B的子单元。
直接包含:如果单元A为单位B的子单元,则单元A直接包含或者验证了单元B。
间接包含:如果从单元A出发到达单元B的路径长度大于1,则单元A间接包含或者验证了单元B。
顶端单元:不具有任何子单元的单元,也可称为无子单元或未经验证的单元。
创世单元:由创世交易构成的单元,不具有任何父单元。
相比于Bitcoin中一对一的链式区块结构,Byteball中单元在发出时,可以同时包含多个父单元,因此可以容纳更多的交易并获得更快的确认。由于进入DAG的单元将被所有与其连通的单元直接或间接地验证,如果要修改该单元的内容,则需要相应地修改验证了它的所有单元。直观上来讲,将要修改的单元数量(归属于不同的用户)像滚雪球一样急速增加,从而使得修改无法实现,这也是DAG可以作为区块链的重要基础。
单元包括:
- 1、单元数据:数据以message的形式构成;
- 2、地址签名:输入所需的相应地址签名;
- 3、父单元:当前单元的父单元列表。
Byteball采用的交易模型是UTXO,即当前交易输出作为后续交易的输入。
Byteball中的共识:
在Byteball中,从任何一个顶端单元出发到达创世单元的最优路径称为候选主链(Candidate Mainchain)。最优路径通过选择最优父单元产生,选择策略用于保证整个网络的安全性。不同的候选主链会在某个单元位置交叉(最差的情况是在创世单元交叉),该交叉点称为稳定点(Stable Point)。对于所有候选主链,从稳定点到创世单元的路径完全相同,该路径称为稳定主链(Stable Mainchain)。稳定主链是一条确定的路径,从候选路径变为稳定主链是一个从不确定逐渐变成确定的过程。后续讨论中,如果没有明确区分,主链一般指的是候选主链。

给定一条主链,与之相关的所有单元均可以在此基础上进行排序,其序号称为主链序号(MCI, Main Chain Index)。创世单元的MCI为0,依次加1直到链尾。对于不在主链上的单元,其MCI等于主链上最先包含(直接或者间接)该单元的那个单元的MCI。MCI代表了从主链视角来看单元在DAG中的总序,对于发生冲突的双花交易,MCI较小的单元为有效单元。
最优父单元的选择策略
单元级别:由当前单元出发至创世单元的最长路径长度定义为单元级别(unit level)
见证级别:从当前单元开始沿主链回溯,并对路径中不同见证人进行计数(相同见证人只计数1次),当遇到的见证人数足够多时(超过大多数的已知见证人)停止回溯;然后计算停止位置的单元级别,将其称作当前单元的见证级别(witnessed level)。
最优父单元的选择策略由以下三部分组成:
- 1、在选择最优父单元时,见证级别最高的父单元为最优父单元;
- 2、如果见证级别相同,则单元级别最低的作为最优父单元;
- 3、如果两者都相同,则选择单元哈希值(base64编码)更小的作为最优父单元。
那么,从顶端单元出发,只需要递归地在其父单元中选取最优父单元即可形成主链。在上述选择策略中,见证人成为了某个单元看待历史的视角,每个单元可以维护自己的见证人列表,也可以通过witnesslistunit引用其它单元的见证人列表。
单元兼容:如果两个单元的见证人列表差别最多一项,则称这两个单元兼容
在选择最优父单元时,仅可以从与当前单元兼容的父单元中进行选择,以保证看待历史视角的连续性。不兼容的父单元仍然被承认,但是他们不能成为最优父单元。特别地,在发出新单元时,如果与所有顶端单元都不兼容,则应从上一级别的父单元中进行选择。
双花问题
在用户地址发出新单元时,要求相同地址发布的所有单元应当直接或间接包含该地址之前所有的单元,即相同地址的所有单元连通(有序或连续)。
双花交易:相同地址发出的任何无序的交易都视为双花交易,即使它们没有使用相同的输出,也可称为冲突交易或者矛盾交易。
因此,在相同地址的所有单元都连通的情况下,在路径上出现较早的交易为有效交易。如果有攻击者特意制造出双花交易,那么可以通过主链序号来解决,主链序号较小的交易为有效交易。

当前主链:在DAG中,从不同顶端单元出发具有不同的候选主链,从见证级别最高的顶端节点出发的候选主链称为当前主链(Current Mainchain)。

假设当前稳定点的见证人列表为W,单元级别为l,它只有一个子单元,如上图所示。以W作为见证人列表,从当前主链的顶端节点进行回溯,直到遇见W中的大部分见证人,记录这些见证人发出的单元中的最小见证级别,记作minwl。如果minwl>l,则扩展当前稳定点至其子单元,否则不进行扩展。由于大部分见证人已经在当前主链上了,后续这些见证人发布的单元将继续支持当前路径,从而使得稳定点可以向前扩展。

假设当前稳定点具有多个子单元,如上图所示。在当前稳定点的所有子单元中(除了位于当前主链的子单元),找出见证级别大于当前稳定点的子单元,并将其中最大的单元级别记为maxl。也就是说,除了当前主链外,当前稳定点其它分支上的单元见证级别将不超过maxl。如果minwl>maxl,那么稳定点可以沿当前主链向前扩展。
随着稳定点的不断前进,稳定主链及其相关单元的状态被最终确定下来。只要DAG中的单元相同,其形成的主链和稳定点也是相同的。因此,不同的用户节点,只要最终收到相同的单元,它们最终将达到一致的状态。
----------------------------------
关于见证人概念的访谈 —— 参考 https://www.aliyun.com/zixun/content/37_81_2032371.html
问:加密货币是关于软件和数学的“信任机器”,而不是依靠人和中间商。所谓的“见证人”在Byteball系统中扮演什么角色。
答:见证人是Byteball协议的一个特殊功能。由于DAG链没有完全安全可信的时间戳(或块号),因此网络对等节点需要确保按照定义的顺序生成的可靠的事务源。这防止了来自欺诈性分支(所谓的影子DAG)的交易被确认。另外,您可以鉴别双重支付(使用相同的硬币进行双倍付款)。 Byteball中有12个见证人,钱包中的默认设置目前是指由Byteball首席开发人员Tony(Anton Churyumoff)运营的12个见证人节点。由于空投仍在进行,托尼手中还有大量的Byteball币,这是可以接受的。但是,将来这些见证人将由更多不同的用户群来操作。这些用户显然是需要社区信任的。但目前时机还不成熟。
DAG blockchain (byteball)的更多相关文章
- 「About Blockchain(一)」达沃斯年会上的区块链
「About Blockchain(一)」 --达沃斯年会上的区块链 写在前面:1月23日到26日,在瑞士达沃斯召开了第48届世界经济论坛.这个新闻本没有引起我格外的关注,直到前两天张老师分享给我一篇 ...
- 有标号的DAG计数(FFT)
有标号的DAG计数系列 有标号的DAG计数I 题意 给定一正整数\(n\),对\(n\)个点有标号的有向无环图(可以不连通)进行计数,输出答案\(mod \ 10007\)的结果.\(n\le 500 ...
- (三)spark算子 分为3大类
ation算子通过sparkContext执行提交作业的runJob,触发rdd的DAG执行 (foreach) foreach(f) 会对rdd中的每个函数进行f操作,下面的f操作就是打印输出没有元 ...
- Spark学习(二)——RDD的设计与运行原理
Spark的核心是建立在统一的抽象RDD之上,使得Spark的各个组件可以无缝进行集成,在同一个应用程序中完成大数据计算任务.RDD的设计理念源自AMP实验室发表的论文<Resilient Di ...
- UVA - 10131Is Bigger Smarter?(DAG上的DP)
题目:UVA - 10131Is Bigger Smarter? (DAG) 题目大意:给出一群大象的体重和IQ.要求挑选最多的大象,组成一个序列.严格的体重递增,IQ递减的序列.输出最多的大象数目和 ...
- (转)区块链共识机制分析——论PoW,PoS,DPos和DAG的优缺点
近期,随着区块链技术在社区中的声音越来越大,业界已经开始从技术角度对区块链进行全方位的解读.作为第一批区块链技术的实现,传统比特币与以太坊在共识机制.存储机制.智能合约机制.跨链通讯机制等领域并没有非 ...
- 拓扑排序-有向无环图(DAG, Directed Acyclic Graph)
条件: 1.每个顶点出现且只出现一次. 2.若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面. 有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说. 一 ...
- DP入门(2)——DAG上的动态规划
有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础.很多问题都可以转化为DAG上的最长路.最短路或路径计数问题. 一.DAG模型 [嵌套矩形问题] 问题 ...
- 训练指南 UVALive - 3126(DAG最小路径覆盖)
layout: post title: 训练指南 UVALive - 3126(DAG最小路径覆盖) author: "luowentaoaa" catalog: true mat ...
随机推荐
- 51nod 1624 取余最短路(set)
题意: 佳佳有一个n*m的带权矩阵,她想从(1,1)出发走到(n,m)且只能往右往下移动,她能得到的娱乐值为所经过的位置的权的总和. 有一天,她被下了恶毒的诅咒,这个诅咒的作用是将她的娱乐值变为对p取 ...
- BZOJ 1562 变换序列(二分图匹配)
显然每个位置只有两个情况,所以用二分图最大匹配来求解. 如果二分图有完全匹配,则有解. 关键是如何求最小的字典序解. 实际上用匈牙利算法从后面开始找增广路,并优先匹配字典序小的即可. # includ ...
- shell的tr命令
tr,translate的简写,即翻译的意思.主要用来从标准输入中通过替换或删除操作进行字符转换.只接受标准输入,不接受文件参数. 命令语法: tr [–c/d/s/t] [SET1] [SET2] ...
- javascript的解析顺序
一.javascript的解析顺序 我们大家所理解的代码的执行顺序都是从上到下的,但是实际上确不是这样的.我们看一下下面的代码. 1 alert(a);2 var a = 1;如果执行顺序是从上到下的 ...
- 小Z的袜子 题解报告【莫队】
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只 ...
- 函数式编程(1)-高阶变成(2)-filter
filter Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的时,filter()把传入的函数依次作用于每个元素,然 ...
- NOIP2017 Day2 T2 宝藏(状压DP)
$O(n*3^n)$好难想...还有好多没见过的操作 令$f[i][j]$表示最深深度为i,点的状态为j的最小代价,每次枚举状态$S$后,计算$S$的补集里的每个点与S里的点的最小连边代价,再$O(3 ...
- 【CodeChef】ForbiddenSum
Portal --> CC ForbiddenSum Solution 场上想到了\(O(NM)\)的做法..然而并没有什么用 首先考虑比较简单的一个问题,给定一个数组\(A\),问这些数不能凑 ...
- Vue.js随笔三(npm init webpack my-project指令安装失败解决方案)
如果没有安装淘宝给的镜像就先安装一下,指令如下,对!就是如此简单: npm install -g cnpm -registry=https://registry.npm.taobao.org 首先输入 ...
- vue-router路由原理
Vue-router路由原理 目前实现路由的方式有两中,vue通过参数mode来设置,默认是hash模式. 利用URL中的hash(‘#’)来实现 利用History interface在HTML5中 ...