CN110727948B - 智能合约审计方法、装置、计算机设备及存储介质 - Google Patents

智能合约审计方法、装置、计算机设备及存储介质 Download PDF

Info

Publication number
CN110727948B
CN110727948B CN201910961984.2A CN201910961984A CN110727948B CN 110727948 B CN110727948 B CN 110727948B CN 201910961984 A CN201910961984 A CN 201910961984A CN 110727948 B CN110727948 B CN 110727948B
Authority
CN
China
Prior art keywords
intelligent contract
auditing
result
scanning
source code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910961984.2A
Other languages
English (en)
Other versions
CN110727948A (zh
Inventor
尚进
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201910961984.2A priority Critical patent/CN110727948B/zh
Publication of CN110727948A publication Critical patent/CN110727948A/zh
Application granted granted Critical
Publication of CN110727948B publication Critical patent/CN110727948B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/034Test or assess a computer or a system

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本申请是关于一种智能合约审计方法、装置、计算机设备及存储介质,涉及网络安全技术领域。该方法包括:服务器通过接收编辑终端上传的智能合约的源代码,获取智能合约的审计参数,根据编译参数对智能合约的源代码进行编译,在对智能合约的源代码编译成功后,根据扫描参数对智能合约进行安全问题扫描,获得扫描审计结果,将扫描审计结果返回给编辑终端;本方案通过在服务器侧获取智能合约的编译参数和扫描参数,并根据获取到的编译参数和扫描参数对智能合约的源代码进行编译以及安全问题的扫描,实现了在服务器端对智能合约的安全问题的扫描,能够有效减少智能合约的安全隐患,从而提高智能合约的审计效果。

Description

智能合约审计方法、装置、计算机设备及存储介质
技术领域
本申请涉及网络安全技术领域,特别是涉及一种智能合约审计方法、装置、计算机设备及存储介质。
背景技术
智能合约主要是运行在以太网上的代码,代码被编译器编译后放在区块链上运行,当一个预先编好的条件被触发时,智能合约执行相应的合同条款。由于区块链的特性,发布的智能合约无法删除和修改,所以智能合约的审计过程就尤为重要。
在相关技术中,对智能合约的审计通常借助于运行在终端侧的审计工具来实现,例如,智能合约的编辑者通过编辑终端中的编辑工具编辑完一份智能合约之后,通过审计工具对智能合约的源代码进行错误扫描。
然而,受限于终端的处理性能,编辑终端的审计工具通常只支持对语法错误等简单错误的扫描,并不支持对安全问题的扫描,导致智能合约容易出现安全隐患,从而导致智能合约的审计效果较差。
发明内容
本申请实施例提供了一种智能合约审计方法、装置、计算机设备及存储介质,可以提高智能合约的审计效果,技术方案如下:
一方面,提供了一种智能合约审计方法,所述方法由服务器执行,所述方法包括:
接收编辑终端上传的智能合约的源代码,所述智能合约是用于在区块链中运行的合约程序;
获取所述智能合约的审计参数,所述审计参数包括编译参数和扫描参数;
根据所述编译参数对所述智能合约的源代码进行编译;
在对所述智能合约的源代码编译成功后,根据所述扫描参数对所述智能合约进行安全问题扫描,获得扫描审计结果;
将所述扫描审计结果返回给所述编辑终端。
一方面,提供了一种智能合约审计方法,所述方法由编辑终端执行,所述方法包括:
接收在编辑界面中编辑的智能合约的源代码;
按照静态规则匹配的方式对所述智能合约的源代码的安全问题进行静态扫描,获得编写审计结果;
当所述编写审计结果指示所述智能合约的源代码不存在安全问题时,将所述智能合约的源代码上传给服务器;
接收所述服务器返回的,对所述智能合约的源代码进行安全问题扫描的审计结果;
展示所述服务器返回的审计结果。
一方面,提供了一种智能合约审计装置,用于服务器中,该装置包括:
第一接收模块,用于接收编辑终端上传的智能合约的源代码,所述智能合约是用于在区块链中运行的合约程序;
参数获取模块,用于获取所述智能合约的审计参数,所述审计参数包括编译参数和扫描参数;
编译模块,用于根据所述编译参数对所述智能合约的源代码进行编译;
第一结果获取模块,用于在对所述智能合约的源代码编译成功后,根据所述扫描参数对所述智能合约进行安全问题扫描,获得扫描审计结果;
第一结果返回模块,用于将所述扫描审计结果返回给所述编辑终端。
在一种可能的实现方式中,所述装置还包括:
信息获取模块,用于在对所述智能合约的源代码编译失败后,获取所述智能合约的源代码的编译错误信息;
信息筛选模块,用于从所述编译错误信息中筛选安全问题对应的错误信息;
第二结果获取模块,用于根据筛选结果获取编译审计结果;
第二结果返回模块,用于将所述编译审计结果返回给所述编辑终端。
在一种可能的实现方式中,所述装置还包括:
合约发送模块,用于当所述扫描审计结果指示所述智能合约的源代码不存在安全问题时,将所述智能合约发送给审核终端;
第三结果获取模块,用于接收所述人工审核终端返回的人工审计结果,所述人工审计结果是对所述智能合约进行人工安全问题审核获得的结果;
第三结果返回模块,用于将所述人工审计结果返回给所述编辑终端。
在一种可能的实现方式中,所述装置还包括:
合约发布模块,用于若所述人工审计结果指示所述智能合约的源代码不存在安全问题,则将所述智能合约发布至区块链中。
在一种可能的实现方式中,所述第一结果获取模块,包括:
第一扫描结果获取子模块,用于在对所述智能合约的源代码编译成功后,根据所述扫描参数,按照静态规则匹配的方式对所述智能合约的源代码的安全问题进行静态扫描,获得第一扫描结果;
第二扫描结果获取子模块,用于根据所述扫描参数,按照约束求解的方式对所述智能合约的源代码的安全问题进行动态扫描,获得第二扫描结果;
第一结果获取子模块,用于根据所述第一扫描结果和所述第二扫描结果获取所述扫描审计结果。
在一种可能的实现方式中,所述参数获取模块,包括:
参数接收子模块,用于接收所述编辑终端上传的所述审计参数;
或者,
参数获取子模块,用于根据所述智能合约的合约格式获取所述审计参数。
在一种可能的实现方式中,所述编译参数包括被所述智能合约引用的其它合约的存储地址,以及,编译器的版本号中的至少一种;
所述扫描参数包括:扫描时间和扫描次数中的至少一种。
一方面,提供了一种智能合约审计装置,用于编辑终端中,该装置包括:
第二接收模块,用于接收在编辑界面中编辑的智能合约的源代码;
第四结果获取模块,用于按照静态规则匹配的方式对所述智能合约的源代码的安全问题进行静态扫描,获得编写审计结果;
源代码上传模块,用于当所述编写审计结果指示所述智能合约的源代码不存在安全问题时,将所述智能合约的源代码上传给服务器;
结果接收模块,用于接收所述服务器返回的,对所述智能合约的源代码进行安全问题扫描的审计结果;
结果展示模块,用于展示所述服务器返回的审计结果。
在一种可能的实现方式中,所述审计结果包括扫描审计结果、编译审计结果以及人工审计结果中的至少一种;
所述扫描审计结果是所述服务器对所述智能合约的源代码编译成功后,对所述智能合约进行安全问题扫描获得的审计结果;
所述编译审计结果是所述服务器对所述智能合约的源代码编译失败后,从所述编译错误信息中筛选安全问题对应的错误信息,并根据筛选结果获取的审计结果;
所述人工审计结果是所述扫描审计结果指示所述智能合约的源代码不存在安全问题时,对所述智能合约进行人工安全问题审核获得的结果。
一方面,提供了一种计算机设备,该计算机设备包含处理器和存储器,存储器中存储由至少一条指令、至少一段程序、代码集或指令集,至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现上述任一可选实现方式所述的智能合约审计方法。
一方面,提供了一种计算机可读存储介质,该存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现上述任一可选实现方式所述的智能合约审计方法。
本申请提供的技术方案可以包括以下有益效果:
服务器接收编辑终端上传的智能合约的源代码,获取该智能合约的审计参数,该审计参数包括编译参数和扫描参数,根据该编译参数对该智能合约的源代码进行编译,在对该智能合约的源代码编译成功后,根据该扫描参数对该智能合约进行安全问题扫描,获得扫描审计结果,将该扫描审计结果返回给该编辑终端;本方案通过在服务器侧获取智能合约的编译参数和扫描参数,并根据获取到的编译参数和扫描参数对智能合约的源代码进行编译以及安全问题的扫描,实现了在服务器端对智能合约的安全问题的扫描,能够有效减少智能合约的安全隐患,从而提高智能合约的审计效果。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1是本申请一个示例性的实施例提供的一种区块链系统结构示意图;
图2是本申请一个示例性的实施例提供的一种区块结构的示意图;
图3是本申请一个示例性的实施例提供的一种智能合约审计系统构成图;
图4是本申请一个示例性的实施例提供的智能合约审计方法的流程示意图;
图5是本申请一个示例性的实施例提供的智能合约审计方法的流程示意图;
图6是本申请一个示例性的实施例提供的智能合约审计方法的流程示意图;
图7是图6所示实施例涉及的一种漏洞扫描阶段方案的示意图;
图8是图6所示实施例涉及的一种智能合约审计方案的示意图;
图9是根据一示例性实施例示出的智能合约审计装置的结构方框图;
图10是根据一示例性实施例示出的智能合约审计装置的结构方框图;
图11是根据一示例性实施例示出的一种计算机设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
应当理解的是,在本文中提及的“若干个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
本发明实施例涉及的系统可以是由客户端、多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)通过网络通信的形式连接形成的分布式系统。
以分布式系统为区块链系统为例,请参考图1,其示出了本申请各个实施例涉及的区块链系统结构示意图。如图1所示,分布式系统100应用于区块链系统中,由多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)和客户端形成,节点之间形成组成的点对点(P2P,Peer To Peer)网络,P2P协议是一个运行在传输控制协议(TCP,Transmission Control Protocol)协议之上的应用层协议。在分布式系统中,任何机器如服务器、终端都可以加入而成为节点,节点包括硬件层、中间层、操作系统层和应用层。
参见图1示出的区块链系统中各节点的功能,涉及的功能包括:
1)路由,节点具有的基本功能,用于支持节点之间的通信。
节点除具有路由功能外,还可以具有以下功能:
2)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链系统中的其他节点,供其他节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。
例如,应用实现的业务包括:
2.1)钱包,用于提供进行电子货币的交易的功能,包括发起交易(即,将当前交易的交易记录发送给区块链系统中的其他节点,其他节点验证成功后,作为承认交易有效的响应,将交易的记录数据存入区块链的临时区块中;当然,钱包还支持查询电子货币地址中剩余的电子货币。
2.2)共享账本,用于提供账目数据的存储、查询和修改等操作的功能,将对账目数据的操作的记录数据发送到区块链系统中的其他节点,其他节点验证有效后,作为承认账目数据有效的响应,将记录数据存入临时区块中,还可以向发起操作的节点发送确认。
2.3)智能合约,计算机化的协议,可以执行某个合约的条款,通过部署在共享账本上的用于在满足一定条件时而执行的代码实现,根据实际的业务需求代码用于完成自动化的交易,例如查询买家所购买商品的物流状态,在买家签收货物后将买家的电子货币转移到商户的地址;当然,智能合约不仅限于执行用于交易的合约,还可以执行对接收的信息进行处理的合约。
3)区块链,包括一系列按照产生的先后时间顺序相互接续的区块(Block),新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链系统中节点提交的记录数据。
请参考图2,其示出了本申请各个实施例涉及的区块结构(Block Structure)的示意图,每个区块中包括本区块存储交易记录的哈希值(本区块的哈希值)、以及前一区块的哈希值,各区块通过哈希值连接形成区块链。另外,区块中还可以包括有区块生成时的时间戳等信息。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了相关的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
请参考图3,其示出了本申请各个实施例涉及的一种智能合约审计系统构成图。如图3所示,该系统包括终端310和服务器320。
其中,终端310上可以具有集成开发环境。终端310可以是编辑终端或者人工审核终端。
其中,集成开发环境可以包括代码编辑器、编译器、调试器和图形用户界面工具,用户可以在集成开发环境中对智能合约的代码进行编辑和编译。
服务器320可以是一台服务器,或者服务器320可以是由若干台服务器构成的服务器集群,或者服务器320可以包含一个或多个虚拟化平台,或者服务器320也可以是一个云计算服务中心。
其中,服务器320可以由一个或多个功能单元组成。服务器320可以包括数据库服务器。
终端310可以与服务器320之间通过通信网络相连。可选的,该通信网络是有线网络或无线网络。
可选的,上述的无线网络或有线网络使用标准通信技术和/或协议。网络通常为因特网、但也可以是任何网络,包括但不限于局域网(Local Area Network,LAN)、城域网(Metropolitan Area Network,MAN)、广域网(Wide Area Network,WAN)、移动、有线或者无线网络、专用网络或者虚拟专用网络的任何组合)。在一些实施例中,使用包括超文本标记语言(Hyper Text Mark-up Language,HTML)、可扩展标记语言(Extensible MarkupLanguage,XML)等的技术和/或格式来代表通过网络交换的数据。此外还可以使用诸如安全套接字层(Secure Socket Layer,SSL)、传输层安全(Transport Layer Security,TLS)、虚拟专用网络(Virtual Private Network,VPN)、网际协议安全(Internet ProtocolSecurity,IPsec)等常规加密技术来加密所有或者一些链路。在另一些实施例中,还可以使用定制和/或专用数据通信技术取代或者补充上述数据通信技术。
请参考图4,其示出了本申请一个示例性的实施例提供的智能合约审计方法的流程示意图。该智能合约审计方法可以由服务器执行。其中,上述服务器可以是上述图3所示系统中的服务器320。如图4所示,该智能合约审计方法可以包括以下步骤:
步骤410,接收编辑终端上传的智能合约的源代码,该智能合约是用于在区块链中运行的合约程序。
在本申请实施例中,编辑终端可以是用户进行智能合约的源代码编写的终端。该编辑终端可以具有集成开发环境,并且存在用来进行代码编写的智能合约编辑工具。
比如,用户可以利用以太坊编写智能合约,其中以太坊有许多不同语言的客户端实现,编写智能合约的语言可以是Solidity,C++,Go,Python,Java或者Haskell。
步骤420,获取该智能合约的审计参数,该审计参数包括编译参数和扫描参数。
可选的,编译参数可以是包括被该智能合约引用的其它合约的存储地址,以及,编译器的版本号中的至少一种。
可选的,扫描参数可以是包括扫描时间和扫描次数中的至少一种。
步骤430,根据该编译参数对该智能合约的源代码进行编译。
在本申请实施例中,服务器获取到用户通过编辑终端的集成开发环境开发并提交的智能合约的源代码后,可以根据智能合约的编译参数,在服务器本地的编译器中对该智能合约的源代码进行编译。
其中,编译器是将一种语言翻译为另一种语言的一段程序,通常是将源代码作为输入,输出的目标代码是机器代码。
可选的,当该智能合约中存在引用其它合约的情况时,服务器可以根据智能合约的编译参数,获取该被引用合约的存储地址,实现对被引用合约的调用。
可选的,该智能合约的编译参数还提供了适用于该智能合约的源代码的编译器的版本号,服务器通过获取该编译器的版本号,选择对应的编译器对该智能合约的源代码进行编译。
其中,不同版本号的编译器可以编译的源代码可以是不同的。
步骤440,在对该智能合约的源代码编译成功后,根据该扫描参数对该智能合约进行安全问题扫描,获得扫描审计结果。
步骤450,将该扫描审计结果返回给该编辑终端。
在本申请实施例中,扫描审计结果可以包括当前存在安全问题的智能合约以及具体的安全问题信息。扫描审计结果可以存储在数据库中,由服务器将数据库中的扫描审计结果发送给该编辑终端。
其中,问题信息可以分为语法错误以及安全问题信息。该扫描审计结果至少可以包括安全问题信息。
综上所述,在本申请实施例所示的方案中,服务器通过接收编辑终端上传的智能合约的源代码,获取该智能合约的审计参数,该审计参数包括编译参数和扫描参数,根据该编译参数对该智能合约的源代码进行编译,在对该智能合约的源代码编译成功后,根据该扫描参数对该智能合约进行安全问题扫描,获得扫描审计结果,将该扫描审计结果返回给该编辑终端;本方案通过在服务器侧获取智能合约的编译参数和扫描参数,并根据获取到的编译参数和扫描参数对智能合约的源代码进行编译以及安全问题的扫描,实现了在服务器端对智能合约的安全问题的扫描,能够有效减少智能合约的安全隐患,从而提高智能合约的审计效果。
请参考图5,其示出了本申请一个示例性的实施例提供的智能合约审计方法的流程示意图。该智能合约审计方法可以由编辑终端执行。其中,上述编辑终端可以是上述图3所示的系统中的终端310。如图5所示,该智能合约审计方法可以包括以下步骤:
步骤510,接收在编辑界面中编辑的智能合约的源代码。
在本公开实施例中,编辑界面可以是编辑终端中用于进行智能合约的源代码编辑的界面。
可选的,编辑界面可以分为两个部分,分别是编辑区域以及问题提示显示区域。其中,编辑区域用于对智能合约的源代码进行编写和修改,问题提示显示区域用于显示该智能合约源代码在编辑过程中由编辑工具检测出的语法错误。
步骤520,按照静态规则匹配的方式对该智能合约的源代码的安全问题进行静态扫描,获得编写审计结果。
在本公开实施例中,编写审计结果可以是在对智能合约的源代码编辑过程中,逐行对源代码进行静态规则匹配获得的审计结果。
步骤530,当该编写审计结果指示该智能合约的源代码不存在安全问题时,将该智能合约的源代码上传给服务器。
步骤540,接收该服务器返回的,对该智能合约的源代码进行安全问题扫描的审计结果。
步骤550,展示该服务器返回的审计结果。
综上所述,在本申请实施例所示的方案中,编辑终端通过接收在编辑界面中编辑的智能合约的源代码;按照静态规则匹配的方式对该智能合约的源代码进行静态扫描,获得编写审计结果,当该编写审计结果指示该智能合约的源代码不存在安全问题时,将该智能合约的源代码上传给服务器,接收该服务器返回的审计结果,展示该审计结果;本方案通过在编辑终端侧获取智能合约的源代码,并根据静态规则匹配的方式对智能合约的源代码进行安全问题的扫描,实现了在编辑终端对智能合约的安全问题的扫描,能够有效减少智能合约的安全隐患,从而提高智能合约的审计效果。
请参考图6,其示出了本申请一个示例性的实施例提供的智能合约审计方法的流程示意图。该智能合约审计方法可以由服务器和编辑终端交互执行。其中,上述终端可以是上述图3所示的终端310,上述服务器可以是上述图3所示的服务器320。如图6所示,该智能合约审计方法可以包括以下步骤:
步骤601,编辑终端接收在编辑界面中编辑的智能合约的源代码。
在本申请实施例中,用户可以在编辑终端展示的编辑界面中的编辑区域编辑智能合约的源代码,相应的,编辑终端接收在该编辑区域中编辑的源代码。
可选的,编辑智能合约的源代码所用的编辑器中的编辑工具可以具有初级的语法纠错能力。
比如,当用户在编辑器中编写代码时,每编写一行代码,编辑器中的工具就对该行代码进行检查,可以得到该行代码的语法错误信息。用户可以通过对该行代码进行实时修改直到编辑器不再报错,即不存在初级的语法错误。
步骤602,按照静态规则匹配的方式对该智能合约的源代码的安全问题进行静态扫描,获得编写审计结果。
在本公开实施例中,编辑终端在编辑智能合约的源代码时,除了通过编辑工具对源代码进行初级的语法纠错之外,还可以通过第一静态规则进行安全问题的匹配。可选的,上述通过第一静态规则进行安全问题的匹配可以由编辑工具实现,也可以通过编辑工具之外的审计工具实现。
上述第一静态规则可以是存储在编辑终端中的一套用于与智能合约的源代码相比对的规则,该第一静态规则可以是智能合约常见的安全问题以及对应的源代码形式,也就是说,第一静态规则可以是以程序代码的形式存在的。
其中,编写审计结果可以分为两种情况:当智能合约的源代码经过与第一静态规则比对,存在相匹配的代码时,编写审计结果指示该智能合约存在安全问题;或者,当智能合约源代码经过与第一静态规则比对,不存在相匹配的代码时,编写审计结果指示该智能合约不存在安全问题。
可选的,当编写审计结果指示该智能合约存在安全问题时,编辑器可以通过编辑界面展示存在的安全问题,以便用户可以通过对照安全问题对智能合约的源代码进行修改,直到经过与上述第一静态规则比对后没有符合规则的代码(即不存在安全问题)后,完成对智能合约的源代码的修改。
可选的,上述通过按照静态规则匹配的方式对该智能合约的源代码的安全问题进行静态扫描的过程,可以是对智能合约的源代码逐行进行扫描的过程。比如,在智能合约的源代码编写的过程中,每当用户编写完成一行代码时,编辑终端就将该行智能合约的源代码与第一静态规则中的各条规则相比对,若该行智能合约的源代码符合第一静态规则中的任一规则时,则确定该行智能合约的源代码存在安全问题,并在编辑界面中的问题提示显示区域显示相应的安全问题。
其中,第一静态规则可以通过编辑终端中的集成开发环境进行更新。
例如,上述第一静态规则可以由开发人员进行更新,服务器可以将开发人员更新后的第一静态规则推送给编辑终端,由编辑终端根据服务器推送的第一静态规则,对编辑终端本地的第一静态规则进行更新。
步骤603,当该编写审计结果指示该智能合约的源代码不存在安全问题时,编辑终端将该智能合约的源代码上传给服务器。
在本公开实施例中,在用户完成对智能合约源代码的编辑后,若编辑终端通过步骤602的静态扫描获得的编写审计结果确定智能合约的源代码不存在安全问题,则将该智能合约的源代码传输到服务器上。
步骤604,服务器接收编辑终端上传的智能合约的源代码。
在本公开实施例中,服务器可以接收由编辑终端发送的智能合约的源代码。
步骤605,服务器获取该智能合约的审计参数,该审计参数包括编译参数和扫描参数。
在本公开实施例中,该编译参数包括被该智能合约引用的其它合约的存储地址,以及,编译器的版本号中的至少一种。
该扫描参数包括:扫描时间和扫描次数中的至少一种。
在一种可能的实现方式中,服务器可以接收该编辑终端上传的该审计参数。
其中,该智能合约需要的审计参数为在编辑终端侧设置的一组固定的参数,当编辑终端将智能合约源代码发送给服务器的同时,固定的一组参数通过编辑终端发送给服务器,由服务器进行接收。
也就是说,编辑终端在上传智能合约的源代码之前,可以根据用户设置和/或智能合约的相关信息(比如智能合约的合约格式等)生成上述审计参数,并将审计参数与智能合约一并上传给服务器。
例如,以审计参数包括编译器的版本号以及扫描次数为例,用户可以在编辑终端设置该智能合约的扫描次数为10次,并且,编辑终端自动设置匹配的编译器的版本号为14.00.50727.762。编辑终端在上传智能合约时,将上述编译器的版本号以及扫描次数作为审计参数发送给服务器,服务器按照接收到的审计参数,执行相应的后续操作。
在一种可能的实现方式中,服务器也可以根据该智能合约的合约格式获取该审计参数。
其中,服务器接收到从编辑终端发送的智能合约的源代码,通过分析智能合约的合约格式,或者,通过编辑终端的上传信息获得智能合约的合约格式,并根据合约格式确定智能合约的审计参数。
其中,不同的合约格式对应的相关审计参数可以是不同的。
可选的,服务器中可以预先存储各种合约格式对应的审计参数,在获取到智能合约的合约格式之后,服务器可以查询该合约格式对应的审计参数,并将查询到的审计参数作为该智能合约的审计参数。
步骤606,服务器根据该编译参数对该智能合约的源代码进行编译。
在本公开实施例中,以编译参数包括该智能合约引用的其它合约的存储地址以及编译器的版本号为例,服务器根据该智能合约适配的编译器的版本号,调用相应的编译器,并根据该智能合约引用的其它合约的存储地址获取该智能合约引用的其它合约,然后通过编译器,对该智能合约的源代码,以及该智能合约引用的其它合约的源代码,对该智能合约进行编译。
步骤607,在对该智能合约的源代码编译成功后,服务器根据该扫描参数对该智能合约进行安全问题扫描,获得扫描审计结果。
在本公开实施例中,扫描审计结果可以包括第一扫描结果以及第二扫描结果。
其中,当服务器通过编译器对该智能合约的源代码编译成功后,可以进行如下三个步骤:
1)在对该智能合约的源代码编译成功后,根据上述扫描参数,按照静态规则匹配的方式对该智能合约的源代码进行静态扫描,获得第一扫描结果。
其中,该服务器中的第二静态规则与上述编辑终端中的第一静态规则相比,服务器中的第二静态规则中包含的安全问题可以更加全面,服务器可以通过对智能合约的源代码进行静态扫描,获得第一扫描结果。
其中,第一扫描结果包括与该第二静态规则中的规则相匹配的问题代码,以及该问题代码对应的安全问题信息。
2)根据该扫描参数,按照约束求解的方式对该智能合约的源代码进行动态扫描,获得第二扫描结果。
可选的,在执行约束求解指令之前,服务器可以使用符号执行的方式对智能合约的源代码进行动态扫描。
其中,符号执行的方式可以是服务器通过读取智能合约的指令,由扫描工具的代码模拟执行智能合约的指令,每执行一次指令扫描工具就会记录一次执行前和执行后的状态的变化,当指令执行结束后比较执行前和执行后的状态变化,则通过约束求解找到安全问题。
其中,对该智能合约的源代码进行约束求解是可以由服务器中的约束求解器进行操作,该约束求解器可以是一段程序代码。
3)根据该第一扫描结果和该第二扫描结果获取该扫描审计结果。
在本申请实施例中,服务器可以结合上述第一扫描结果和该第二扫描结果获得扫描审计结果。
比如,当第一扫描结果以及第二扫描结果都没有扫描检测出智能合约存在安全问题,则服务器可以生成指示该智能合约的源代码不存在安全问题的扫描审计结果。或者,当第一扫描结果和/或第二扫描结果检测出智能合约的源代码存在安全问题时,则服务器可以生成指示该智能合约的源代码存在安全问题的扫描审计结果。
步骤608,当该扫描审计结果指示该智能合约的源代码不存在安全问题时,服务器将该智能合约发送给人工审核终端。
在本公开实施例中,当第一扫描结果以及第二扫描结果都没有扫描检测出智能合约存在安全问题,即扫描审计结果指示该智能合约的源代码不存在安全问题时,服务器可以将该智能合约发送给人工审核终端。
可选的,人工审核终端为一个或者多个。
其中,人工审核终端可以是用来进行智能合约人工审核的客户端。一个人工审核终端可以对应有一个对智能合约进行人工审核的专门人员。
可选的,当该扫描审计结果指示该智能合约的源代码不存在安全问题时,服务器可以发送提醒消息到编辑终端,用户可以在编辑终端选择是否进行人工审核。
其中,若用户在编辑终端选择进行人工审核,则服务器可以将智能合约提交到人工审核终端。
可选的,编辑终端可以通过编辑终端的界面显示上述提醒消息。
步骤609,服务器接收该人工审核终端返回的人工审计结果,该人工审计结果是对该智能合约进行人工安全问题审核获得的结果。
在本公开实施例中,人工审计结果可以由人工审核终端侧的专门的人员通过对智能合约的安全问题审计得出的结果。
可选的,在人工审核终端上可以存储有专门的安全问题列表,人工审核终端侧的专门人员可以通过对照安全问题列表对安全问题逐项进行审核,并根据审核结果生成时上述人工审计结果。
步骤610,若该人工审计结果指示该智能合约的源代码不存在安全问题,则服务器将该智能合约发布至区块链中。
可选的,当人工审核结果为不存在安全问题时,用户可以选择将该智能合约发布在区块链中,或者,选择暂时不对该智能合约进行发布。当用户选择发布上述智能合约时,服务器可以将该智能合约发布至区块链。可选的,上述将智能合约发布至区块链的步骤也可以由编辑终端执行,也就是说,当用户选择发布上述智能合约时,编辑终端将该智能合约发布至区块链。
步骤611,若该人工审计结果指示该智能合约的源代码存在安全问题,将该人工审计结果返回给该编辑终端。
在本公开实施例中,一个或者多个专门人员在对应的人工审核终端发现智能合约中存在安全问题,则服务器可以将上述人工审计结果中的安全问题信息返回给编辑终端。
可选的,在编辑终端的用户可以根据人工审核发现的安全问题信息(即上述人工审计结果中的安全问题),对智能合约的源代码进行修改。
步骤612,在对该智能合约的源代码编译失败后,服务器获取该智能合约的源代码的编译错误信息。
在本公开实施例中,服务器通过编译器对智能合约的源代码进行编译的过程中,如果编译失败,这服务器可以得到编译错误信息,其中,该编译错误信息可以包括语法错误信息以及安全问题信息中的至少一种。
步骤613,服务器从该编译错误信息中筛选安全问题对应的错误信息。
在本公开实施例中,服务器可以从编译错误信息中选择安全问题信息作为对应的错误信息。
步骤614,服务器根据筛选结果获取编译审计结果。
可选的,当编译错误信息中存在安全问题信息时,服务器可以生成对应该安全问题信息的编译审计结果,即编译审计结果指示该智能合约中存在安全问题。
步骤615,服务器将该编译审计结果返回给该编辑终端。
可选的,在编辑终端的用户可以根据服务器从编译错误信息中筛选出的安全问题信息(即上述编译审计结果中的安全问题),对智能合约的源代码进行修改。
步骤616,当该扫描审计结果指示该智能合约的源代码存在安全问题时,将该智能合约返回给该编辑终端。
步骤617,编辑终端接收该服务器返回的,对该智能合约的源代码进行安全问题扫描的审计结果。
在本公开实施例中,审计结果可以是扫描审计结果、编译审计结果以及人工审计结果中的至少一个。
其中,该扫描审计结果是该服务器对该智能合约的源代码编译成功后,对该智能合约进行安全问题扫描获得的审计结果。
该编译审计结果是该服务器对该智能合约的源代码编译失败后,从该编译错误信息中筛选安全问题对应的错误信息,并根据筛选结果获取的审计结果。
该人工审计结果是该扫描审计结果指示该智能合约的源代码不存在安全问题时,对该智能合约进行人工安全问题审核获得的结果。
其中,扫描审计结果、编译审计结果以及人工审计结果中的安全问题信息可以按照“行号,问题,描述,风险等级,文件名”的格式存储在服务器的数据库中。
可选的,服务器可以将存储在数据库中的审计结果发送回编辑终端。例如,服务器可以主动将存储在数据库中的审计结果发送给编辑终端;或者,当编辑终端发出查询审计结果的请求时,服务器可以将存储在数据库中的审计结果发送给编辑终端。
比如,请参考图7,其示出了本申请实施例涉及的一种漏洞扫描阶段方案的示意图。如图7所示,该方案包括两个部分,分别是编译阶段以及深度扫描阶段,具体的方案如下:
服务器通过对外接口接收到智能合约和审计参数(S71),通过编译器对智能合约进行编译(S72),若编译失败,则过滤错误信息中的语法问题选择安全问题(S73),对安全问题信息按照一定的格式设置(S74),输出格式化的安全问题信息(S75),将合约和安全问题存储在数据库中(S710)。若编译成功则结束编译阶段,进入深度扫描阶段。根据扫描参数对智能合约进行扫描(S76),深度扫描可以分为两个部分,智能合约通过基于静态规则的静态扫描(S77),以及通过基于约束求解的动态扫描(S78),输出两种扫描方式得到的安全问题(S79),同样智能合约和安全问题可以存储在数据库中(S710)。存储在数据库中的安全问题可以通过对外接口返回到编辑终端中(S711)。
步骤618,编辑终端展示该审计结果。
在本公开实施例中,审计结果可以在编辑终端的界面上进行展示。可选的,审计结果可以按照“行号,问题,描述,风险等级,文件名”的格式展示在编辑终端的编辑界面上。相应的,当上述审计结果指示智能合约中存在安全问题是,编辑终端的用户可以根据展示的审计结果,对智能合约的源代码进行修改。
比如,请参考图8,其示出了本申请实施例涉及的一种智能合约审计方案的示意图。如图8所示,该方案包括三个阶段分别是撰写阶段、漏洞扫描阶段以及人工审核阶段,具体的方案如下:
1)在撰写阶段时
用户开始撰写智能合约(S81),编辑终端对撰写的智能合约进行快速扫描(S82),通过对智能合约的快速扫描判断智能合约是否存在安全问题(S83),当快速扫描发现智能合约中存在问题时,提示用户安全问题信息,并且用户修改问题代码(S85),然后重复S81至S83的步骤,直到快速扫描未检测出智能合约中存在问题可以进行下一阶段(S84)。
2)在漏洞扫描阶段时
用户通过编辑终端将智能合约上传到审计服务器中(S86),由审计服务器中的编译器对智能合约进行编译(S87),判断编译是否可以成功(S88),若编译失败,则记录编译失败的问题(S812),然后在用户界面进行问题提示显示(S813)。若编译成功,则对智能合约进行深度扫描(S89),判断深度扫描后是否出现安全问题(S810),若出现安全问题,执行步骤S812和S813,若没有发现安全问题,则可以进行下一阶段(S811)。
3)在人工审核阶段时
人工审核阶段为可以供用户进行选择的阶段,用户可以选择进行,也可以选择不进行。
用户选择进行人工审核阶段(S814),通过对智能合约进行人工审核,判断是否存在安全问题(S815),当存在安全问题时,记录存在的安全问题(S817),然后在用户界面进行问题提示显示(S818)。若未审核出安全问题时,进行下一阶段(S816)。
最后对经过三个阶段审核通过的智能合约进行合约发布(S819)。
综上所述,在本申请实施例所示的方案中,服务器通过接收编辑终端上传的智能合约的源代码,获取该智能合约的审计参数,该审计参数包括编译参数和扫描参数,根据该编译参数对该智能合约的源代码进行编译,在对该智能合约的源代码编译成功后,根据该扫描参数对该智能合约进行安全问题扫描,获得扫描审计结果,将该扫描审计结果返回给该编辑终端。终端通过接收在编辑界面中编辑的智能合约的源代码;按照静态规则匹配的方式对该智能合约的源代码进行静态扫描,获得编写审计结果,当该编写审计结果指示该智能合约的源代码不存在安全问题时,将该智能合约的源代码上传给服务器,接收该服务器返回的审计结果,展示该审计结果;本方案通过在服务器侧获取智能合约的编译参数和扫描参数,并根据获取到的编译参数和扫描参数对智能合约的源代码进行编译以及安全问题的扫描,实现了在服务器端对智能合约的安全问题的扫描,并且通过在编辑终端侧获取智能合约的源代码,根据静态规则匹配的方式对智能合约的源代码进行安全问题的扫描,实现了在编辑终端对智能合约的安全问题的扫描,能够有效减少智能合约的安全隐患,从而提高智能合约的审计效果。
图9是根据一示例性实施例示出的智能合约审计装置的结构方框图。该智能合约审计装置可以通过硬件或者软硬结合的方式实现为计算机设备中的全部或者部分,以执行图4或图6对应实施例所示的方法的全部或部分步骤。该智能合约审计装置可以包括:
第一接收模块910,用于接收编辑终端上传的智能合约的源代码,所述智能合约是用于在区块链中运行的合约程序;
参数获取模块920,用于获取所述智能合约的审计参数,所述审计参数包括编译参数和扫描参数;
编译模块930,用于根据所述编译参数对所述智能合约的源代码进行编译;
第一结果获取模块940,用于在对所述智能合约的源代码编译成功后,根据所述扫描参数对所述智能合约进行安全问题扫描,获得扫描审计结果;
第一结果返回模块950,用于将所述扫描审计结果返回给所述编辑终端。
在一种可能的实现方式中,所述装置还包括:
信息获取模块,用于在对所述智能合约的源代码编译失败后,获取所述智能合约的源代码的编译错误信息;
信息筛选模块,用于从所述编译错误信息中筛选安全问题对应的错误信息;
第二结果获取模块,用于根据筛选结果获取编译审计结果;
第二结果返回模块,用于将所述编译审计结果返回给所述编辑终端。
在一种可能的实现方式中,所述装置还包括:
合约发送模块,用于当所述扫描审计结果指示所述智能合约的源代码不存在安全问题时,将所述智能合约发送给审核终端;
第三结果获取模块,用于接收所述人工审核终端返回的人工审计结果,所述人工审计结果是对所述智能合约进行人工安全问题审核获得的结果;
第三结果返回模块,用于将所述人工审计结果返回给所述编辑终端。
在一种可能的实现方式中,所述装置还包括:
合约发布模块,用于若所述人工审计结果指示所述智能合约的源代码不存在安全问题,则将所述智能合约发布至区块链中。
在一种可能的实现方式中,所述第一结果获取模块940,包括:
第一扫描结果获取子模块,用于在对所述智能合约的源代码编译成功后,根据所述扫描参数,按照静态规则匹配的方式对所述智能合约的源代码的安全问题进行静态扫描,获得第一扫描结果;
第二扫描结果获取子模块,用于根据所述扫描参数,按照约束求解的方式对所述智能合约的源代码的安全问题进行动态扫描,获得第二扫描结果;
第一结果获取子模块,用于根据所述第一扫描结果和所述第二扫描结果获取所述扫描审计结果。
在一种可能的实现方式中,所述参数获取模块920,包括:
参数接收子模块,用于接收所述编辑终端上传的所述审计参数;
或者,
参数获取子模块,用于根据所述智能合约的合约格式获取所述审计参数。
在一种可能的实现方式中,所述编译参数包括被所述智能合约引用的其它合约的存储地址,以及,编译器的版本号中的至少一种;
所述扫描参数包括:扫描时间和扫描次数中的至少一种。
综上所述,在本申请实施例所示的方案中,服务器通过接收编辑终端上传的智能合约的源代码,获取所述智能合约的审计参数,所述审计参数包括编译参数和扫描参数,根据所述编译参数对所述智能合约的源代码进行编译,在对所述智能合约的源代码编译成功后,根据所述扫描参数对所述智能合约进行安全问题扫描,获得扫描审计结果,将所述扫描审计结果返回给所述编辑终端;本方案通过在服务器侧获取智能合约的编译参数和扫描参数,并根据获取到的编译参数和扫描参数对智能合约的源代码进行编译以及安全问题的扫描,实现了在服务器端对智能合约的安全问题的扫描,能够有效减少智能合约的安全隐患,从而提高智能合约的审计效果。
图10是根据一示例性实施例示出的智能合约审计装置的结构方框图。该智能合约审计装置可以通过硬件或者软硬结合的方式实现为计算机设备中的全部或者部分,以执行图5或图6对应实施例所示的方法的全部或部分步骤。该智能合约审计装置可以包括:
第二接收模块1010,用于接收在编辑界面中编辑的智能合约的源代码;
第四结果获取模块1020,用于按照静态规则匹配的方式对所述智能合约的源代码进行静态扫描,获得编写审计结果;
源代码上传模块1030,用于当所述编写审计结果指示所述智能合约的源代码不存在安全问题时,将所述智能合约的源代码上传给服务器;
结果接收模块1040,用于接收所述服务器返回的,对所述智能合约的源代码进行安全问题扫描的审计结果;
结果展示模块1050,用于展示所述服务器返回的审计结果。
在一种可能的实现方式中,所述审计结果包括扫描审计结果、编译审计结果以及人工审计结果中的至少一种;
所述扫描审计结果是所述服务器对所述智能合约的源代码编译成功后,对所述智能合约进行安全问题扫描获得的审计结果;
所述编译审计结果是所述服务器对所述智能合约的源代码编译失败后,从所述编译错误信息中筛选安全问题对应的错误信息,并根据筛选结果获取的审计结果;
所述人工审计结果是所述扫描审计结果指示所述智能合约的源代码不存在安全问题时,对所述智能合约进行人工安全问题审核获得的结果。
综上所述,在本申请实施例所示的方案中,终端通过接收在编辑界面中编辑的智能合约的源代码;按照静态规则匹配的方式对所述智能合约的源代码进行静态扫描,获得编写审计结果,当所述编写审计结果指示所述智能合约的源代码不存在安全问题时,将所述智能合约的源代码上传给服务器,接收所述服务器返回的审计结果,展示所述审计结果;本方案通过在编辑终端侧获取智能合约的源代码,并根据静态规则匹配的方式对智能合约的源代码进行安全问题的扫描,实现了在编辑终端对智能合约的安全问题的扫描,能够有效减少智能合约的安全隐患,从而提高智能合约的审计效果。
图11是根据一示例性实施例示出的一种计算机设备的结构示意图。所述计算机设备可以实现为上述图3所示的实施环境中的服务器320或者终端310。所述计算机设备1100包括中央处理单元(CPU)1101、包括随机存取存储器(RAM)1102和只读存储器(ROM)1103的系统存储器1104,以及连接系统存储器1104和中央处理单元1101的系统总线1105。所述服务器1100还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(I/O系统)1106,和用于存储操作系统1113、应用程序1114和其他程序模块1115的大容量存储设备1107。
所述基本输入/输出系统1106包括有用于显示信息的显示器1108和用于用户输入信息的诸如鼠标、键盘之类的输入设备1109。其中所述显示器1108和输入设备1109都通过连接到系统总线1105的输入输出控制器1110连接到中央处理单元1101。所述基本输入/输出系统1106还可以包括输入输出控制器1110以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器1110还提供输出到显示屏、打印机或其他类型的输出设备。
所述大容量存储设备1107通过连接到系统总线1105的大容量存储控制器(未示出)连接到中央处理单元1101。所述大容量存储设备1107及其相关联的计算机可读介质为服务器1100提供非易失性存储。也就是说,所述大容量存储设备1107可以包括诸如硬盘或者CD-ROM驱动器之类的计算机可读介质(未示出)。
不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器1104和大容量存储设备1107可以统称为存储器。
服务器1100可以通过连接在所述系统总线1105上的网络接口单元1111连接到互联网或者其它网络设备。
所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,中央处理器1101通过执行该一个或一个以上程序来实现图4、5或6所示的智能合约审计方法中,由计算机设备所执行的步骤。
本申请还提供了一种计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行上述各个方法实施例提供的智能合约审计方法。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,该计算机可读存储介质可以是上述实施例中的存储器中所包含的计算机可读存储介质;也可以是单独存在,未装配入终端中的计算机可读存储介质。该计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如图4、图5或图6所述的智能合约审计方法。
可选地,该计算机可读存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、固态硬盘(SSD,Solid State Drives)或光盘等。其中,随机存取记忆体可以包括电阻式随机存取记忆体(ReRAM,Resistance RandomAccess Memory)和动态随机存取存储器(DRAM,Dynamic Random Access Memory)。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (11)

