一、什么是区块链
区块链,学术解释是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式[1],但通俗来讲,其本质就是一个分布式数据库,用于存储特定结构数据并具有去中心化、不可篡改、公开透明等特点。
对于一个传统数据库来说,管理员拥有对数据库的绝对控制权,他可以创建、修改和删除库中的任何记录,也可以对数据库的访问控制权限随时做出调整。而在区块链中,数据处于不断增长的状态,一旦数据上链存储,便会永久存在,同时区块链的管理维护并不是交由单一的组织或个人(特别是公链),而是由所有参与方共同维护。随着时间的推移,存储的数据便会赋予区块链巨大的价值,奠定坚实的“信任”基础。区块链的分布式存储结构如下图所示。
图1 区块链存储结构
二、什么是智能合约
- 概述
智能合约(Smart contract)的概念早在上世纪90年代就由计算机及密码学家Nick Szabo提出[2],旨在以信息化方式传播、验证或执行合同。简而言之,智能合约就是传统合约的数字化版本,通常在满足某些特定条件后可自动执行,无需受信任实体的批准,自动售货机、ATM取款机,在某种程度上都可以看作是执行智能合约的机器。
图2 智能合约
- 智能合约的优势
相比于传统合约,以计算机语言为载体的智能合约很好的避免了分歧,几乎不会造成理解纠纷。例如在涉及交易风险时,信托机构往往充当着“中间人”的角色,进行资金托管和背景调查,以便于后续的交易执行,但由于能力有限,其作用范围往往会受到一定限制。相比之下,智能合约可以在无需信托机构的前提下,为不同背景的陌生人促成合作,提供全新的可靠性和安全性。
如图3所示,与传统合约相比,智能合约在无需可信第三方的情况下,具有更高的执行效率、更低的成本开销以及更加自动化的执行步骤。
图3 传统合约与智能合约的对比
- 智能合约真的智能吗?
尽管智能合约具有上述优势,但是它真的完美吗?其实不然,智能合约依然存在不少的缺点。我们以自动售货机为例,一旦机器由于疏忽标错售价且处于无人监管的状态,那里面的商品很快就会被套利者一扫而空,从而给商家造成经济损失。另一方面,受自身局限性影响,智能合约无法感知外部信息,需要获得输入后才能做出裁决,从这两点来看,智能合约既不完美也不智能,智能程度甚至偏低。
三、区块链中的智能合约
通过前两小节的介绍,可以明显发现,智能合约的出现是远早于区块链的,但由于当时缺乏可信的执行环境,致使智能合约的应用和发展一直处于停滞状态,直到区块链的出现,才让智能合约得以“复活”,接下来就让我们看看二者是如何相辅相成,走上“共同富裕”的道路。
- 比特币之1.0
2008年,第一个数字加密货币——比特币(BTC)横空出世,将区块链技术带到了所有人眼前,开启了区块链1.0时代,比特币的工作原理如图4所示,这里我们不做过多赘述。此时的区块链聚焦于去中心化和加密货币,为避免系统安全威胁,所支持的脚本语言只和交易相关且非图灵完备,能做的事及其有限。尽管只包含了合约的雏形,但比特币的出现仍极大促进了智能合约的发展。
图4 比特币工作原理
- 以太坊之2.0
五年后,Vitalik Buterin带着下一代加密货币与去中心化应用平台——以太坊(Ethereum)来了[3],这也标志着区块链进入了2.0时代。以太坊脱胎于比特币,是一个新的基于区块链技术且具有完备功能环境、高效共识机制、支持更多应用场景的智能合约开发平台,如果说比特币仅仅是一个支付应用,那以太坊就是一个支持各类应用的操作系统。在图灵完备编程语言(Solidity)及以太坊虚拟机(EVM)的加持下,开发者可以自由地编写功能强大的智能合约,来实现开放灵活的各类区块链应用。
智能合约的引入与完美结合,使得区块链中应用远远超出了加密货币的范畴,并在近些年呈现爆发式的增长趋势,为实现可编程社会提供了可能,以太坊节点架构如图5所示。
图5 以太坊节点架构
- “Dapp+”之3.0
从DeFi到NFT再到最近大火的元宇宙、Web3.0[4],这些无一例外都离不开智能合约的助力,合约所能提供的业务,几乎是无穷无尽的,它的边界取决于开发者的想象力。在区块链3.0——价值互联网时代,人们可以在一个共享账本中储存数据、交换价值并记录交易活动,而且这个账本不受任何中心化实体控制。智能合约在去中心化协议运行的基础上,实现了互操作、无缝集成与自动化,二者相辅相成,广泛应用于金融、司法、医疗、物流、房产、艺术、收藏等各种领域,随着时间的推移,我们可以看到这两者之间愈发紧密的融合和共生关系。
图6 价值互联网
四、合约安全
智能合约凭借其透明公开、不可篡改、自动执行的特点,大大减少了中间环节,在提高效率和降低成本的同时也减少了人为干预的风险,但随着各类安全事件的频发,承载着巨额资产的智能合约,其安全性又该如何保证呢,让我们接着往下看。
- 设计安全
合约的设计安全是智能合约稳定运行的第一步。在进行合约开发之前,为避免由于设计文本错误导致的合约功能异常,可以通过定义设计模式实现智能合约代码的自动生成,降低在编写复杂功能过程中引入错误的风险。但是,由于现有合约设计模式不够成熟,实现平台及开发语言更新较快,已有的设计模式针对特定应用场景不一定具有较好的适用性,因此总结并抽象安全可靠的合约模板对于保障智能合约的设计安全至关重要。
- 开发及测试安全
在智能合约的开发及测试阶段,由于开发者编码水平良莠不齐,可能导致合约中存在代码缺陷,此外,合约的实现语言、编译器、执行机制的不完善也同样会带来安全隐患。因此,在智能合约开发完成后、正式部署上线前,采用人工或自动化的方式对合约代码进行安全审计,可以有效防止智能合约遭受恶意攻击。
值得一提的是,形式化验证技术[5]可以有效提高智能合约的检测效率,这种基于“数学基础”的验证方法,能够弥补传统靠人工经验查找代码逻辑漏洞的缺陷,还能穷举所有可能的输入,提供更为完备的安全审计能力,限于篇幅,对于智能合约的形式化验证技术,我们将在后续文章中做更深入的讨论分析。
- 部署及运维安全
在合约部署及运维阶段,外部合约调用和运行环境是安全威胁产生的主要原因。对于外部合约调用,由于合约的正确执行不仅仅依赖于当前合约,还与其他合约紧密关联,因此合约的调用逻辑十分关键。对于运行环境,由于智能合约一般运行在隔离的沙箱中,一旦存在验证、控制机制不完善等问题,攻击者就可以通过部署恶意代码,扰乱正常业务逻辑,消耗整个系统中的计算资源,进而引发各类安全威胁。此外,传统打补丁或升级的方法不适用于智能合约,因此根据运行的异常状态制定相应的应对策略可以很好的起到安全监管和防护效果。
五、小结
在本篇文章中,我们简单梳理了区块链与智能合约的发展历程,不难看出,智能合约正变得越来越完备多样,与区块链的融合也在不断加深,开发者借助智能合约完成了更多有价值的应用,推动区块链在多领域的广泛落地和深入应用。与此同时,我们也对合约的安全性进行了初步探讨,承载高价值的智能合约需要更多的研究力量投入来保障安全。
可以预见,在不久的未来,区块链将和互联网一样,成为某种公共基础设施,智能合约也将随之应用到更广阔的领域,覆盖人们的日常生活以及社会的方方面面。
参考文献
- Nakamoto S. Bitcoin: A peer to peer electronic cash system. 2008. https://bitcoin.org/bitcoin.pdf
- Szabo N. Formalizing and securing relationships on public networks. 1997,2(9)
- Buterin V. A next-generation smart contract and decentralized application platform. 2014. https://ethereum.org/en/
- https://www.thepaper.cn/newsDetail_forward_17827860
- https://mp.weixin.qq.com/s/sN8e0IaK-WD1-79ZIIe9Cg
上述情形之外的任何使用形式,均需提前向绿盟科技(010-68438880-5462)申请版权授权。如擅自使用,绿盟科技保留追责权利。同时,如因擅自使用博客内容引发法律纠纷,由使用者自行承担全部法律责任,与绿盟科技无关。