
2025.08.01
災害大国・日本に求められる“命しか守れない防災”からの脱却 最長2週間先の気象災害予測による対応策
リンクをコピー
記事をブックマーク
岡南直哉氏:「Account/Balanceモデルのシャーディングと課題点」というタイトルで岡南が発表します。
まず自己紹介です。Layer XのResearcherとして働いていまして、2019年の7月からシャーディングやEthereum、CBC Casperについて研究しています。今、筑波大のM1でして、春から大学院で勉強しています。
たまに競プロとかCTFとかKaggleとか……競プロというのはアルゴリズムのコンテストだったり、CTFというのはセキュリティのコンテストだったり、Kaggleは機械学習のコンテストなんですけど、こういうのに暇なときに出ています。
今日の目次というかアジェンダです。中村さんの圧倒的な勉強会がありましたが、簡単にAccount/Balanceモデルのシャーディングについてまず説明しまして、そのあと、課題点を説明します。
そして解決策もちょっと紹介してから、その課題点とけっこう深く関わる「Load Balancing for Sharded Blockchains」という研究を紹介します。こちらの研究はWTSC’20という国際ワークショプで発表いたしました。最後にQ&Aを設けています。
今回のセッションのゴールは、こうしたAccount/Balanceモデルのシャーディングの課題点と解決策を通じて、シャーディングの理解を深めることです。みなさんのシャーディングの理解が深まれば幸いです。
まずAccount/Balanceモデルのシャーディングについて、トランザクションモデルという、こうした基礎なところから、お話します。
これはブロックチェーンにおいて、どのようにトランザクションを管理・表現するかのモデルでして、大きく2つあります。UTXOモデルとAccount/Balanceモデルです。明確な違いとして、アカウントと残高が明示的であるかどうかがあります。Bitcoinだとアカウントと残高という概念が抽象化されていまして、逆にEthereumとかだとアカウントと残高が明示的に結びついています。
Shared Blockchainでも、このUTXOモデルとAccount/Balanceモデルとでけっこう違っていまして、今回はAccount/BalanceモデルのEthereum 2.0と、先ほどNSDIで発表があったと中村さんが言っていたMonoxideについて解説していきたいと思います。
Account/Balanceモデルはスマートコントラクトの実装に適していまして、その分、トランザクションの負荷や手数料に、より気を遣う必要があります。
さっきのおさらいなんですけれども、すごく簡単にまとめると、シャーディングというのはブロックチェーンをたくさん作って並列化する技術のことです。これでスケーラビリティが向上します。具体的に何をするものかといいますと、トランザクションを検証するバリデータとトランザクションのこれら集合を分割します。
ちょっと図を見ていただきたいんですけれども、バリデータ・検証・トランザクションとありまして、この矢印が、バリデータがトランザクションを検証することを表しています。バリデータが4人・トランザクションが4つあったときに、こうやって4×4の検証が行なわれます。
「シャーディングによってバリデータ集合・トランザクション集合が分割されると、この検証の数が大幅に減るよね」というのが、簡単なシャーディングのイメージです。
Account/Balanceモデルにおいては、アカウント集合も分割しなければならなくて、トランザクション、バリデータに加えてアカウントも分割しましょうという話になります。
このシャード間のトランザクションというのがけっこうキーポイントになっていまして、クロスシャードトランザクションといいます。
これはあるシャードから別のシャードへのトランザクションのことなんですけれども、通常のトランザクション、普通の例えばシャーディングしていないブロックチェーンにおけるトランザクションとかより、非常にその負荷が大きかったり手数料が高かったり、またそのレイテンシーが高いといった問題があります。
これらのAccount/Balanceモデルのシャーディングにおける課題点を簡単に3つ紹介したいと思います。
1つは、先ほど中村さんがおっしゃっていた、バリデータのシャッフルの話のオーバーヘッドについて。2つめは、クロスシャードトランザクション。この負荷が大きかったり、手数料が高くなってしまうクロスシャードトランザクションによって、そのUXが、どう悪化してしまうのか。あとは、その影響とか。そして3つ目が、特定シャードへの負荷集中といった現象です。これらの3つについて詳しく紹介していきます。
まず1つ目の、バリデータのシャッフルによるオーバーヘッドの話です。あるシャードのバリデータはランダムに割り当てられるんですけれども、割り当てられたときに、攻撃者が例えば賄賂を渡してそのシャードのバリデータを支配して、シャードを乗っ取ろうとする攻撃があります。
これを防ぐためにバリデータを定期的にシャッフルします。例えば数日ごととかにバリデータをシャッフルすることで、この攻撃をある程度防ぐことができます。
ただ、バリデータというのはステートを持つ必要があって、シャッフルのたびに別のシャードのステートを毎回ダウンロードしなくてはいけません。あらかじめ持っててもいいんですけど、基本的にはダウンロードしなくてはいけません。
この問題点は、通信コストが非常にかかることです。例えば数時間だったりとか、通信環境が悪ければ数日かかったりすることもあって、そもそもバリデータとして参加できないようなケースもあります。攻撃を防ぐために条件を厳しくしすぎると、通信環境がいい人しか参加できず、中央集権化してしまうといった問題があります。
解決策としては、先ほど中村さんも軽く紹介していたんですけど、Stateless clientといって、フルノードはステートを保存しなくていいというのがあります。
詳しくはこのリンク先を見てほしいんですけれども、状態遷移に少し変更を加えます。そうすることでステートではなくてステートルートだけもてばよくなっていまして……。また、それだけではなくて、ステートの検証をユーザーに協力してもらえることでこれが実現するといったものがStateless clientです。これによってストレージ負荷が小さくなって、先ほどの問題を緩和することができます。
次の課題点、クロスシャードトランザクションによるUXの悪化です。先ほども言ったんですけれども、負荷が大きくなったり、それによって手数料が大きくなったり、レイテンシーが高くなってしまうという、クロスシャードによってどれだけそのユーザーのUX、もしくはバリデータのUXが悪化してしまうのか? そして、どんな現象が起こってしまうのか? というのはまだまだぜんぜん詳細な分析は行なわれていないものです。
これは排他制御や2相コミットをベースにしていまして、先ほど中村さんから紹介があったYankingだったりとかっていうのは本当にストレージ負荷とか計算負荷とかがかかるものでして、通常のトランザクションより重いものになっています。
これによってどういった悪化現象があるかの一例として、負荷集中現象というのがあります。次でちょっとご紹介します。
なぜ特定シャードへ負荷が集中してしまうかですが、まず、アカウントの配置の仕方の問題があります。
Ethereum 2.0だと、基本的にはアカウントアドレスのプレフィックスをもとにアカウントを配置するという決まりがあります。例えば「プレフィックス0x00から始まるアカウントアドレスだったらShard 0。0x01から始まるアカウントアドレスだったらShard 1」みたいな感じで割り当てます。これってただランダムに割り当てているだけなので、そのアカウントがどういったトランザクションを発行するのかとかに関してまったく考慮してないんです。
例えばそのアカウントがむちゃくちゃ人気なコントラクトで、偶然そのトップ1・トップ2の取引とか負荷があるコントラクトが集まったりとか、別に集まらなくても、トップ1のコントラクトだけ、なんか(負荷が)異常に高かったりすると、そのシャードだけ異常に負荷が高くなってしまいます。
もう1つはユーザーの利己的な行動という問題です。これはそもそもまず前提として、ユーザーとアカウントは1対多の関係にあって、ユーザーはいくつもアカウントを作ることができます。例えばトランザクションの手数料を安くしたいユーザーがいたとして、頻繁に利用するアカウント、例えば頻繁に利用するゲームだったりとか頻繁に利用するDeFiのアプリケーションとか、そうしたアカウントに属するシャードに属したほうが、手数料が安くなります。
なので、基本的に人気なコントラクトがあるシャードにはどんどんアカウントが集まってきます。そうすることでクロスシャードトランザクションが減るので手数料が安くなる。
ただ一方で、人気すぎるシャードに属すると、どんどんその手数料が高くなってしまうんですね。これはなんでかというと、トランザクションの採用って基本的にオークション制なので、人気すぎるシャードにアカウントがどんどん集まってくると、そのトランザクション量も増えてきて、自分のトランザクションが採用できなくなってきたり採用されなくなってくるといった現象が起こるので、極端な負荷集中は起こらないとも言えます。
こういった特定シャードへの負荷集中をどうやって解決すればいいかという話なんですけど、まず1つ目はアプリケーションを複数シャードに配置する。これはよく言われていることなんですけれども、例えばまったく同じアプリケーションを複数シャードにデプロイします。例えば取引所だったら取引所を、例えばEthereum 2.0だったら64個にデプロイするみたいな。
逆に普通に並列化できるようなアプリケーションだったら、1つのアプリケーションを複数シャードで並列化してスケーラビリティを実現するみたいな……。いろんなやり方があるんですけれども、これはなんかあんまりイマイチだなと思うところがあります。
例えば、先ほど言った取引所のような金融アプリケーションだったら、その流動性が小さくなります。64個分の取引所があったらその分64分の1になっちゃうので、あんまりよくないと……。
さらに、例えばUniswapみたいな並列化と相性の悪いアプリケーションもありまして……。今言ったような話ですね。これも部分的に並列化するテクニックもありまして、詳細はこのリンクをご参照ください。Uniswapみたいなシングルスレッドのアプリケーションは、あんまりこの解決策には適していないのかなとは考えています。
実際こうやって解決できるんですけれども、これでどれだけ改善するかはまだ詳細に分析されてもいません。
次の解決策なんですけれども、これが今回の研究の内容です。アカウントを動的にシャードに割り当てます。
まずGARETという、この間『Cluster Computing』というジャーナルに発表された研究がありまして、これはオンチェーンでトランザクション負荷を予測して、アカウントをグループごとに割り当てるという、負荷分散プロトコルの研究です。
アカウントをグループごとに割り当てるというのは、アカウントが多すぎるのでグループごとに割り当てないと計算量が大きくなってしまう。ですけれども、これである程度負荷分散ができるよ、負荷集中を緩和できるよという研究です。先月出た研究です。
我々がWTSCというマレーシアでやった国際ワークショップで発表した「Load Balancing for Sharded Blockchains」というのも少し似ていまして、あとで詳しく説明するのですが、これはどういったことかというと、負荷分散を最適化問題に定式化します。その問題を公開しまして競わせます。プレイヤーを競わせて、それのもとに最もいい解を提出してきた者に報酬をあげて、その最良の解を適用してアカウントを再割り当てするというのが「Load Balancing for Sharded Blockchains」の提案です。
GARETはユーザーの利己的な行動を考えていなくて、うちらはそれを考えましたということがちょっと違いかなと思います。
先ほどもちょっと話したんですけれども、ユーザーの利己的な行動によって負荷分散がちょっとできる。つまり、人気なシャードがどんどん人気になっていくと手数料が高くなってしまうので、極端な負荷集中が起こらないという話になります。そしてさらに人気なシャードへ移動するインセンティブをなくすことで、またより負荷分散を緩和できるのかなとも考えたりします。
また一方で、このユーザーの利己的な行動による負荷分散というのは、パレート最適みたいな全ユーザーの幸せの総和があまりよろしくないと、皆々が自分のUXを最適化しようとするので、みんなが協力してUXをよくしようねという解決策にはちょっと劣るかなと考えています。
なので、個人的にはIn-protocolで直接割り当てるさっきの解決策のほうがいいのかなと考えています。この「In-protocolよりも利己的な行動のほうがよくないね」というのは、簡易的なシミュレーションでも確認できます。
続きを読むには会員登録
(無料)が必要です。
会員登録していただくと、すべての記事が制限なく閲覧でき、
スピーカーフォローや記事のブックマークなど、便利な機能がご利用いただけます。
すでに会員の方はこちらからログイン
名刺アプリ「Eight」をご利用中の方は
こちらを読み込むだけで、すぐに記事が読めます!
スマホで読み込んで
ログインまたは登録作業をスキップ
関連タグ:
2025.09.08
部下が不幸になる上司のNG行動5選 マネジメントは「自律と統制」のバランスでうまくいく
2025.09.10
人生の差は20代で決まる “指示待ち人間”で終わらないために積むべき4つの経験
2025.09.16
日本人が英語学習で苦戦する根本的原因 「言いたいことの順番」が真逆になる英語と日本語
2025.09.10
「やりたいこと」はないが「課題解決」自体を楽しめる人 Googleの「優秀なエンジニア」の定義
2025.09.04
「管理職になりたくない問題」の原因は上司にもある 部下の昇進意欲を削ぐ行動
2025.09.16
“できる仕事のキャパが10倍になった” 東証上場社長を変えた習慣「ピッパの法則」の効果
2025.09.11
自分の得意・不得意がわかるワーク 人生を再設計する「ライフキャリア」の見つけ方
2025.09.17
英語ネイティブは「would」をどう使っているか? 「Do you like〜」と「Would you like〜」の違い
2025.09.12
“起業が向いている人”と”経営が向いている人”は違う DMM亀山会長が語る、新規事業の生み出し方
2025.09.09
“指示待ち社員”から「自分で考え、動く社員」に育てる方法 セルフリーダーシップの発揮に重要な3つのアプローチ
管理職は罰ゲームではなかった!マネジメントスキル、リーダーシップは財産に!
2025.07.31 - 2025.07.31
後回しを断ち切り“すぐやる人”になる最速メソッド|東証上場社長実践の後回し撲滅法
2025.06.24 - 2025.06.24
「因数分解! 売れない理由は、“売り方”じゃなく “見方”にある」 ~マーケティング×ビジネス数学で、売上を動かす本質をつかむ~
2025.08.06 - 2025.08.06
【板挟みに苦しむ管理職へ】忙しさから“本当に抜け出す”唯一の方法
2025.07.09 - 2025.07.09
「英語OS」を身につけよ! −思考プロセスをアップデートし、英語学習の遠回りを終わらせよう!
2025.07.05 - 2025.07.05