区块链知识系列 - 系统学习EVM

Posted 搬砖魁首

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链知识系列 - 系统学习EVM相关的知识,希望对你有一定的参考价值。

区块链知识系列 - 系统学习EVM(一)
区块链知识系列 - 系统学习EVM(二)

预编译合约

今天我们来聊聊以太坊的预编译合约

由于 EVM 是一个基于堆栈的虚拟机,它根据交易所要执行的操作指令内容来计算 gas 消耗,如果计算非常复杂,在 EVM 中执行相关操作指令就会非常低效,而且会消耗大量的 gas。 例如,在 zk-snark 中,需要对椭圆曲线进行加减运算和配对运算。 在 EVM 中执行这些操作是非常复杂和不现实的。所幸以太坊还支持预编译合约

预编译合约是 EVM 中用于提供更复杂库函数(通常用于加密、散列等复杂操作)的一种折衷方法,这些函数不适合编写操作码。 它们适用于简单但经常调用的合约,或逻辑上固定但计算量很大的合约。 预编译合约是在使用节点客户端代码实现的,因为它们不需要 EVM,所以运行速度很快。 与使用直接在 EVM 中运行的函数相比,它对开发人员来说成本也更低。

在以太坊中已经实现了不少预编译合约了,比如下面这些:

以太坊Geth客户端的预编译合约清单看起来像这样:

var PrecompiledContractsByzantium = map[common.Address]PrecompiledContract     
  common.BytesToAddress([]byte1): &ecrecover, 
  common.BytesToAddress([]byte2): &sha256hash, 
  common.BytesToAddress([]byte3): &ripemd160hash, 
  common.BytesToAddress([]byte4): &dataCopy, 
  common.BytesToAddress([]byte5): &bigModExp, 
  common.BytesToAddress([]byte6): &bn256Add, 
  common.BytesToAddress([]byte7): &bn256ScalarMul, 
  common.BytesToAddress([]byte8): &bn256Pairing,


往期精彩回顾:
区块链知识系列
密码学系列
零知识证明系列
共识系列
公链调研系列
BTC系列
以太坊系列
EOS系列
Filecoin系列
联盟链系列
Fabric系列
智能合约系列
Token系列

以上是关于区块链知识系列 - 系统学习EVM的主要内容,如果未能解决你的问题,请参考以下文章

区块链知识系列 - 系统学习EVM

区块链知识系列 - 系统学习EVM

区块链知识系列 - 系统学习EVM

区块链知识系列 - 系统学习EVM-zkEVM

区块链 智能合约 虚拟机 EVM 资料总结

区块链 智能合约 虚拟机 EVM 资料总结