以太坊 gas费

gas是什么?

gas是指在以太坊上执行操作所需的“燃料”。

以太坊提供了虚拟机(EVM,Ethereum Virtual Machine),开发者可以在其上开发各种应用。EVM相对BTC的好处是“图灵完备”,但这带来一个潜在风险,就是一个程序可能无休止的运行下去,对EVM而言,这是不能容忍的。

所以,运行程序要花gas。就好比开车要花油费或电费,油或电用完了,车自然会停下来。 

gas、gas价格、gas费是一个东西吗?

你使用EVM执行一个交易,需要若干个gas,这被称为gas数。类似于油的升数、电的度数。

而每一个gas都是需要花钱的,gas有价格,称为gasprice。这类似于一升汽油的价格、一度电的价格。

gas费就是gas数乘以gas价格。

比如,你想部署一个合约,需要3,000,000个gas,gasprice是200gwei。那么你要花的钱是:

3* 10^6 * 200 gwei = 3* 10^6 * 200 * 10^(-9) = 0.6 ETH

gasprice的计量单位为:gwei,一个gwei为是1g个wei,即10^9 wei。

由于1 wei = 10^(-18) ETH,所以: 1 gwei = 10^9 wei = 10^(-9) ETH。

wei是ETH的最小单位,以b-money的创造者Wei Dai的名字命名。

gwei的发音为ge wei (音:各位,念快一点:贵)。

gasprice由谁来定?

gas的价格不像我们所想象的,由政府统一定价,No!

也不是由矿工定价。

gas的价格由交易的发送者来指定,在伦敦升级之前,发送者在交易中要指定两个值,一个是gaslimit,一个是gasprice

为什么以太坊的gasprice这么贵?

因为以太坊流行,很多人都想在上面执行交易,谁出的价格高,谁的交易就更可能被矿工执行并打入(include)区块,矿工显然喜欢更高的gas费。

所以,这更像是一个拍卖,想交易的人给出各种gasprice,矿工优先选择那些出价高的上链。

那么,gaslimit是什么?

越复杂的运算,需要消耗的gas越多。交易发送者有时候也搞不清自己需要花多少gas费来执行操作,所以需要加上一个消耗gas的上限,避免自己的钱一不小心被花光了。(如果没有这个机制就可能发生这事)

发送者设置一个gaslimit,如果没有花到这个数,会打回剩余的值。

如果gaslimit耗尽还未执行完交易,EVM会抛出异常,结束代码执行,回退发生的变更。不过,但由于矿工们已经干了活,花费了成本,所以,已经花掉的gas是不退的。

所以,gaslimit要宁可高一点,也不要太低,因为高了没关系,没花完的会退回来,低了,一旦out of gas,不仅你想要的操作没有完成,而且消耗的gas也不会退你,可谓鸡飞蛋打一场空。 

gas数到底是怎么算的?

具体的计算有点复杂,但有标准可以查。你可以在GitHub上的evm-opcodes1和DynamicgasCosts2查看。

在EVM里面,每个运算、操作、存储都需要gas的,比如:

ADD:加法操作 3gas

MUL:乘法操作 5gas

SUB:减法操作 3gas

DIV:除法操作 5gas

JUMP:跳转操作 8gas

MSTORE:内容存储操作 3gas

MLOAD:内容读取操作 3gas

CREATE:创建合约 32000gas (if tx.to == null)

SSTORE:存入存储区 20000gas (从0设为非0值)

SHA3:Keccak256哈希 30gas + 6gas * (size of input in words) + mem_expansion_cost

交易基本费用:21000gas (比如Transfer就要这么多) 

有没有什么方便的方法让我计算gaslimit?

1、你的钱包会帮你算,你的开发工具会帮你算。

2、Web3有两个内置的函数可以用,web3.eth.getgasprice可以提供gasprice的设置建议,estimategas可以估算一个函数(带参数)需要花的gas。

3、如果你想看看一个合约的函数调用花了多少gas,你可以去etherscan.io这种网站看看已经发生的这样的交易实际花了多少gas(gas Used by Transaction)。 

具体交易时,我该如何指定这两个值?

一般而言,钱包或者开发工具,会帮你做好这两件事。(不需要劳动您亲自去设)

比如,在小狐狸中,供用户选择的有三个选项:高、中、低。

你不需要亲自指定gaslimit和gasprice,你顶多只需要选择高、中、低就好了。

posted @ 2022-04-20 15:50  Mr.peter  阅读(828)  评论(0编辑  收藏  举报