-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Superfluid for distributing rewards #83
Comments
@aowheel ここです! |
以下、調べたメモ Superfluidの「Distribution Pools」は、多人数に対して瞬時または継続的に資金を分配できる仕組みです。主に「即時配布」と「ストリーミング配布」の2種類があります。 即時配布: ガス代を固定して一度の取引で複数の受信者にトークンを送ることができます。 主な要素: プール: トークンを比率に応じて分配するチャネル。 「Distribution Pools」は、Superfluidプロトコルの一部で、トークンを複数のメンバーに分配するスマートコントラクトです。メンバーは「ユニット」を保有し、これにより分配されるトークンの割合が決まります。分配の際に使用される「SuperTokenV1Library.sol」は、Superfluidの全ての機能にアクセスでき、トークンを効率的に分配するためのライブラリです。 プールメンバーは、プールに「接続」するか、トークンを「請求」することで自分のトークンを受け取れます。接続すれば、リアルタイムでトークンを受け取れ、請求はいつでも可能です。 トークン分配の仕組みは、各メンバーが保有するユニット数に基づいて計算されます。Solidityの制約で小数点が扱えないため、分配量が端数になる場合は切り捨てられます。プール設計時には、流量やトークン総量が十分大きいことを確認することが推奨されます。 主な関数には、プールの作成、ユニット数の更新、トークンの請求、接続、切断、そしてトークンの分配があります。 このガイドでは、Foundryフレームワークを使って DistributionContract のテストを実行する手順を説明しています。Superfluid コントラクトと同様の構造に従いながら、DistributionContract の特定の仕様に適応しています。 事前準備 プロジェクトディレクトリの作成と移動 Foundryプロジェクトの初期化 Superfluidプロトコル依存関係のインストール OpenZeppelin Contractsのインストール コントラクトの概要 gainDaiX: fDAIをミントし、それをfDAIxにラップする機能。 関数のテスト このような手順を通じて、Superfluidプロトコルの各機能が期待通りに動作するかどうかをテストします。 |
https://ethglobal.com/guides/introduction-to-superfluid-protocol-be10i#3-super-agreements の約
Solidityでのお金のストリーミング スマートコントラクトがERC20トークンを転送できるのと同様に、Super Tokenをストリーミングできるスマートコントラクトも設定できます。このガイドでは、Super Tokenのストリーミングを設定する方法をわかりやすく解説していきます!
ラッパーSuper Token ラッパーSuper Tokenは、既存のERC20トークンを「ラップ」してSuper Agreementの機能を持たせたものです。 ラッピングとアンラッピング ラッパーSuper Tokenを入手する際は、まずWrapper Super Tokenコントラクトで「upgrade(uint256 amount)」関数を使用します。これにより、指定した量のERC20トークンがウォレットから取り出され、同量のラッパーSuper Tokenが発行されます。つまり、通常のERC20トークンを手放し、「Super Token版」に変換したということです。 ラッパーSuper Tokenから元のERC20トークンに戻したい場合は、downgrade(uint256 amount)関数を使用してアンラッピングを行います。指定した量のSuper Tokenがバーンされ、同量の元のERC20トークンが返されます。 ラッパーSuper Tokenの命名規則は、元のトークンシンボルに「x」を付けたものです(例: USDC ➡ USDCx)。 トークンコントラクト Solidityでのマネーストリーミング 通常、スマートコントラクトでERC20トークンをtransfer関数で転送します👇 solidity solidity 基本例 - FlowSenderコントラクト コントラクトがどのようにストリーミングでお金を送れるかを示すために、FlowSenderというシンプルなコントラクトを使います。FlowSenderは自らにfDAIxを資金提供し、指定したアドレスに対してストリームを作成・更新・削除することができます。 コードの説明 Superfluidのセットアップ まず、Superfluidプロトコルとやり取りするために必要なインポートを行います: solidity solidity solidity
} solidity MetamaskをGoerli Testnetに接続し、Environmentを「Injected Provider - Metamask」に設定します。 Deployタブで次のパラメータでデプロイします: _DAIX - 0xF2d68898557cCb2Cf4C10c3Ef2B034b2a69DAD00 fDAIxのアドレス(Mumbai Testnet用のfDAIトークンのラッパーSuper Token) fDAIxのストリームを送信 createStream関数を使用し、受信者アドレスと毎秒のフロー率を指定します。フロー率は常に1秒あたりのwei単位です。たとえば、コントラクトが毎時10 fDAIxをストリーミングする場合、以下のようにします: 10 fDAIx/時間 |
https://docs.superfluid.finance/docs/protocol/money-streaming/examples/example1 ↑ FlowSenderの考え方を応用した FlowSpliterに関する説明。 |
ですが、課題があります。 独自のSuperTokenで行けるかってのとTobanの中に組み込めるかが課題ですね・・。 superfuildのライブラリの方、openzeppelinの最新バージョンに対応していないっぽくて自分で追加したりしてようやく動いている状態です・・。 https://github.com/mashharuki/SuperfluidRepo/tree/main/superfluid-example foundryで動かしているのでhardhatに移行させるのが少し大変かも・・・。 |
チームに確認したいこと。 ・独自のSuperTokenを作るために必要なことの確認 |
場合によっては、他のフレームワークを使うことを検討する。 |
Splitsをつかって分配しているが、Superfluidをつかったストリームでも分配できるようにする。
Splitsのように1つのコントラクトに資金をいれると自動で分配が始まるものに、DistributionPoolsというモジュールがあるのでそれを活用する。
The text was updated successfully, but these errors were encountered: