EIP-1559、EOA and CA

Yan Ru Su

基本手續費邏輯

維持區塊鏈工作,交易發起方會發送手續費給礦工當作獎勵。

交易發起方在發送交易時需要決定 Gas Price 以及 Gas limit,Transaction Fee 基本上就等於 Gas Price*Gas Limit 並且以 ether 為單位,然而實際上的情況更為複雜。Gas Price 一單位 Gas 的價格(以 Wei 計價 1 wei=10⁻¹⁸ETH)。會由三個單位決定,分別是 Base Fee、 Max Priority Fee 以及max Fee。 首先 Base Fee 是區塊目前交易的基本費,使用後會燃燒掉,不會發給礦工,做一個通縮的機制,他有會根據鏈上交易數量自動調整。再來是兩個可以自己設定手續費的欄位,分別 Max Priority Fee 是付給礦工的最大手續費,由於礦工能拿到獎勵,因此會優先執行交易也會較快完成。最後是 Max fee 是設定一單位 Gas 的最大值,避免當 Base Fee 過高時可以確保交易在指定的價格下。因此 Gas Price的公式是

1
min(Max Fee, Max Priority Fee + Base Fee)

另一個計算重要的值是 Gas Limit, Gas Limit 是 Gas單位,代表的是ㄧ筆交易最多願意付出多少個 Gas ,然而實際上用多少單位根據操作,可能只是單純發一筆交易或是你的合約執行了多次寫入等等(基本交易是21000),因此我們會想設定一個 Gas Limit來決定這個合約的最大 Gas 單位,一方面可以估算會用到多少 Gas 另一方面可以避免操作失誤消耗大量 Gas,所以一個交易最終的使用量是 Usage by Txn。

前面介紹了 Gas Price 以及 Gas Limit,因此在發送一筆交易時,會先確認你的帳戶餘額是否足夠支付該筆交易的最大手續費,也就是 Gas Price * Gas Limit ,用戶也無法設置超出其帳戶餘額的 Gas,這是為了避免發送者在交易過程中破產無法支付 Gas 費用。

在執行交易時分為三種情況

1.Gas Limit == Usage by Txn
剛好用完

2.Gas Limit > Usage by Txn
(Gas Limit - Usage by Txn) * Gas Price 退還給發送者 (Txn Savings Fee)

3.Gas Limit < Usage by txn
消耗到 Gas Limit 為止交易會失敗,礦工執行到一半就把這筆記錄丟掉,已使用的 Gas 不退回。燒掉的燒掉,給礦工的給礦工。

實際計算

假設:
Gas Limit = 21,000
Base Fee = 2 Gwei
Priority Fee = 1 Gwei
Max Fee = 5Gwei
Gas Price = 3 Gwei

預扣手續費 3*21000 Gwei,如果交易過程全部花完

Base Fee * Usage by Txn = 2 × 21,000 = 42,000 Gwei → 燒掉
Priority Fee * Gas Used = 1 × 21,000 = 21,000 Gwei → 礦工收入

節點手續費

節點的實際手續費,可能出現base過高,就會優先將手續費支付給基本區塊手續費

Priority Fee = min(Max Priority Fee, Max Fee − Base Fee)

交易優先順序

順序由有記帳權的節點控制,一般來說節點會優先執行 Priority Fee 高的交易。某些特殊情況例如,前置交易攻擊。

區塊Gas限制

區塊 Gas 限制是區塊中允許的最大 Gas 量,用於確定區塊中可以容納的交易數量。例如,假設我們有5個交易,其中每個交易的 Gas 為10、20、30、40和50。如果區塊 Gas 限制為100,那麼前四個交易可以適合該區塊,而交易5必須等待未來的區塊。節點可以自行決定順序,例如40 50 10。

目前一個區塊最大的Gas

Ethereum Blocks #23980650 | Etherscan
可以在 etherscan 看到目前的最大 Gas Limit,目前為 60,000,000 60M

Gas Limit 調整

節點可以微調下一個區塊的 Gas Limit,一次可以向上或向下調整,調整上限是1/1024(0.0976%)。例如目前區塊60M,如果想要向上調最多就是 60,000,000 + 60,000,000 / 1204 = 60,000,000 + 58593,若向下就是變號 60,000,000 - 58593

公式
Pre_Gas_Limit = 前一個區塊 Gas Limit
Max_Delta = Pre_Gas_Limit / 1024
New_Gas_Limit = Pre_Gas_Limit + 調整量(±Max_Delta)

如何動態計算下個區塊的 Gas 是多少? Base Fee 調整

Base Fee 會根據上一個區塊的 Gas 使用率(Gas Limit 與 Gas Used)動態調整,先算出一個 Gas target 的值他是上個區塊 Gas Limit 的一半,根據 Gas Used與 Gas Limit 的關係來計算下個區塊的 Base Fee 會向上還是向下調。

Gas Used > Gas target 網路擁擠,調高Base Fee 抑制交易數量
Gas Used < Gas target 網路空閒,調低Base Fee 增加交易數量
Gas Used == Gas target 不調整

而一次 Base Fee 調整的最大上限是12.5%

解釋這筆Tx的這些欄位

https://etherscan.io/tx/0xb0572fde0bc6319d9b750a9eca8a04b75eca9ce2250ff976107a82fdf4875cf1

Value

0.052434437895476768 ETH
轉帳的ETH數量

Transaction Fee

0.000043942075947 ETH
交易實際付出的手續費

Gas Price

2.092479807 Gwei
實際每單位 Gas 的價格

Gas limit & Usage by Txn

21,000 | 21,000 (100%)
手續費的單位上限 實際上使用的手續費

Gas Fees

Base: 2.092479807 Gwei |Max: 2.092479807 Gwei |Max Priority: 0 ETH

Burnt & Txn Savings Fee

🔥 Burnt: 0.000043942075947 ETH ($0.13)|💸 Txn Savings: 0 ETH ($0.00)
燒毀與剩下的手續費

賬戶與合約的差異

帳戶 Externally Owned Account EOA

有私鑰才能控制,可以發送交易,呼叫合約,就只是一個地址

合約 Contract Account, CA

智能合約帳戶是由EOA部署在區塊鏈上的程式,不能發送交易,沒有私鑰由程式邏輯控制,負責執行合約,回應呼叫,不能主動發起交易,只能被其他賬戶呼叫。

方面 賬戶(EOA) 合約(Contract)
控制方式 私鑰 程式邏輯
能否主動發起交易 可以 不可以(只能被觸發)
有無代碼
收款 / 支付 可收可付 可收可付,但支付需程式觸發

帳戶欄位

以太坊帳戶有四個欄位

Nonce

計數器

Balance

餘額 ETH

codehash

程式碼雜湊值 EOA沒有

storageroot

儲存空間 預設空白 EOA沒有

怎麼判斷帳戶跟合約

看他有沒有程式碼,有的話是CA,沒有的話是EOA


參考資料

以太坊帳戶 | ethereum.org
https://cypherpunks-core.github.io/ethereumbook_zh/13.html
https://learnblockchain.cn/article/8586
https://fmstudio.blog/what-is-gasfee-calculation-2025/
https://zhuanlan.zhihu.com/p/1891179120102179211