Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >关于eth gas的思考

关于eth gas的思考

作者头像
rectinajh
发布于 2018-05-17 08:31:06
发布于 2018-05-17 08:31:06
2K0
举报
理解Gas需要的几个概念:

旷工费:除了转账金额需要额外支付给以太坊网络旷工的费用 gas cost交易旷工费用 ( 也是也是以太坊的交易费用 ) =gas used数量 * gas price ( gas 单价,以太币计价)

Gas:以太坊每一步操作都需要消耗Gas,执行总量就是Gas

Gas Price:每一步操作的单价,一般用GWei作为单位,乘以Gas就是需要支付的矿工费。Gas Price是运行一个特别的交易或程序(被称作合约)所需的gas。 一个区块的gas费用可以用来暗示计算工作量,交易量和区块大小。gas费用支付给矿工(或PoS中的担保承包人)。Gas价格的设定是根据多少用户愿意花费和多少进程节点愿意接受的平衡价格。

Gas Limit:gas Limit为每个区块所能承载的最多gas消耗,是一种区块交易数量限制,被视为计算工作量,交易量和区块大小的最大值。以太坊为防止某些错误或者恶意的智能合约(比如一个死循环)消耗掉用户大量手续费,所以对默认Gas上限做了限制,但是有些合约(比如复杂的众筹合约)的确会消耗大量的Gas,所以需要手动设置上限。

Gwei单位:以太坊有很多单位,Gwei最容易记,因为以太坊一共支持18位小数,Gwei正好是一半,9位小数的那个单位。

设计初衷:

gas背后遵循的原则是使以太坊网络上每个交易或计算成本保持稳定的价值。希望通过这个体系将使用价值与投资价值分离,避免因为ETH价格波动,造成系统手续费的波动。使每一次交易的gas cost 不是随着ETH价格的波动而波动,小V就设计了gas price这个变量。

gas的目的是限制执行交易所需的工作量,同时为执行支付费用。gas 用来衡量你的这笔交易(或者合约代码调用)所消耗的资源(包括计算量,存储,带宽等),一笔交易所产生的转账费用会奖励给打包包含这笔交易的区块的矿工。区块不是哪个矿工产生的,所有的矿工都会竞争下一个区块的打包权,胜出者可以打包下一个区块。交易不一定会存在一个区块,它交易被广播出去后,在数秒内全网所有的节点都会接收到这笔交易,但是它不一定会被打包,如它的 gas price 非常低。

GAS与以太坊网络拥堵: 太坊网络又堵了,所谓堵,表现为默认的Gas设置,转账一直在等待打包,一直不能到账,而且还无法判断是否会到账。结果就是,你买个币,等待打包一上午,你还不能重新设置Gas,因为你不知道那笔等待打包的会不会成功,只能眼睁睁的看着价格上去。 拥堵的核心问题其实就是以太坊每秒的打包笔数限制。

如果取消掉Gas会怎么样?

相当于不给矿工钱,然后想让别人替你干活?Pengding吧。。。

当然你非要取消掉Gas费,让发送交易的真实成本保持一致。在私有链是可以实现的,将默认的gas Price改成0。

如何去除gas Price

环境准备: Mac OS 10.12.6 Go Version: go1.10 Node v9.5.0 go-ethereum Version :v1.8.2 Geth Version: 1.8.2-unstable

1,git clone https://github.com/ethereum/go-ethereum.git

2, 命令行输入:geth -h

--gasprice "18000000000" Minimal gas price to accept for mining a transactions

这是系统默认的最小挖矿交易的gasPrice交易费。

3,在go-ethereum里面的找到相关代码:

屏幕快照 2018-03-09 下午1.53.24.png

GasPrice: big.NewInt(18 * params.Shannon),

尝试设置:GasPrice: big.NewInt(0 * params.Shannon),

编译代码: make geth make all

4,再次命令行输入:geth -h

屏幕快照 2018-03-09 下午1.59.15.png

5,启动一个以太坊节点,验证的GasPrice geth --datadir "./" --nodiscover console

eth.gasPrice

mmexport1520575399591.jpg

6,其他相关的GasPrice 交易的时候,gasPrice是动态改变的,交易者、智能合约设计者、矿工三方设定,所以系统有个SuggestGasPrice。

Accounts/abi/bind/backend/simulated.go

屏幕快照 2018-03-09 下午3.39.39.png

// SuggestGasPrice implements ContractTransactor.SuggestGasPrice. Since the simulated // chain doens't have miners, we just return a gas price of 1 for any call. func (b SimulatedBackend) SuggestGasPrice(ctx context.Context) (big.Int, error) { return big.NewInt(0), nil }

如果没有矿工因素的影响,SuggestGasPrice默认是1,如果强制将gasPrice默认设置为0,也就说任何交易的gasPrice都会是0,

