見出し画像

EIP1559 トランザクションの送信方法について

本記事は、Polygonが2022年01月25日に作成した、PolygonDeveloper向けの「How to send EIP1559 Transactions」の日本語翻訳です。

EIP1559 トランザクションの送信方法について


ロンドン・ハードフォークにより新しいEIPが導入され、Polygon上のトランザクションにおけるガス代見積もり方法と、コストの仕組みが変更されました。

これに伴い、Polygon上でトランザクションを送信する際のトランザクションオブジェクト形成方法が変更され、Type 2トランザクションと呼ばれる新しい種類のトランザクションが導入されました。従来のタイプのトランザクションも引き続き使用できますが、新しいスタイルに移行することをお勧めします。このドキュメントの後半では、コードを直接見ることができます。

従来のトランザクションの仕組み


ユーザーは、トランザクションを送信する際に、gasPrice(ガス料金)も送信しています。gasPriceとは、消費されるガス一単位につきユーザーが支払いたいと考えている手数料を指しています。

次に、ユーザーがトランザクションを送信すると、マイナーはユーザーが提示したgasPriceの入札額に基づいて、そのトランザクションを含めるかどうかを決定します。マイナーはガス料金の高いものを優先的にブロックに取り入れます。

EIP1559によるType2トランザクションの送信について

このタイプも似たようなコンセプトですが、ガス価格は基本手数料と優先手数料に分けられます。すべてのトランザクションにおいて基本料金を支払う必要があり、基本料金は一つ前のブロックの混み具合に基づいて計算されます。

トランザクションにおける優先手数料はマイナーに渡されており、マイナーがそのトランザクションをブロックに含めるインセンティブとなっています。

従来のトランザクションの送信

ロンドンフォーク以前の従来のトランザクションでは、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
   })
}

EIP1559トランザクションの送信


maxPriorityFeePerGasフィールドの追加


gasとgasPriceの関係性は、gasとmaxPriorityFeePerGas(ガスごとの最大優先手数料)の関係性に最も類似しています。

基本手数料は常に支払われなければならないので、ユーザーはマイナーへの「チップ」の入札のみを行えばよいです。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
   })
}

Polygon Gas Station V2を利用して、ガス料金の見積もることができます。
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トランザクションの送信について理解を深めるには、以下の記事をお読みください。

How to Send Transactions with EIP 1559
このチュートリアルでは、従来の方法と新しい方法(EIP-1559)の両方における、ガスの見積もり方法とトランザクション送信方法を説明しています。

Learn how to send an EIP-1559 transaction using ethers.js
an EIP-1559におけるトランザクション送信方法を学ぶには、ethers.jsをご覧ください。