zoukankan      html  css  js  c++  java
  • 超矩链--基于矩阵的分布式账本

    Page 和 Generate Number

      超矩链采用了Bitcoin的Utxo模型,在超矩链中它的地址格式有所变化,整个地址由两部分组成:

      后面的部分是传统的Utxo地址即公钥的两次Hash结果,前面是该地址的遗传编号Generate Number,所谓遗传可以用下图解释:

      上面一个地址TxA产生了两个输出,虚线指向的是找零地址,实线指向的是接收方地址。0x0表示Tx是一个全新的地址,0x1表示Tx已经被在交易中使用过一次了。目前所有采用Utxo模型的区块链的分布式共识,实际上就是对Utxo的共识。只要能保证所有节点上的Utxo是完整的、正确的就能保证用户的数字资产。只是超矩链更改了账本组织形式。我们假设TxA是Genesis Transaction,现在整个账本中存在的utxo就可以用以下矩阵来表示:

      在当前共识也就是创世后的第 1轮共识中Utxo的分布状态,超矩链中将每一个轮的Utxo分布状态称之为Page ,每达成一轮共识都会产生一个Page,只要全网大部分记账节点能保证Page是一致的、正确的就可以保证用户资产的安全。

    共识机制

      为了解决当前公链的交易处理效率低的问题,超矩链采用了职责分割的机制,它将数据收集和记账两个部分分割开,提高整体的工作效率,避免不必要的消耗。目前,超矩链设立了16个Gate Server,这16个Server分布在世界不同的角落里,可以让世界各地的用户选择最近最快的Server来提交交易。Server之间不会去同步交易,它们只需要互相确认当前的共识轮数,和决定何时发起共识。

      共识的时机是当有10个服务器收集满了10000笔交易或超过了1min的超时设定,所有的服务器会将自己收集的交易向记账节点进行公布。记账节点是完全公共的节点,就像是Bitcoin中的全节点一样,任何人都可以随时的加入和退出网络。需要明确说明的是,收集交易和共识是异步的,当Gata Server释放了收集的交易后,不会等待记账节点完成共识,而是会立刻为下一轮共识去收集交易。

     

      如上图所示Keeper是记账节点,是要参与到分布式共识当中的,route是路由节点。假设每一个GataServer都按时公布收集的交易包,且网络畅通的情况下。每一个Keeper都会收到16个交易包,每一个包内都包含不同的交易(部分有可能重合),Keeper会根据交易包内的交易内容生成一个Update Cache

      如上所示,在第2轮共识中TxB发起了一笔到TxC的交易,同时指向TxB进行找零,此时的Update的矩阵表示如下:

      

      每一个更新包都会生成一个对应的Update矩阵,然后将Update矩阵和上一轮Page矩阵作为输入求导本轮的Page:

      具官方声称它会为每个页生成一个H值作为该页的特征值,当Keeper节点计算出H值后会广播,同时接收其他Keeper的H值。每一个Keeper会选择m个Keeper节点作为验证方(m由当前Keeper的数量决定,至少为10个),有超过半数以上的验证Keeper的H值相匹配则说明新的Page页有效,如果不匹配则扩大验证Keeper范围,再次验证,重复验证次数由当前Keeper数量决定。同时还生成该算法具有抗双花的功能,在同步H值的时候会将双花交易进行同步,Keeper节点会将双花的交易自动冻结,直到10轮共识以后。

    分片技术

      超矩链除了上面说的职则分割来实现异步共识外,还采用了分片共识技术。所谓的分片共识就是将一轮共识中的全部交易拆成多个片,每一个片由一部分节点来进行共识,最后再整合到一起。
      像上面提到的每一轮会产生16个交易包,每一个包就是一个分片,互相信任的keeper可以进行合作,每一个节点选择一个分片利用超矩链的共识算法进行计算,然后将产生的中间值Puzzle进行公布,同时也接收其他可信keeper的中间结果,最后利用Puzzle计算出一个完整的page。
      
      这样可以大幅度提升工作效率,同时也减少计算资源的浪费,随着后期的生态不断壮大,超矩链会释放Gate server的权限给公共节点,通过动态调整gateserver的个数来调整分片的数量,加大整体的吞吐量。
      另外,超矩链是不收手续费的,也没有共识激励机制,因为在实际的生产生活中零手续费更贴合现实,而基于超矩链构建业务的第三方服务平台自然会去维护账本的完整,无需激励。超矩链一次发行后不会增发,具体的数量和发放形式暂时没有给出。这有可能是在DAG之后又一种不同于区块链的技术。

    智能合约

      超矩链中转账不收手续费,但是委托执行智能合约是要收取手续费的,智能合约的发布采用托单的的模式,多个Keeper节点可以组成一个工作组(个人也可以组成一个工作组)。每个工作组可以根据对方发布的智能合约大小、支付的fee来决定是否运行。但选择并不是单方的,超矩链的AI会统计Keeper节点执行智能合约的历史记录进行信用评级,以供托单人进行参考,注意,一切风险损失由自己负责。

      智能合约的执行时长根据智能合约的内容和支付的fee来决定,同时有些合约的执行并不需要7x24小时不间断执行,用户在编写智能合约的时候可以指定在什么条件下挂起智能合约,比如Alice和Bob签订了一份贷款合同,合同要在三年后才会执行。两人以智能合约的方式实现这份合同,那这份合同真正的“执行”时间很短,只需要在发布日期的三年后才会使用到,它的挂起时间要远远大于执行时间。在智能合约挂起的时候不会放在虚拟机内部,而是会形成一个Smart Cache保存在Keeper节点,挂起时会在Keeper节点注册一个触发事件,当事件触发后立刻将Smart Cache加入虚拟机内执行。在挂起阶段内消耗的计算资源要小于执行阶段,相应的消耗的fee会小于执行。

     

       上面所说的只是Smart Cache的一个应用,在未来的远景中,可以设想像操作系统的内存调度一样,几个Keeper节点可以创建一片共享Cache,轮流对Cache进行读写,达到真正的分布式计算的目的。

  • 相关阅读:
    Codeforces 451A Game With Sticks
    POJ 3624 Charm Bracelet
    POJ 2127 Greatest Common Increasing Subsequence
    POJ 1458 Common Subsequence
    HDU 1087 Super Jumping! Jumping! Jumping!
    HDU 1698
    HDU 1754
    POJ 1724
    POJ 1201
    CSUOJ 1256
  • 原文地址:https://www.cnblogs.com/cnblogs-wangzhipeng/p/8400581.html
Copyright © 2011-2022 走看看