メインコンテンツへスキップ
Change page

ステートチャネル

最終編集者: @HiroyukiNaito(opens in a new tab), 2023年8月15日

ステートチャネルは、ユーザーに対して、イーサリアムメインネットとのやりとりを最小限に抑えつつ、トランザクションをオフチェーンで安全に実行できる方法を提供します。 チャネル上のピア(同僚)は、当該チャネルをオープン/クローズするための2つのオンチェーンのトランザクションを送信するだけで、任意の数のトランザクションをオフチェーンで実行することができます。 これにより、トランザクションのスループットが大きく改善され、ユーザーの手数料が軽減できます。

{#how-do-sidechains-work}

イーサリアムをはじめとするパブリックブロックチェーンでは、分散型のアーキテクチャによりオンチェーンのトランザクションをすべてのノードが実行しなければならないため、スケーラビリティを実現が大きな課題になります。 各ノードは、一般的なハードウェアを用いて各ブロックに含まれるトランザクションを処理しなければならないため、ネットワークの分散性を維持する上で、トランザクションのスループットには一定の限界が発生します。

{#consensus-algorithms}

単純なピアツーピアのプロトコルであるチャネルを利用することで、チャネルに参加する2つのノードは、数多くのトランザクションを実行した上で、最終的な結果のみをブロックチェーンに送信するだけでよくなります。 チャネルは、暗号技術を用いることで、メインネットに送信されるサマリーデータがノード間で実行された一連の有効なトランザクションの真の結果であることを証明することができます。 「マルチシグ」のスマートコントラクトは、各トランザクションが適切なノードにより署名されたことを保証します。

チャネルにおける状態変化は参加ノードにより実行、検証されるため、実行レイヤーにおける計算を最低限に抑えることができます。 これにより、イーサリアムの混雑が解消され、ユーザーにとってはトランザクションの処理速度が改善されます。

{#block-parameters}

各チャネルは、イーサリアム上で実行されるマルチシグのスマートコントラクトで管理されます。 ユーザーがチャネルを開設するには、オンチェーンでチャネルコントラクトをデプロイし、そこに資金を入金します。

チャネルを廃止するには、当該チャネルにおける最終的な同意済み状態をオンチェーンに送信します。 これを受けて、マルチシグのスマートコントラクトは、チャネルの最終状態における各ノードの残高に従って、ロックされた資金を分配します。

ピアツーピアのチャネルは、特に事前に定義された参加者が処理速度の明らかな低下をもたらすことなく高頻度でトランザクションを行いたい場合に有益です。 ブロックチェーンにおけるチャネルは、ペイメントチャネルステートチャネルの2種類に大別できます。

{#evm-compatibility}

ペイメントチャネルは、2つのノードが共同で管理する「双方向の台帳」と呼べるでしょう。 この台帳における当初の残高は、チャネル開設時にオンチェーンのコントラクトにおいてロックされた両ユーザーからの入金の合計額になります。

チャネルの台帳における残高(つまり、ペイメントチャネルの状態)が変更される場合、チャネルに参加する全ユーザーの承認が必要になります。 イーサリアムにおけるトランザクションの場合と同じように、チャネルの更新は、参加ユーザー全員の署名によりファイナライズされたと見なされます。

ペイメントチャネルは、ユーザーがオンチェーンで実行する単純なやりとり(例:ETHの送金、アトミックスワップ、少額決済など)の費用を軽減するために設計された最初期のスケーリング・ソリューションのひとつです。 チャネルの参加ユーザーは、送金の合計額がデポジットされたトークンの合計を超えない限り、ユーザー間のトランザクションを瞬時に何回でも無料で実行することができます。

ペイメントチャネルは、オフチェーンにおける支払機能以外の全般的な状態遷移のロジックを取り扱う際には有効ではないことが明らかになっています。 ステートチャネルは、このペイメントチャネルの欠点を解消するために開発されたもので、汎用的な計算におけるスケーラビリティを実現するためのチャネルだと言えます。

{#asset-movement}

ただし、ステートチャネルはペイメントチャネルと多くの点が共通しています。 例えばどちらのチャネルでも、ユーザーが他のチャネル参加者とやりとりを行う際には、チャネルの全参加ユーザーが暗号学的に署名されたメッセージ(トランザクション)に署名しなければなりません。 提案された状態更新が全参加ユーザーによって署名されていなければ、更新は無効とされます。

この記事は役に立ちましたか?