本文へスキップ
このページは英語からの機械翻訳を使用しており、誤りや不明瞭な表現が含まれている可能性があります。最も正確な情報については、オリジナルの英語版をご覧ください。頻繁な更新のため、一部のコンテンツはオリジナルの英語になっている可能性があります。Crowdinでの取り組みに参加して、このページの翻訳改善にご協力ください。 (Crowdin translation page, Contributing guide)

KaiaウォレットとMetaMaskでガスの上限と価格を見積もる方法

このガイドでは、カイアでガス料金/価格を見積もる方法を順を追って説明します。

ガスとは何か?

Gasは、Kaiaチェーン上で支払い(価値移転)または呼び出し(スマートコントラクト呼び出し)のいずれかのトランザクションを処理するのに必要な計算量の単位を表します。 この文脈では、カイア仮想マシン(KVM)上で行われる計算を指す。

カイア・ネットワークは、トランザクションを実行するためにガスを必要とする。 トークンを送ったり、コントラクトとやり取りしたり、KAIAを送ったり、ブロックチェーン上で何かをするときには、その計算の対価を支払わなければならない。 その支払いはガスで計算され、ガスは常にKAIAで支払われる。

ガスの上限は?

ガス・リミットとは、1回の取引で消費するガスの最大量のこと。 より複雑なトランザクション、特にスマートコントラクトを実行するトランザクションは、単純な支払いよりも多くの計算リソースと高いガス上限を必要とする。 標準的なKAIA移籍では、通常約21,000ガスを使用する。

ガスの上限を高く設定しすぎた場合、例えば単純な送金の場合、取引は必要な分(約21,000)だけを使用し、残りは返却される。 しかし、20,000のように低く設定しすぎると、トランザクションは即座に失敗し、ガスは消費されない。 また、スマートコントラクトが呼び出されたときなど、トランザクションが実行中にガス欠になった場合、そのトランザクションの効果はすべて元に戻るが、使い切ったガスの代金は支払われる。

全体的なガス料金体系

カイアのハードフォーク後、取引作成者が支払う手数料は以下のように計算される:

( gasPrice x units of gas used).

ここで gasPrice = 基本料金 + 優先料金 とする。

基本料金とは何ですか?

基本料金とは、ネットワーク上で取引が処理されるために必要な、ガス1単位あたりの最低価格である。 これはネットワーク自体によって設定され、各ブロックが終了するごとに、前のブロックがガスターゲット(ネットワークが各ブロックで処理することを目標とする取引量)を上回ったか下回ったかによって、上下に調整される。

あるブロックが混雑し、目標以上の利用があった場合、混雑を緩和するために基本料金が(5%)上がり、混雑が緩和されれば基本料金は下がる。 この仕組みは、ブロックサイズを安定させ、誰もが料金を予測しやすくするのに役立つ。 基本手数料は、取引が処理されると焼却され、流通から外される。

プライオリティ・フィーとは何ですか?

優先手数料はチップとも呼ばれ、基本手数料に上乗せして支払うことで、取引を優先させることができる。 カイアでは、このチップは直接バリデーターに渡るのではなく、ネットワークの報酬プールに貢献し、後にバリデーターとエコシステム基金の両方に分配される。 高めのチップを提示することで、自分の取引がより速く処理され、同じブロックの他の人よりも先に配置されるように、より多く支払う意思があることを示すことになる。

ガス料金の見積もり

あなたの取引が通常どれくらいのガスを消費しているかを明確に把握するためには、以下のような方法を用いるのがよい:

ethers.jsでeth_estimateGas APIを使用する

トランザクションが消費するガスの量を推測する代わりに、ノード自身の実行コンテキストを活用することで、トランザクションをチェーン上に伝搬する前に、そのトランザクションが必要と予想される計算量を正確に伝えることができる。

これは、プログラムでガス代をコントロールし、ガス欠エラーによる失敗を回避する必要がある開発者や、合計料金を事前に把握し、財布への不意な請求を避けたい一般ユーザーにとって有用である。

これは、ethers.jsを通じて公開されるeth_estimateGas APIで実行されます。

例 - ミント機能のガスの見積もり

例えば、スマート・コントラクトのミント機能のガスを見積もりたいとしよう。 そのための明確で完全なスクリプトがここにある:


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でノードに送信することでドライランを実行し、ノードはそれをブロックに追加することなく実行し、消費するガスの量を正確に決定します。

以上から、ガソリン代は簡単に見積もれる:

使用ガス×*ガス価格

69002 x 0.0000000275 = 0.001897555 KAIA

メタマスクの使用(KAIA転送)

画像からわかるように:

  • 使用ガス21,000
  • 基本料金:25グウェイ(または0.000000025 KAIA)
  • 優先手数料:2.5グワイ(または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グラム100グラム
230,000,000100グラム100グラム
330,000,000100グラム100渓×1.05=105渓
430,000,000105 gkei105渓×1.05=110.25渓
530,000,000110.25 gkei110.25 x 1.05 = 115.76 gkei
ページを改善してください。