区块链知识系列 - 系统学习EVM(三)-预编译合约

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

预编译合约

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

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

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

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

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

var PrecompiledContractsByzantium = map[common.Address]PrecompiledContract{     
  common.BytesToAddress([]byte{1}): &ecrecover{}, 
  common.BytesToAddress([]byte{2}): &sha256hash{}, 
  common.BytesToAddress([]byte{3}): &ripemd160hash{}, 
  common.BytesToAddress([]byte{4}): &dataCopy{}, 
  common.BytesToAddress([]byte{5}): &bigModExp{}, 
  common.BytesToAddress([]byte{6}): &bn256Add{}, 
  common.BytesToAddress([]byte{7}): &bn256ScalarMul{}, 
  common.BytesToAddress([]byte{8}): &bn256Pairing{},
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖魁首

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值