APP下载

区块链与智能合约图谱分析

2019-03-17王继辉

网络空间安全 2019年11期
关键词:代码合约可视化

王继辉

(普华商业集团有限公司,北京 100020)

1 引言

从百度百科上可以看到,智能合约(Smart Contract)是由美国法律学者尼克·萨博在1995提出来的,他在几篇文章中提到了智能合约的理念与内涵,主要描述为:“一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议。”

从本质上说,智能合约是一种特殊的计算机程序,它具有能够根据事前设定的条约自动执行某些操作的能力。智能合约最早应用在以太坊的平台上,随后成为所有区块链平台的标配,被广泛应用在公链平台与联盟链平台中。

2 基于区块链的智能合约

2.1 传统智能合约发展的制约因素

智能合约出现初期重点是为了体现它的智能性,智能定义承诺以及协议,智能执行协议,对于如何保证合约智能与安全却没有考虑周全,主要表现为:怎么避免使用第三方的方式转账;怎么保证双方的合约不会被篡改。这两个课题会影响到智能合约能否拥有广泛的现实应用基础。

2.2 传统智能合约与区块链结合分析

区块链技术是一种集分布式数据存储、点对点传输、共识机制以及加密算法等计算机技术为一体的新型应用模式,区块链的出现帮助智能合约回答了其面临的两个课题。

首先,表现为区块链技术拥有去中心化特点,个体与个体之间进行信息交换无需第三方的存在就可以完成交易,可以解决传统智能合约担心第一个课题。

其次,区块链是通过密码学技术实现按照时间序列上链的数据具有不可篡改性,从而确保了智能合约中条约内容的可靠,同样解答了传统智能合约担心的第二个课题。

2.3 基于区块链的智能合约优势

区块链与智能合约的结合是一个完美组合,保证了区块链世界与现实世界的覆盖映射,这也是智能合约成为区块链标配的最重要原因。基于区块链的智能合约除了可以解答传统智能合约面临的两个课题,还可以让智能合约在具体应用上具有更多鲜明的优势效果。

首先,是智能合约可以保证自动化完成履约流程,高效便捷,避免人为的无谓干扰。因为智能合约本质上是一个自动执行的计算机程序,只要在智能合约中预设好业务规则以及触发的条件,那么程序就会自动按照约定完成履约并输出结果,期间不需要其他人工的确认与签字盖章。

其次,是智能合约变得更加的安全性。互联网如果是盾,黑客就是矛,黑客攻击与渗透在互联网上是非常普遍又让所有人头疼的事情,往往花费了巨额资金仍旧不能确保互联网系统的安全。而集成了区块链技术的智能合约本身具有高度的加密性与抗抵赖性,比特币从诞生到现在也没有被黑客攻击成功,充分说明了区块链技术本身的安全性。同时,区块链上所有的合约执行过程都被明明白白打包上链,分布式记录到区块链的分布式账本中,不会出现错误。

最后,是智能合约拥有更低的使用成本。传统依赖中介的业务模型中用户为了达成交易是必须给中间商或者中介一大笔作为手续费或者信息费。而通过智能合约,只需要支付少量节点确认费用,这样极大降低业务交易的费用成本。

3 技术应用的本质

一门技术从诞生到落地应用,都包含一系列推动技术发展的内因,易用性、实用性、灵活性与安全性四个方面是技术应用演化的最强支撑。

3.1 易用性

一门技术要想应用与推广,首先要降低用户学习新技术的难度,让用户觉得它比较容易上手使用,在使用的基础上逐渐增加对技术的应用与理解,区块链与智能合约技术的发展趋势也是如此。区块链在发展过程中也是一度出现参与人数太少的现象,大量的传统用户并没有直接转移到区块链业务与发展当中,区块链与智能合约技术入门门槛比较高是一个非常重要的原因,并且有很多用户想学习区块链也出现不知道如何下手的困境。所以说,技术要应用,就需要把它打磨为一个操作难度低的技术。

3.2 实用性

一门技术能够生存下来就必须有实用性,也就是要有被用户所使用的功能与服务,能够解答具体可以应用在哪个行业、哪种场合以及哪些人群。区块链技术能够被全球用户接受是源于它可以构建一个信任的机器,打通以前必须依赖信任才能完成的交易场合,智能合约作为区块链技术的一部分,可以实现信任可编程的效果。

3.3 灵活性

技术有实用性还是不够,还必须考虑到灵活性才能发展得更好。每一种场合、每一个人群面临的需求都是多元化并且多变的,固定的技术实现很难满足所有需求、覆盖所有的用户。技术在应用推进中,除了提供功能与服务,还必须包含它的灵活性,能够处理同一场景的多种情形,这也是技术发展的终极诉求之一,智能合约作为一种技术,除了要特定的区块链底层,还可以兼容更多的底层平台。

