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. 假设1:这个特定的haswell机构 CPU代表了以太坊节点计算能力的平均值。我们假设2.2 GHz是平均值。

据英特尔公司称,2.2GHz的时钟频率大致相当于每秒2 200 000 000个周期。

  1. 假设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和网络往返时间。

  1. 假设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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值