区块奖励&EIP1559

重点理解:一个链用的人越多,发送交易就越贵。

在Eherscan上,可以看到:总费用=(区块基础费+最大优先费)*Gas使用数量

区块基础费:Base Fee,最大优先费:Priority Fee.

在MetaMask中,我们可以设置Gas limit。
在这里插入图片描述
Gas Price是如何计算的?
根据EIP-1559协议,现在在以太坊上,每一笔交易都有Base fee,这是能够设置的最低的Gas fee,它是以Gwei计价的;这里的Max fee是指我们最多愿意为这个交易付多少Gas fee,从数值上看maxFee >= baseFee + maxPriorityFee;这里的Max Priority fee是指由用户设置的每笔交易最大可支付的优先交易费用(Priority fee:小费)

实际交易中

basefee不用设置(钱包也不管),是以太坊通过算法,自动根据上一个block的大小和上一个basefee计算出来的。

为了让用户更好地控制自己的钱,实际交易中,设置的是maxfee(愿意给出的最大gasprice)和maxpriorityfee(愿意给出的最大Tip)。

maxfee必须要大于basefee,然后,矿工会按如下的算法收取小费:

Tip = min(maxpriorityfee,maxfee-basefee)

如果maxfee > basefee + Tip,多余的费用就会被矿工退回交易发送者。

maxFee 和 maxPriorityFee 都支持用户自行设置,baseFee 则由算法根据上一个区块的利用率自动给出

Gas Price = basefee + maxpriorityfee。

矿工到底拿到了多少钱?

目前在以太坊上,这个Base fee会被烧掉,Burnt可以看出有多少被烧掉了(Base fee×Gas的使用数量就是这里Burnt的数值)。

这意味着,每次你转账的时候,一部分以太币会永远不再流通,因为被烧掉了。

现在在以太坊上,你交易手续费的一部分被烧掉了,另一部分直接给了矿工,交易手续费不完全由矿工收取。(也就是说这个交易当中付给矿工的以太币数量=Transaction Fee-Burnt)用户先给钱,以太坊再烧,烧完再给矿工

也就是说基础费用在交易完后被烧掉了,矿工只拿到了小费。
在这里插入图片描述
Txn Tyep:EIP-1559:代表这个交易的版本是EIP-1559
在这里插入图片描述
Base Fee是怎么被算法调节的?

baseFee 会根据上一区块的空间利用率自动调整,如果利用率超过 50%,则提升当前区块的 baseFee;反之降低。

按照 baseFee 计算公式,相邻区块间的 baseFee 变化幅度在 ±12.5% 之间:

  • 如果上一区块空间利用率为 100%,则当前区块 baseFee 将自动提升 12.5%
  • 如果上一区块空间利用率为 0%,则当前区块 baseFee 将自动降低 12.5%
    总结

每个区块链都有不同的手续费燃烧和Gas机制设置,它们都不尽相同,但总结起来。在区块链中,区块能存储交易的空间有限,为了让你的交易被写在某个区块中,你需要支付手续费,这个手续费会根据需求变化,以太坊的Base Gas费用会上下调节,调节依据是有多少人正在发送交易(想把交易写入这个区块中),如果有很多人想将交易写入区块,那就有大量的Gas被烧掉。

总的来说,以太坊的这个交易费=(基础汽油单价+汽油单价小费)*汽油的升数。

Base Fee是基础汽油单价,Max Priorivy是汽油单价小费,这俩加起来算出来的才是Gas Price(每个汽油的的单位价格)

然后再乘以Usage by Txn(实际上在交易当中使用的Gas数量也就是汽油升数),这样算出来的才叫做交易费。

注意一点:上面说的maxfee、basefee、Tip,都是针对per gas的,计算真正费用的时候,还需要乘上gas数。

你在不同场合看到的这些符号,有些是带per gas的,有些不带,注意要区分一下,一般指的都是带per gas的。
VX:JLZ-up
智能合约开发者/Web3从业者社群

Go-Ethereum(Geth)是一个实现了Ethereum协议的开源客户端,其中EIP-1559是关于交易费用处理的一项重要升级,它引入了基础费和上限费的概念。在EIP-1559中,用户需要支付两部分费用:一部分是固定的基础费,用于保证网络的基本服务;另一部分是可变的上限费,取决于市场供需。 下面是一个简化的示例,展示了如何在Golang中通过`go-ethereum`库实现基于EIP-1559的交易创建: ```go package main import ( "context" "fmt" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/rpc" ) func main() { // 连接到本地的Ethereum节点(假设你已经启动了一个Geth节点) client, err := rpc.Dial("http://localhost:8545") if err != nil { fmt.Println("Failed to connect to node:", err) return } // 创建一个新的交易 senderAddress := "0xYourSenderAddress" // 用实际地址替换 receiverAddress := "0xYourReceiverAddress" // 用实际地址替换 value := types.NewUnits(10) // 转账价值,单位为wei feeCap := types.NewUnits(1) // 上限费,这里设为较低值以便于演示 maxPriorityFeePerGas := types.NewUnits(1) // 最高优先级费用率 // 使用EIP-1559计算交易费用 transaction, _, _ := client.Eth.SendTransaction( rpc.Transaction{ From: senderAddress, To: receiverAddress, Value: value, GasLimit: types.GWei(21000), // 高效交易一般设置较高的gas limit FeeCap: feeCap, PriorityFeeCap: maxPriorityFeePerGas, MaxFeePerGas: maxPriorityFeePerGas, // 也可以省略,因为会被FeeCap自动控制 }, ) // 输出交易哈希便于跟踪 hashStr := hexutil.Encode(transaction.Hash()) fmt.Printf("Transaction hash: %s\n", hashStr) } ``` 请注意,这只是一个基本示例,实际应用中还需要处理错误、网络延迟以及链上状态的变化等复杂情况。同时,EIP-1559的具体实现细节可能会随着Ethereum主网的更新而有所变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

0xBen

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值