区块链:中山大学软件工程学院副院长郑子彬:区块链节点及共识可靠性可维护区块链稳定运行

12月26日,2021CCF中国区块链技术大会在海南海口举办,本次会议由中国计算机学会主办,中国计算机学会区块链专业委员会、海南大学承办,中科国鼎数据科学研究院协办。大会战略合作媒体巴比特现场报道。

中山大学软件工程学院副院长、区块链与智能金融研究中心主任、国家数字家庭工程技术研究中心副主任、IETFellow郑子彬发表题为《区块链可靠性研究》的主题演讲。他提出,区块链节点及共识的可靠性可维护区块链的稳定运行,智能合约的可靠性可以保障这个链上服务的正确进行,以及交易网络的可靠性可促进交易双方的互信。

以下为巴比特整理的演讲全文:

我汇报的题目是“区块链可靠性关键技术与挑战”。我们知道软件可靠性的定义是说软件产品在规定的条件下,在规定的时间区间内完成规定功能的能力。软件可靠性是一个比较传统的领域,它已经存在很多年。

随着这些年的发展,1983年电气与电子工程师协会给出了软件可靠性的定义。这个定义到今天为止仍然被广泛接受和应用。软件学这些年的发展,经历了几个阶段。

从最开始的单机软件,进行互联互通之后就变成了一个分布式的系统,发展到现在,区块链是一个特殊的分布式软件,主要跟传统分布式系统差别在于,其强调价值的传递。

从节点的角度来说,我们发现区块链的节点数量很多,比如说比特币有13000多个节点,它的网络动态性很强。从数据的角度来说,其数据的冗余程度很大。比特币有一万三千多个节点,在不同方面,相对的数据节点易构性也是不同的,从实用的角度来说,这个区块链价值网络复杂性比较大。

我们来对比一下从软件可靠性跟区块链可靠性的区别,首先在故障类型上面,区块链类型更加多样;在执行环境方面,区块链相对更加复杂;从提供服务方面,区块链可以通过智能合约、交易所等方式可以提供更加多种多样的服务。

从分析方法的角度来看,区块链的可靠性是比较新的一个领域,目前还没有形成相关的分析框架。但是,从最终软件系统出故障的角度,区块链的影响会涉及整个生态,影响范围更广、更大。

我们来看几个区块链软件可靠性真实的案例,比如在2019年9月30日,比特币的出块时间长达近两个小时,正常来说它应该是十分钟出一个块,这个现象相当于整个比特币软件系统暂停交易达到了两个多小时,这对一些交易来说产生了比较大的影响。

第二个案例是发生在以太坊上的,如果用户急需用钱又舍不得把以太坊卖掉的话,你可以把这个币抵押到上面获取美元,然后你再用美元去赎回你的币。暂时没有抵押的形式,因为币价波动比较大,但是当这个币价大跌的时候,它就有可能跌破抵押物的价值。

这时候就要对抵押物进行一个清仓拍卖,把它卖出去,否则跌得太快,卖的不及时就会产生一些不良交易。在2020年的3月12日当天,以太坊价格跌破了抵押物的阈值,所以需要进行拍卖。但由于当时没有及时知道现实世界中币价大跌,因此其拍卖不够及时从而错过时机,导致产生了超过四百万美元的不良债务。

下一个案例是以太坊EVM整型溢出的问题。在Solidicy合约中,将数据放入比它本身小的存储空间,将256这么一个数字把它存储到一个uint8的变量里时,它就会产生溢出,因为uint8只能存储0-255,256存进去它就变成零了。

在整型溢出的问题中,它就被人家利用,当时出现的情况是,A的账户会增加,但是当A账户减少的时候,因为它溢出了,所以减去了0,这就相当于A的账户没有减少,然后B的账户又一直在增加,整个代币大量的增发,币增发过量就导致用户对这个币失去信心了,价格不断下跌,所以抛售发生了,最后导致其市值跌至9亿美元,这个后果还是比较严重的。

可靠性的问题,我们团队在过去几年主要是围绕几个方面开展研究。

首先是节点和共识的一个可靠性。目前比特币的节点数已经超过了一万三千个,以太坊超过了二千七百个,我们的目标是研究在区块链节点中怎样高效并且可靠地达成共识。

因为它的数据需要进行同步,所以就会涉及到性能方面、可靠性方面的问题,围绕这个节点和共识的可靠性,我们团队在围绕性能监测和设计等方面开展了一些研究。第一个工作是基于日志节点性能监测,目前我们公司监测的领域里有各种各样不同的链,第三方的客观表现,能对这些区块链的性能,以及不同的节点做一个客观,公平公正的评估跟监测。

在这个工作中,我们提出了基于日志实时性能监测的框架,提出区块链交易多个分阶段性能的指标,比较细密度性能的指标,有利于对不同区块链性能做一个对比和分析。我们提出基于这个日志的方法,在性能损耗方面能够降低80%以上。

RPC接口大家都知道,每次接入RPC接口来获取一些性能数据时,它都会影响这个区块链本身的性能,还会耗费一定的CPO跟内存等来满足你的需求。因此我们不看好这种方式,为了评测它,反而对其性能造成一个损耗。并且测评结果也不准确,因此,我们就提出基于日志的方式来平衡这个影响。现在工作是基于强化学习工作数量的决策,因为传统的一些分工策略都是静态的,所以我们需要研究如何高效、安全地调整分配的数量,从而提升整个系统的分布率。

我们提出了一个框架,基于深度强化学习,能够动态地决定系统中分配的数量,并且通过一个共识,最终获得一个全局的分配策略,这个方法比起原来静态的分工策略,可以提升2.8倍的吞吐率,而且它具有更高的安全性。

