dYdX Liquidatorボットで精算狩りをしてみる

Yuya Sugano
13 min readAug 29, 2020

--

暗号資産の運用ではそのボラティリティの高さを利用したHFTボットやドテン君などのスイングトレード、DeFiの界隈ではSynthetix/Curve/yearn.financeなどを使ったYield Farmingがトレンドになってきました。AaveやKyberSwapが実装するFlashloanは既存の金融ではなしえなかったタイプの取引を可能にしています。今回取り上げるdYdX Liquidatorもプロファウンドで興味深い内容だったのでお試ししてみました。Aave Flashloanについては以前 Ropsten ネットワークでお試しした結果をこちらにまとめてあります。[1]

※dYdX LiquidatorはEthereumのガスを消費します、ガス高騰の際に実行することは自殺行為に等しい可能性があるので注意してください

Photo by picjumbo.com from Pexels

こんなかんじの内容です。

  • dYdXとは
  • dYdX lending/borrowing
  • dYdX Liquidatorとは
  • dYdX Liquidatorボットで清算狩り

dYdXとは

dYdXはEthereumブロックチェーン上の分散型金融(DeFi)の一つでレンディングプールとして利用できる他、スポット・マージン取引をすべて分散型で実行することが可能なプラットフォームです。処理はすべて分散型でスマートコントラクトを通して実行されます。ETH/DAI/USDCを信用口座やスポット口座で使用でき、パーペチュアルコントラクト(無期限契約)ではUSDCを担保としたBTCの取引が行えます。dYdXのBTC-USDはSynthetixのsBTCのようにトークン化はされません。Ethereum上でのビットコインの流通にはその他にもWBTCやrenBTCなど様々な形態があるので興味深いところですね。[2]

dYdXは集権型の暗号資産取引所のような分かりやすいWebのUIを持っています。ステーブルコインであるDAI/USDCは預入金利が年利5%ほどあるので、他のレンディングプロトコルと比較してもそれほど悪くありません。ただETH/DAI/USDCなどのステーブルコインが余剰な場合にはYield Farmingを行ったほうがお得だとは思います。この借入および預入の金利は時々の需要と供給によって自動的に変化していきます。UIはこちらです。https://trade.dydx.exchange/

dydx market information

参考まで、DeFiのレンディングのAPR(Annualized Percentage Rate)はdefirateで確認できます。[3]

https://defirate.com/

dYdX lending/borrowing

dYdXのレンディングやボロウイングはユーザが直接レンディングプールとやり取りすることで実行されます。スポット取引やマージン取引と同様に全てスマートコントラクト経由での操作です。各アセットごとにグローバルレンディングプールが存在しており、借入と預入の金額によってレートは動的にプロトコルによって決定されていきます。具体的な仕様はヘルプセンターに記載されていますが、Utilization ratio(貸出額/借入額)が増加するにしたがって金利は上昇し、減少するにともない下降するように計算されています。[4]

例としてUtilization ratioが50%の場合には貸出レートは 5.00% APR(Annualized Percentage Rate)となります。80%の場合に貸出レートは8.00% APR へ上昇します。レンダー側の金利も記載されている式に基づいて決定されます。

Interest rates for borrowers and lenders

借入れの際には担保と負債の比率に気をつけます。dYdXでは担保と負債の比率であるCollateralization ratioを115%以上へ保つ必要があるためです。以下の公式ページで説明されている通り、125%を下回ると追加の借入ができず、デポジットを追加してCollateralization ratioを125%以上へ回復させるか、負債を一部返済してCollateralization ratioを高めます。

115%がLiquidation Thresholdとして設定されておりCollateralization ratioが115%を下回った場合はこの借入は清算され、さらにユーザは追加で清算費用5%を支払う必要があります。ペナルティを避けるために余裕をもった借入を行いましょう。[5]

dYdXの基本的な機能はヘルプセンターの『Introduction and Overview』から確認できます。

dydx features

dYdX Liquidatorとは

さてここからが本題です。アカウントやポジションの負債の清算は誰が行うのでしょうか。プロトコル側で処理が走るのでしょうか。いえ、これは実は誰でも行うことができます。そしてこの清算処理を行った人のアカウントが清算手数料である5%を徴収します。dYdX Liquidatorは市井の人が行うことができるボットコードです。このボットのDockerイメージがdYdXから提供されているため、Dockerでこのコンテナを動かす環境さえあればdYdXのポジション清算狩りボットを走らせることができます。清算処理の例を挙げてみます。

Aさんは$112の相当の資産を担保に$100の資産を借りていました。いまCollateralization rateが112%となったためLiquidation Thresholdを超えてしまいました。BさんはAさんの清算ポジションを確認したので、自身のアカウントの同資産で$100を返済し、返済した$100と清算手数料である5%の$5の計$105をAさんの担保から受け取ることができます。Aさんは$112から清算手数料を含む返済分である$105を除算した$7がアカウントへ返却されます。Bさんは手数料分の$5を稼ぐことができました。[6]

