跳至主要內容
本頁面使用機器翻譯自英語,可能包含錯誤或不清楚的語言。如需最準確的信息,請參閱英文原文。由於更新頻繁,部分內容可能與英文原文有出入。請加入我們在 Crowdin 上的努力,幫助我們改進本頁面的翻譯。 (Crowdin translation page, Contributing guide)

如何在 Kaia Wallet 和 MetaMask 上估算瓦斯限值和價格

本指南將逐步說明如何在 Kaia 上估算瓦斯費/價格。

瓦斯是什麼?

Gas 表示處理 Kaia 鍊上的交易,無論是付款(價值轉移)或調用(智慧型契約呼叫)所需的計算力計量單位。 在此情況下,它是指在 Kaia 虛擬機器 (KVM) 上進行的計算。

Kaia 網路需要瓦斯來執行交易。 當您傳送代用幣、與契約互動、傳送 KAIA 或在區塊鏈上做任何其他事情時,您必須為該計算付費。 該款項以瓦斯計算,而瓦斯總是以 KAIA 支付。

瓦斯限值是多少?

瓦斯限額是指您願意在交易中消耗的最大瓦斯量。 比起簡單的付款,更複雜的交易,尤其是執行智慧型契約的交易,需要更多的運算資源和更高的瓦斯限額。 標準的 KAIA 轉移通常使用約 21,000 個瓦斯。

如果您設定的瓦斯限額太高,例如簡單轉帳的 50,000,交易只會使用它所需要的 (約 21,000),並將其餘的退回。 但如果設定得太低,例如 20,000,交易會立即失敗,而且不消耗瓦斯。 而如果交易在執行過程中耗盡汽油,例如在呼叫智慧型契約時,它會還原所有的效果,但您仍要為它用掉的汽油付費。

整體瓦斯收費結構

由於 Kaia 硬分叉之後,交易創造者支付的整體費用計算方式為

( 瓦斯價格 x 使用瓦斯單位數)。

其中 瓦斯價格 = 基本費用 + 優先費用

什麼是基本費用?

基本費用是您需要支付的每單位瓦斯最低價格,您的交易才能在網絡上處理。 它是由網路自行設定,並在每個區塊之後向上或向下調整,這取決於前一個區塊是高於或低於瓦斯目標 - 網路在每個區塊所要處理的交易量。

如果區塊繁忙且使用量超過目標,基本費用就會增加(5%),以幫助紓緩擠塞情況;如果繁忙程度降低,基本費用就會下降。 此機制有助於保持區塊大小穩定,並使每個人的費用更可預測。 基本費用會在交易處理完成後燒掉,使其不再流通。

什麼是優先費?

優先費也稱為小費,是您自願在基本費用之外支付的額外金額,以協助優先處理您的交易。 在 Kaia 上,這筆小費不會直接給驗證者;相反地,它會捐贈給網路的獎勵池,之後再分發給驗證者和生態系統基金。 提供較高的小費,表示您願意支付較高的費用,以協助您的交易能更快處理,並排在相同區塊的其他交易之前。

估算瓦斯費

若要清楚瞭解您的交易通常會消耗多少瓦斯,使用下列方法是個不錯的做法:

在 ethers.js 中使用 eth_estimateGas API

與其猜測您的交易可能會消耗多少汽油,您可以利用節點本身的執行上下文來準確地告訴您,它預計您的交易需要多少計算工作,然後再將其傳播到鏈上。

這對開發人員和日常使用者都很有用,前者需要以程式化的方式控制瓦斯費用,避免因瓦斯耗盡錯誤而造成故障;後者則希望預先知道自己的總費用,避免錢包中出現突如其來的費用。

這是透過eth_estimateGas API 執行,透過 ethers.js 揭露。

範例 - 估計薄荷功能的氣體

比方說,您想要估算智慧型契約的薄荷功能的氣體。 這裡有一個清晰、完整的腳本,可以做到這一點:


const { ethers } = require('ethers');
require('dotenv').config();
const GOLD_CONTRACT_ADDRESS = '0xE13d6C18c52c1de9267aE6DF647fD4ADfAf82977';
const AMOUNT_TO_SEND = ethers.parseUnits('20', 18); // 20 tokens
// minimal ABI for the `mint` function
const MINT_ABI = [
{
"inputs": [
{ "internalType": "address", "name": "to", "type": "address" },
{ "internalType": "uint256", "name": "amount", "type": "uint256" }
],
"name": "mint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
];
// Main script
async function estimateMintGas() {
try {
const provider = new ethers.JsonRpcProvider(process.env.RPC_URL);
const wallet = new ethers.Wallet(process.env.ES_PRIVATE_KEY, provider);
// prepare encoded transaction
const iface = new ethers.Interface(MINT_ABI);
const encodedData = iface.encodeFunctionData('mint', [wallet.address, AMOUNT_TO_SEND]);
// estimate Gas
const estimatedGas = await provider.estimateGas({
to: GOLD_CONTRACT_ADDRESS,
from: wallet.address,
data: encodedData
});
// gasPrice
const gasPrice = await provider.getFeeData();
console.log("Estimated Gas for mint:", estimatedGas.toString());
console.log("Estimated GasPrice for mint:", gasPrice.gasPrice.toString());
return estimatedGas;
} catch (error) {
console.error('Gas estimation failed!', error.reason || error.message);
throw error;
}
}
estimateMintGas().catch((err) => console.error('Error estimating gas!', err));

執行此指令碼將產生類似的輸出:


Estimated Gas for mint : 69002
Estimated GasPrice for mint: 27500000000

ethers.js 從您的智慧契約的 ABI 和參數中建構交易的呼叫資料,透過 eth_estimateGas 傳送至節點來執行一次乾式運行,而節點在不將其加入區塊的情況下執行,以確定會消耗多少瓦斯。

從上面我們可以很容易地估算出我們的瓦斯費用:

使用的瓦斯 x 瓦斯價格

69002 x 0.0000000275 = 0.001897555 KAIA

使用 MetaMask (KAIA 傳輸)

從圖片中可以看到:

  • 使用的瓦斯:21,000
  • 基本費用:25 Gwei (或 0.000000025 KAIA)
  • 優先權手續費:2.5 Gwei(或 0.0000000025 KAIA)

若要計算瓦斯費總額,只需將瓦斯使用量乘以基本費和優先費之和即可。

21,000 * (0.000000025 + 0.0000000025) 0.0005775 kaia.

這很好地顯示了總金額如何達到 0.0005775 KAIA,與 MetaMask 在上述交易詳細資訊圖片中顯示的完全一致。

使用 Kaiascan (智慧型契約執行 - SafeMint 功能)

從圖片中可以看到:

  • 使用的瓦斯:184,250
  • 有效瓦斯價格 (基本費用 + 優先費用) = 0.0000000275
    • 基本費用:25 Gkei(或 0.000000025 KAIA)
    • 優先費:2.5 Gkei(或 0.0000000025 KAIA)

要計算總瓦斯費,我們只需將瓦斯使用量乘以基本費和優先費之和:

184,250 * (0.000000025 + 0.0000000025) 0.005066875 kaia

這很好地顯示了總金額如何達到 0.005066875 KAIA,與上面交易詳細資訊圖片中 Kaiascan 顯示的完全一致。

使用上一區塊的基本費用

如果您想使用上一區塊的基本費用進行計算,請遵循此方法:

要找到下一個基本費用,如果區塊已滿或超過其瓦斯目標,則將上一個基本費用乘以 1.05。 這意味著當一個區塊的瓦斯用量高於網絡目標時,基本費用將增加 5%,以幫助緩解擠塞和抑制需求。 如果區塊使用不足,基本費用可能會維持不變,甚至在隨後的區塊中減少。

包括瓦斯先前的基本費用下一個基本費用
115,000,000100 gkei100 gkei
230,000,000100 gkei100 gkei
330,000,000100 gkei100 gkei x 1.05 = 105 gkei
430,000,000105 gkei105 gkei x 1.05 = 110.25 gkei
530,000,000110.25 gkei110.25 x 1.05 = 115.76 gkei
讓這個頁面變得更好