以太坊gas limit啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以太坊gas limit啥意思相关的知识,希望对你有一定的参考价值。

一、智能合约这么好,可不是白用的

智能合约,顾名思义,是指计算机代码可以自动执行的合同;以太坊虚拟机是用来执行智能合约的;智能账户是智能合约能够被执行的载体。换句话说,智能账户,这个“账户”是可以被以太坊虚拟机操控的,依据什么操控呢,依据智能合约来操控。

天下没有免费的午餐,智能合约这个功能这么好,可不是白用的,你在以太坊进行交易的时候也要付给矿工手续费的,那么在以太坊系统上,你要付出的手续费是怎么回事,

Gas和手续费之间又有什么关联呢?

二、 以太坊 Gas 是怎么回事?

以太坊Gas类似于汽车燃油,智能合约的驱动,需要以太坊Gas。Gas是一个英文单词,中文意思是:瓦斯、汽油,这个东西在日常生活中,是一种消耗品。以太坊为什么会产生“燃料”呢?

以太坊里面的Gas是什么意思呢?其实,以太坊的Gas和交易费息息相关。以太坊交易需要手续费,这个Gas就是以太坊手续费的计算模式。

在以太坊的设定中,交易费类似于一种加密的燃料,也就是Gas,这个东西可以驱动智能合约的运动。当以太坊在区块链上执行交易时,燃料将按照特点的规则而逐渐被消耗。

从这一点看呢,Gas真的是和它的本意一样,像汽车燃油一样,想要发动汽车,必须需要燃油。

三、 以太坊 Gas 和比特币交易费有哪不同?

说到手续费,大家可能很熟悉。天下没有免费的午餐,无论是以太坊,还是比特币,都需要手续费,但是二者的手续费模式是不一样的。比特币是直接支付比特币作为转账手续费的,以太坊却不是这样的。

以太坊本质上是一个虚拟机,这个虚拟机是去中心化的,全世界各国人民各自掌控的虚拟机,联合起来形成一个“世界级的计算网络”。当你发送token,执行合约、转移以太坊,或者在区块上做其他事情时,计算机在处理这笔交易时,需要进行计算,这个计算过程需要消耗网络资源。这样一来,你必须支付“燃料费”(也就是Gas),才能让计算机为你工作,让矿工为你处理交易。

通常情况下,发送方愿意支付的Gas价格越高,矿工从交易中获得的价值就越大,矿工们也就越有可能选择这个交易。通过这种方式,矿工可以自由地选择交易。为了给发送者设置Gas 价格做参考,矿工们可以直接提出他们执行交易所需的最低Gas 价格。

四、 以太坊 Gas 的消耗量该如何计算?

以太坊虚拟机处理交易时,虚拟机会根据交易中确定的一个一个的操作指令进行逐个处理,而每个操作指令都有明文规定的Gas消耗量。

以太坊系统规定了两个账户:一个是正常账户,一个是智能账户。

普通的转账交易,也就是调用“正常账户”,所需要的Gas是固定的21000;

而调用“智能账户”的的话,因为智能合约的复杂程度不同,使得所需要的Gas也不同。处理交易占用的资源(计算量、内存等)越多,那么所需要的Gas也就越多,比如:执行一次加法运算将消耗 3Gas,如果执行更复杂的运算,那么消耗的Gas就更多。

那么大家可能会问一个问题:当用户的交易涉及一个恶意的智能合约,这个合约超级复杂,执行这个合约要消耗无限的燃料,怎么办呢?以太坊系统的方案是:为了避免恶意

智能合约引起无限的Gas消耗,用户需要在发送交易时设定允许消耗的燃料上限,即

GasLimit,这样一来,就算有恶意智能合约,最坏情况也只是消耗 GasLimit 所规定的燃料范围之内。

五、以太坊 Gas 和交易手续费有什么关系?

以太坊上,你所支付的手续费等于:GasPrice 乘以GasUsed。

你可以把 GasPrice 理解为是燃油单价, GasUsed 理解为汽车所需多少升燃油。

对于汽车,假如说每升汽油是20块钱,一万升汽油就是20万块钱。对于以太坊,每

Gas是20吉伟(吉伟是以太币的数量单位),一万个 Gas 就是:20乘以一万,等于20 万吉伟,2万吉伟等于0.0002以太坊,也就是说,本次交易手续为 0.0002以太坊。

具体的兑换值见下表:

请点击输入图片描述

(注释:以太币数量的基础单位是“伟”,以太币的数量单位有“伟、芬尼、以太”,其中,“以太”被用作普通交易;“芬尼”被用作微交易;“萨博”和“伟”被用作进行关于费用和合约实施。)由此我们可以发现,Gas并不是以太坊,它是一种单独的体系,它的汇率与以太坊成一定的比例,经过了比例兑换,最终形成交易费。

具体的汇率查询,可以查看以下网站:

https://jin10086.github.io/etherconVerter/ 

Gas价格和以太币价格都是由市场自由调节的,但是二者是不一样的,他们的不同之处在于:以太币的价格是根据市场情况波动,而Gas的价格由矿工决定的,如果燃料价格低于矿工们的最低要求,矿工就会拒绝处理交易。Gas和以太坊分离,可以保护系统免受随着以太坊价格的快速变化而可能出现的波动。