一見簡単そうなのですが、注意点があります。この清算処理は負債を一旦肩代わりすることになるのですが、dYdXではアカウントにトークンを保持していなくてもマイナスのネガティブ資産として清算処理を行えます。上記の例でAさんが100 DAI($100同等と仮定する)を借入れている場合には、Bさんの信用口座のアカウントにDAIがなくてもLiquidationが可能です。このとき自身のアカウントのCollateralization ratioに気を付ける必要があります。ネガティブの資産ポジションは債務と同等です。またサイトに書かれているように複数のLiquidatorがいた場合には、先にトランザクションが通ったユーザが清算処理を行えます。したがってトランザクションが途中で失敗する可能性があります。

dYdXでは信用口座用のSoloとパーペチュアルコントラクトのPerpの2つのアカウントを対象としてLiquidationを実行できます(ボットはどちらかもしくは両方を対象とするよう環境変数で選択できるようになっています)。事前にdYdXのメニューの『保証金』もしくは『パーペチュアル』から清算処理に使用するトークンを入金しておきましょう。以下は『全取引ペアの残高』から入金をクリックした状態のスクリーンショットです。

BALANCES -> DEPOSIT

USDCを試しに投入してみました。清算後には信用口座やパーペチュアルコントラクトのアカウントのトークン残高が減少することになります。アカウント残高はマイナスにもなり得るため、最終的にはマイナスのポジションを解消する必要があります。ステーブルコインをデポジットしている場合は問題ないのですが、ステーブルコイン残高がマイナスの状態でETH価格が下落しているときには自身のアカウントがLiquidationされてしまう可能性が出てきます。

DEPOSIT USDC for MARGIN account

dYdX Liquidatorボットで清算狩り

dYdX Liquidatorの実体はスマートコントラクトとのやり取りによる清算ポジションの発見とトランザクション発行による清算処理です。ガス代が高い状態では清算の手数料である0.5%をトランザクション手数料が上回る可能性があります。dYdX LiquidatorのDockerイメージはプルするだけですぐに使用できますが、dYdXのアカウント残高やポートフォリオが予期しない方向に変化する可能性がありますので自己責任で実行してください。Docker環境がある場合には、以下のコマンドでdYdX Liquidatorを実行することができます。ETHEREUM_NODE_URLはInfuraで発行したメインネットのエンドポイントを入力します。マージン取引用へデポジットしている場合は、Soloになるので SOLO_LIQUIDATIONS_ENABLED=true と設定しておきます。パーペチュアルにデポジットがない場合は PERP_LIQUIDATIONS_ENABLED=false としておいても良いです。パーペチュアルでは必要なCollateralization ratioや清算の手数料などがSoloであるマージン取引のアカウントとは異なります。

docker run \
-e WALLET_ADDRESS=<Your Wallet Address> \
-e WALLET_PRIVATE_KEY=<Your Wallet Private Key> \
-e ETHEREUM_NODE_URL=<https://mainnet.infura.io/v3/INFURA_KEY> \
-e SOLO_LIQUIDATIONS_ENABLED=true \
-e PERP_LIQUIDATIONS_ENABLED=true \
-e SOLO_EXPIRATIONS_ENABLED=false \
dydxprotocol/liquidator

Liquidatorのgithubに詳細は記載されていますがその他いくつか重要なオプションがありますのでご紹介します。[7]

  • SOLO_MIN_ACCOUNT_COLLATERALIZATION

マージン取引であるSoloのアカウントでの清算処理後に指定された Collateralization ratio を維持しようとします。0.5と指定すると150%となります。

  • PERP_MIN_ACCOUNT_COLLATERALIZATION

パーペチュアルコントラクト(無期限契約)であるPerpのアカウントでの清算処理後に指定された Collateralization ratio を維持しようとします。0.5と指定すると150%となります。

  • SOLO_MIN_OVERHEAD_VALUE

対象金額以下のLiquidationは清算しません。1e36が1 USDの表現です。

dYdX Liquidatorを実行する上では、以下のような点を考慮する必要があります。特にトランザクションに必要なガスコストは無視できません。従ってプロフィットを生み出すには債務の大きなアカウントを特定することで、ガス代が高くてもそれ以上の手数料を徴収できるように工夫する必要があると思います。

コストファクター

  • 清算処理に必要となるトランザクション手数料
  • アカウント残高の調整やトークン調達の手数料

リスクファクター

  • 競合のdYdX Liquidatorによってトランザクションが失敗する
  • アカウント残高の変化で自身のアカウントが清算されてしまう

--

--

Yuya Sugano

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