EWASM Gas Costs——gas 计算
https://ewasm.readthedocs.io/en/mkdocs/determining_wasm_gas_costs/
本文件目的是描述如何确定ewasm指令的gas成本。
每个WASM操作码都分配一个适当的Intel IA-32(x86)操作码(或者是一系列操作码)。这些操作码具有固定的周期计数(Intel称为latency)。我们正在从Haswell架构(家族:06,型号3C)中选择一个特定的CPU模型。这相当于2014年生产的CPU。
- 假设1:这个特定的haswell机构 CPU代表了以太坊节点计算能力的平均值。我们假设2.2 GHz是平均值。
据英特尔公司称,2.2GHz的时钟频率大致相当于每秒2 200 000 000个周期。
- 假设2: CPU 1秒钟执行相当于消耗1000万gas(即1gas相当于0.1 US)。
相当于每个周期消耗0.0045gas。(10 000 000/2 200 000 000)
从这个角度来看,截至2016年8月,平均每区块gas的限制约为470万。基于这一假设,我们允许智能合约执行时,在15秒阻塞时间中最高占用0.5秒,这也必须包括其他处理,例如POW和网络往返时间。
- 假设3:gas定价是定期调整的,至少每3年调整一次。
我们假设CPU在不断改进,以太坊节点的硬件每3年升级一次(与通常的更新频率相匹配)。
虽然本文档不提供升级程序,但是未来会有一个专门用于gas 定价的oracle智能合约,它可以用于计量智能合约。
Gas vs. Particles
目前的gas匹配算力方面没有提供准备的精度,而是假设运行的WASM操作码与EVM1操作码相比,处理能力显著降低。
理由:EVM1操作码操作256位数据,而WASM操作码被限制为64位,这将导致即使WASM在最佳情况下也需要执行四条指令才可以匹配EVM1。EVM1中的大多数算术指令花费3个GAS,而对于大多数64位WASM指令,这相当于0.75个GAS。
在内部,Ewasm 的gas测量值应记录在精度为4位小数的64位的变量中,。我们称之为particles。这只是一个小的实现细节,实际上我们使用整数,将其转为适当的gas。
当把particles数转换成以太坊 gas时,它必须除以10000,并且必须四舍五入。如果结果小于0,则应等于1。
Gas costs of individual instructions
Gas 消耗的公式为:<cycle count> * <gas per cycle>
Registers
Memory
Flow Control
Calls
Constants
32-bit Integer operators
64-bit Integer operators
Datatype conversions, truncations, reinterpretations, promotions, and demotions
Type-parametric operators.
Other
Notes about complex instructions
上面的一些指复杂的令很,不能一一映射到机器指令。对于它们,我们假设下面的算法,并根据组件成本计算气体。
i32.clz
32bit数,前n bit置0。
如果计算clz函数中单个指令的周期,则-6 if -6 then-2 return-5 and-5 eqz,-11 get_local,-11 set_local,-5 add,-5 shl
在最坏的情况下,总共有104.5个周期。
注意:CLZ是最常见的CPU上固有的命令,像Intel和ARM CPU。我们可以将其视为以太坊的固有命令,属于一个经济型的命令。
i32.ctz
32bit数,后n bit清零。
他和i32.clz相同的步骤,所以消耗是一样的。
注意:CTZ并不存在于ARM CPU上。ARM应被视为以太坊轻客户机的重要平台,因此在把他归属于基于复杂的类型的gas 消耗是明智的。
i32.popcnt
32bit数总1的个数。
i64.clz
同i32.clz
i64.ctz
同i32.ctz
i64.popcnt
同i32.popcnt
i64.extend_s/i32
把32bit扩大到64
select
三元运算符。
breaking out of the VM
任意暂停虚拟机并在ewasm合约和主机之间传输数据的指令都会暂时脱离虚拟机。
这些指令包括:- current_memory - grow_memory - call_indirect - call_import
EWASM Gas Costs——gas 计算相关推荐
- 以太币转帐速度_燃起来吧!一文带你读懂以太坊网络中的Gas、Gas Fee、Gas Price、Gas...
曾用过区块链相关应用,不管是交易所.DApp 或是虚拟货币钱包的人,一定都听过矿工费(Gas Fee) 这个词.它是当你要在区块链网路发起一笔交易时,所要支付给矿工的一笔手续费.其实很容易理解,就好比 ...
- filecoin lotus 转账fil流程和gas计算
文章目录 转账流程 和 gas计算 完整信息转账 签名 签名过程 消息广播 广播过程 自动计算gas发送交易 GAS 计算gasLimit,gasPreium,gasFeeCap GasEstimat ...
- 【译】Economics of Fees and Gas
以太坊(和Qtum )的天然气基本上是智能合约中的一项作业成本. 不同的操作有不同的成本. 有些非常便宜,有些并不便宜. 这种机制基本上是阻止某些行为的一种方式,也可以使垃圾邮件和对区块链的攻击更加昂 ...
- [leetcode] Gas Station
题目描述: There are N gas stations along a circular route, where the amount of gas at stationi is gas[i] ...
- 134. Gas Station 加油站
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升.你从其中的一个加 ...
- LeetCode 134.Gas Station 解题分析
题目来源: https://leetcode.com/problems/gas-station/description/ 题目描述: There are N gas stations along a ...
- 弄懂gas费,读这篇就够了
Q:gas是什么? gas是指在以太坊上执行操作所需的"燃料". 以太坊提供了虚拟机(EVM,Ethereum Virtual Machine),开发者可以在其上开发各种应用.EV ...
- 【区块链】走进web3的世界-gas费用
气体单位用于衡量在以太坊上执行交易所需的计算量.由于每笔交易都需要一些计算资源来执行,因此需要一笔费用,通常称为Gas fee或Transaction fee . 汽油费以以太坊的本地货币--ethe ...
- unix 汇编语言 GAS
.macrocomm Beginthe definition of a macro called comm, which takes noarguments. .macroplus1 p, p1 .m ...
最新文章
- python命令之m参数 局域网传输
- ORB-SLAM2代码/流程详解
- 一.js高级(4)-函数调用-this指向-其他参数
- 《代码大全》阅读笔记-18-表驱动法
- [补档]noip2019集训测试赛(十)
- Spring3.0_调试错误集
- ospybook安装包及安装过程
- 【统计分析】2 地理统计
- javaweb_表单设计
- 写作专用各种表情和符号,使你的文章更加美观有趣!❤️❤️❤️
- SpringBoot学期总结
- 零基础学习人工智能如何入门?
- Pre-Upgrade Utility---下载并运行Oracle数据库预升级实用程序 (文档 ID 1577379.1)
- 足球视频AI(一)——位置与平面坐标的转换
- 2021年12月9日|12月10日|
- 当uniapp遇上滚动穿透,巧妙的解决方式~
- WCS仓库(分拣)控制系统 案例介绍
- 15-英特尔驱动下载安装
- python 高空坠球_题目:一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第 10 次落 C程序:一球从100米高...
- 看懂这篇文章,你就懂了信息安全的密码学