关于eth gas的思考

理解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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏区块链

打造一个最小区块链

虽然有人认为区块链本身仍有很多问题需要解决,但毫无疑问,这种新颖的技术是计算机界的奇迹。 但是,究竟什么是区块链?

4104
来自专栏友弟技术工作室

通过一个App Demo的演示深入理解区块链运行原理

3284
来自专栏区块链大本营

《以太坊攻略》,小白如何逆袭成为技术大咖?要学的全在这里了

ConsenSys产品经理认为,区块链新手和经验丰富的区块链开发人员,需要共享工具、开发模式和组件。

1683
来自专栏Seebug漏洞平台

以太坊蜜罐智能合约分析

在学习区块链相关知识的过程中,拜读过一篇很好的文章《The phenomenon of smart contract honeypots》,作者详细分析了他遇到...

1933
来自专栏申龙斌的程序人生

以太坊代币取出到imtoken钱包

最近半个月币圈发生了许多事,“I吸O”一刀切、交易所全关,真是币圈一周人间一年。还有一些坚定地活在未来的人们恶补区块链知识,开始忙着把一些token拼命地往钱包...

1.1K9
来自专栏区块链大本营

最全!写给技术小白的以太坊完整工作原理和运行机制!

2614
来自专栏友弟技术工作室

通过一个App Demo的演示深入理解区块链运行原理

从字面上看:区块链是由一个个记录着各种信息的小区块链接起来组成的一个链条,类似于我们将一块块砖头叠起来,而且叠起来后是没办法拆掉的,每个砖头上面还写着各种信息,...

3265
来自专栏华仔的技术笔记

针对共识机制攻击方式

2555
来自专栏区块链大本营

0.166666667小时,教会你深挖以太坊数据层

从架构设计上来说,区块链可以简单的分为三个层次,协议层、扩展层和应用层。其中,协议层又可以分为存储层和网络层,它们相互独立但又不可分割。

1105
来自专栏区块链大本营

弯道超车老司机戏耍智能合约——竞态条件漏洞 | 漏洞解析连载之三

引子:至道问学之有知无行,分温故为存心,知新为致知,而敦厚为存心,崇礼为致知,此皆百密一疏。—— 清·魏源《庸易通义》

913

扫码关注云+社区

领取腾讯云代金券