同时,我们还研究了基于分布式探索的关键委员会调度的方法,提出了一个在线分布式随机探索的策略,以平衡交易的吞吐率与积累的时长,使得委员会的价值最大,这个方法能够有效的减少等待的时间,从而进一步提升系统的吞吐率。

此外,我们研究了跨方向的协议,因为这个不同方向的通讯会影响性能,所以需要提升跨方向交易的处理性能,为了优化跨方向的事情,我们提出了一个层级方向的模型。模型重叠了一个桥接方向,提高它的处理效率,最后实验对比了传统模型,这种层级方向的性能可以达到2.95倍。另一方面,这个解决方案是提出了用户状态动态调整策略实现分布性的负载均衡,基于这个状态划分的跨方向协议。提出的方法在系统的存储量、交易确认的延迟、工作的负载均衡等方面都能够优于传统的方案。

在2019年阿里巴巴的一个创新研究计划中,我们派出了8名学生到蚂蚁金服实习,花费31个月开发代码并应用到蚂蚁集团的区块链系统中,它最大可以提升45%的系统智能合约的存储量,双方已经合作申请了20余项专利。

第二部分是智能合约可靠性的一些研究,在工业上面以代码为代表的智能合约数量比较庞大,超过4000万个,有超过24万个用户部署了自己的合约,用户发起的交易超过了12亿次,合约内部的交易超过了26亿次,在多个国家中开源的数量不多,只有二三十万个合约,我们能够找到它们的源代码。近年来,智能合约开源的速度有所加快。

在智能合约的生态里面,它存在大量的欺诈行为,有异常有缺陷等等问题,所以需要跟它的可靠性开展一些相应的研究,围绕这一点,我们团队也做了一些初步的探索和研究工作。

第一个工作是基于定型符号执行的漏洞检测,传统的符号执行,会面临路径爆炸导致时间长,效率低的问题。我们利用CPU的多核能力进行符号执行,并且探索多个符号的路径,并且维护一个全局状态,以遍于帮助及时发现合约的漏洞。

我们把这个方法设计成一个插件,它能便捷地应用到主流的合约符号执行的工具中。同时在第三方的数据集以及16核的CPU中,可以把两个已有的工具的效率提升7-8倍的效果。另一方面,我们开展了基于学习方法的智能合约漏洞的检测,它的研究问题是如何设计高准确率的漏洞检测的模型,我们的解决方案是从现有的工具检测的结果,总结出了三类常见的假阳性的模式,从这些假阳性模式中提取特征,提出了基于代码所适用于的一种漏洞检测的模型。

最后提出的方法,可以把主流检测工具的假阳性从70%降低到20%以下,同时,围绕这个导向型技术,我们也优于加快智能合约的模糊测试,它的研究问题是如何定位,并且加速触发具有漏洞的持续路径,提高某个测试工具的检测效率。

首先,我们总结了七条漏洞必须具备的操作码,在某个测试的过程中,对这些操作码给予更加大的成效,给予更加主要的帮助,我们发现商业中小于5%的代码,能够真正触发漏洞,而成功触发漏洞的时间通过我们的方法可以平均减少7%,最高可以减少23%。

另外,我们还围绕智能合约上的庞氏局事件开展了一些研究,研究问题主要是我们如何要通过智能合约的机器,能够自动识别出它是不是一个局,解决方案是提出了一个机器学习的框架,从合约的账户资金流的特征就已经查出这些特征,以及我们对它的代码做了一个统计,提取了很多代码层面的特征,通过这两类特征叠加起来,我们庞氏局识别的算法可以达到90%以上的识别率。

通过我们的方法,发现了以太坊平台存在的400个真实的庞氏局。在智能合约特性方面,我们主要是研究如何挖掘相似的合约,提取它参与的代码,然后能为智能合约的版本更新提供支持。

比如两个合约很相似,A合约进行了更新,这时候我们就可以提醒B合约,是不是也需要做类似的更新,我们通过语义的相似度来分析这些相似的合约,提取他们的差异代码结合更新。同时,我们也围绕低效合约的编程模式进行了识别多样化,参考上面的执行合约是需要费用的,这时需要对这个智能合约的编程进行一个优化,来降低成本,我们总结了六种常见的低效编程的模式,然后提出了基于语法树优化的方法,我们发现超过一半以上的合约,至少包含了一种低效编程模式。

第三部分是交易网络的可靠性,这个区块链的功能是一个巨大的交易网络,由于交易量巨大,使其存在各种异常情况以及等一些非法的行为,影响了整个区块链的生态建设。

我们团队针对交易网络的可靠性也做了一些初步的探索跟研究,首先是电子账户的一个识别,这里的主要目标是能够通过一个算法自动化地把交易网络里面的账户给识别出来。

我们主要的解决思路是,基于复杂网络的建模,提出一种动态交易网络分析的框架,采用SVD分解方法分析交易网络的波动情况。进一步提升识别准确性,我们的方法可以达到准确率82%以上。围绕这方面我们还提出了另外一种方案,用来提取这个账户的特征,来进行钓鱼的识别。

这种方法可以加速我们的计算,因为不同账户之间的距离,都可以通过这个特征降量来进行计算,所以在这个钓鱼的一些交易数据及识别准确性可以达到90%以上,提升了12.8%,同时我们还用图形、网络来尝试做类似的一个问题,其好处是可以进一步的挖掘里面深层次的特征,能够达到更优识别的准确性。它的缺点就是绩效复杂度太高,交易网络太大,所以这个网络运行起来,效率仍然有待提升。

最后做个小结:

一、区块链节点及共识的可靠性可维护区块链的稳定运行;

二、智能合约的可靠性可以保障这个链上服务的正确进行;

三、交易网络的可靠性可促进交易双方的互信;

四、区块链可靠性成为引人关注的研究问题。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:15ms0-3:958ms