全链游戏101:预编译合约

OKX欧易app

OKX欧易app

欧易交易所app是全球排名第一的虚拟货币交易所,注册领取6万元盲盒礼包!

APP下载   官网注册

来源:Gametaverse

目前两款最有潜力的全链游戏引擎Curio和Argus都选择通过定制化节点的预编译合约来提高对游戏状态的查询性能以及增加对特定全链游戏的适配性,那么究竟什么是预编译合约,以及为什么预编译合约可以提高性能呢?结下来请看这篇科普短文:全链游戏101之预编译合约。

什么是预编译合约?

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

如下代码可以看到, evm.go的合约中run函数有两个分支:第一个分支是通过预编译索引来实例化索引参数从而指定预编译合约,第二个分支是如果它不是预编译合约那evm将会被调用。

//runrunsthegivencontractandtakescareofrunningprecompileswithafallbacktothebytecodeinterpreter.funcrun(evm*EVM,contract*Contract,input[]byte,readOnlybool)([]byte,error){ifcontract.CodeAddr!=nil{precompiles:=PrecompiledContractsHomesteadifevm.ChainConfig().IsByzantium(evm.BlockNumber){precompiles=PrecompiledContractsByzantium}ifp:=precompiles[*contract.CodeAddr];p!=nil{returnRunPrecompiledContract(p,input,contract)}}for_,interpreter:=rangeevm.interpreters{ifinterpreter.CanRun(contract.Code){ifevm.interpreter!=interpreter{//Ensurethattheinterpreterpointerissetback//toitscurrentvalueuponreturn.deferfunc(iInterpreter){evm.interpreter=i}(evm.interpreter)evm.interpreter=interpreter}returninterpreter.Run(contract,input,readOnly)}}returnnil,ErrNoCompatibleInterpreter}

用图形来表示的话,具体的逻辑如下图:

qywWWb5gt8l7VZJQbIvoAyoVlqiSjncPOnWk7feQ.png

那么预编译合约的瓶颈在哪里?

以太坊目前有八个预编译的合约:

ECRecover - 通过签名恢复对应地址

SHA256 - 计算SHA256哈希

RIPEMD160 - 计算RIPEMD160哈希

Identity - 返回输入数据的原值

ModExp - 进行模数指数运算

ECAdd - 椭圆曲线点加法

ECMul - 椭圆曲线点乘法

ECPairing - 配对运算,验证椭圆曲线点

可以看到第一到第四个预编译合约提供的基础的签名,哈希等加密功能,第五个到第八个提供了椭圆曲线运算,这些和zk-snark相关。

那么问题来了,为什么以太坊预编译只支持了八个预编译合约,预编译合约不是降低了gas消耗吗?而且为什么不直接把ECS(全链游戏的框架)植入以太坊预编译合约中呢?

其实主要是以下三个原因:

1.过度依赖预编译合约会降低整个平台的去中心化程度:

首先,预编译合约的代码需要集成在客户端节点代码中,增加了客户端的复杂性。第二,验证节点可能因为安全原因可能会过滤掉预编译合约的计算,所以大部分预编译合约的请求是由全节点完成的,目前全球的以太坊全节点的数量只有4000-6000个,而且验证节点有50万个,确实比起非预编译合约要中心化很多。

2.预编译合约的新增和修改需要硬分叉升级,不易灵活演进。

预编译合约的支持需要进行EIP流程,举个例子:EIP-196增加了在alt_bn128曲线上的ECADD()和ECMUL()两个预编译合约。EIP-197增加了在alt_bn128曲线上的配对Pairing函数。基本都是为了让隐私在以太坊上可用进行支持,而且整个EIP的流程是漫长和考究的,等待EIP通过也不是一个现实的问题。

3.预编译合约之间难以进行交互和组合,扩展性差。

这点就不多做解释了,很直观。

预编译合约在全链游戏扮演什么角色?

预编译合约跳过EVM直接通过节点执行,可以提升运算效率,但同时降低了全链的去中心化程度。将高频使用的游戏核心逻辑置于预编译中,可以优化该类游戏的性能。不同的游戏类型,其关键逻辑也不尽相同。因此,针对某一类游戏的专用链上,其预编译设计可以高度优化该类型游戏的需求。在游戏迭代过程中,最具效率的预编译合约组合也会逐步优化出来。

本站所有软件信息均由用户上传发布,版权归原著所有。如有侵权/违规内容,敬请来信告知邮箱:764327034@qq.com,我们将及时撤销! 转载请注明出处:https://czxurui.com/zx/59806.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年08月16日
下一篇 2023年08月16日

相关推荐

  • 合约倍数是什么意思,合约里的倍数是什么意思

    一、合约里的倍数是什么意思合约里的倍数是指交易金额相对于标的物的数量的放大程度。详细解释如下:在金融业务中,合约通常指的是金融衍生品合约,如期货、期权等。这些合约允许投资者通过少量现金投入,就能参与到大量的标的资产交易中。倍数在这里起到了关键作用,它代表了

    2024-12-23 10:00:01
    1 0
  • 比特币怎么做期货,什么是比特币期货合约

    一、币圈包括期货吗币圈里面的期货不能叫期货,因为这不是正经的合规合法的期货,所以叫了一段时间后,被币圈里面的人改了名字,现在币圈里面的期货都叫“合约”。但是长时间那么叫也习惯了,异客在这里就暂时先不改这称呼了,毕竟换汤不换药,大家都知道是什么回事。异客一直

    2024-12-22 19:00:01
    4 0
  • 永续合约什么情况下爆仓,永续合约爆仓了会欠钱吗

    一、永续合约会爆仓吗永续合约会通过自动减仓来减少对手的盘仓位,这样就降低了市场风险。同时永续合约的价格设计机制,也让其不容易被恶意爆仓,但是永续合约也会爆仓,只不过没有分摊和插针。所以永续合约投资并不是没有爆仓的风险,就看投资者怎么去操作了。二、永续合约爆

    2024-12-22 16:00:01
    2 0
  • 虚拟币区块怎么查询,如何查区块链合约地址信息

    一、怎么查询所有区块链公链公链在哪里查询公链在浏览器查询。随着区块链的大热,越来越多的科技公司开始研究和开发区块链。在区块链迅速发展的同时,也有少部分项目方打着区块链的名号,在市面上进行招摇撞骗。如何判断公链真假,对于现在许多想要进行数字货币交易的群体来说

    2024-12-22 04:30:01
    4 0
  • hotcoin交易平台是什么,Hotcoin是什么合约交易所

    一、热币Hotcoin交易所靠不靠谱1. Hotcoin(热币)交易所是一个靠谱的平台,拥有全球最大的用户增长之一。2.该平台专注于提供数字资产兑换交易服务,并且致力于区块链技术的创新与研发。3. Hotcoin旨在为全球用户提供一个安全、便捷、高效的数字资产兑换环境,努力成为全球领

    2024-12-20 10:00:01
    7 0
  • usdt现货是什么意思,usdt永续合约是什么意思

    一、砸盘吸筹是什么意思庄家坐庄时的巨大资金要想悄无声息地就进驻到某一只上市公司股票中,也非一日一时之功。往往需要在相对的价格低位上反复震荡,或者通过长期横盘的方式令短线客忍无可忍.最后敬而远之:或者通过上蹄下跳的股价跳跃方式引诱散户难耐寂寞而低抛高吸,使之最

    2024-12-18 02:30:01
    10 0

发表回复

8206
验证码

评论列表(0条)

    暂无评论

ok交易所
已有100万用户加入ok交易所

立即下载