suggest Price Accounts/abi/bind/base.go

屏幕快照 2018-03-09 下午4.03.07.png

//测试:让 gas allowance直接走c.transactor.SuggestGasPrice的方法。 // Figure out the gas allowance and gas price values gasPrice := opts.GasPrice //if gasPrice == nil { gasPrice, err = c.transactor.SuggestGasPrice(ensureContext(opts.Context)) if err != nil { return nil, fmt.Errorf("failed to suggest gas price: %v", err) } //}

发送一个交易验证一下gasPrice:

mmexport1520575393604.jpg

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.03.09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【易错概念】以太坊的账户、交易、Gas和Gas Limit的概念
所有以太坊区块链上的行动都是由各账户发送的交易激活。每次一个合约账户收到一个交易,交易自带的参数都会成为代码的输入值运行。合约代码会被以太坊虚拟机(EVM)在每一个参与网络的节点上运行,以作为它们新区块的验证。
辉哥
2018/08/10
1.1K0
ethereum原理-gas说明
简单的说就是手续费的一种变体,本质还是转账费用,只能在设计上,功能更复杂,用处更多。 即然是手续费,为什么不干脆一次性收取或者设定一个转账比例,不是更简单? 这个后面说。
潇洒
2023/10/23
3560
EVM Gas 分析
Gas 就像是机车行驶过程中需要燃烧燃料一样,对于区块链信息的记录至关重要,它是指在网络上执行特定操作所需的计算工作量。
Footprint Analytics
2023/02/02
8210
EVM Gas 分析
带你了解下关于gas一些基本常识
在以太坊出现的很多地方我们都能看到gas这个东西,比如购买NFT需要花费ETH,同时也需要支付gas费用,铸造NFT也是同样。那么究竟什么是gas费,为啥要支付gas费呢?
用户7634691
2023/02/24
6140
带你了解下关于gas一些基本常识
关于交易的gas 与gassPrice概念已经交易阻塞
以太坊的交易是通过旷工从矿池中挖矿完成的,而挖矿是❓通俗讲就是将矿池中提交的交易按照价格高低进行筛选打包成块的过程
大话swift
2019/09/25
8230
关于交易的gas 与gassPrice概念已经交易阻塞
以太坊“后偷渡时代”盗币之“拾荒攻击”
作者:Sissel@知道创宇404区块链安全研究团队 发布时间:2018/08/20
Seebug漏洞平台
2018/09/30
1.6K0
以太坊“后偷渡时代”盗币之“拾荒攻击”
Solidity:Gas
在 Solidity 和以太坊中,gas 是一个非常重要的概念。它是衡量在以太坊区块链上执行交易或运行智能合约所需的计算工作量的单位。基本上,每一次在以太坊网络中执行某种操作,如交易或合约调用,都需要消耗一定数量的 gas。
孟斯特
2024/05/28
1850
Solidity:Gas
以太坊智能合约开发第二篇:理解以太坊相关概念
很多人都说比特币是区块链1.0,以太坊是区块链2.0。在以太坊平台上,可以开发各种各样的去中心化应用,这些应用构成了以太坊的整个生态。目前,以太坊是区块链世界里生态建设最好的底层公链。本篇将以通俗易懂的方式介绍以太坊开发中涉及到的相关概念,带领大家轻松入门。 以太坊 以太坊(Ethereum)是一个建立在区块链技术之上的、图灵完备的去中心化应用平台。它允许任何人在平台中通过智能合约技术开发、部署和使用去中心化应用。 > 有没有感到和ios、Android平台有点类似? 在以太坊未问世之前,写区块链的应用是
Marser
2018/06/25
1.3K0
EIP-1559 对 gas 费计算的影响
今天有同学问我 etherscan 里先生的 "Txn Savings Fees" 是啥,我就顺便把以太坊新的 gas 费计算方式讲一下吧。
Tiny熊
2022/11/07
1.2K0
EIP-1559 对 gas 费计算的影响
以太坊交易签名过程源码解析
向以太坊网络发起一笔交易时,需要使用私钥对交易进行签名。那么从原始的请求数据到最终的签名后的数据,这中间的数据流转是怎样的,经过了什么过程,今天从go-ethereum源码入手,解析下数据的转换。
Tiny熊
2020/07/09
1.5K0
以太坊基本概念:交易及交易费用
交易 一笔交易是一条消息,从一个账户发送到另一个账户(可能是相同的账户或者零账户,见下文)。交易可以包含二进制数据(payload)和以太币。 如果目标账户包含代码,该代码会执行,payload就是输入数据。 如果目标账户是零账户(账户地址是0),交易将创建一个新合约。正如上文所讲,这个合约地址不是零地址,而是由合约创建者的地址和该地址发出过的交易数量(被称为nonce)计算得到。创建合约交易的payload被当作EVM字节码执行。执行的输出做为合约代码被永久存储。这意味着,为了创建一个合约,你不需要向合约
用户1408045
2018/05/17
1.2K0
以太坊介绍和使用
以太坊是一个能够在区块链上实现智能合约、开源的底层系统。换言之,以太坊是可编程的区块链,它并不是给用户一系列预先设定好的操作(例如比特币交易),而是允许用户按照自己的意愿创建复杂的操作。这样一来,以太坊是就可以作为多种类型去中心化区块链应用的平台,这些应用比如包括之前很火的各种代币但并不仅限于此,我们可以做很多除了代币之外的东西,比如你可以输出一行代表自己不是外行身份的hello world,或者在上面做一个简单的计算器,总之你可以在上面实现你想要的任何功能。
fnatic
2022/07/15
37.4K0
参投ICO失败的原因竟然是Gas Limit=25200
最近币圈的ICO太火,有些项目在ico.info平台上几分钟就完成众筹,一些朋友纵然使出各种解数,还是抢不到。然后他们就开始使用以太坊钱包参投项目,安装钱包和参投的过程本来并不麻烦,比如之前写过的《图
申龙斌
2018/03/06
1.9K0
参投ICO失败的原因竟然是Gas Limit=25200
“以太坊智能合约设计缺陷问题”影响分析报告
在审计各种智能合约之后,我发现了一类很有趣的问题,这类问题出现的原因不只是由于开发者的疏忽,也同样是因为智能合约本身的一些设计缺陷,在开发者不了解这些问题的基础上,就容易出现问题。
LoRexxar
2023/02/21
3950
“以太坊智能合约设计缺陷问题”影响分析报告
第三课 以太坊术语说明及开发者资源列表
也称钱包,提供账户管理、挖矿、转账、智能合约的部署和执行等等功能,以太坊节点利用以太坊客户端接入到以太坊网络。 现在以太坊客户端主要有:Wallent/ist , Geth, Parity, Harmony,
辉哥
2018/08/10
8130
第三课 以太坊术语说明及开发者资源列表
第三十课 以太坊智能合约solidity如何节省GAS费?
在以太坊上,代码即法律,交易即金钱。每一笔智能合约的运行,都要根据复杂度消耗一笔GAS费(ETH)。那么,智能合约solidity语言的编写,不仅要考虑安全,也要考虑语言的优化,以便高效便宜了。 本文将从以下一些方面分析如何节约GAS的编程总结: 1)如何在REMIX编译器上分析GAS/GAS LIMIT等信息 2) 如何优化节省GAS费用的方法
辉哥
2018/11/26
5K0
第三十课 以太坊智能合约solidity如何节省GAS费?
以太坊钱包开发系列3 - 展示钱包信息及发起签名交易
以太坊去中心化网页钱包开发系列,点链接观看视频课程,将从零开始开发出一个可以实际使用的钱包,本系列文章是理论与实战相结合,一共有四篇:创建钱包账号、账号Keystore文件导入导出、展示钱包信息及发起签名交易、发送Token(代币),这是第三篇介绍使用ethers.js的钱包对象获取相关信息及发起你离线交易。
Tiny熊
2018/12/25
3.8K1
以太坊钱包开发系列3 - 展示钱包信息及发起签名交易
以太坊如何计算交易成本 原
在发送比特币交易时,其费用与其大小成比例。输入和输出越多,它就越贵。再加上未决交易的因素,交易费用可能仅基于这两个因素就会飙升。
笔阁
2019/05/10
1.1K0
以太坊如何计算交易成本
                                                                            原
[以太坊源代码分析] I.区块和交易,合约和虚拟机
本文转载来源自:http://blog.csdn.net/teaspring/article/details/75389151 感谢原作者teaspring的分享。本文已经得到原作者的转载许可。 最近在看以太坊(Ethereum)的源代码, 初初看出点眉目。 区块链是近年热点之一,面向大众读者介绍概念的文章无数,有兴趣的朋友可自行搜索。我会从源代码实现入手,较系统的介绍一下以太坊的系统设计和协议实现等,希望能提供有一定深度的内容,欢迎有兴趣的朋友多多讨论。 注:1.源代码在github上, 分C+
月牙寂道长
2018/03/29
1.5K0
[以太坊源代码分析] I.区块和交易,合约和虚拟机
一文看懂以太坊智能合约!
以太坊的账户模型和比特币非常相似,如都有椭圆曲线算法,并以secp256k1作为参数。
JavaEdge
2025/06/01
1880
一文看懂以太坊智能合约!
相关推荐
【易错概念】以太坊的账户、交易、Gas和Gas Limit的概念
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档