Solanaが止まった日(2021年9月14-15日障害リポート)
最終更新:9月16日10:30
2021年9月14日夜から15日にかけ、Solanaネットワーク全体が深刻な不具合に襲われ、結果としてネットワーク全体が停止する事象が発生しました。本記事の目的はその経緯、経過を記録することにあります。
*全ての記述は筆者の調査に基づきます。筆者がその目で確かめたものではない場合もあるため、100%の信ぴょう性を持つものではないことをご理解ください。
14日 21:00 Raydium IDO
障害の直接の原因はRaydiumで行われたGRAPEトークンのIDOだという見方が優勢です。前回のATLAS/POLISトークンIDOの大成功に味をしめたのか、マーケット立ち上げ時に多数の早押しbotがトランザクションを送り始めました。
1/ Solana Mainnet Beta encountered a large increase in transaction load which peaked at 400,000 TPS. These transactions flooded the transaction processing queue, and lack of prioritization of network-critical messaging caused the network to start forking.
— Solana Status (@SolanaStatus) September 14, 2021
これにより、Solanaネットワークにはピーク時40万トランザクション/毎秒が送信されました。御存知の通りSolanaの現在の処理速度はおよそ1000~5000tx/秒となっています。キャパシティを大幅に超過するトランザクションが送信され、さらにそうなった場合どのトランザクションを優先するかということが決まっていなかったために、(ある程度文面からの想像になりますが)それぞれのノードが別々のトランザクションを処理し始めたようです。その結果、Solanaチェーンにハードフォークが発生しました。
このフォークによりノードのメモリに過大な負荷がかかり、ダウンするノードが出てきました。おそらくデリゲート量上位のノード(ネットワークをリードする輪番が回ってくる可能性が高いノード)にもダウンするノードが出てきた結果、チェーン自体もブロック高96,542,804で停止しました。
ブロックタイム0秒の超レア画像
14日 ~22:00
この時点でSolana Labは不具合を認識、対応に当たっています(ちなみにこのとき、西海岸標準時で早朝6時とかです。エンジニアの方々には頭が上がりません・・・)
Solana mainnet-beta is experiencing intermittent instability. This began approximately 45 minutes ago, and engineers are investigating the issue.
— Solana Status (@SolanaStatus) September 14, 2021
Twitterもこのあたりから騒がしくなってきました。アメリカ時間早朝だったのがやはり大きいのか、価格は思ったより下がらなかったんですけどね。
Solana止まっているの、これかなりヤバそうだなぁ…
— モノアイ (@mono_i_love) September 14, 2021
Solanaちゃんが悲鳴あげてる
— teto (@teto_btc) September 14, 2021
あーなるほどsolana落ちてるのか
— ヨーロピアン (@sen_axis) September 14, 2021
TPSが2桁まで下がってる pic.twitter.com/dxUw00VJgg
— salmon/さーもん@Web2.5☀️🦇🔊 (@salmon_crypto) September 14, 2021
14日 ~24:00
海外勢が起きてきました。この時点まで一切ネットワークは復旧していません。
The last block on Solana was produced almost 40 minutes ago. Not fantastic pic.twitter.com/yLXjYdSx9L
— Larry Cermak (@lawmaster) September 14, 2021
15日 ~6:00
Solana Labから修正パッチv1.6.24配布。このパッチは再起動の準備のほか、障害の原因でもあったトランザクションの優先順位付けを行えるようになっています。このパッチ適用ノードがネットワーク全体の80%を超えた段階でネットワークを再始動させる予定でした。
Mainnet Beta Validators: Please upgrade to https://t.co/akHkncJjL1 by following the instructions https://t.co/ByGIs3QzGd
— Solana Status (@SolanaStatus) September 14, 2021
15日 ~9:30
ネットワーク内のv1.6.24パッチ適用済みノードは90%超に。Labからのアナウンスを待機している状態です。
ちなみにSolanaのDiscordではバリデータが頑張ってアップデートを適用している様子が伺えます。ありがたい
15日 ~12:00(更新)
この時点でv1.6.24の適用率は再アクティベートの必要条件を満たしていましたが、この時点でさらに修正の入った次のアップデート、 v1.6.25が発表されたことで再アクティベートは一旦持ち越しとなりました。このv1.6.25パッチを80%のノードが適用した時点でネットワークを起動する見通しです。
Mainnet Beta Validators: Please upgrade to https://t.co/iBrUFASCwD by following the instructions https://t.co/s6aqC6tVpy
— Solana Status (@SolanaStatus) September 15, 2021
15日 ~15:00(更新)
コミュニティはノードがパッチを適用するのを待っています。適用率をリアルタイムでツイートするbotも現れました。
15日 15:00(更新)
YES: 81.530/80%. 🚀
— Solana.state == State::Up (@IsSolanaUpYet) September 15, 2021
80 fucking %!!!!!!11 network restarting
— Parr◎t 𓅊 🌔 - ido.parrot.fi (@gopartyparrot) September 15, 2021
ノードへのパッチ適用率が80%を超えました。
これを受けてネットワークの再アクティベートが行われ、通常通りトランザクションが処理され始めました。これで障害はひとまず終息したことになります。TPSも1500程度で安定しています。
Solanaのバリデータコミュニティによってバージョン1.6.25へのアップグレードが行われ、無事Mainnet Betaを再稼働させられました。Dapps、エクスプローラー、その他のサポートシステムはこの後数時間でリカバリーし、全て完全に復旧する見込みです。 https://t.co/LGgTuqceKh
— Solana Japan (@SolanaJapan) September 15, 2021
違和感
DEGさんのFTXコミュで見つけたのですが、ネットワークの復旧直後はトランザクションのタイムスタンプが7時間遅れた状態になっていた、つまりあらゆるトランザクションが7時間前に出されたものとして処理されていた模様です。その後徐々に現在時刻に収束していきましたが、それはCluster timeの時計が通常より早く進むことでなされたみたいです。
現在でも20秒程度遅延しています。最終的にエポックの切り替わりでアジャストされるとかされないとか。
16日 8:00(更新)
ネットワークの99%超が最新のパッチを適用して復帰しています。ネットワークの安全性は障害前と同程度に回復しました。
想定される影響
Grape IDO 今回の障害の元凶。仕切り直しになると思われますが、bot対策は必須になるでしょう。
更新 自分で確認できていないのでざっくりですが、IDOのやり直しは行われなかったようです。ネットワークが再起動したタイミングでRaydiumにUSDC-GRAPEプールが作成され、取引が開始されました。障害前に買えていた人はかなり高値で売り抜けられたようなので、早押しbotの必要性を改めて証明してしまったような形にもなっています。
更に言うと、RaydiumはTestnetでもDevnetでもユーザーがテストできる環境を用意していません。実態としてSolanaの需要のかなりの部分を担い、今回の障害の直接の引き金となっている以上、何らかの対策を講じることが強く要求されます。
Back in action! 💪
— Raydium (@RaydiumProtocol) September 15, 2021
Huge thanks for everyone's patience!
The GRAPE-USDC LP is now live, Fusion pool emissions will be delayed for a short period to give time to LP. https://t.co/DKvkqwoi3Z
Parrot IDO PRTトークンのセールが進行していましたが、入金可能なDepositラウンドが十分な時間確保されないまま出金のみ可能なGraceラウンドに移行してしまいました。こちらもなんらかの救済措置が入るものと思われます。
→更新 ParrotはIDOの期間を調整することを発表しました。ラウンド1の入金可能時間が延長されています。
Auction 1 of the Parrot IDO extended. You may deposit up to September 16th, 9am (GMT+8).
— Parr◎t 𓅊 🌔 - ido.parrot.fi (@gopartyparrot) September 15, 2021
Auction 1 withdrawals end at September 17th, 9am (GMT+8).https://t.co/BRWEeyQIFJ
価格乖離 現在Solanaのあらゆるトランザクションが停止しているため、外部のマーケット(FTXなどのCeFi、UniswapなどのDeFi問わず)のトークン価格との間に乖離が発生しています。ネットワークが再始動した時点で大量のアービトラージ取引が行われ、ネットワークに負荷をかける恐れがあります。
清算 価格乖離と同じようなものですが、外部マーケットでSolanaエコシステムのトークン価格が軒並み下落しているため、再始動と同時にレンディングプラットフォームなどで大量の清算が発生する可能性があります。
→価格乖離と清算についての更新 これも自分の目で確認していないのでざっくりですが、DEX各所、特にMango Marketで価格の歪みが発生したようです。予想通りbotが動いていたようですが、障害には至りませんでした(フロントが落ちたサイトはかなりあったようです)鞘を見つけられた人は儲かったらしいですね。おめでとうございます。
話半分に聞くべきものですが、Solanaエコシステムに多額の資金を投資しているAlameda ResearchというファンドがSolanaチェーンでの大規模な清算を防ぐために、再アクティベート直前にその時点での市場価格より大幅に高い価格で買い注文を出したとの情報(噂)もあります。もしこれが事実であった場合、Solana Labだけでなくその裏にいるある種のコミュニティ(VCやCEXや開発チームなど・・・)はこの障害によるチェーンへの影響を防ぐためあらゆる措置を講じたとも言えるでしょう。
とはいえAlamedaの資金を持ってしても、マーケットは動かせるような規模にはならないとも考えられます。(しかもツイート主はAaveのfounderで、Solanaのネガキャンをする理由は通らなくもない)このあたりはあんまり信じ込まないほうがいいですね。
theory: -15% on SOL would have been a disaster for liquidations & too much stress via MEV for the restart, so alameda bid it up back to -2% before restart to save the chain
— state (@statelayer) September 15, 2021
完全なFUD。
— 稲見建人 (@KentoInami_jp) September 15, 2021
AAVEだからSolana嫌いなだけという。 https://t.co/OODly3JRJZ
オラクルSolana上に構築されたPythというオラクルは高速処理が魅力ですが、チェーンが止まると当然更新も止まります。
更新? Pythはダウンしていたことに関する声明を一切出していません。
Chainlinkを目の敵にしているPYTH(ソラナ発のオラクル)の問題点。
— 仮想戦士ロイ🔺⬡🔺 (@RoiSarak) September 14, 2021
今回のSolanaのネットワーク障害でPythのオラクルサービス自体も障害を被ってしまった。
オラクルはブロックチェーンとは独立した構造であるべき。Chainlinkはそうしてる$LINK https://t.co/vxSQ5hYZG1
これから
今回の障害は非常に大きかった(18時間ネットワークが完全停止)ため、Solana Labから透明性レポートが発表されると思われます。(できれば翻訳します)
そらなさん無事復旧できてよかった、後はトランスペアレンシーレポート待ちですね
— Yoriko Beal ヨリコビール🦇🔊 (@yoriko09) September 15, 2021
所感
今回の障害は、Solanaが抱えるインフラ面での脆弱性が顕著に現れた事案です。Solanaは高速・安価であるがゆえにbotを使って多量のトランザクションが殺到しやすく、なおかつEthereumにおけるInfuraのようなインフラストラクチャを担う、安心感あるプロダクトがありません。したがって、このような高負荷な状況ではダウンする可能性が高くなります。これまではRPCサーバーが落ちてチェーンにトランザクションが送れない、フロントが落ちた、という程度で済んでいましたが、今回のように1つのプロダクトを震源にネットワーク全体がダウンする可能性も考えると、インフラ増強が喫緊の課題だと言えるでしょう。
ちなみにこれは素人考えなのですが、SolanaにもEthereumやBitcoinのようなMempoolを作ればいいじゃんというのは浅はかなんですかね?
更新(ふむふむ)
mempoolの設置じゃなくて、署名が発生するauth系トランザクションの時間的なコストを上げるのがSolana的には向いてるんじゃないかな。
— てぃなちゃん (@btc_AP) September 15, 2021
個人的な考え
ちなみにSolanaはあくまでMainnet **Beta**なので、落ちたからといってあんまりとやかく言われる謂れはないです。
— salmon/さーもん@Web2.5☀️🦇🔊 (@salmon_crypto) September 14, 2021
実際どうなのって感じではあるけど、あくまでβ版に勝手に大金持ち込んでガチャガチャやってるだけなので。
Solanaはあくまでβ版です。TPSも理論上可能な水準より大幅に制限されてますし、インフラ面もEthereumほどには十分整っていません。あくまで自己責任、というブロックチェーン界隈の原則を思い出しましょう。
あと、この機会にSolanaの仕組みをしっかり学びたいですね。
なるほど
SolanaとArbitrium双方ダウンという事でTLが騒がしいですね
— 信玄 (@shingen_crypto) September 14, 2021
双方まだβですが、特に超低手数料はSpamに弱い事、チェーン性能と物理インフラ性能は別である認識は必要です(他チェーンでも似たような事は起きている)
Solanaは極端な分散思想ではないのでもっとNode要求を高くしても構わないと思います
一番尊敬すべき人は実際に手を動かしている方々だと持っております。今現在対応されているエンジニアの皆様には頭が下がります。 https://t.co/xJD5WWY9Xg
— まめだい / mamedai (@0xmamedai) September 14, 2021
It takes 10 years to build a new OS or database or any complex general purpose platform. Nearly 4 years in
— Anatoly Yakovenko (@aeyakovenko) September 14, 2021
SolanaのFounder、Anatolyの言。ざっくり意訳すると「新しいOSやデータベース、多目的プラットフォームを作るのには10年以上かかる。いわんやブロックチェーンを4年程度で完璧にすることができるだろうか、いやできない(反語)」
参考
Solana experiences transaction stoppage as developers report ‘intermittent instability’ -- The Block
Solana blockchain validators restart network after transaction stoppage -- The Block