转载参考自:

  • 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)的更多相关文章

  1. 「About Blockchain(一)」达沃斯年会上的区块链

    「About Blockchain(一)」 --达沃斯年会上的区块链 写在前面:1月23日到26日,在瑞士达沃斯召开了第48届世界经济论坛.这个新闻本没有引起我格外的关注,直到前两天张老师分享给我一篇 ...

  2. 有标号的DAG计数(FFT)

    有标号的DAG计数系列 有标号的DAG计数I 题意 给定一正整数\(n\),对\(n\)个点有标号的有向无环图(可以不连通)进行计数,输出答案\(mod \ 10007\)的结果.\(n\le 500 ...

  3. (三)spark算子 分为3大类

    ation算子通过sparkContext执行提交作业的runJob,触发rdd的DAG执行 (foreach) foreach(f) 会对rdd中的每个函数进行f操作,下面的f操作就是打印输出没有元 ...

  4. Spark学习(二)——RDD的设计与运行原理

    Spark的核心是建立在统一的抽象RDD之上,使得Spark的各个组件可以无缝进行集成,在同一个应用程序中完成大数据计算任务.RDD的设计理念源自AMP实验室发表的论文<Resilient Di ...

  5. UVA - 10131Is Bigger Smarter?(DAG上的DP)

    题目:UVA - 10131Is Bigger Smarter? (DAG) 题目大意:给出一群大象的体重和IQ.要求挑选最多的大象,组成一个序列.严格的体重递增,IQ递减的序列.输出最多的大象数目和 ...

  6. (转)区块链共识机制分析——论PoW,PoS,DPos和DAG的优缺点

    近期,随着区块链技术在社区中的声音越来越大,业界已经开始从技术角度对区块链进行全方位的解读.作为第一批区块链技术的实现,传统比特币与以太坊在共识机制.存储机制.智能合约机制.跨链通讯机制等领域并没有非 ...

  7. 拓扑排序-有向无环图(DAG, Directed Acyclic Graph)

    条件: 1.每个顶点出现且只出现一次. 2.若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面. 有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说. 一 ...

  8. DP入门(2)——DAG上的动态规划

    有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础.很多问题都可以转化为DAG上的最长路.最短路或路径计数问题. 一.DAG模型 [嵌套矩形问题] 问题 ...

  9. 训练指南 UVALive - 3126(DAG最小路径覆盖)

    layout: post title: 训练指南 UVALive - 3126(DAG最小路径覆盖) author: "luowentaoaa" catalog: true mat ...

随机推荐

  1. ubuntu16.04上安装配置DHCP服务的详细过程

    DHCP服务器是为客户端机器分配IP地址的,所有分配的IP地址都保存在DHCP服务器的数据库中.为了在子网中实现DHCP分配IP地址,需要在目标主机上安装配置DHCP服务 1. 安装DHCP服务 安装 ...

  2. P2323 [HNOI2006]公路修建问题

    题目描述 输入输出格式 输入格式: 在实际评测时,将只会有m-1行公路 输出格式: 输入输出样例 输入样例#1: 4 2 5 1 2 6 5 1 3 3 1 2 3 9 4 2 4 6 1 输出样例# ...

  3. Shell脚本重启Python程序

    # restart.sh old_pid=$(ps ax|grep Service.py|grep -v grep|awk '{print $1}') echo "old_pid=${old ...

  4. Django路由分发

    1. 先自己手动在项目APP01以及APP02下面各有一个urls.py.当请求来了的时候,先到工程中的urls找路由分发,然后再转到各个App中. 现在总共有3个url 2. 工程中的urls如下: ...

  5. Listener 介绍

    当 web 应用在 web 容器中运行时,web 应用内部会不断地发生各种事件:如 web 应用启动.web 应用停止,用户 session 开始.用户 session 结束.用户请求到达等. 实际上 ...

  6. POJ 3260 完全背包+多重背包+思维

    传送门:https://vjudge.net/problem/20465/origin 题意:你有n种钞票,面值为c[i],数量为v[i],便利店老板有无数张面值为c[i]的钞票,问你买一个价值为T的 ...

  7. Leetcode 7. 整数反转(待整理)

    1.题目描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321  示例 2: 输入: -123 输出: -321 示例 3: 输入: ...

  8. bzoj 1053

    代码: //本题要求不超过n的因子最多的最小的数,我们知道因子的个数可以有素因子的指数得出,题目限制n是2e9,我们可以排除掉一些情况然后暴力 //对于一个数必然是因子越小他的因子数越多,所以枚举最小 ...

  9. CentOS7.2下安装mongoDB3.2.8

    最近在又在倒腾MongoDB,把安装配置的相关命令贴出来 1.下载 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70- ...

  10. centos6.5 mqtt安装

    CentOs 6.5 MQTT 安装部署 所需安装包: libwebsockets-v1.6-stable.tar.gz,mosquitto-1.4.8.tar.gz 1.安装依赖 # yum -y ...