BTC
ETH
HTX
SOL
BNB
View Market
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

イーサリアムのトランザクションで発生する可能性のある 8 つの状態を 1 つの記事で読む

区块链大本营
特邀专栏作者
この記事は約3253文字で、全文を読むには約5分かかります
この記事では、イーサリアムの複雑なトランザクション ライフサイクル、このような状況で理想的なユーザー エクスペリエンスを dapps に提供しようとする開発者にとっての課題、および d
AI要約
この記事では、イーサリアムの複雑なトランザクション ライフサイクル、このような状況で理想的なユーザー エクスペリエンスを dapps に提供しようとする開発者にとっての課題、および d

編集者注: この記事は以下から引用しましたブロックチェーンキャンプ(ID:blockchain_camp)編集者注: この記事は以下から引用しました

ブロックチェーンキャンプ(ID:blockchain_camp)

ブロックチェーンキャンプ(ID:blockchain_camp)

、著者: dfuse、Odaily の許可を得て転載。

トランザクションがイーサリアム ネットワークに送信されると、トランザクションはかなり複雑な一連の状態を経ますが、すべての状態遷移が順方向に進むわけではありません。トランザクションは以前の状態にロールバックされたり、別のトランザクション置換によって置き換えられたりする可能性があります。完成したフォーク。 (トランザクションのライフサイクルについては、以下で詳しく説明します。)

dapp でトランザクションの進行状況を追跡し、ユーザーに優れたエクスペリエンスを提供することは困難です。現在、イーサリアムベースの多くの dapp は、魅力的でありながら比較的静的なユーザー エクスペリエンスを提供できます。アプリケーションは、特定の時点でのトランザクション ステータスを表示できますが、更新する必要があります (クリックして更新するか、dapp UI が定期的にページを更新します)。情報の更新を取得します。市場には比較的動的インターフェイスが存在しますが、提供されるデータの粒度はまだ十分ではありません。または、高いネットワーク トラフィックを犠牲にして、基礎となるブロックチェーン ノードに高い負荷を課します。

次に、これが当てはまる理由と、ネットワークとサーバーの効率の高い方法でのきめ細かいトランザクション ステータスの更新により、最新の標準を満たす dapp でのスムーズなユーザー エクスペリエンスがどのように提供されるかについて説明します。

副題

現在の Dapp インターフェイス

ユーザーはトランザクション中に情報を更新する必要があることがよくあります(たとえば、いつ転送が完了したかを知るため)。そのため、Dapp はインターフェイスに「更新」ボタンを配置します(またはユーザーのページを定期的に自動的に更新します)。更新を取得するには、ブラウザの [更新] ボタンを直接クリックする必要があります。

より成熟したユーザー エクスペリエンスを備えた一部の Dapp では、トランザクションの動的な更新がユーザーに表示されます。バックグラウンドで AJAX リクエストをポーリングし、Ethereum ノードの更新を再確認して、更新をフロントエンドにポストします。トランザクションのライフサイクルを開始から終了まで追跡するために、dapp はさまざまなデータ ソース (ブロック、メモリプール、ネットワーク条件など) をクエリする多数の API 呼び出しを行う必要があるため、これは複雑です。

このアプローチには欠点があります。トランザクションの更新頻度が低く、情報の粒度が大きいため、ユーザーは更新をより速く取得するために「更新」を繰り返しクリックする必要があるか、dapp がブロックチェーンを頻繁にポーリングする必要があり、その結果、大量のネットワーク トラフィックが発生します。 、これにより、基礎となるブロックチェーンノードに高い負荷がかかります。

副題

  • オンチェーンのイベントベースのインターフェイスを使用してみてはいかがでしょうか?

  • dapp 開発者にとって、イーサリアム ノードによって提供される API の性質を反映して、利用可能なオプションは静的ページを実行するかポーリングの 2 つだけでした。チェーンにプッシュされたトランザクションステータスの更新を受け取り、ユーザーにリアルタイムのフィードバックを提供できるオンチェーンイベントに基づくインターフェースがあれば、dappsはより良いユーザーエクスペリエンスを提供できますが、標準のイーサリアムノードは豊富なリアルタイムを提供しません。トランザクションデータ。

  • Ethereum ノードはオンチェーン イベントのストリーム読み取りを提供しますが、機能は制限されており、Ethereum の JSON-RPC インターフェイスを使用した PUB/SUB 機能を通じてのみ利用できます (GraphQL を使用する場合は利用できません)。 PUB/SUB インターフェイスを使用すると、dapp がいくつかのイベント タイプの通知を受信できるようになります。

  • newHeads - 新しいブロックヘッダーがチェーンに追加されるたび

newPendingTransactions - 保留状態になり、ノードで利用可能なキーによって署名されたすべてのトランザクションのハッシュ (これはパブリック ノードではまれです)

syncing - ノードがいつ同期を開始または停止するかを示します

副題

イーサリアムトランザクションのライフサイクル