1.一种智能合约的审计方法,其特征在于,所述方法由服务器执行,所述方法包括:
接收编辑终端上传的智能合约的源代码,所述智能合约是用于在区块链中运行的合约程序;所述智能合约的源代码是所述编辑终端在编写审计结果指示所述智能合约的源代码不存在安全问题的情况下发送的;所述编写审计结果由所述编辑终端按照静态规则匹配的方式对所述智能合约的源代码的安全问题进行静态扫描获得;
查询所述智能合约的合约格式对应的审计参数,所述审计参数包括编译参数和扫描参数;不同的合约格式对应的审计参数不同;
根据所述编译参数对所述智能合约的源代码进行编译;
在对所述智能合约的源代码编译成功后,根据所述扫描参数对所述智能合约进行安全问题扫描,获得扫描审计结果;将所述扫描审计结果返回给所述编辑终端;
在对所述智能合约的源代码编译失败后,获取所述智能合约的源代码的编译错误信息;从所述编译错误信息中筛选安全问题对应的错误信息;根据筛选结果获取编译审计结果;将所述编译审计结果返回给所述编辑终端;
当所述扫描审计结果指示所述智能合约的源代码不存在安全问题时,将所述智能合约发送给审核终端;接收所述审核终端返回的人工审计结果,所述人工审计结果是对所述智能合约进行人工安全问题审核获得的结果;将所述人工审计结果返回给所述编辑终端。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述人工审计结果指示所述智能合约的源代码不存在安全问题,则将所述智能合约发布至区块链中。
3.根据权利要求1或2所述的方法,其特征在于,所述在对所述智能合约的源代码编译成功后,根据所述扫描参数对所述智能合约进行安全问题扫描,获得扫描审计结果,包括:
在对所述智能合约的源代码编译成功后,根据所述扫描参数,按照静态规则匹配的方式对所述智能合约的源代码的安全问题进行静态扫描,获得第一扫描结果;
根据所述扫描参数,按照约束求解的方式对所述智能合约的源代码的安全问题进行动态扫描,获得第二扫描结果;
根据所述第一扫描结果和所述第二扫描结果获取所述扫描审计结果。
4.根据权利要求1或2所述的方法,其特征在于,
所述编译参数包括被所述智能合约引用的其它合约的存储地址,以及,编译器的版本号中的至少一种;
所述扫描参数包括:扫描时间和扫描次数中的至少一种。
5.一种智能合约的审计方法,其特征在于,所述方法由编辑终端执行,所述方法包括:
接收在编辑界面中编辑的智能合约的源代码;
按照静态规则匹配的方式对所述智能合约的源代码的安全问题进行静态扫描,获得编写审计结果;
当所述编写审计结果指示所述智能合约的源代码不存在安全问题时,将所述智能合约的源代码上传给服务器;
接收所述服务器返回的,对所述智能合约的源代码进行安全问题扫描的审计结果;所述服务器对所述智能合约的源代码进行安全问题扫描所使用的审计参数,是所述服务器查询所述智能合约的合约格式得到的;不同的合约格式对应的审计参数不同;
展示所述服务器返回的审计结果;
其中,所述服务器返回的审计结果包括扫描审计结果、编译审计结果以及人工审计结果中的至少一种;
所述扫描审计结果是所述服务器对所述智能合约的源代码编译成功后,对所述智能合约进行安全问题扫描获得的审计结果;
所述编译审计结果是所述服务器对所述智能合约的源代码编译失败后,从编译错误信息中筛选安全问题对应的错误信息,并根据筛选结果获取的审计结果;
所述人工审计结果是所述扫描审计结果指示所述智能合约的源代码不存在安全问题时,对所述智能合约进行人工安全问题审核获得的结果。
6.一种智能合约的审计装置,其特征在于,所述装置用于服务器中,所述装置包括:
第一接收模块,用于接收编辑终端上传的智能合约的源代码,所述智能合约是用于在区块链中运行的合约程序;所述智能合约的源代码是所述编辑终端在编写审计结果指示所述智能合约的源代码不存在安全问题的情况下发送的;所述编写审计结果由所述编辑终端按照静态规则匹配的方式对所述智能合约的源代码的安全问题进行静态扫描获得;
参数获取模块,用于查询所述智能合约的合约格式对应的审计参数,所述审计参数包括编译参数和扫描参数;不同的合约格式对应的审计参数不同;
编译模块,用于根据所述编译参数对所述智能合约的源代码进行编译;
第一结果获取模块,用于在对所述智能合约的源代码编译成功后,根据所述扫描参数对所述智能合约进行安全问题扫描,获得扫描审计结果;
第一结果返回模块,用于将所述扫描审计结果返回给所述编辑终端;
信息获取模块,用于在对所述智能合约的源代码编译失败后,获取所述智能合约的源代码的编译错误信息;
信息筛选模块,用于从所述编译错误信息中筛选安全问题对应的错误信息;
第二结果获取模块,用于根据筛选结果获取编译审计结果;
第二结果返回模块,用于将所述编译审计结果返回给所述编辑终端;
合约发送模块,用于当所述扫描审计结果指示所述智能合约的源代码不存在安全问题时,将所述智能合约发送给审核终端;
第三结果获取模块,用于接收所述审核终端返回的人工审计结果,所述人工审计结果是对所述智能合约进行人工安全问题审核获得的结果;
第三结果返回模块,用于将所述人工审计结果返回给所述编辑终端。
7.一种智能合约的审计装置,其特征在于,所述装置用于编辑终端中,所述装置包括:
第二接收模块,用于接收在编辑界面中编辑的智能合约的源代码;
第四结果获取模块,用于按照静态规则匹配的方式对所述智能合约的源代码进行静态扫描,获得编写审计结果;
源代码上传模块,用于当所述编写审计结果指示所述智能合约的源代码不存在安全问题时,将所述智能合约的源代码上传给服务器;
结果接收模块,用于接收所述服务器返回的,对所述智能合约的源代码进行安全问题扫描的审计结果;所述服务器对所述智能合约的源代码进行安全问题扫描所使用的审计参数,是所述服务器查询所述智能合约的合约格式得到的;不同的合约格式对应的审计参数不同;
结果展示模块,用于展示所述服务器返回的审计结果;
其中,所述服务器返回的审计结果包括扫描审计结果、编译审计结果以及人工审计结果中的至少一种;
所述扫描审计结果是所述服务器对所述智能合约的源代码编译成功后,对所述智能合约进行安全问题扫描获得的审计结果;
所述编译审计结果是所述服务器对所述智能合约的源代码编译失败后,从编译错误信息中筛选安全问题对应的错误信息,并根据筛选结果获取的审计结果;
所述人工审计结果是所述扫描审计结果指示所述智能合约的源代码不存在安全问题时,对所述智能合约进行人工安全问题审核获得的结果。
8.一种计算机设备,其特征在于,计算机设备包含处理器和存储器,所述存储器中存储由至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至4任一所述的智能合约审计方法。
9.一种计算机设备,其特征在于,计算机设备包含处理器和存储器,所述存储器中存储由至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求5所述的智能合约审计方法。
10.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至4任一所述的智能合约审计方法。
11.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求5所述的智能合约审计方法。
CN201910961984.2A 2019-10-11 2019-10-11 智能合约审计方法、装置、计算机设备及存储介质 Active CN110727948B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910961984.2A CN110727948B (zh) 2019-10-11 2019-10-11 智能合约审计方法、装置、计算机设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910961984.2A CN110727948B (zh) 2019-10-11 2019-10-11 智能合约审计方法、装置、计算机设备及存储介质

