交易費用
一次交易的交易費計算如下:
燃氣費 := (使用的燃氣) x (有效燃氣價格)
打個簡單易懂的比方,假設你正在加油站加油。 Gas 價格每天由煉油廠決定,今天的價格是 2 美元。 如果裝滿 15 升,則需支付 30 美元 = 15 升 x 2 美元/1 升,30 美元將從您的銀行賬戶中支付。 此外,這筆交易還將記錄在賬簿中。
交易費與上述相同。 假設一筆交易花費了 21000 天然氣,交易的實際Gas 價格為 25 格基。 那麼汽油費就是 525000 格基。 這筆金額將從匯款人("來自 "賬戶)的餘額中扣除。
使用的氣體
改變區塊鏈狀態的每個操作都需要氣體。 在處理區塊中的交易(如發送 KAIA、使用 ERC-20 代幣或執行合約)時,發送方必須支付計算和存儲使用費。 支付金額由所需的 "氣體 "數量決定。 煤氣沒有單位,我們只能說 "21000 煤氣"。
交易氣體由兩部分組成:
用氣量只有在交易執行後才能確定。 因此,您可以從交 易收據中找到已用燃氣量。
找到合適的氣體限值
每筆交易都必須指定一個 gasLimit(氣體限值),即交易可花費的最大氣體量。 發送方還可以使用 eth_estimateGas
和 kaia_estimateGas
RPC 為交易找到合適的 gasLimit。 或者,發件人也可以手動指定一個足夠大的數字。 指定高 gasLimit 不會自動收取高 gas 費,因此使用固定數字是一個可行的選擇。 但是,只有少量代幣的發件人不能指定過高的 gasLimit,因為無論實際 gasUsed 為多少,發件人的餘額中都必須至少擁有 gasLimit * effectiveGasPrice
。
有效Gas 價格
交易的有效氣價由許多變量計算得出:
- 硬叉水平
- 發件人提交的交易中的Gas 價格字段
- 第 2 類交易中存在 "maxFeePerGas"(通常稱為 feeCap)字段。
- 第 2 類交易中存在 "maxPriorityFeePerGas"(通常稱為 tipCap)字段。
- 氣體價格 "字段存在於所有其他交易類型中。
- 交易執行區塊的 "baseFeePerGas"(通常稱為 "baseFee")。
岩漿硬叉前(固定單價)
在 Magma 硬分叉之前 ,所有交易的交易費都是固定值,稱為 "unitPrice"。 該單價可通過管理進行調整。 所有交易必須提交等於當前單價的氣體價格字段。 單價機制避免了用戶在燃氣費拍賣市場中因燃氣價格估算而產生的用戶體驗挫敗感,並使服務提供商能夠輕鬆預測燃氣費預算。
可以通過 kaia_getParams
API 找到指定區塊的 unitPrice
值。
岩漿硬叉後(KIP-71 動態基費)
自 Magma 硬分叉以來,網絡會根據網絡擁堵情況決定每個區塊的Gas 價格值 "baseFeePerGas"(或簡稱 baseFee)。 如果交易流量高於閾值,基本費就會增加,反之則會減少。 交易流量以使用的區塊氣體來衡量。 隨著區塊中交易執行量的增加,網絡會感到更擁堵,從而有可能提高基本費用。
與 EIP-1559不同的是,岩漿氣體政策沒有提示(提示是從 Kaia 硬叉開始引入的)。 取而代之的是 FCFS(先到先服務)政策,以保護網絡免受垃圾郵件的侵害。
基本收費計算
基本費用的計算取決於以下參數:
- 區塊擁塞數據
- 上一個基費:上一個區段的基本收費
- previous_block_gas_used:用於處理上一個區塊所有交易的氣體
- 可在以後通過治理更改的調諧參數
- GAS_TARGET(目標氣量):決定基本費用增減的氣體量
- max_block_gas_used_for_base_fee:用於執行基費最大變化率的隱式塊氣體限制。
- BASE_FEE_DENOMINATOR: 設置每個區塊最大基本費用變動的值
- 基本費用上限:基本費用的最大值
- 基本費用下限值:基本費用的最小值
以下是基礎費用計算的簡化版本。 從本質上講,基本費用的變化與 GAS_TARGET 和 PREVIOUS_BLOCK_GAS_USED 之間的差額成正比,其他參數控制著基本費用的變化速度或界限。 準確公式請參閱 KIP-71。
min(PREVIOUS_BLOCK_GAS_USED, MAX_BLOCK_GAS_USED_FOR_BASE_FEE) - GAS_TARGETchangeRate = ---------------------------------------------------------------------------- BASE_FEE_DENOMINATOR * GAS_TARGETnextBaseFeeBeforeBound = PREVIOUS_BASE_FEE * (1 + changeRate)nextBaseFee = max(min(nextBaseFeeBeforeBound, UPPER_BOUND_BASE_FEE), LOWER_BOUND_BASE_FEE)
可通過 kaia_getParams
API 查找特定區塊的調諧參數。 每個區塊的 "baseFeePerGas "