はじめに

初めまして。 CryptoGamesというブロックチェーンゲーム企業でエンジニアをしている cardene(かるでね) です! スマートコントラクトを書いたり、フロントエンド・バックエンド・インフラと幅広く触れています。

代表的なゲームはクリプトスペルズというブロックチェーンゲームです。

今回は、「Basket Token Standard(BTS)」と呼ばれるNFTを使用して、調整可能な比率と準備金を持つ担保付きトークン化ファンドとLPトークンの発行とburnの仕組みを提案しているERC7621についてまとめていきます!

以下にまとめられているものを翻訳・要約・補足しながらまとめていきます。

他にも様々なEIPについてまとめています。

概要

この規格では、Basket Token Standard(BTS)というNFTを使用して、複数のERC20トークンを含んだファンドの実装を提案しています。

ファンドとは、多数の投資家から集めた資金を1つの大きな資金(プール)として管理・運用し、その運用益を投資家に分配する仕組みやその資金そのものを指します。

BTSトークンはNFTとして発行され、ファンドの所有権を表します。 また、ファンドへの出資割合を表すLP(流動性提供)トークンも発行され、寄付や引き出しが行われる度にmint・burnされます。

BTSトークン所有者は、いつでもファンド内の各ERC20トークンの追加や削除を行うことで、各ERC20トークンから構成されるファンドの割合を変更できます。 BTSトークンはERC721標準に基づいているため、オンチェーンで管理・送付ができます。

ERC20トークンについては以下の記事を参考にしてください。

ERC721トークンについては以下の記事を参考にしてください。

動機

現在、ブロックチェーン上で資産に裏付けられたトークン化投資ファンドの作成・管理するための標準化されたインフラストラクチャが存在しません。 そのため、標準化されたインフラストラクチャを提供することで、従来のファンド管理をブロックチェーン上で実装することが簡単になります。

これまでに提案されたEIPでは、他のアドレスから寄付が行われたときにLPトークンを発行する機能がありませんでした。 この規格では、ファンドの管理を効率的に行うためのリバランス機能と他アドレスからの寄付が行われたときにLPトークンを発行し、引き出しが行われたときはLPトークンをburnする機能を実装しています。

雑談ですが、Google翻訳でBTSの翻訳をかけると「防弾少年団」となっていました。 この規格で提案されているBTSトークンとは全く関係がないのでご注意を。

仕様

BTS

BTSは、資産に裏付けされたオンチェーンのトークン化ファンドを作成するコントラクトです。 以下の機能を使用して、資産と流動性を管理できます。

  • 初期化
    • 新しいファンドを作成して初期化設定を実行する。
  • 寄付
    • 他のアドレスがファンドに資産を追加する。
  • 引き出し
    • ユーザーがファンドから資産を引き出す。
  • リバランス
    • ファンド内の資産の割合を調整する。
  • トークン分配
    • 寄付や引き出しによってLPトークンをmint・burnする。

目的

BTSは、オンチェーン流草生を使用して、完全に資産に裏付けられたオンチェーントークン化ファンドを誰でも構築することを目的としています。

主な機能

initialize

新しいBTSを作成し、基本情報と初期トークン構成を設定する。

  • name
    • ファンドの名前。
  • symbol
    • ファンドのシンボル。
  • creator
    • ファンドの作成者。
  • tokens
    • ファンドに含まれるトークンのアドレスの配列。
  • weights
    • 各トークンの初期比率の配列。
  • token URI
    • トークンのメタデータURI。
  • auto-rebalance
    • 自動リバランスの設定(オプション)。

contribute

  • 概要: ユーザーがETHをバスケットに追加する機能。
  • 機能:
    • ユーザーはETHを送信し、あらかじめ定義された比率に基づいて含まれるトークンを購入します。
  • 役割: ファンドに対する新しい資金の追加を促進します。

withdraw(uint256 _liquidity)

LPトークン保有者が、そのLPトークンの量に沿ってERC20トークンを引き出す機能。

  • _liquidity
    • LPトークンの量。

withdrawETH(uint256 _liquidity)

LPトークン保有者が、そのLPトークンの量に沿ってETHを引き出す機能。

  • _liquidity
    • LPトークンの量。