Publications (2)

Publication Number Publication Date
CN110727948A CN110727948A (zh) 2020-01-24
CN110727948B true CN110727948B (zh) 2021-10-29

Family

ID=69219880

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910961984.2A Active CN110727948B (zh) 2019-10-11 2019-10-11 智能合约审计方法、装置、计算机设备及存储介质

Country Status (1)

Country Link
CN (1) CN110727948B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111563040B (zh) * 2020-05-08 2023-08-15 中国工商银行股份有限公司 区块链智能合约代码测试方法及装置
CN111984245A (zh) * 2020-08-31 2020-11-24 上海玳鸽信息技术有限公司 一种区块链智能合约在线集成开发环境系统及实现方法
CN115438335B (zh) * 2022-11-07 2023-02-10 上海特高信息技术有限公司 一种用于加固智能合约安全运行的安全沙箱系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108960830A (zh) * 2018-07-16 2018-12-07 百度在线网络技术(北京)有限公司 智能合约的部署方法、装置、设备及存储介质
CN109460663A (zh) * 2018-11-12 2019-03-12 北京知道创宇信息技术有限公司 一种智能合约审计方法、装置及其存储介质
CN109493042A (zh) * 2018-10-24 2019-03-19 南京邮电大学 一种拥有访问控制功能的智能合约可信存证方法和系统
CN109684838A (zh) * 2018-11-23 2019-04-26 电子科技大学 一种针对以太坊智能合约的静态代码审计系统及方法
CN109948345A (zh) * 2019-03-20 2019-06-28 杭州拜思科技有限公司 一种智能合约漏洞检测的方法、系统
CN110309660A (zh) * 2019-07-09 2019-10-08 佛山市伏宸区块链科技有限公司 一种智能合约代码的自动化审计系统及方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107508680B (zh) * 2017-07-26 2021-02-05 创新先进技术有限公司 数字证书管理方法、装置及电子设备

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108960830A (zh) * 2018-07-16 2018-12-07 百度在线网络技术(北京)有限公司 智能合约的部署方法、装置、设备及存储介质
CN109493042A (zh) * 2018-10-24 2019-03-19 南京邮电大学 一种拥有访问控制功能的智能合约可信存证方法和系统
CN109460663A (zh) * 2018-11-12 2019-03-12 北京知道创宇信息技术有限公司 一种智能合约审计方法、装置及其存储介质
CN109684838A (zh) * 2018-11-23 2019-04-26 电子科技大学 一种针对以太坊智能合约的静态代码审计系统及方法
CN109948345A (zh) * 2019-03-20 2019-06-28 杭州拜思科技有限公司 一种智能合约漏洞检测的方法、系统
CN110309660A (zh) * 2019-07-09 2019-10-08 佛山市伏宸区块链科技有限公司 一种智能合约代码的自动化审计系统及方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
智能合约安全漏洞挖掘技术研究;付梦琳 等;《计算机应用》;20190710;第39卷(第7期);第1959-1966页 *

