money-legosでDeFiと戯れてみる
イールドファーミング、リクイディティマイニングの盛り上がりや既存のプロトコルをフォークした食べ物系のDEXの登場で2020前半はEthereumとDeFiに注目が集まっていました。AaveやdYdXに実装されるフラッシュローンは物議を醸しつつもDeFiにおける新たな借り入れの手法として定着してきた感があります。DeFi(ここではEthereumのと限定)の各プロトコルを俯瞰してみると金融機能をアンバンドルしEthereumのエコシステム上に、分散型でオープンな相互処理の可能なスマートコントラクトを展開しており、DEX (Decentralized Exchange)、レンディング、デリバティブ、アグリゲーター系などに分類することができると思います。
DeFiを使用することの敷居も低くないと感じますが、EthereumのスマートコントラクトやSDKを通じてDeFiを触ることの敷居はさらに低くなく非常に高いと感じています。ブロックチェーンやEthereumに対する基本的な理解だけでなくsolidityやweb3.js、ethers.jsのようなプログラミングを必要とするからです。DeFiを操作する場合には、各プロトコルの実装やABI (Application Binary Interface)を調べてプログラムへ落とし込んでいく必要があります。この記事ではDeFi関連のプログラムを効率的に記述できるmoney-legosというNPMパッケージを紹介します。このパッケージはDeFiプロトコルのメインネットアドレス、ABI、Solidityインターフェースを提供しているため簡潔にコードを記述することができます。
money-legosまでそれほど真新しい内容はありません。
- DeFi (Decentralized Finance) とは
- 最近のDeFiの動向
- money-legosで遊んでみる
DeFi (Decentralized Finance) とは
以前のDharmaの記事でも記述しましたが、DeFi (Decentralized Finance) とは広義には分散型プラットフォーム上に構築される金融サービスです。インターネットとスマートフォン上のウォレットによる接続で誰でも金融サービスへアクセスできます。Ethereumの文脈においては、プログラマブルでパーミッションレスかつオープンソースなスマートコントラクトでサービス提供されることにより透明性の高い相互接続可能なエコシステムを形成しています。EthereumのDeFiの主要なプロトコルは#DeFiという分散型プラットフォームでサービスやプロトコル開発を行う企業コミュニティに参加しています。#DeFiでは開発者イベントやコミュニティフォーラムをサポートすることでDeFiを推し進めています。[1]
新規にDeFiプロトコルを開発する場合にはフォームから申請することでメンバーとなることができます。
#DeFiの3大原則:
- インターオペラビリティとオープンソース — 各プロトコルやプロジェクトはオープンソースとして、相互に運用性を持たせる
- アクセシビリティ — インターネットによって世界中どこにいても接続するシステムとする、地理的な制約を受けない
- 金融の透明性 — 個人のプライバシーは保ちつつ参加者には市場の透明性を与えまたサイロ化させない
DeFiについてはCoinbaseの記事が非常に分かりやすくまとまっていますので一読することをお勧めします。[2]
A Beginner’s Guide to Decentralized Finance (DeFi)
Money and finance have been around in one form or the other since the dawn of human civilization. Crypto is just the latest digital avatar. In upcoming years, we might see every financial service that we use in today’s fiat system being rebuilt for the crypto ecosystem.
最近のDeFiの動向
2020年はEthereum上のDeFiに大きな動きのあった年でした。特に7月からですがyearn.finance、Curve、SushiSwapによるヴァンパイアマイニングからのUNI (雲丹)のエアドロップといった怒涛のローンチに伴いこれらのプロトコルで使用するWBTC/DAI/USDT/USDCへの資金流入が急上昇しました。CoinGeckoのQuarterly Reportに具体的な数字が報告されています。
またこの頃からEtherの価格上昇やトランザクションの逼迫、ならびにガス料金の高騰が見られるようになりました。150万UNIがエアドロップされた際にはガス代が500 gweiまで急上昇したとのことです。確かにエアドロップされた400UNIをClaimするときのトランザクション費用は高かった記憶があります。[3]
2020年のDeFiムーブの火付け役となり、イールドファーミングという言葉を広めたのはおそらくCompoundのCOMPトークンです。プロトコルの利用者へガバナンストークンを配布するということが一つのイールドファーミングの基本形であり他のプロトコルもガバナンストークンを実装しています。Compoundではトークンの貸付側および借受側双方にガバナンストークンが配布されますが、仕組みはプロトコルにより異なっているため事前に調査が必要です。[3]
CompoundやAaveは比較的シンプルな構造で対象のトークンを貸付や借入することができるプロトコルです。自動的に調整される利率に応じて利払いを受けることができます。利払いと同時にプロトコルのガバナンストークンが配布されます。AaveではVariable Borrow APY/Stable Borrow APYという固定と変動利率を導入していることが大きな違いの一つです。Compoundの方が初心者には利用しやすく、UI/UXも優れている印象があります。
次に注目すべきはDEX (Decentralized Exchange) です。DEXへ提供される流動性はユーザによるトークンのデポジットです。Uniswapでは50%/50%でペアとなるトークンを提供することでLP (Liquidity Provider)トークンを受領します。UniswapではこのLPトークンのプール全体に対する保有比率で0.3%の手数料に対するリワード額が計算されます。
一方Balancerはこの流動性提供の際のトークンペアの比率を50%/50%以外でユーザが自由に決定できる点が異なります。さらにBalancerはCurve Financeやyearn.financeとの合わせ技が可能で、LPトークンであるBPT (Balancer Pool Token) をyGovへステークすることでYFIを獲得すると同時にガバナンストークンであるBALも入手することができます。
イールドファーミング (Yield farming) およびリクイディティマイニング (Liquidity Mining) についてはBinanceのブログが非常に分かりやすくまとまっています。イールドファーミングとリクイディティマイニングについては用語交換が可能と記載されていますが、実際に使用されている様子では利払いがベースのプロトコルであればイールドファーミング(Compoundなど)、流動性を提供するDEXのプロトコルなどでリクイディティマイニングが使われていることが多いです。[4]
ここまでプロトコルを使用することによるガバナンストークンの配布や、流動性提供によるリワードの発生ならびにガバナンストークンの入手について見てみました。実はイールドファーミングの真骨頂は複数のプロトコルを跨いだLPトークンやガバナンストークンの再利用です。先ほど少し挙げたBalancerのように、LPトークン、例えばCurve Financeのyプールへ資金提供することで得られるyCurveトークンは、yearn.financeのyGovへステークされることでyearn.financeのガバナンストークンであるYFIを採集することができるようになります。yearn.financeで得たYFIをクレイムしてさらにBalancerプロトコルでデポジットしてLPトークンとガバナンストークンを得るという循環が可能になります。あまたの戦略がありその全てを網羅および把握することはできないのですが、defirate.comに代表的なイールドファーミングの手法がいくつか紹介されています。[5]
money-legosで遊んでみる
以上、DeFiの外観と2020前半の状況を駆け足で振り返ってみました。個人的にはCurve Financeやyearn.financeあたりからプロトコルの連関が複雑となり、各プロトコルや全体像を理解する難易度が上がったように感じます。開発者としてDeFiプロトコルを触ることはさらに敷居が高く、各プロトコルの動作やインターフェースの理解が必要です。
money-legosはDeFiプロトコルのABI (Application Binary Interface)やアドレスを提供するJavascriptライブラリでプロトコルの連携やDeFi関連の開発を助けてくれます。本記事のメインはこのライブラリを触ってみることでした。現在15個の主要なプロトコルがインテグレーションされています。注意点としてUniswapは現行のv2でなくv1のみがサポートされています。[7]
使用するライブラリをnpmでインストールしておきます。
$ npm -v
6.13.6$ npm init -y
$ npm install --save @studydefi/money-legos
$ npm install --save ethers
インストール後のpackege.jsonは以下のようになりました。
{
... "dependencies": {
"@studydefi/money-legos": "^2.4.1",
"ethers": "^5.0.19"
}
}
今回試してみたのはKyber SwapでETH->USDCへスワップです。money-legosはメインネットのアドレスしか提供していないのでメインネットのアドレスで現物の交換を試してみました。メインネットとテストネットのABIが同じ場合はmoney-legosのアドレスをテストネットのものへ変更するだけで動作するはずです。以下はKyber SwapのUIでETH 0.5と入力したところ。money-legosの公式のサンプルコードはこちら。※サンプルコードのままでは動かなかったために修正しています
まずはethers.WalletでEthereumネットワークとやり取りするウォレットを用意します。ローカルのGanache以外ではInfuraなどからエンドポイントのURLを入手しておく必要があります。
次に swapOnKyber
というトークンスワップを行う関数を定義します。 kyber.network.address
kyber.network.abi
と書くだけでコントラクトのアドレスやABIが呼び出せます。これらの値が具体的に何であるかは各プロトコルのcontracts.tsを調べることで分かります。
まとめ
- 2020年はイールドファーミング・リクイディティマイニングといったブームがEthereum上の『DeFi』という分散型金融プラットフォームで発生した
- スマートコントラクトで金融サービスを取り扱うことで市場開放性、市場効率性、透明性の向上が期待できる
- money-legosはDeFiプロトコルのためのJavascriptライブラリでプロトコルの操作のコストを下げることができる
- #DeFiというオープンソースや相互運用性を基本原理とするDeFiのコミュニティがある
References
- [1] Opening #DeFi
- [2] A Beginner’s Guide to Decentralized Finance (DeFi)
- [3] CoinGecko Quarterly Report Q3 2020
- [4] What Is Yield Farming in Decentralized Finance (DeFi)?
- [5] DeFi Yield Farming Tutorials in 2020
- [6] Zapper.fi Dashboard
- [7] money-legos docs
- [8] yuyasugano/money-legos-test
- [9] Decentralized Exchange Volume Dropped 25% in October