3.4 安全性

安全性与技术相伴而生,有技术的地方就有安全风险。技术在发展功能与服务的同时,还需要发展对应的安全技术,只有这样没有后顾之忧的技术才能拥有高速发展的可能。智能合约是一个为商务活动而构建的技术,发生在其上面的商业行为包括交易与数据,这两块对用户来说都是非常重要的。所以说,智能合约要发展就必须回答它是如何保证安全的。

4 智能合约的演化

智能合约本来是一个独立的信息技术,跟区块链技术结合后其智能特征得以充分发挥。区块链智能合约是一个从以太坊平台孵化出来的一个新事物,最近几年也有了很大发展,其演化轨迹并不会脱离技术应用的本质,主要呈现出多语言化、模板化、可形式化验证与合约类型多样化等特征。

4.1 多语言化

智能合约最早在以太坊区块链平台上应用,主要通过Solidity语言(尽管还有其他编程语言)来进行智能合约脚本开发,初期能够会Solidity语言的全球只有几百人,后来随着以太坊与区块链的火热,参与Solidity智能合约的人才开始逐渐增加,但是跟整个IT市场的从业人群比起来,会编写智能合约的人还是太少,大量的IT从业者要想开发智能合约只能去学习Solidity。为了让更多的IT从业者可以参与智能合约的编写与业务规则的实现,智能合约平台在原有Solidity的基础上扩展了对更多主流语言,甚至高级语言的支持,这样可以让多普通It从业人员也有了可以进行智能合约编写的可能性,大量熟悉Java、Go、Php等技术编程的开发人员都可以参与智能合约的开发,由此推动了区块链从业人群的增加。

4.2 合约模板化

智能合约在与行业进行结合时,初期都是以区块链项目的形式存在,随着区块链与智能合约发展的深度,应用区块链与智能合约的初始领域都主要集中在少量的几个场景上,比如溯源、存证、监管、积分、供应链、协同、数据共享等,区块链参与企业发现他们写的智能合约都非常类似,然后经历项目实战后剩余大量智能合约代码,这些代码经过简单的删减与加工就变成了一系列合约化的模板。智能合约模板化,可以实现常见智能合约代码都可以从模板库中直接提取,这样就大大降低了实际编写智能合约的难度。

4.3 可形式化验证

智能合约的编写是按照现有业务规则来进行逻辑书写,但是智能合约的编写目的是为了行业应用,一旦应用到实际中必须考虑智能合约的安全性,智能合约要达到机器可信,就必须首先排除掉因人为因素而造成的智能合约破坏情形。智能合约形式化验证提供了一种可以证明的安全检验机制,可以把市场上已经出现的安全风险进行排查与审计,经过审计后的智能合约代码自然安全性就得到增强,同时智能合约形式化验证也是目前对智能合约进行安全保证最可靠的措施。行业应用区块链与智能合约,就需要进行智能合约的形式化验证,消除安全隐患。

4.4 合约类型多样化

以太坊平台推动了Token合约编程的进程,随着行业深入发展,智能合约也从单一合约类型向复杂合约类型方向转移,智能合约的类型从单一的Token合约往数据型合约、功能型合约等方向转移。早期在CSDN区块链开发者大会上有专家专门提到这一点,说明这一趋势是基本认同的,如图1所示为智能合约的类型。

5 智能合约的发展趋势

5.1 智能合约的趋势特征

智能合约与区块链的有效结合帮助智能合约把其智能特性充分发挥出来,但是由于智能合约本身是一项信息技术,那么它的发展也不会脱离技术应用的演化规律,在趋势上主要表现为:面向服务化、合约可视化、安全前置化以及合约通用化四个维度。

图1 智能合约类型

5.1.1 面向服务化

智能合约是为了实现机器可信而存在的,从零开始编写智能合约脚本是费时费力的,而且只有专门的技术人员才可以完成,其对人员与编程语言的依赖性特别强,智能合约模板化技术的出现在一定程度上提高了智能合约的编写效率,降低智能合约出错的风险。一个技术能否得以发挥价值就看它与行业或场景结合的紧密程度,有多少个行业或者有多少个场景会利用这个技术就决定了这项技术能走多远,现实世界面对的是一系列的商业活动,而这些商业活动往往由一系列的服务商来提供,智能合约的趋势也必然会往服务化方向演化,支持不同的服务商从服务视角出发,把底层的不易理解的脚本型代码转化为可以一系列理解的服务与组件,然后根据业务需要进行组件与服务的封装,这样就可以快速用智能合约去表达现实的一个业务场景或者业务活动,同时也可以让智能合约本身更容易被行业所熟知与接受,打破区块链很好但是行业不知道怎么去进行结合的怪圈。