rebalance(address[] memory _newTokens, uint256[] memory _newWeights)

ファンドオーナーがバスケット内のトークンの種類を量を手動調整する機能。

  • _newTokens
    • 新しいトークンのアドレスの配列。
  • _newWeights
    • 新しいトークンの比率の配列。

getTokenDetails

指定されたインデックスのトークンの詳細情報を返す機能。

  • index
    • トークンのインデックス。
  • 戻り値
    • トークンのアドレスとその比率。

totalTokens

バスケット内のトークンの総数を返す機能。

  • 戻り値
    • トークンの総数。

BTSトークンの分配

BTSトークンの分配は、mint実行時に行われます。 ユーザーがETHをコントラクトに送金すると、あらかじめ定められた比率に基づいて指定されたERC20トークンに交換されます。 これが完了すると、BTSコントラクトのinitialize関数を使用して、送金者に対してBTSトークン(NFT)がmintされます。 このBTSトークンは、ファンドの所有権を表していてBTSの管理機能を提供します。 また、同時にBTS LPトークンもユーザーにmintされます。

BTS LPトークンの分配

BTS LPトークンの分配は、mint関数とcontribute関数の実行時に行われます。 ユーザーがETHを送金し、そのETHが指定されたERC20トークンに交換されると、コントラクトはユーザーに対してBTS LPトークンをmintします。 このBTS LPトークンは、ユーザーのBTSファンドに対するシェアを表します。 BTS LPトークンはBTSPairコントラクトでmintされ、ユーザーが提供した流動性が反映され、ContributedToBTSイベントが発行されます。

BTS LPトークンのburn

BTS LPトークンのburnは、withdraw関数の実行時に行われます。 ユーザーが引き出したいBTS LPトークンの量を指定すると、コントラクトはその量のBTS LPトークンをユーザーからBTSPairコントラクト(btsPair)に送られます。 その後、BTSPairコントラクトのburn関数が呼び出され、ユーザーのBTS LPトークン残高が減少します。 そして、引き出されたトークンの配列がユーザーに返され、WithdrawnFromBTSイベントが発行されます。

イベント

ContributedToBTS(address indexed bts, uint256 amount)

誰かがバスケットに ETH を追加したときに発行されたイベント。

WithdrawnFromBTS(address indexed bts, uint256[] amounts)

BTS LP保有者がバスケットからトークンを引き出すときに発行されたイベント。

WithdrawnETHFromBTS(address indexed bts, uint256 amount)

BTS LP保有者がバスケットからETHを引き出すときに発行されたイベント。

RebalanceBTS(address indexed bts, uint256[] oldWeights, uint256[] newWeights)

所有者が手動でバスケットのバランスを再調整するときに発行されたイベント。

BTSPair

BTS内の流送性を表すERC20トークンのコントラクトです。 ファンド内の資産の管理と流動性提供者のシェアを正確に反映するために使用されます。

initialize

新しいBTSPairを初期化する機能。 ファンドの名前と初期トークンの設定を実行します。

rebalance

ファンドオーナーによって、ペア内のトークンの種類と比率を手動で調整する機能。

updateTokens

新しいトークンを追加したり、既存のトークンを削除することで、ペア内のトークンの種類を変更する機能。

mint

新しいBTS LPトークンを作成してトークンの準備金を調整する機能。

burn

BTS LPトークンをburnして流動性提供者がファンドから資産を引き出す機能。

引用

Dominic Ryder dom@alvaraprotocol.io, Callum Mitchell-Clark (@AlvaraProtocol) callum@alvaraprotocol.io, Joey van Etten joe@alvaraprotocol.io, Michael Ryder mike@alvaraprotocol.io, "ERC-7621: Basket Token [DRAFT]," Ethereum Improvement Proposals, no. 7621, February 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7621.

最後に

今回は「調整可能な比率と準備金を持つ担保付きトークン化ファンドとLPトークンの発行とburnの仕組みを提案しているERC7621」についてまとめてきました! いかがだったでしょうか?

質問などがある方は以下のTwitterのDMなどからお気軽に質問してください!

他の媒体でも情報発信しているのでぜひ他も見ていってください!