以太坊交易手续费计算

本文详细解释了以太坊中的Gas机制,它如何作为交易手续费计算基础,涉及交易有效性验证、Gas消耗计算、费用退还等过程。通过实例说明了Gas费用的预估、设置和影响因素,以及如何通过提高Gas价格提升交易速度。
摘要由CSDN通过智能技术生成

Gas 中译是:瓦斯、汽油,代表一种可燃气体。 这形象地比喻以太坊的交易手续费计算模式,不同于比特币中直接支付比特币作为转账手续费, 以太坊视为一个去中心化的计算网络,当你发送Token、执行合约、转移以太币或者在此区块上干其他的时候,计算机在处理这笔交易时需要进行计算消耗网络资源,这样你必须支付燃油费购买燃料才能让计算机为你工作。最终燃料费作为手续费支付给矿工,无论交易成功与否。

参考文章

What is gas? Why do transactions take so long?
以太坊技术与实现 Gas

经典例子

以太坊白皮书给出的转账时计算Gas的例子如下,假设合约存储开始时为空,发送一笔带有10 ETH、2000 Gas、0.001以太币Gas价格的交易,并且有两个数据字段:[2, ‘CHARLIE’]:

  1. 验证交易的有效性和格式:检查交易是否有效,格式是否正确。这包括验证交易的结构、签名以及发送者是否有足够的资金来支付最大可能的Gas费用。
  2. 检查发送者的资金:确保交易发送者账户中至少有2000 * 0.001 = 2 ETH。如果有,那么从发送者的账户中扣除2以太币作为可能的最大Gas费用。注意:这是从交易发送者的钱包里扣除的,不是从10 ETH的交易金额中扣除的
  3. 初始化Gas和扣除字节费:初始化Gas为2000。假设交易长度为170字节,每字节费用为5,因此扣除850(170*5),剩下1150Gas。
  4. 处理交易金额:从发送者账户中再扣除10以太币,并将其加到合约账户中。这是交易中指定的转账金额。
  5. 执行代码:运行合约代码。在这个例子中,操作相对简单:检查合约存储的索引2是否已被使用,发现未被使用,于是将索引2的存储值设置为’CHARLIE’。假设这个过程消耗了187Gas,剩余Gas为1150 - 187 = 963。
  6. 退还剩余Gas:将未使用的Gas转换回以太币并退还给发送者。在这个例子中,退还的是963 * 0.001 = 0.963 ETH。最后返回交易执行后的状态。
  7. 计算扣除的总金额:发送的ETH(10 ETH)+ 实际消耗的Gas费用(1.037 ETH)= 用户账户最终减少的总金额(11.037 ETH)。

实际例子

以下是我用老ThinkPad电脑在测试网络里辛辛苦苦挖的一点币,大家也可以去挖挖试试
GoerliETH Faucet地址
在这里插入图片描述

现在我们从Account1转账0.001ETH给Account2,预估的Gas费用为0.0000315ETH,直接给你计算好了
也就是说我们这笔交易预估花费的总金额 = 0.001 ETH + 0.0000315 ETH = 0.0010315 ETH
在这里插入图片描述

稍作等待后,等到转账confirmed后,我们点击View on block explorer前往网页
也可以在 Goerli Testnet Explorer网站 搜寻transaction ID就行
在这里插入图片描述

可以从以下界面看到整个交易的过程
Transaction Fee = Gas Used * Gas Price = 21,000 Gas * 1.500000007 Gwei = 31500.000147 Gwei
注意:21000 Gas 是标准转账交易的gasUsed。因此一笔标准的转账交易你可以设置 gasLimit 为21000,多退少也不能补,因为少了的话就打水漂了。还有这个大小和你转账多少ETH没有关系,转0.001用的是21000Gas,转账1000ETH也是21000Gas,如果想要提高转账的速度,可以通过提高Gas价格(Gas Price)来实现。
在这里插入图片描述

换算单位

在这里插入图片描述

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python以太坊交易是指使用Python编程语言进行以太坊区块链上的交易操作。以太坊是一种基于区块链技术的智能合约平台,它允许开发者构建和部署去中心化应用程序(DApps)。 在Python中,可以使用以太坊的官方库web3.py来进行以太坊交易的编程操作。web3.py提供了一系列的API,可以与以太坊节点进行通信,并执行各种操作,包括创建账户、发送交易、查询余额等。 以下是一个简单的Python代码示例,展示了如何使用web3.py库发送以太坊交易: ```python from web3 import Web3 # 连接到以太坊节点 w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/your_infura_project_id')) # 设置发送方账户私钥和接收方地址 private_key = 'your_private_key' receiver_address = '0x1234567890abcdef1234567890abcdef12345678' # 构建交易参数 transaction = { 'to': receiver_address, 'value': w3.toWei(1, 'ether'), 'gas': 21000, 'gasPrice': w3.toWei('50', 'gwei'), 'nonce': w3.eth.getTransactionCount(w3.eth.accounts), } # 签名交易 signed_transaction = w3.eth.account.signTransaction(transaction, private_key) # 发送交易 transaction_hash = w3.eth.sendRawTransaction(signed_transaction.rawTransaction) # 等待交易确认 transaction_receipt = w3.eth.waitForTransactionReceipt(transaction_hash) # 打印交易结果 print('交易成功,交易哈希:', transaction_receipt.transactionHash.hex()) ``` 上述代码中,首先使用`Web3`类连接到以太坊节点。然后设置发送方账户的私钥和接收方地址。接下来,构建交易参数,包括接收方地址、转账金额、燃气限制、燃气价格和交易序号。然后使用发送方账户的私钥对交易进行签名,并发送签名后的交易以太坊网络。最后,等待交易被确认,并打印交易结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜亚轲

你花钱的样子真帅

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值