主页 > 知乎imtoken苹果 > 【教程】如何在FISCO-BCOS中修改EVM的gas值
【教程】如何在FISCO-BCOS中修改EVM的gas值
前言
大家可能都听说过或者了解过以太坊。 相信对于以太坊底层的EVM,大家不会很陌生。 FISCO-BCOS 也有 EVM。 有了EVM就意味着要有gas进行结算,所以我们可以根据gas做一些文章来防止某些攻击。
有一定了解的同学可以选择浏览。
EVM
为了照顾一些新同学,我们还是选择在这里解释什么是EVM,以及它是如何工作的。 有一定了解的同学可以选择浏览。
那么我们开始介绍,说到EVM大家可能经常会听到一些类似的词,比如JVM,VM之类的词,这些都是虚拟机的意思,EVM就是以太坊的虚拟机(不知道是什么虚拟机是同学可以看下一段),哎,这时候有同学有疑惑,他要虚拟机干什么,我们以太坊代表区块链进入2.0时代,那么这个2.0就是智能合约与区块链 区块链的结合以太坊是谁创建的,让区块链摆脱了数字货币的局限。 那么,要运行编程语言等程序,就会涉及到稳定性的问题。 让我们谈谈执行以太坊交易时会发生什么。
当以太坊链上发生转账交易时,以太坊虚拟机(EVM)会执行以下一系列任务:
那么,有了EVM的存在,以太坊就变得非常完备了,它的完备性有以下优点:
易于测试:为了保证各种“智能合约”的顺利执行,我们需要为它们创造一个安全的运行环境,而以太坊虚拟机就是一个代码运行环境。
正如我们上面所说,虚拟机中的各种操作不会影响到宿主机,任何开发者想要在以太坊虚拟机上创建智能合约,都可以在虚拟机上测试各种应用,而不会占用主链的资源 也是不受其他区块链的影响。
增加安全性:以太坊承载各种功能强大的应用,其逻辑更加复杂,开发者更容易出现各种漏洞。 以太坊虚拟机是一个完全独立的沙箱,合约代码可以与外部完全隔离,在EVM内部运行。
不仅可以防止整个主链受到不法分子或程序员编程错误的影响,还可以防止运行智能合约的物理设备受到攻击。
保证稳定性:由于以太坊网络的每个节点上都部署了以太坊虚拟机,整个以太坊网络的数据由众多节点共同维护和更新以太坊是谁创建的,保持了整个区块链数据的一致性,这也使得以太坊的车间具有极高的容错能力,保证零停机。
虚拟机
有一定了解的同学可以选择浏览。
计算机科学专业的学生应该对“虚拟机”不陌生。 “虚拟机”是指通过软件模拟出具有完整硬件系统功能,运行在完全隔离的环境中的完整计算机系统。
通俗地说,虚拟机就是我们通过软件模拟出来的和我们的个人电脑一模一样的虚拟机,它拥有和实际物理电脑一样的软硬件资源。 进入虚拟系统后,我们所有的日常操作都可以在这个全新的、独立的虚拟系统中进行,软件可以独立安装运行、数据保存等。 这样我们就可以在虚拟机里尽情的折腾了,也不怕各种病毒和攻击了。 最坏的情况是,重装虚拟机对真实系统不会有任何影响。
对于JVM等一些虚拟机来说,它们的作用就没有那么简单了。 JVM是java的虚拟机,它为什么存在? 这是因为java诞生于1990年代。 那时,存在各种类型的操作系统。 还可以看到,Apple系统有Apple系统软件,Windows有Windows系统软件,Android(linux)有Android软件,因为底层编码不同,所以彼此不一样。 所以在java准备成为流行语言的时候遇到了一个问题,就是如何让它运行在每一个操作系统中。 一开始java也跟他们一样,每个操作系统都写了一份。 相应的代码就出来了,但是这样会大大增加代码迭代更新的成本,所以java进行了一次破产改革,第一次使用内置的虚拟机,这样不管你的底层编码是什么,我只需要运行我的虚拟机就可以了,我让我的java程序在我的JVM中运行。 维护成本大大降低,这也使得java语言经久不衰至今。
文本
FISCO BCOS 兼容以太坊虚拟机(EVM)。 为了防止针对 EVM 的 DOS 攻击,在 EVM 执行交易时,EVM 引入了 gas 的概念来衡量智能合约执行过程中消耗的计算和存储资源。 ,包括交易的最大gas限额和区块的最大gas限额。 如果交易或区块执行消耗的gas超过限制(gas limit),则该交易或区块将被丢弃。
修改gas值
FISCO-BCOS在group.id.genesis中设置
[tx]
; transaction gas limit
gas_limit=300000000
gas_limit:配置交易的最大gas limit,默认为300000000,链初始化后,可以通过控制台命令动态调整gas limit。
为了防止dos攻击,我们可以将gas值设置的小一些。 通常,区块链具有最大性能。 如果超过这个值,区块链就会瘫痪。 在正常使用中,我们的gas值消耗最多不会超过50000,所以如果要投入使用,我们可以修改gas_limit为50000。
我们还可以通过提高CPU和内存在Gas消耗中的占比,让Gas消耗更加合理。 这里是FISCO-BCOS的Gas测量模式,默认是关闭的。
[evm]
enable_free_storage=false
下面分别介绍非FreeStorage模式和FreeStorage模式下EVM虚拟机和Precompiled合约的gas计量标准:
EVM 虚拟机气体指标
Gas 描述 EVMSchedule 模式下的 Gas 消耗量 FreeStorage EVMSchedule 模式下的 Gas 消耗量 EVMSchedule 模式下的 Gas 消耗量
创造气体
创建合约的耗气量
32000
16000
加载气体
从存储中读取 32 字节数据所消耗的 gas
200
1200
sstoreSet气体
添加 32 字节数据到存储的 gas 消耗
20000
1200
sstore重置气体
更新 32 字节存储数据的耗气量
5000
1200
修改存储方式
FISCO-BCOS有两种存储方式,一种存储在本地系统表中,一种存储在MPT树中。 两种存储方式之间存在一些差异。
在 FISCO-BCOS 的 group.id.genesis 中设置
[state]
type=storage