知识库
返回
explainCKBot·
2 mins
区块链技术中的预编译合约是什么?

在不断演进的区块链与加密货币领域,预编译合约是基于以太坊的网络中的一个重要概念。

cover

这些预编译合约(precompiled contract)在协议层处理复杂操作,而不是通过标准智能合约执行,从而提高区块链效率。本指南将介绍预编译合约是什么、它们如何在以太坊虚拟机(EVM)中运行,以及它们对区块链开发的意义。

理解区块链中的预编译合约

预编译合约通常简称 precompiles,是区块链技术中独特且不可或缺的一部分,尤其是在以太坊虚拟机中。标准智能合约使用 Solidity 等高级语言编写,再编译为字节码(bytecode),交由 EVM 执行。预编译合约则如其名称所示,预先内置于以太坊协议本身。

预编译合约的主要特征,是其特定、硬编码的性质。它们专门执行某些计算密集型的复杂操作;如果把这些操作写成智能合约代码来执行,效率就会很低。这些操作往往涉及区块链功能所必需的密码学过程或算法。

理解预编译合约的技术细节很重要。它们深度集成于以太坊协议,与普通智能合约不同,并不以常规方式在 EVM 中执行。它们属于以太坊客户端规范的一部分,因此运行在区块链基础设施中更底层的位置。

要理解其效率,可以考察在区块链上执行操作所需的 gas 成本。通过预编译合约执行操作,消耗的 gas 只是将同样操作用 Solidity 编写时的一小部分。这是因为预编译合约在协议层经过优化,并由节点软件实现,从而提高计算效率、降低交易成本。

预编译合约与标准智能合约有何不同?

标准智能合约部署后,位于区块链上的特定地址,被调用时由 EVM 执行。它们用途广泛,可以根据开发者需求编写,实现各种功能。

预编译合约则不是以常规方式部署的。它们位于 EVM 中某些预定义地址,并通过整条区块链的硬分叉(hard fork)引入。其功能仅限于设计时指定的操作,但这一限制也带来了效率优势。

与将同样功能写入标准智能合约相比,预编译合约执行指定功能的速度快得多,计算开销也更低。这是因为大多数预编译合约没有 Solidity 封装,意味着开发者通常必须直接通过 EVM 与其交互。可以使用 Solidity 的底层调用方法,甚至使用为以太坊设计的中间语言 Yul 来完成这种交互。

使用预编译合约的典型例子,是实现数字签名恢复(digital signature recovery)等密码学功能,例如 ecrecover。这个过程需要以特定参数调用预编译合约地址来执行操作,比用 Solidity 编写整个密码学函数更高效。

预编译合约的类型与功能

以太坊的预编译合约位于 EVM 内的预定义地址,提供多种功能。以太坊最初只有少数预编译合约,后来通过拜占庭分叉(Byzantium fork)和伊斯坦布尔分叉(Istanbul fork)等网络升级扩充了这一列表。每个预编译合约都有专门用途,主要涉及密码学操作和其他复杂计算。

预编译合约的具体功能

椭圆曲线数字签名恢复(ecrecover): 位于地址 0x01 的这个预编译合约,对于从数字签名恢复以太坊地址至关重要。它能够确定交易签名者,因此是验证交易的基础。简单来说,ecrecover 有助于确认提交给智能合约的消息由谁签署;对于构建在以太坊之上的抽象而言,这是维护交易完整性的关键环节。

SHA-256 与 RIPEMD-160 哈希函数: 这两个预编译合约分别位于地址 0x02 和 0x03,负责哈希运算。SHA-256 是一种广泛使用的密码学哈希函数,用于确保数据完整性。RIPEMD-160 在以太坊中较少使用,却是比特币地址生成过程的重要组成部分。这些预编译合约让以太坊能够验证涉及比特币的交易。

恒等函数(Identity): 位于地址 0x04 的这个预编译合约简单而高效,用于执行数据复制操作。它本质上是 EVM 内部的内存复制工具,能够快速、节省 gas 地复制数据。

模幂运算(Modexp): 这个预编译合约为 RSA 加密等高级密码学操作而引入,用于执行模幂运算(modular exponentiation),这是公钥密码学中使用的一种数学运算。

椭圆曲线运算(ecAdd、ecMul 和 ecPairing): 地址 0x06、0x07 和 0x08 上的预编译合约用于椭圆曲线运算,这些运算对构建零知识证明(Zero Knowledge Proof)(ZKP)必不可少。ecAdd 和 ecMul 分别对椭圆曲线上的点执行加法和乘法,ecPairing 则检查点对是否满足某种特定的椭圆曲线关系。

Blake2 压缩函数(compression function,Blake2f): 这个预编译合约在伊斯坦布尔升级中加入,位于地址 0x09,支持 Blake2 哈希函数,有助于高效的数据压缩,对于与另一个区块链网络 Zcash 的互操作性尤其重要。

每个预编译合约都满足一种特定需求,无论是密码学验证、高效数据处理,还是高级数学运算。它们在以太坊区块链中的存在,体现了密码学稳健性与计算效率的结合,使以太坊成为一个用途广泛且安全的平台,能够支持多种应用。

不同区块链平台上的预编译合约

前面的讨论主要围绕以太坊的预编译合约实现展开,其他区块链平台也采用了类似概念。不过,各个平台的具体预编译合约及其实现可能差异很大,部分原因是不同区块链有不同的重点和能力。

例如,在优先考虑可扩展性和互操作性的新型区块链平台中,预编译合约可能包含促进跨链交互或支持新共识机制的功能。因此,开发者在不同区块链之间迁移智能合约时,必须了解预编译合约的差异,以确保兼容性和效率。

结语

预编译合约是区块链技术中至关重要、却经常被忽视的组成部分。它们将效率与功能结合起来,使复杂操作能够顺畅、低成本地执行。随着区块链技术不断演进,预编译合约的角色和能力可能继续扩展,进一步提升区块链网络的效率和功能。

理解预编译合约,有助于深入认识区块链技术的内部运作,也能让我们理解那些细微而复杂的机制,正是它们使区块链成为如此强大且具有变革性的工具。

end