Solidityでスマートコントラクトを作成しよう
section1のこれから先の作業は、AVAX-AMM/packages/contract
ディレクトリ内のファイルを操作していきます。🙌
👩💻 実装する内容の確認
AMM機能を実装したスマートコントラクトを作成していきます。
ユーザは私たちのスマートコントラクトを利用して、トークンの交換をすることができます。
具体的には、私たちのスマートコントラクトがUSDCというトークンとJOEというトークンを交換することができる場合、 ユーザはスマートコントラクトへ接続し、USDCからJOEトークンへ(またはJOEトークンからUSDCトークンへ)交換することができます。
AMMを実装する上で重要なキーワードは以下の3つです。
🐦 プール
スマートコントラクトで交換可能なトークンの集まりのことを指します。
スマートコントラクトにUSDCとJOEのプールが存在する場合、ユーザはUSDCとJOE間で取引をすることができます。
🦒 流動性の提供
プール内にあるトークン量が少なく(= 取引する際の価格変動が大きくなる)、取引が成立しずらい市場の状態を流動性が低いという表現を使います。 逆にトークン量が多く(= 価格変動が小さい)、取引がスムーズに成立しやすい状態を流動性が高いといいます。
多くのAMMでは、流動性の高い状態を作るために、トークン保有者にそのトークンをプールに預けてもらう(流動性の提供という)仕組みを用意しています。
例えば、USDCとJOEのプールがある場合はUSDCとJOEを所有している人に両トークンをプールへ預けてもらいます。 (2つのトークンを提供しなければいけないかどうかはDEXによります)。
流動性の提供者には様々な報酬が用意されています。 本プロジェクトでは、ユーザがトークンを交換する際に手数料を徴収し、その手数料を流動性の提供者へ与えるという形で報酬を実装します。
🦍 スワップ
トークンを交換することを指します。
本プロジェクトで実装する機能を整理します。
- トークン保有者は流動性を提供することができる。
- 流動性を提供したユーザは預けたトークンを引き出すことができる。
- ユーザはトークンをスワップすることができる。
- スワップには手数料がかかる。
- スワップで発生した手数料は、流動性提供者へ分配される。