• 以太坊 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,你顶多只需要选择高、中、低就好了。

  • 相关阅读:
    Python3.x:定义一个类并且调用
    Spring编码过滤器:解决中文乱码
    Web.xml中自动扫描Spring的配置文件及resource时classpath*:与classpath:的区别
    你是否属于中等收入群体
    Python3.x:BeautifulSoup()解析网页内容出现乱码
    Activiti工作流引擎数据库表结构
    Java:出现错误提示(java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date)
    Django框架搭建(windows系统)
    Eclipse配置多个jdk
    Activiti:创建activiti工程
  • 原文地址:https://www.cnblogs.com/peteremperor/p/16170203.html
Copyright © 2020-2023  润新知