Also Published As

Publication number Publication date
CN110727948A (zh) 2020-01-24

Similar Documents

Publication Publication Date Title
US11281457B2 (en) Deployment of infrastructure in pipelines
Ed-Douibi et al. Automatic generation of test cases for REST APIs: A specification-based approach
CN110727948B (zh) 智能合约审计方法、装置、计算机设备及存储介质
US10223246B2 (en) System and method for functional test case generation of end-to-end business process models
US9092244B2 (en) System for developing custom data transformations for system integration application programs
CN109246197B (zh) 基于智能合约的数据处理方法及装置
ES2951835T3 (es) Sistema y método para establecer el procesamiento de solicitudes común
US20070073724A1 (en) System and method for automatic or semi-automatic software integration
CN106575227B (zh) 自动软件更新框架
US20240020344A1 (en) Binding traits to case nodes
CN102637188A (zh) 用于web应用的可扩展模板管道
Ahmad et al. A framework for architecture-driven migration of legacy systems to cloud-enabled software
CN112417178B (zh) 基于文档模板定义的链上合约处理方法、装置和电子设备
CN103677831A (zh) 在线代码审查系统及方法
CN104657274A (zh) 软件界面测试方法及装置
CN110716743A (zh) 一种适合多方协作开发的聚合api开发方法及系统
CN114398684A (zh) 基于区块链的信息处理方法和装置、存储介质及电子设备
US20140032276A1 (en) Method And Apparatus For Assessing Layered Architecture Principles Compliance For Business Analytics In Traditional And SOA Based Environments
US10606569B2 (en) Declarative configuration elements
CN113810340A (zh) 数据上报方法、装置、设备及计算机可读存储介质
US10289978B2 (en) Method and apparatus for integrating health care payers and provider systems with health care transaction systems using a single HIPAA EDI response generation component
US20230376501A1 (en) Asik: modular interface to blockchain
US20230325156A1 (en) Cross-validating files to facilitate code generation
US11573975B2 (en) Data migration method, data migration system, and node
CN114170006A (zh) 基于状态机的资讯数据获取方法、装置、设备及介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40021045

Country of ref document: HK

SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant