Polygon公式ブログに投稿されたHow to send EIP1559 Transactions
の邦訳です。
How to send EIP1559 Transactions / EIP1559トランザクションの送信方法
ロンドンのハードフォークでは、Polygon上の取引におけるガスの見積もりとコストの仕組みを変更する新しいEIPが導入されました。
このため、Polygonでトランザクションを送信する際に、トランザクションオブジェクトの形成方法に変更があります。タイプ2トランザクションと呼ばれる新しいトランザクションタイプが導入されました。レガシータイプのトランザクションも引き続き対応可能ですが、新しいスタイルに移行することが推奨されます。このドキュメントの最後に移動して、コードを直接覗き見ることができます。
How legacy transactions work / レガシートランザクションのしくみ#
トランザクションを送信する際、gasPrice
も送信します。
gasPrice
は、消費した gas
1つあたりに支払うことを提案する金額です。そして、あなたがトランザクションを送信すると、マイナーはあなたのgasPrice
の入札に基づいて、あなたのトランザクションを含めるかどうかを決定することができます。マイナーは、最も高いガス価格を優先します。
Sending Type 2 transactions with EIP1559# / EIP1559#によるタイプ2トランザクションの送信
同様のコンセプトで、gasPrice
はbaseFee
とpriorityFee
に分割されることになります。
すべてのトランザクションはbase fee
を支払う必要があり、これは前のブロックがどれだけ埋まっていたかに基づいて計算されます。トランザクションはマイナーにpriorityFee
を提供することもでき、マイナーにその取引をブロックに含めるよう動機付けることができます。
Sending Legacy transactions / レガシートランザクションを送信する
ロンドンフォーク前のレガシートランザクションでは、gasPrice
だけが言及される必要がありました。
以下のサンプルコードでは、レガシー方式でトランザクションを送信しています:
const sendLegacyTransaction = async () => {
con dest web3 = new Web3('https://polygon-rpc.com');
await web3.eth.sendTransactions({
from: 0x05158d7a59FA8AC5007B3C8BabAa216568Fd32B3,
to: 0xD7Fbe63Db5201f71482Fa47ecC4Be5e5B125eF07,
value: 1000000000000000000,
gasPrice: 200000000000
})
}
Sending EIP1559 transactions / EIP1559のトランザクションを送信する
Add maxPriorityFeePerGas field / maxPriorityFeePerGas
フィールドを追加
gas
: gasPrice
の組み合わせに最も近い類型は gas
: maxPriorityFeePerGas
です。ベースフィー(baseFee)は無関係に支払われる必要があるので、マイナーのための 「チップ 」の入札を提出すればよいのです。なお、GAS料金の見積もりは、Polygon Gas Station V2を使用することができます。
以下のサンプルコードでは、Type 2 メソッドでトランザクションを送信しています:
// Example for
const sendEIP1559Transaction = async () => {
const web3 = new Web3('https://polygon-rpc.com');
await web3.eth.sendTransactions({
from: 0xFd71Dc9721d9ddCF0480A582927c3dCd42f3064C,
to: 0x8C400f640447A5Fc61BFf7FdcE00eCf20b85CcAd,
value: 1000000000000000000,
maxPriorityFeePerGas: 40000000000
})
}
The Polygon Gas Station V2 を使って、GAS料金の見積もりを取ることができます。
The Polygon Gas Station V2のエンドポイントです。
https://gasstation-mainnet.matic.network/v2
Polygon Gas Station V2 Response:
{
"safeLow": {
"maxPriorityFee": 37.181444553750005,
"maxFee": 326.2556979087
},
"standard": {
"maxPriorityFee": 49.575259405,
"maxFee": 435.00759721159994
},
"fast": {
"maxPriorityFee": 61.96907425625,
"maxFee": 543.7594965144999
},
"estimatedBaseFee": 275.308812719,
"blockTime": 6,
"blockNumber": 23948420
}
以下もご参照ください。
EIP-1559のトランザクション送信については、以下の記事をご覧ください。
「EIP1559でトランザクションを送信する方法」というチュートリアルは、GASを推定してトランザクションを送信するためのレガシー方式と新しい(EIP-1559)方法の両方を説明します。
ethers.jsを使用してEIP-1559トランザクションを送信する方法について説明します。
【参考文献】
SolidityとEthereumによる実践スマートコントラクト開発 ―Truffle Suiteを用いた開発の基礎からデプロイまで
スマートコントラクトの仕組みと法律
図解即戦力 暗号と認証のしくみと理論がこれ1冊でしっかりわかる教科書