智能合约服务化存在一个认知上的误区,智能合约服务化不是简单的给模板化的智能合约起一个好听的服务名字,而是必须要按照标准服务与组件的规格形式统一的接口、输入与输出,让不同服务可以实现相互的调用以及服务能力可更新,很类似技术语言中提到的面向过程与面向对象的思想区别。

5.1.2 合约可视化

程序代码是开发人员的活动领域,业务人员或者企业管理者往往无法直接参与其中,只能以业务需求的迂回形式提交给开发人员或者技术部门进行具体实现。智能合约本身是一种由特定编程语言表达的程序代码片段,还必须依赖响应的虚拟机VM的解析执行才能直观的理解智能合约的真实逻辑,这种只有专业的技术人员才能看懂而熟悉业务规则的业务人员却无法直接参与的情形其实并不利于区块链与智能合约的发展与应用。主要是因为大量需要智能合约改造的业务、场景与机构,他们只能选择排队等着区块链技术人员或者从业公司来提供区块链服务,这样就无法调动与发挥行业中自有的业务规则专家优势。合约可视化能力的存在就可以让业务专家可以按照自身的实际进行智能合约的设定、流程优化,从而更容易做成适合当前公司、当前业务与场景的智能合约,充分体现了智能合约的个性化与因地制宜特性。拥有了可视化的智能合约,就能够调动业务与行业进行区块链的进一步融合,推动智能合约技术的进一步发展,同时也实现底层技术研发公司与行业应用的解耦,可以极大提升了企业与行业区块链改造的进程。

5.1.3 安全前置化

智能合约除了书写代码的限制,在实际应用上还必须考虑安全,往往开发人员编写完成的智能合约并不能直接用于生产环境,原因是智能合约是一种受限编程下形式的结果,代码往往会存在不可预知的风险漏洞,这种漏洞一旦与用户的价值资产关联,智能合约就不能随便上链与发布,一旦发布智能合约,当前合约就不能撤回,只能通过硬分叉的方式来解决。智能合约形式化验证与代码检查是一种人工与机器结合验证的方式,可以解决对大部分已经出现的漏洞风险进行探查与确认,从而可以避免编写的智能合约中存在常见漏洞风险。

在传统状态下,智能合约的形式化验证与审计成本很高的,平均每100行智能合约代码就需要支付上万元的安全审计费用,如果业务或者行业需要大规模合约编写与应用就必须支付高额的成本,这样是不利于行业的发展,有的企业会可能会因为安全成本过高又走回到传统技术的老路上。通过合约安全前置,让智能合约不能直接编程,而是由特定工具来生成的,用户只表达需求,而且生成的智能合约本身就包含安全检查机制,可以让生成的智能合约代码就有安全检查机制,可以有效降低安全费用与企业运用区块链的成本,加速区块链与智能合约的落地应用。

5.1.4 合约通用化

服务化与组件化主要是在一个区块链底层实现的标准化工作,跨平台性是程序语言的一个发展方向,是要求智能合约能够跨越不同的区块链底层,并且在其上进行运行,即实现一处编写,到处运行。智能合约服务化已经让智能合约根据业务需要而灵活调整,无法从一个区块链平台走到其他区块链平台,不同区块链平台都被孤岛所控制,导致智能合约无法实现大规模的重用与共享,还必须借助技术人员进行翻译与合约映射工作,增加了智能合约落地的困难度,就好比某某企业特别喜欢一个用Php编写的程序,但是其公司的员工都是Java技术人员,还必须一个翻译才可以,要不然没法进行专业的维护与支持。合约通用化主要建立独立于当前底层的程序与合约,让合约具有通用性,也是未来的一个重要发展趋势。

5.2 形式化智能合约技术

形式化智能合约技术是一种智能合约可视化增强技术,由普华集团提出并启动研发,是一种构建在区块链底层之上的面向服务的智能合约技术。形式化智能合约由可视化视图、模板与库、指令规则集、视图转化器、指令编译器等内容组成,可视化视图是业务规则与数据定义的主要载体,模板是标准业务规则的主要载体,库是业务规则的抽象实现指代,指令规则集是用于定义业务规则的逻辑与数据关系,视图转化器是用于实现代码与视图同步显示,指令编译器是用于根据业务规则定义来生成具体的智能合约代码。它允许用户通过类网页表单的可视化界面来完成智能合约规则的可视化定义,然后在视图转化器的作用下可视化定义会自动生成一个包含视图定义以及规则定义的特殊代码,再通过指令编译器把这个特殊代码翻译成可以满足具体区块链底层平台需要的智能合约代码,也允许用户使用视图转化器解析这个特殊代码并以视图形式展现出来,如图2所示为形式化智能合约模块图。

形式化智能合约通过可视化视图接口让普通业务人员编写智能合约成为可能。传统的区块链体系下,编写智能合约的人员一般是区块链从业人员或者特定的技术群体,那些懂得业务逻辑,但是不懂技术的业务人员是无法直接参与到智能合约的编写分工当中,很大程度上业务人员只是业务配合。形式化智能合约可以让智能合约的编写不再是技术人员的特有专利。

