money-legosでDeFiと戯れてみる

Yuya Sugano
15 min readNov 3, 2020

イールドファーミング、リクイディティマイニングの盛り上がりや既存のプロトコルをフォークした食べ物系のDEXの登場で2020前半はEthereumとDeFiに注目が集まっていました。AaveやdYdXに実装されるフラッシュローンは物議を醸しつつもDeFiにおける新たな借り入れの手法として定着してきた感があります。DeFi(ここではEthereumのと限定)の各プロトコルを俯瞰してみると金融機能をアンバンドルしEthereumのエコシステム上に、分散型でオープンな相互処理の可能なスマートコントラクトを展開しており、DEX (Decentralized Exchange)、レンディング、デリバティブ、アグリゲーター系などに分類することができると思います。

DeFiを使用することの敷居も低くないと感じますが、EthereumのスマートコントラクトやSDKを通じてDeFiを触ることの敷居はさらに低くなく非常に高いと感じています。ブロックチェーンやEthereumに対する基本的な理解だけでなくsolidityweb3.jsethers.jsのようなプログラミングを必要とするからです。DeFiを操作する場合には、各プロトコルの実装やABI (Application Binary Interface)を調べてプログラムへ落とし込んでいく必要があります。この記事ではDeFi関連のプログラムを効率的に記述できるmoney-legosというNPMパッケージを紹介します。このパッケージはDeFiプロトコルのメインネットアドレス、ABI、Solidityインターフェースを提供しているため簡潔にコードを記述することができます。

Image by jeferrb from Pixabay

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大原則:

  1. インターオペラビリティとオープンソース — 各プロトコルやプロジェクトはオープンソースとして、相互に運用性を持たせる
  2. アクセシビリティ — インターネットによって世界中どこにいても接続するシステムとする、地理的な制約を受けない
  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]

CoinGecko Quaterly Report

2020年のDeFiムーブの火付け役となり、イールドファーミングという言葉を広めたのはおそらくCompoundのCOMPトークンです。プロトコルの利用者へガバナンストークンを配布するということが一つのイールドファーミングの基本形であり他のプロトコルもガバナンストークンを実装しています。Compoundではトークンの貸付側および借受側双方にガバナンストークンが配布されますが、仕組みはプロトコルにより異なっているため事前に調査が必要です。[3]

CompoundやAaveは比較的シンプルな構造で対象のトークンを貸付や借入することができるプロトコルです。自動的に調整される利率に応じて利払いを受けることができます。利払いと同時にプロトコルのガバナンストークンが配布されます。AaveではVariable Borrow APY/Stable Borrow APYという固定と変動利率を導入していることが大きな違いの一つです。Compoundの方が初心者には利用しやすく、UI/UXも優れている印象があります。

aave.com

次に注目すべきは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も入手することができます。

Uniswap Pool

イールドファーミング (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]

複数のプロトコルを利用しているとアセットの管理が煩雑で分かりにくくなってきます。Zapper.fiはDeFiプロトコルのアセット管理や投資機会の発見に役立つツールです。以下はある日の資産状況ですが各プロトコルの利用状況や資金の預入が一元的に分かるようになっています。[6]

Uniswapでリクイディティマイニングしている雲丹をCompoundに提供してCOMPを得ているというのがいまテストしている取引です。

zapper.fi

money-legosで遊んでみる

以上、DeFiの外観と2020前半の状況を駆け足で振り返ってみました。個人的にはCurve Financeやyearn.financeあたりからプロトコルの連関が複雑となり、各プロトコルや全体像を理解する難易度が上がったように感じます。開発者としてDeFiプロトコルを触ることはさらに敷居が高く、各プロトコルの動作やインターフェースの理解が必要です。

money-legosはDeFiプロトコルのABI (Application Binary Interface)やアドレスを提供するJavascriptライブラリでプロトコルの連携やDeFi関連の開発を助けてくれます。本記事のメインはこのライブラリを触ってみることでした。現在15個の主要なプロトコルがインテグレーションされています。注意点としてUniswapは現行のv2でなくv1のみがサポートされています。[7]

money-legos

使用するライブラリを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の公式のサンプルコードはこちら。※サンプルコードのままでは動かなかったために修正しています

Kyber Swap ETH->USDC

まずはethers.WalletでEthereumネットワークとやり取りするウォレットを用意します。ローカルのGanache以外ではInfuraなどからエンドポイントのURLを入手しておく必要があります。

次に swapOnKyber というトークンスワップを行う関数を定義します。 kyber.network.address kyber.network.abi と書くだけでコントラクトのアドレスやABIが呼び出せます。これらの値が具体的に何であるかは各プロトコルのcontracts.tsを調べることで分かります。

contracts.ts

作成したコードを実行します。無事に0.1 ETHをUSDCに交換できました。このライブラリの利点はどのプロトコルでも同じ記法でプロトコルのコントラクトを呼び出せる点だと思います。今回はKyberのみでしたが複数のプロトコルに跨る処理を簡単にプログラムすることができます。

$ node script-default.js
Swapping 0.1 ETH to USDC
Remaining ether balance: 0.6394

今回作成したコードはこちらです。[8]

DeFiの今後

CoinDeskによると10月はDeFi取引高は減少し、またコントラクト上にロックされている資金も引き揚げられているようです。ただDeFiは一過性のものではなくこれからさらなるユースケースが生まれていくるものと考えています。特に新興ではBinance Smart ChainやPolkadotなど他ブロックチェーンにおけるDeFiの実装が焦点となってきそうです。[9]

DeFi Pulse

まとめ

  • 2020年はイールドファーミング・リクイディティマイニングといったブームがEthereum上の『DeFi』という分散型金融プラットフォームで発生した
  • スマートコントラクトで金融サービスを取り扱うことで市場開放性、市場効率性、透明性の向上が期待できる
  • money-legosはDeFiプロトコルのためのJavascriptライブラリでプロトコルの操作のコストを下げることができる
  • #DeFiというオープンソースや相互運用性を基本原理とするDeFiのコミュニティがある

--

--

Yuya Sugano

Cloud Architect and Blockchain Enthusiast, techflare.blog, Vinyl DJ, Backpacker. ブロックチェーン・クラウド(AWS/Azure)関連の記事をパブリッシュ。バックパッカーとしてユーラシア大陸を陸路横断するなど旅が趣味。