标签: 智能合约

  • 什么是智能合约的形式化验证?

    对智能合约进行形式化验证可避免它们出现错误、漏洞和其他不利的情况。在这个过程中,人类专家会将智能合约的逻辑转换为数学语句,然后通过自动化流程对照合约预期行为的模型检查实际逻辑。将形式化验证和人工审计相结合,我们就可以对智能合约的安全性进行全面评估。

    简介

    智能合约是部署在区块链上的计算机程序,在满足某些条件时会自动运行。智能合约可能非常简单,也可能极其复杂,可以持有价值数百万甚至数十亿美元的资产。

    智能合约代码如果有安全漏洞,就可能造成毁灭性后果,比如被不法分子盗窃其持有的所有资产。2021年,由于智能合约中的一个拼写错误,自动做市商(AMM)Uranium Finance被盗取了5,000万美元。

    同样在2021年,由于单个代码错误,Compound Finance错误发放了8000万美元的奖励。2022年,因智能合约出现一个错误,Wormhole Bridge被盗走3.2亿美元。

    因此,一开始就把智能合约程序弄对很重要。智能合约采用开源模式,这意味着一旦合约部署后,代码就会公开。如果黑客发现其中的错误,就可以立即加以利用。此外,随着时间的推移修补安全漏洞的常规操作派不上用场,因为智能合约的代码在部署后通常无法修改。

    智能合约验证是如何运作的?

    智能合约的形式化验证是通过将智能合约的逻辑和预期行为呈现为数学语句来实现的。随后,审计师会使用自动化工具检查这些语句是否正确。

    该过程涉及:

    1. 用正式语言定义合约的规范和预期的特性。
    2. 将合约的代码转换为形式化陈述,例如数学模型或逻辑。
    3. 使用自动化定理证明或模型检测来验证合约的规范和特性。
    4. 重复验证过程,以发现并修复任何错误或与预期特性的偏差。

    为什么智能合约验证很重要

    通过运用数学推理,有助于确保经过形式化验证的智能合约避免出现错误、漏洞和其他不利的情况。验证也有助于增加对合约的信赖和信心,因为其特性已经过了严格检验,正确可靠。

    以下这些示例大致说明了智能合约验证如何帮助防止重大财务损失和其他灾难性后果。

    Uniswap

    Uniswap是一家著名的AMM。Uniswap V1智能合约在开发过程中,进行了形式化验证。在发布前,这项形式化验证发现并修复了一些舍入误差,避免了Uniswap V1的资金被吸干殆尽。

    Balancer

    Balancer V2也是一个经过验证的AMM。形式化验证发现并修复了智能合约中闪电贷款功能的费用计算错误,该错误会使交易平台很容易遭受盗窃。

    SafeMoon

    SafeMoon V1在部署后,通过形式化验证发现了一个极其微小的错误,如果该错误没被发现,合约所有人如果在放弃所有权之前进行了某些操作,那合约所有人在放弃之后有可能重新获得该合约。

    大多数对SafeMoon V1分叉的人工审计都遗漏了这个错误,因为需要分析程序变量值的特定组合才能发现这个错误。人类很容易错过这个问题,但机器却能及时地捕捉到它。

    形式化验证和人工审计如何配合发挥作用

    形式化验证提供了一种系统化、自动化的办法,来根据合约的预期特性检查合约的逻辑和行为。这样可以更轻松地识别和修复任何潜在的错误或漏洞。这对于人工检查难以发现的复杂、细微的问题特别有用。

    人工审计则包括专家对合约的代码、设计和部署进行审查。审计师会利用自己的经验和专业知识,来识别安全风险并评估合约的整体安全状况。他们还可以确认形式化验证过程是否正确执行,并检查是否存在自动化工具可能无法检测到的任何问题。

    将形式化验证和人工审计相结合,我们就可以对智能合约的安全性进行全面评估。这可以提高发现和修复任何漏洞的几率。这样一来,我们就相当于采用了一种结合人类和机器各自专长的深度防御安全措施。

    结语

    为了确保智能合约的安全性,必须将形式化验证和人工审计相结合,从而确保对智能合约的安全态势进行全面而彻底的评估。

    虽然形式化验证对资源消耗较高,但对于具有高价值或高风险因素的合约来说,这是一项值得的投资。毕竟归根结底,安全重于泰山,一定要优先考虑安全性并确保智能合约远离错误、漏洞和不利的意外行为。

  • 什么是智能合约?

    20世纪90年代,Nick Szabo首次提出智能合约的概念。当时,他把智能合约定义为通过结合协议与用户界面,规范和保障计算机网络安全的工具。

    Szabo探讨了把智能合约运用于合同协议相关各领域的潜在用途,例如信用体系、支付流程和内容版权管理。

    在加密货币领域,智能合约可界定为运行在区块链中的应用或程序。通常,它们作为一种遵循特定规则强制执行的数字化协议发挥作用。这些规则由计算机代码预定义,经所有网络节点复制和执行。

    区块链智能合约支持创建去信任化协议。这意味着合约双方通过区块链做出承诺,而无需相互了解或信任。双方确定,如果没有达到条件,合约不会执行。此外,使用智能合约不再需要中间机构,从而显著降低运行成本。

    虽然智能合约已由比特币协议支持多年,但借由以太坊创造者兼联合创始人Vitalik Buterin之手才普及开来。值得注意的是,各个区块链实施智能合约的方式有所不同。 

    本文将重点介绍运行在以太坊虚拟机(EVM)中的智能合约,而以太坊虚拟机是以太坊区块链的重要组成部分。

    智能合约如何运行?

    简单来说,智能合约是一种确定性程序,会在满足某些条件时,执行特定任务。因此,智能合约系统通常遵循“如果……就……”的条件语句。虽然“智能合约”这个概念已广为人知,但它其实既非法定合约,也不智能。它们只是运行在区块链分布式系统中的一段代码。

    在以太坊网络中,智能合约负责执行和管理用户(地址)彼此交互时的区块链操作。智能合约以外的地址称为“外部账户(EOA)”。因此,智能合约由计算机代码控制,而外部账户(EOA)由用户掌控。

    以太坊智能合约基本上由合约代码和两个公钥组成。第一个公钥由合约创建者提供,另一个公钥即为合约本身,用作每个智能合约的唯一数字标识符。

    所有的智能合约部署都通过区块链交易进行,只有在外部账户(EOA)或其他智能合约被调用时才会激活。但是,智能合约一般由外部账户(EOA),即用户首次触发。

    关键特性

    以太坊智能合约具有以下常见特征:

    分布式。智能合约在以太坊网络的所有节点中复制和分布。这与其他基于中心化服务器的解决方案截然不同。

    确定性。满足要求时,智能合约仅执行预先设计的操作。而且,无论由谁执行,结果均保持一致。

    自主性。智能合约相对于“自执行”程序,会自动完成各种任务。大多数情况下,未触发的智能合约保持“休眠”状态,不会执行任何操作。

    不变性。智能合约在部署后无法更改。只有实现特定功能后,智能合约才可“删除”。所以,我们不妨说,智能合约提供防篡改代码。

    定制化。部署之前,智能合约通过各种各样的方式编码。因此,可用于创建种类繁多的去中心化应用程序(DApp)。这与以太坊属于图灵完备区块链这一事实息息相关。

    去信任化。在无需相互了解或信任的情况下,两方或多方可通过智能合约交互。此外,区块链技术将确保数据准确无误。

    透明性。智能合约的基础是公共区块链,因此源代码不仅不可篡改,而且对所有人公开透明。

    智能合约是否可更改或删除?

    一经部署,以太坊智能合约无法再添加新的函数。但是,只要合约创建者在代码中预留了“SELFDESTRUCT”函数,该函数之后即可“删除”智能合约,并用新合约取而代之。如代码中未预留该函数,则智能合约无法删除。

    值得注意的是,通过所谓的可升级智能合约,开发人员对合约的不变性可进行更灵活的操作。创建可升级智能合约的方式多种多样,每种的复杂程度都有所不同。

    举个简单的例子,假设一个智能合约划分为多个较小的合约。某些部分设计为不可变更,而其他部分启用“删除”函数。也就是说,部分代码(智能合约)可删除和替换,而其他功能保持不变。

    优势和用例

    作为可编程代码,智能合约高度可定制,设计方式众多,提供丰富多样的服务和解决方案。

    作为去中心化和自执行程序,智能合约可提高透明度并降低运行成本。根据具体实施情况,智能合约还可提高实施效率并降低繁琐费用。

    涉及到两方或多方的资金转账或交易,智能合约尤为实用。

    换句话说,智能合约可针对丰富的用例量身打造,包括创建代币化资产、投票系统、加密货币钱包、去中心化交易平台、游戏和移动App。智能合约还可与其他区块链解决方案共同部署,覆盖医疗保健、慈善、供应链、治理和去中心化金融(DeFi)等领域。

    ERC-20

    以太坊区块链发布的代币遵循ERC-20标准。该标准规定所有以太坊代币的核心功能。因此,这些数字资产通常称为“ERC-20代币”,在现有加密货币中占有很大的比重。

    许多区块链公司和初创公司都部署了智能合约,以便在以太坊网络中自主发行数字代币。代币发行后,大多数公司通过首次代币发行(ICO)来分配自家的ERC-20代币。大多数情况下,使用智能合约即可通过去信任化的方式,有效实现资金交易和代币分配。

    局限

    智能合约由人工编写的计算机代码组成。代码会存在缺陷与漏洞,将带来诸多风险。按照理想的做法,智能合约应由经验丰富的程序员编写部署,涉及敏感信息和巨额资金时更该如此。

    除此之外,有人认为中心化系统就能提供智能合约的绝大多数解决方案和功能。主要区别在于智能合约运行于分布式P2P网络中,而不是中心化的服务器。而且,智能合约以区块链系统为基础,因此往往不可篡改或难以更改。

    智能合约的不变性优势明显,但在某些情况下却适得其反。例如,去中心化自治组织“The DAO”于2016年惨遭黑客攻击,数百万枚以太币(ETH)不翼而飞,其原因就是智能合约代码存在缺陷。

    由于智能合约不可变,开发人员无法修复代码。这最终导致了硬分叉,第二个以太坊链由此诞生。简言之,一条链(当前以太坊区块链的一部分)“恢复”到黑客攻击之前的原样,将资金返还原主。另一条链(现在称为“以太坊经典”)则决定不干预黑客攻击,坚称区块链中发生的事件永远不应并篡改。

    需要注意的是,该问题并不是由以太坊区块链造成,而是因智能合约的错误执行所引发。

    智能合约的另一局限性则与其不明确的法律效应相关。智能合约在大多数国家都处于灰色地带,而且还不适用于当前的法律框架。

    例如,许多合约要求交易双方需通过恰当的实名认证且年龄超过18周岁。但区块链技术具有匿名性,加之缺少中间机构,就会与合约要求相冲突。应对该问题的解决方案未来或许会出现。但智能合约运行于无国界的分布式网络中,法律执行难度非常大。

    弊端

    有些区块链爱好者把智能合约视为即将取代现有大部分商业和官僚系统的自治解决方案。虽然这个想法可能会实现,但要成为常态还任重而道远。

    智能合约确实是一项有趣的技术。但是,分布式、确定性、透明性和不变性等特征有时反而降低了智能合约的吸引力。

    智能合约的本质弊端在于其并不能很好地解决诸多现实问题。事实上,有些机构目前使用传统的服务器解决方案才是权宜之计。 

    与智能合约相比,中心化服务器的维护更容易,成本更低,并且在速度和跨网络通信(互操作性)方面往往具有较大优势。

    总结

    毫无疑问,智能合约对加密货币领域产生了深远影响,也确实为区块链领域带来了重大变革。终端用户不一定直接与智能合约交互。但在不久的将来,智能合约的应用会更广泛,将覆盖金融服务、供应链管理等各个领域。

    智能合约和区块链几乎共同颠覆了当今社会的所有领域。但只有时间才能证明,这些突破性技术是否能突破重重障碍,最终实现大规模普及。