イーサリアムのトランザクションには複雑なライフサイクルがあります。各トランザクションは複数の状態 (状態) を通過し、プロセス全体でさまざまな状態変化を経験し、前進したりロールバックしたりすることがあります。

  • 副題

  • 取引状況

  • イーサリアム トランザクションの送信からブロックに入るまで (一定の確率で成功します)、トランザクションは次のような一連の状態を経ます。

  • UNKNOWN (不明): ネットワークによって検出または処理されていないトランザクションは、UNKOWN 状態であると定義されます。

  1. PENDING: トランザクションは、mempool と呼ばれるものでマイナーによって選択され、処理されるのを待っています。マイナーは通常、ガス価格が高いトランザクションを最初に選択するため、ガス価格が低いトランザクションは長期間 PENDING 状態になる可能性があります。ガス価格が最も低いトランザクションは決して選択されないため、トランザクションは無期限に PENDING 状態のままになります。

  2. IN_BLOCK: マイナーがトランザクションを選択してブロックに処理することに成功すると、トランザクションは IN_BLOCK 状態に入ります。トランザクションが IN_BLOCK 状態に入っても、トランザクションが存在していたブロックがフォークした場合、トランザクションは PENDING 状態に戻る可能性があります。

同じ送信者からの同じ nonce を持つ別のトランザクションが IN_BLOCK 状態になる、または



同じ送信者からの同じノンスを持つ別のトランザクションが、ガス価格が 12% 高い場合、PENDING 状態になります。

以下の図は、これらの状態とそれらの間の遷移を示しています。

  • 副題

  • 状態遷移

  • 上の図に示すように、状態間の遷移も名前によって定義されます。

  • POOLED (プールへ): UNKOWN (不明) 状態のトランザクションは、POOLED と呼ばれるマイナーの選択を待っているトランザクション プールに入り、PENDING (保留) 状態に入ります。 REPLACED 状態のトランザクション (置換条件が true でなくなった場合など) (例: まれに、IN_BLOCK 内のガス価格が低いトランザクションがフォークされ、同じノンスで置換されて送信されます)。まだネットワーク上に浮いている状態)、再び POOLED 状態に変更することも可能です。

  • MINED (マイニング): マイニングされたトランザクションは、ブロックを作成するマイナーによって処理されるトランザクションです。マイニングされると、トランザクションは IN_BLOCK 状態にあるとみなされます。 Ethereum ネットワークのピアツーピアの性質により、指定されたノードの観点から見ると、トランザクションは明示的に PENDING (保留) 状態を通過することなく、UNKNOWN (未知) 状態から直接 IN_BLOCK 状態に入ることができます。同じ理由で、トランザクションは、特定のノードの観点から監視され、PENDING 状態を経由せずに REPLACED 状態から IN_BLOCK 状態に直接遷移することもできます。

FORKED (フォーク): マイニングされたトランザクションがネットワークによって取り消されたブロック内にある場合、それはフォークされたトランザクションです。そのブロック内のすべてのトランザクションは、IN_BLOCK (受信ブロック) 状態から PENDING (保留中) 状態に戻るまで、次々にフォークされます。

CONFIRMED: IN_BLOCK 状態のトランザクションは、後続のサブブロックがマイニングされるたびに確認されます。

前述したように、イーサリアム上のトランザクションのライフサイクルは非常に複雑であるため、dappsがそれを正確に追跡し、シームレスかつスムーズなアップデートをユーザーに提供することが困難になっています。

副題

トランザクションステータスを簡単に追跡

dfuse プラットフォームは、ストリーミング監視が可能な豊富なインターフェイスを提供し、イーサリアム トランザクションのライフ サイクルのリアルタイムの詳細な追跡をサポートします。 dfuse Ethereum Transaction Status Tracker API を使用すると、開発者は Ethereum トランザクションを送信し、ライフサイクル全体にわたるトランザクションの進行状況に従って、同じデータ チャネル上で詳細なステータス更新を即座に取得できます。

GraphQL を使用すると、指定したタイプのトランザクションの変更をリアルタイムで監視できると同時に、トランザクションが変更されるたびに受信するデータを正確に指定できます。 dfuse プラットフォームは、トランザクションの追跡と、イベントの発生に応じたトランザクションのリアルタイムでの dapp へのストリーミングの複雑さを処理します。

以下のアニメーションは、トランザクションがこの複雑なライフサイクルを通過する様子を示しています。トランザクションは、ブロックに含まれて確認されるまでに 8 つの状態遷移を通過します。

dfuse が使用されない場合、dapp はブロックチェーンに何度もアクセスして、トランザクションで発生したすべての遷移をキャプチャしてユーザーに更新する必要があり、バックエンド コードは各状態遷移に対処できるように準備する必要があります。

dfuse を使用すると、dapp は 1 つの接続経由でストリーミング更新を取得するだけでよく、dfuse は、トランザクションの運命が決定されるまで、さまざまな紆余曲折を経てトランザクションを追跡します。

  • 副題

  • 高度な Dapps のための最新のプラットフォーム

  • Lifecycle API は、dfuse プラットフォームの小さな重要な部分にすぎません。 dfuse は、dapps に完全な最新のインフラストラクチャ層を提供します。つまり、次のとおりです。

  • 速い、

  • スケーラブル、

ETH
Odaily公式コミュニティへの参加を歓迎します
購読グループ:
https://t.me/Odaily_News
チャットグループ:
https://t.me/Odaily_GoldenApe
公式アカウント:
https://twitter.com/OdailyChina