形式化智能合约提供了一种面向服务定义智能合约的能力。传统的智能合约编写都是在脚本编辑器下逐行书写智能合约代码,看到的全是面向过程的开发模式,无法让智能合约编写人员可以从业务整体角度去思考业务规则如何编写,而是一下子调用具体细节的编码当中,无法从全局角度去思考一个智能合约如何进行规划与设计,容易出现考虑问题不周全的现象。

形式化智能合约提供一种能够兼容所有区块链平台智能合约的方式,可以实现智能合约在区块链平台上的统一。通过形式化智能合约编写的智能合约既可以运行在ETH,也可以运行在EOS,本身并不需要修改代码,只要在编译时选择支持智能合约的区块链底层是谁即可,对于需要迁移智能合约的用户需求,将变得非常容易。

图2 形式化智能合约模块图

形式化智能合约提供了一种业务开放能力,能够最大限度地兼容各种复杂的应用场景。业务模板与业务规则库是一个可以自定义或扩展的体系,通过编写业务模板可以实现快速完成一个业务型智能合约的编写,通过规则库可以简化智能合约代码,让智能合约的实现细节转移到指令编译器中去完成,方便了用户书写与管理智能合约的难度,又让智能合约的能力具有很强的业务开放性,可以满足迎合不同应用场景的需要。

形式化智能合约降低因智能合约审计带来的成本压力与审计风险。形式化智能合约是一系列的指令集与数据构成特殊代码,这些代码的生成是收缩在特定的视图条件下,不是自由编程,所以这块代码使用的业务规则与实现本身是进行过安全检查,并且形成具体智能合约的过程也是进行安全转化的过程。在形式化智能合约体系下,去安全审计是一个发展趋势,从而可以有效降低因为智能合约安全审计而产生的费用问题。

5.3 形式化智能合约的应用场景分析

传统的抽奖系统存在很大的信息不公开透明性,很多组织者往往会因为利益的考虑而虚构中奖者与中奖信息,结果既辜负了广大用户的信任,又给组织者带来品牌的伤害,基于区块链的抽奖系统就可以很好地解决这一问题,目前一些比较先觉的区块链厂商已经开始尝试做类似的业务。

现阶段开发区块链版的抽奖,有机构做成一个网页表单,用户可以按照他们的预设字段来填写(比如奖品信息、数量等),然后提交就生成一个新的智能合约,对用户来说简单,但是用户没有修改权,只有创建权,导致抽奖系统不能体现用户的差异化功能需求与个性化显示考虑,比较死板;还有机构,直接提供一个以前开发的Solidity的抽奖代码,可以直接在那上面修改,然后再生成一个新的合约进行发布,并且只适用于以太坊等特定的区块链网络环境,没有考虑通用性。

形式化智能合约实现抽奖逻辑与上面的方式有很大的不同:允许用户通过可视化界面选择要创建的合约类型,选择拖拽自己需要的组件,定义自己需要的字段与信息格式,关联中奖算法库,最后一步生成具体的形式化智能合约代码,选择不同的平台就可以把形式化智能合约代码翻译为具体区块链平台的合约代码,这个合约代码是自动进行安全审计并且按照标准范式进行生成,有很好的安全性,最后选择发布到具体区块链网络,此时智能合约就创建完成,如果想推送到其他区块链网络,只要更换一下发布的区块链网络即可。对于形式化智能合约的应用方式,可以帮助用户更加个性化与可视化的创建抽奖智能合约,又可以灵活选择要发布的目标区块链网络,对于生成的代码又自动进行安全审计控制,具备简单、灵活、安全、应用广泛等特点,是未来更有潜力的一个技术实现方式。

6 结束语

最近3年是区块链底层技术推陈出新的重要时期,国内外技术研发机构大量涌现,上链技术与数字身份技术发展迅速,2020年智能合约必将迎来它快速发展的阶段,形式化智能合约技术作为智能合约中的亮点技术,必将迎合发展趋势,成为行业大力研究与发展的重要趋势。形式化智能合约技术可以塑造一个全新的应用场景群,通过可视化能力、组件与库等多种能力,通过形式化智能合约未来将能够模拟静态站点和动态站点的业务逻辑,从而可以改变原有的互联网信息组织模式,可以让很多网站因为形式化智能合约的引入而自动变为一个区块链网站。

猜你喜欢

代码合约可视化
自然资源可视化决策系统
思维可视化
基于知识图谱的我国短道速滑研究可视化分析
复变函数级数展开的可视化实验教学
复变函数级数展开的可视化实验教学
神秘的代码
一周机构净增(减)仓股前20名
一行代码玩完19亿元卫星
近期连续上涨7天以上的股