Blockchainが「重い」ってな~んだ?
はじめに
はじめまして、vividotと申します。
いつもは「DeFiで落ちてるお金を拾いたいブログ(タイトル詐欺)」というブログで記事を書いていますが、
HiÐΞでお金が拾えると聞いて出張してきました。
投げ銭ください(直球)
内容
Blockchainが「重い」といったニュアンスの話をTwitterやDiscord、Telegramで目にすることはありませんでしょうか?
(Blockchainの部分には任意のネットワークの名称が入ります、特にサイドチェーン)。
また、それの対応策として「PRCを変える」という話も見かけます。
「重い」と言っているニュアンスは分かるのですが、Blockchain自体が重いことは通常ありえません(そういうBlockchainへの攻撃はありますが)。
そこで、本記事では「RPCって結局なんなの?」といったところから「なぜ重いのか」と「その対策」について解説したいと思います。
仕組みを知っていると有利に立ち回れるかもしれませんし誰かにドヤ顔できるかもしれませんので、是非お付き合いください。
※説明を簡単にするために、本記事ではEthereumを前提とします。
RPCってなんやねん
まず、Ethereumの仕組みからおさらいしましょう。
Blockchainの説明をまじめにしようとすると、マイニングがー!とか改ざんの検知しやすいデータ構造がー!とかとても1ページで説明することはできないので、ここでは「P2Pネットワークで皆が同じデータを共有してる」のをイメージしてください。
P2Pネットワークというの次の図のようにコンピュータ(以降、ノードと呼称)同士が相互に接続するネットワークのことを言います。
また、それぞれのノードがEthereumに関して同じデータ(厳密には違うけど)を持っているため、どのノードがダウンしても問題ないというのが特徴です。
では、ノードは何のためにネットワークに参加しているのでしょうか?
Ethereumを応援するためでしょうか?それも勿論あると思います。
しかし、理由の大部分は「ノードにならないとEthereumを利用できないから」です。
例えば、Ethereumでトランザクションを送りたかったら、ノードとしてEthereumのP2Pネットワークに参加する必要があります。
ちょっと待って!
「え?でも私ノード?なんていうの知らないけどトランザクション送れてるよ!」と思ったそこのあなた、鋭い!100点満点です
一般の方がノードを管理するのは、はっきり言って無理です。
でも、ノードを建てられるヲタクだけが内輪でデュフデュフしてTXを送りあっても何の意味ないですよね?
そこで、ノードにはJSON-RPCというのが用意されています(やっと「RPC」という単語が出てきました)。
RPCはリモートプロシージャコールの略で平たくいうと「別のコンピュータで処理を実行させるための規格」だと思ってください。
要するに、ノードが他のコンピュータから依頼された処理を実行することができます。
例えば、処理としてトランザクションの送信が依頼された場合は、次の図のようになります。
この仕組みがあることによって、私達はノードを自分で管理せずにEthereumを利用することが出来ている訳です。
Blockchainが「重い」
ここまで解説した内容に基づいて「重い」に含まれるニュアンスと原因をはっきりさせたいと思います。
ここに挙げた内容は、筆者による推測なので、これ以外にも「こういう意味で使ってた!」っていうのがあれば是非コメントで教えてください。
TXがBlockchainに含まれるのが遅い
ありますよね。MetaMaskで「Confirm」を押してから何十秒も待たされること。
TXがBlockchainに含まれない理由はいくつかあって、例えば適切なガス代を払っていなかったりTX自体が無効だったり(例えば、残高以上の送金をしようとしていたりnonceがずれていたり)が考えられます。
その中に、TXがExplorerに表示されないケースがあると思います。
このケースは、特にEthereum(Polygon/BSC/その他)を利用したいユーザが急激に増加したときによく見られます。
(例えば、時間指定で始まるセールや先日のTITANの暴落など)
なぜ起きるか、その状況を誇張して図示すると次のようになります。
明らかにノードが辛そうということが分かると思います。
つまりBlockchainが重いのではなく、Blockchainを利用するためのノードでの処理・ノードとの通信に時間がかかっており、実際にはTXが送信されてないという状況です。
こうなったときの対策が「RPC」のエンドポイントを変えることです。
利用しているウォレットの初期設定だと混雑しているノードに処理を依頼してしまいがちなため、別のノードをRPCのエンドポイントとして設定することで、このような状況を解決することができます。
↑誇張した図
補足
EtherscanやPolygonscanなどのExplorerは、受け取ったBlockchain上のデータをすぐに表示している訳ではありません。
体感として20秒から1分程度のタイムラグがあります。
そのため、Explorerに表示されてないけどBlockchainには含まれているという状況もありえます。
また、再現性のないケースとして先日Polygonで原因の分からない詰まり方を見ました。
一時的なTXの急激な増加によってValidatorのキャパを超えてTXが捨てられたとか考えられなくもないですが、これに関しては謎です。
任意のDeFiで読み込みが遅い
例えば、◯◯◯swapで1ETHをUSDCにスワップしたいのに何USDCになるのか全然出てこないとか、ありますよね。
この状況でもRPCのエンドポイントを変えることは有効です。
なぜなら、TXの送信に関わらずBlockchainのデータを取得する全ての通信がRPCのエンドポイントであるノードを通して行われているからです。
一方、自身がRPCを変えても改善に繋がらない場合があります。
それは、DeFiのサイト側がユーザ側のRPCのエンドポイントではなく、自身で用意したRPCのエンドポイントを利用している場合です。
その場合は諦めて読み込みを待つしかありません。
最後に
以上、「RPCについて」と「Blockchainが重い」時の話でした。
じゃあ、どのRPCのエンドポイント使えばええねん!とかの話は力尽きたので検索してください。
登録の要不要にかかわらず、無料で使えるエンドポイントは誰かと共有してることが多いですが、デフォよりはマシです。
フッター
フッター①
モニタの下の方の文章が個人的に読みにくいので調整用に入れています。
読みにくいのって僕だけでしょうか。
フッター②
これ書きながら食べた今日の夕飯は「セブンプレミアム シンプルが旨い カップ炒飯 ¥225」でした(露骨な投げ銭アピール)。