原文作者:PaperMoon团队
以太坊原生预编译合约(Ethereum-native precompiles)是在运行时层(runtime level)实现的特殊合约,用于提供关键的密码学能力与通用工具函数。这些预编译合约部署在预定义地址上,对一些在纯合约代码中实现成本极高或几乎不可行的操作,提供了高度优化的原生实现。
在 Polkadot Hub 的 Revive pallet 中,这些预编译合约保持了与以太坊标准地址的完全兼容性,使熟悉以太坊的开发者可以无缝迁移现有智能合约,同时享受 PVM 运行时带来的性能优化。
如何使用预编译合约
在智能合约中使用预编译合约的方式,与调用普通合约完全一致:
直接调用对应的预编译地址即可。
每个预编译合约都有一个固定地址(见下表),并且对输入数据格式有明确要求。调用后,预编译逻辑会在运行时原生执行,并将执行结果直接返回给合约。
例如,若要使用 ECRecover 预编译合约来验证签名,只需调用地址:
0x0000000000000000000000000000000000000001
并传入符合格式要求的签名数据即可。预编译合约会高效地完成复杂的密码学计算,并返回恢复得到的公钥。
你可以在 precompiles-hardhat 项目中找到每个预编译合约对应的示例合约。
Polkadot Hub 中支持的标准预编译合约
Revive 实现了以太坊标准定义的一整套预编译合约:
| 合约名称 | 地址(最后一个字节) | 描述 |
|---|---|---|
| ECRecover | 0x01 | 从签名中恢复对应的公钥 |
| Sha256 | 0x02 | 实现 SHA-256 哈希函数 |
| Ripemd160 | 0x03 | 实现 RIPEMD-160 哈希函数 |
| Identity | 0x04 | 数据拷贝函数(输入即输出) |
| Modexp | 0x05 | 模幂运算(Modular Exponentiation) |
| Bn128Add | 0x06 | alt_bn128 曲线上的加法 |
| Bn128Mul | 0x07 | alt_bn128 曲线上的乘法 |
| Bn128Pairing | 0x08 | alt_bn128 曲线上的配对检查 |
| Blake2F | 0x09 | Blake2 哈希函数的压缩函数 F |
以太坊原生预编译合约为 Polkadot Hub 上的智能合约开发提供了高性能、可靠的基础能力,涵盖了关键的密码学操作和通用工具函数。
通过保持与以太坊预编译合约地址和接口的完全一致性,Revive 让开发者能够继续使用熟悉的知识体系与开发工具,同时获得 运行时原生执行所带来的性能提升。
原文链接:https://docs.polkadot.com/smart-contracts/precompiles/eth-native/
1068

被折叠的 条评论
为什么被折叠?



