Superfluid : (ERC20の拡張 SuperToken)Study
ERC20を拡張したSuperTokenを導入することでDAOにサブスク、給与、報酬を導入しやすくなるというSuperfluidnidのドキュメントの理解をすすめていきます。
ちなみに fluid は 日本語で「流れ」や、「液体」という意味だそうです。
要約
Superfluidは、Web3ネイティブのサブスクリプション、給与、DAOと暗号化ネイティブビジネスの報酬を可能にする主要なAssetStreamingProtocolです。Superfluidストリームは、時間をかけてウォレット間で価値を一定の流れで転送します。Superfluidプロトコルは、キャッシュフローを記述し、それを自動的に、即時実行ではなく時間をかけて、オンチェーンで実行するために使用できます。マネーストリームはプログラム可能で、組み合わせ可能で、モジュラー式であり、開発者はプロトコルの上にカスタムアプリケーションを構築することができます。資本はロックアップされず、すべての流入と流出は、ガスを消費せずに、リアルタイムで各ブロックで組み込まれます。
Superfluidは、ERC20標準への拡張機能であるSuper Tokenを導入したスマートコントラクトフレームワークにより、購読、給与、認証、報酬をDAOと暗号化ネイティブビジネスにもたらします。SuperfluidフレームワークとSuper Token標準は、チェーン上のトークンにダイナミックバランスを追加し、キャッシュフローを記述し、それを自動的に、時間をかけて、非対話的に実行するために使用できます。
Super Tokenは、基本的な「transfer」を超えて追加の強力な価値移動能力を持つERC20標準の拡張です。これらの能力はSuper Agreementsと呼ばれます。現在、追加のSuper Agreementsは二つあります:
- "Money Streams" - Constant Flow Agreement (CFA): 資本がロックアップされずに、定速でトークンをアカウント間でストリームする。
- "Instant Distributions" - Instant Distribution Agreement (IDA): 多数の受け取りアカウントに割合を割り当て、設定された割合に基づいてトークンを一括分配する。
Composability (単体で受け渡ししやすいこと)
web3で一番ComposabilityがあるのがERC20トークンです。つまり、借入、交換、ステーキングなどができるようになっています。 Super Tokensは、 拡張されたERC20トークンとして機能するため、基本的なERC20トークンの機能に加えて、マネーストリームやインスタント分配などの新たな可能性を利用することができます。
用語集
用語 | 定義 |
---|---|
Superfluid Ecosystem | Real-Time Financeに利用性を追加する Superfluidのユーザーとスーパーアプリのエコシステム |
Real-Time Finance | Superfluidのスマートコントラクトフレームワークを通じてブロックチェーン上で可能となる秒単位のマネーの移動 |
Super Token | Superfluid関連の操作に使用できるトークン。ERC20 Wrapper Tokens, Pure Super Tokens, Native Asset Super Tokensの3種類があります |
Wrap | ERC20トークンをラップしたスーパートークンに変換すること |
Unwrap | ラップしたスーパートークンから基礎となるERC20アセットに変換すること |
Real Time Balance | 動的な残金と静的なトークン残高を考慮に入れて特定のアカウントの残高を決定する計算 |
Superfluid Agreement | Superfluidプロトコルを通じてスーパートークンに付与される補足的な価値移転機能 |
Constant Flow Agreement (CFA) | アドレス間でスーパートークンを秒単位で恒常的に移動させることを可能にするスーパーアグリーメント |
Instant Distribution Agreement (IDA) | 分配株(または「ユニット」)に応じて複数のアドレスにスーパートークンを大量に分散させることを可能にするスーパーアグリーメント |
Flow/Flow Rate | 一つのアドレスから別のアドレスに送られるマネーの連続した流れ/ストリームで送られるトークンの数 |
ACL (Access Control List) | アカウントが操作者に対して制御の度合いを提供できる一連の機能 |
Index/Publisher/Units | Instant Distribution Agreementを使って作成されるプール/特定のIndexの作成者/IDAインデックスの全体的なシェア(distribution sharesと使われることが多い) |
Distribution | インデックスのシェアを所有するアドレスにトークンを送るアクション |
プロトコル | |
Callback | 特定のアクションが取られたときに自動的に実行される関数。Super Appsは、Superfluid関連のアクションに応じて実行されるコールバックにロジックを実装することが可能で、これがSuper Appsのパワフルな特徴です。 |
User Data | Superfluid特有の関数に対する呼び出しに伴って渡すことができる任意のデータ。このuserDataは、Super Appのコールバック内でデコードされ、アプリケーションロジック内で使用されます。 |
Batch Calls | Super Tokensの機能の一つで、一つのトランザクションで複数のアクションを一緒に実行できるようにします。 |
The Superfluid Host | プロトコルの「脳」。SuperfluidContractはホストContractによってホワイトリスト化され、ホストは特定のContractの機能を利用するためのすべての関数呼び出しを処理します。ホストはまた、プロトコルガバナンスにおいて重要な役割を果たし、Super Appのコールバックの実行などの隣接するプロトコル機能を促進します。 |
Resolver | プロトコルを構成するすべてのContractアドレスを迅速に見つけることを可能にするヘルパーContract。 |
Sentinels & Solvency | |
Buffer | ストリームが開始されたときに一時的にロックアップする必要があるアカウントのトークン量。 |
Liquidation | アカウントのトークンバランスがゼロになりながらも資金をストリームに送り続けるときに、センチネルによってストリームが閉じられる状態。 |
Sentinel | Superfluidネットワークを監視し、ストリームが危機的または不渡りになったときにストリームを閉じるノード。誰でもノードを稼働させてセンチネルになることができます。 |
PIC | アカウントが危機的になったときに優先的にストリームを閉じるたびに報酬を受け取るPatrician(上流階級の人) in Charge。 |
TOGA | 前のPICよりも高いステーク額を提示した誰でもPatrician in Charge (PIC)になれるTransparent Ongoing Auctionの略。 |
Stake | Patrician in Charge (PIC)がTOGA Contractにロックした資金の量。 |
Top Up | アドレスのバランスがゼロになり清算されるのを防ぐために、Super Tokenバランスに追加を行うこと。 |
Composable | |
ERC20 Tokens | Web3の最も組み合わせ可能な原始的な要素。これらに対しては借り入れ、交換、ステーキングなどが可能。Superfluidは基本的に拡張されたERC20トークンなので、その組み合わせ可能性も無限大。 |
Money Streams | 金銭の流れ。NFTをステーキングして、その報酬としてSuper Tokensのストリームを直接ウォレットに受け取るといった新しいメカニズムが可能。 |
Instant Distributions | 即時分配。一定のガスコストで投資家のウォレットに直接Super Tokensを配布するドルコスト平均化プロトコルなどが可能。 |
すこし詳しく
Superfluidは、私たちがよく知る伝統的なERC20トークン標準に新しいデジタル価値移動方法を追加するスマートコントラクトフレームワークです。Superfluidは4つの主要なコンポーネントで構成されています:Super Tokens、Super Agreements、Super Apps、そしてSuperfluid Hostです。これらのコンポーネントが何であるか、それらがどのように相互関連しているかを理解するために、この概要を読んでください。
- Super Tokens: Superfluidプロトコルの基礎となるSuperfluid対応トークン
- Super Agreements: Super Tokensに伝統的ではない価値転送方法(マネーストリーミングなど)を提供する機能。
- Super Apps: Super Agreementsにカスタムロジックで応答できるスマートコントラクト
- Superfluid Host: これらすべてのパートをまとめるもの
Super Tokens
Super Tokenは、Superfluidプロトコルに接続するERC20トークン標準の拡張であり、ストリームやインスタント分配などの新しい強力な価値移動機能を含みます。これらの新しい価値移動機能はSuper Agreementsと呼ばれます。Super Tokensはラッパータイプとカスタムタイプの2つの形式があります。
Super Tokensは伝統的なERC20トークンができること全てに加えて、Superfluidによって可能になった新しい価値移動モードを実現できます。Super Tokensはリアルタイムバランスを通じてアカウントのバランスを追跡し、通常の転送とSuper Agreementsによる変更を反映します。
Super Tokensは2つのタイプがあります:
-
ラッパー:既存の基礎トークンがSuper Agreement機能を獲得するために「ラップされ」たSuper Tokenです。ラッピングするときは、まず基礎トークンをラッパーSuper Token Contractに預け、同量のラッパーSuper Tokensが発行されます。逆に、アンラップするときは、指定量のSuper Tokensが焼かれ、同量の基礎トークンが返されます。
-
ピュア:ピュアSuper Tokensは基礎トークンがなく、Super Tokensとしてのみ存在します。ピュアSuper Tokensは、すべてのSuperfluid機能が最初から付属しているSuper Tokensとして直接デプロイされます。これらのトークンは、基本的なERC20トークンの全機能とSuperfluidのSuper Agreement能力を持っています。
Super Agreements
Super Agreementsは、基本的なERC20関数を超えてSuper Tokenのバランスを変更する方法を定義します。これらはSuper Tokensを"super"にする特徴です。
アカウントが他のアカウントとSuper Agreementを結ぶと、そのSuper TokenのバランスがSuper Agreementのルールと選択されたパラメータに従って変更されることに同意することになります。現在、利用可能なSuper Agreementsは二つあります:Constant Flow Agreement(CFA)とInstant Distribution Agreement(IDA)。
CFAはトークンのストリーミングを、IDAは固定ガスコストでの一対多のトークン分配を可能にします。
CFA : MoneyStreaming
Constant Flow Agreement (CFA)は、トークンをストリーム(連続的に送信する)することを可能にします。これは、送信者のアカウントバランスが一定の速度(フローレート)で減少し、受信者のアカウントバランスがそのフローレートで増加するという合意です。ストリームは永続的であり、送信者がキャンセルするか、送信者のSuper Tokenバランスがゼロになるまで続きます。また、送信者がいつでも作成、更新、削除することも可能です。
CFAでは、以下の用語が重要です:
- フローレート:送信者がCFAを作成または更新する際に、自身のネットフローレートを減少させ、受信者のネットフローレートを増加させる速度です。
- ネットフローレート:アカウントのSuper Tokenのバランスが変化する速度です。これは、アカウントの入出力のCFAフローレートの合計です。
- 送信者:受信者とフローレートを指定してCFAを開始し、自身のネットフローレートを減少させるアカウントです。
- 受信者:CFAの受け取り側のアカウントで、そのネットフローレートが増加します。
CFAのリアルタイムバランスは、ストリームが作成、更新、削除されるたびに計算され、時間(秒)が経過すると自動的に増減します。これにより、リアルタイムバランスはガスを必要とせずに増減することが可能となります。
注意点として、CFAの作成は一回の操作であり、その後のバランスの表示は、上記の計算式から値を読み取るだけで、送信者やSuperfluidが毎秒トランザクションを行ってバランスを更新する必要はありません。
また、ストリームがアクティブな状態でSuper Tokensを転送、ラップ、またはアンラップした場合や、IDA(Instant Distribution Agreement)とのインタラクションがあった場合でも、これらはSuper Agreementsとは無関係なため、アカウントのリアルタイムバランスには影響を与えません。
最後に、アカウントのバランスがゼロになった場合、そのアカウントは「クリティカル」状態となります。これを防ぐために、Superfluidではバッファデポジットとセンチネルという概念を使用します
Ditributions(IDA)
即時分配契約(IDA)は、一回の取引で任意の数の受信者に固定のガス費用で分配する機能を提供します。IDAは送信アカウント(「パブリッシャー」と呼ばれる)が多数の受信アカウント(「サブスクライバー」と呼ばれる)に対して比率を設定し、設定した比率に基づいてトークンを一回の取引で分配することができます。
具体的な手順は以下の通りです:
- パブリッシャーがIDAインデックス(Super Tokensがどのように分配されるかを管理するチャネル)を作成します。
- パブリッシャーが各サブスクライバーアカウントに対してIDAインデックスにユニット(分配シェアのようなもの)を発行します。あるアカウントが他のアカウントに比べて多くのユニットを持っていれば、そのアカウントは各分配でより多くのトークンを受け取ります。
- Super TokensがIDAインデックスを通じて分配されると、各サブスクライバーはユニットの保有割合に応じたトークンを一度に受け取ります。
IDAは一度限りのものではなく、分配がトリガーされた後もリセットされません。各受信者のユニットは分配を経ても持続し、送信者はインデックスを通じて何度でも任意の量を分配することができます。受信者のユニットは送信者が必要に応じて増減させることができます。
SuperApps
スーパーアプリは、Superfluidプロトコルに登録されたスマートコントラクトで、スーパーアグリーメントに反応することが可能です。これはコールバックを通じて行われ、スーパーアプリが作成、更新、削除されたスーパーアグリーメントに対してスマートコントラクトコード内のカスタムロジックを用いて反応します。
コールバックはスーパーアプリが反応的になるための仕組みで、スーパーアグリーメントが作成、更新、削除されるとトリガーされます。これにより、NFTの発行から新たなCFAの開始まで、任意の行動を引き起こすことが可能です。
例えば、すべての流入フローを集約して指定されたアカウントZへの単一の流出フローにするようにプログラムされたスーパーアプリがあります。アカウントAがスーパーアプリへのCFAを開始し、その反応としてスーパーアプリは自身からアカウントZへのCFAを開始します。その後、新たなアカウントがスーパーアプリへのCFAを作成、更新、削除すると、スーパーアプリは適切に反応します。
なお、スーパーアプリとして分類されるためには、スマートコントラクトにコールバックが定義されている必要があります。
スーパーアプリは、スーパーアグリーメントに反応することができるため、ウォレット間のアクションだけでは不可能なプログラム可能な中間層をスーパーアグリーメントに追加します。その結果、カスタムロジックとスーパーアグリーメントのアクションを組み合わせて、スケーラブルなdAppsを作成し、革新的なユーザーエクスペリエンスを提供することが可能となります。
Superfluid Host
Superfluid Host Contract は、 Superfluid Protocolの中心的な要素で、スーパートークン、スーパーアグリーメント、スーパーアプリをつなぎます。これはSuperfluidプロトコル全体で情報を伝える役割を果たします。
スーパーアグリーメントはモジュラー式で、それぞれのロジックを自身のContractに保管し、それがホストContractに接続されます。スーパーアグリーメントを呼び出すということは、選択したスーパーアグリーメントとパラメーターを使用してホストContractを呼び出すことを意味します。その結果、スーパーアグリーメントはアップグレード可能であり、新しいスーパーアグリーメントを開発し、ホストContractに登録することができます。
スーパートークンは、アカウントのすべてのスーパーアグリーメント情報が集約されるSuperfluidプロトコルの基盤です。スーパートークンContractを通じて、各スーパーアグリーメント(CFA & IDA)の影響がアカウントのバランスに結合され、アカウントのスーパートークンバランスが返されます。スーパートークンは、ホストContractに登録されたスーパーアグリーメントのリストを反復処理することでこの情報を取得します。
スーパーアプリは、コールバックロジックを有効化するために、Superfluidホストに登録する必要があります。デプロイおよび登録後、アカウントがスーパーアプリに対してスーパーアグリーメントを利用すると、ホストはスーパーアプリのコールバック機能をトリガーします。
以上です。
サブスクや、複数人への分配ができるということは、概念としては理解できました。
実際に動作するコードで理解を深めていきたいと思います。
Discussion