通常来讲,大部分矿工都会选择利益优先,处理交易时候,他们会按Gas价格从高到底排列,优先处理Gas价格高的,如果你很着急交易 ,就需要提高Gas价格,让矿工早点看到你;如果你不着急呢,你只需要设定一个Gas价格,这个价格在矿工设置的Gas价格底线之上就行了。

六、 Gas 是怎么获取的呢?

实际上,Gas就是从矿工那里购买的以太币,用户自己账户中的以太币就可以向矿工购买Gas,以太坊客户端根据指定的交易最大支出限额,自动用以太坊购买Gas。

七、 Gas 最后去了哪里?

每笔交易,交易发起方都要设置交易的Gas限定和 Gas价格,不同的操作会产生不同的Gas成本,Gas用完时矿工将停止执行,使用的Gas会作为奖励,奖励给挖矿的矿工,这将涉及到几下几种情况:

第一种情况是,如果有剩余Gas,那么这些剩余的Gas会退还给交易发起方或智能合约创建者,比如我发送1个以太坊给依依,我设置的 Gas limit 是 5万,正常需要消耗的Gas是21000,,那么,剩下没有被消耗的29000会返还给我。

第二种情况是,如果我设置的Gas limit太低,或者我账号中的以太坊不足以支付我的Gas消耗,那么,这笔交易会因为Gas不足而被取消,并且用于计算的Gas不会退回到我的账户。

第三种情况是,如果交易失败,我也必须为已经占用的计算资源来支付手续费。

八、 怎么设置合理的 Gas 价格?

每次交易之前,可以查询这个网站来确认需要设置的Gas价格: https://ethGasstation.info/ 总结一下,这篇文章我们主要介绍了以太坊的Gas和手续费:Gas相当于燃油,你在以太坊虚拟机上处理交易,会消耗计算资源,也就是Gas。在以太坊上,你所支付的手续费等于:GasPrice 乘以GasUsed,也就是:Gas的单价乘以消耗掉的Gas总量。操作的复杂程度不同,产生的Gas成本也不同,Gas用完时,矿工将停止执行,使用的Gas会作为奖励,奖励给挖矿的矿工,矿工会优先选择Gas价格出的高的交易者。

参考技术A gas limit
气体的限制

以太坊方法 eth_getTransactionByHash 中的“类型”列是啥意思?

【中文标题】以太坊方法 eth_getTransactionByHash 中的“类型”列是啥意思?【英文标题】:What is column 'type' means at Ethereum method eth_getTransactionByHash?以太坊方法 eth_getTransactionByHash 中的“类型”列是什么意思? 【发布时间】:2021-09-12 22:56:16 【问题描述】:

正如标题所说, 我找不到任何具有type 列描述的文档, 并且不知道值的意思。 有人有想法吗?


    "jsonrpc":"2.0",
    "id":1,
    "result":
        "blockHash":"0xf64a12502afc36db3d29931a2148e5d6ddaa883a2a3c968ca2fb293fa9258c68",
        "blockNumber":"0x70839",
        "from":"0x0000000000000000000000000000000000000000",
        "gas":"0x30d40",
        "gasPrice":"0xba43b7400",
        "hash":"0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1",
        "input":"0xfc36e15b0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a4861636b65726e65777300000000000000000000000000000000000000000000",
        "nonce":"0xa7",
        "to":"0x03fca6077d38dd99d0ce14ba32078bd2cda72d74",
        "transactionIndex":"0x0",
        "value":"0x0",
        "type":"0x0", // <- here
        "v":"0x1c",
        "r":"0xe7ccdba116aa95ae8d9bdd02f619a0cdfc1f60c5740b3899865822a80cd70218",
        "s":"0xf200df1921ea988d16280a0873b69cb782a54e8a596d15e700710c820c8d2a9e"
    


这里还有一个问题, 如上结果,我怎么知道交易是完成还是失败?

【问题讨论】:

【参考方案1】:

这是在EIP-2718 中添加的类型化交易信封。此 EIP 的实施于 2021 年 4 月部署在柏林硬分叉 (source)。

该字段允许在不向后兼容的情况下使用未来的事务类型。一个新的不兼容的 tx 类型(值 0x01)的示例在 EIP-2930 中,也部署在柏林硬分叉中。

可能因为它是一个新字段,它尚未(2021 年 6 月)包含在 JSON-RPC documentation 中。但是其他文档,例如ethers.js,已经开始涵盖它。


您可以从transaction receipt 字段status 获取事务状态(如果成功或恢复)。它不包含在您问题中使用的常规 getTransactionByHash 方法中。

请注意,status 不包含在拜兹纳提之前(2017 年 10 月)的交易中,并且在未来的某些交易类型中也可能会丢失。

【讨论】:

感谢您的回复,这对我来说是一个非常明确的答案!

以上是关于以太坊gas limit啥意思的主要内容,如果未能解决你的问题,请参考以下文章

以太坊中的gasgas pricegas limit到底是什么

eth是啥意思

以太坊搭建常见错误,以太坊部署智能合约,Error: insufficient funds for gas * price + value

以太坊GasLimit的计算方法

以太坊交易费用、gas 限额和已用 Gas

以太坊 - 高gas成本