Dune Analyticsに入門してみよう
はじめに
はじめまして、vividotと申します。
いつもは「DeFiで落ちてるお金を拾いたいブログ(タイトル詐欺)」というブログで記事を書いていますが、 HiÐΞで記事を書くとお金が降ってくると聞いて出張してきました。
唐突ですが、DeFierの皆さんはこんな感じのサイトを一度は見たことがありますよね?
このサイトはDune Analyticsと言って、Ethereumのオンチェーンの情報をSQLを用いてユーザが分析できるサイトとなっています。
ユーザ自身でブロックチェーンから情報を集める必要がないことや、情報の可視化が簡単に行えることがメリットとして挙げられます。
今回は、ひょんなことからDune Analyticsを触ったので備忘録的に記事を残しておこうと思います。
正直、ドキュメントを見れば完結するのですが、日本語の記事がないためハードルが高そうに見える現象があり「想像してたより簡単だったわ」ってことを伝えることが記事の目的です。
※筆者はSQL初心者のため、効率的でないSQLを生成していても怒らないでください
入門してみる
まず、Dune AnalyticsにはDashboardとQueryと呼ばれる2つの機能があります。
冒頭の画像はDashboardで、Dashboard中に表示されるそれぞれのパネルがQueryです。
つまり、最初にQueryを作る必要があります。
Query を作る
右上のNew Queryを押すと、このような画面になると思います。
上の画像について順番に説明しつつ、何かQueryを作ってみたいと思います。
①デコードされたコントラクトのデータ
ここには、デコードされたコントラクトのデータの一覧が並んでいます。
例えば、Uniswap v3のPair_evt_Swapというのは、Uniswap v3のペアコントラクトで発火されたSwapというイベントのデータが入っています。
イベントのデータが入っている??ん??となるのは分かりますが、要は以下の表のようなデータが既にあるということです。
あとはこのデータに対してSQLでごにょごにょしてあげれば、例えば一定期間のスワップのボリュームだったり回数だったりが分かるわけです。
ちなみにXX_call_YYというのは、イベントの発火ではなく関数が呼ばれた時のデータです。
残念ながら、今回はこれらのコントラクトのデータは使用しませんが、任意のDeFiに対してQueryを作成する際には必ず利用することになります。
②SQLを書く場所
ここに、SQLを書くことでデータの分析を行います。
試しに、今回は
SELECT * FROM ethereum."transactions" ORDER BY block_time LIMIT 5
というSQLを実行してみます。
ethereum."transactions"というのは既にデコードされてユーザが使える形になったトランザクション一覧の表です。
①で示したコントラクトのデータ以外にも、このようなトランザクション一覧やトークンの価格、著名なプロトコルのデータをさらに整形したデータなどが揃っています(ドキュメント)。
話を戻すと、上のSQLの意味は「トランザクションの一覧から新しいトランザクションを5つ抽出する」となっています。
③可視化を行う場所
前述のSQLを実行すると、次のような画面になります。
なにやらトランザクションっぽいものが5つ表示されていますね。成功です。
次に、例えばTXのGas Priceを棒グラフにするには「New visualization」から「bar chart」を選んで…
こう。簡単。
習うより慣れろ
解説用に何を作るか迷ったのですが、何か既にあるものの方がイメージが湧きやすいと思うので「EtherscanのGas Guzzlers」をパクってみようと思います。
Gas Guzzlersというのは、ガスを多く使うコントラクト(もしくはアドレス)のことで「今何が人気か」の確認に使えたりします。
また「今何が人気か」の確認に使うという文脈においては「最低3hrsでしか表示ができない」ことに不満を感じていたので、1hrsのデータを自分で分析してみましょう。
※トランザクションのデータがDune反映されるまで5分程度かかるので厳密ではありません。
X時間以内のTXを全部取得する
最終目標は1hrsのデータですが、テスト実行の度に時間が取られてしまうので5分以内のデータを抽出します。
また、TXの情報のうち必要なのは宛先アドレスとGas Usedだけなので、その2つを抽出します。
toアドレスごとにgas_usedの合計を出す
ついでに上位10アドレスだけに絞ってしまいましょう。
良い感じに調整
今は消費ガスが単位weiで表示されているので、ETHに変換するために10**18をかけてやったり…。
あれ?Etherscanと数字が合わないぞと思ったらgas priceを乗算してあげるのをすっかり忘れていました。
まあ、そんなこんなして動作チェックのために3hoursで抽出し、Etherscanと見比べてあげると数字もだいたい一致してるので良いでしょう。
ちなみにDune Analytics側で空白のアドレスがあるのはスマートコントラクトのデプロイです(あれは宛先nullなので)。
SQL側で削除してもいいですが、1hoursになると上位10位から消えて実害がなくなるので放置します。
最終的な結果がこれです。適当な名前で保存しておきます。コピペしたいならQueryのページからどうぞ。
可視化してDashboard
可視化は、正直エクセルより簡単なので省略します。ポチポチするだけ。
その後、新しいDashboardを開いて右上のEditから編集画面にしグラフや表を追加!
完成したのがこちらです。
https://duneanalytics.com/vividot/Gas-Guzzlers-1-hours
ね?簡単でしょ
最後に
いかがだったでしょうか。SQLを1ミリも知らないと「うーん」となるかもしれませんが、SQL聞いたことある~ぐらいの人であれば結構遊べそうですよね。
ちなみにDune Analyticsを急に触りたくなったのはUniswap v3のvaultの透明性がないので可視化したかったからです。
全体としては工事中ですが、CharmのAlpha VaultのDashBoardのレンジの表示は我ながら良い出来だと思います。
正直新しく出てきた系VaultのAPR表示は怪しいと思ってるので、早くそっちにも取り掛かりたいですね(モチベーションがなくなってきたのは内緒です)。
アイディア
税金の計算を簡単にするために
①アドレスを入力し、アドレスからTXを抽出
②TX送信時点のEther価格Token価格を取得・表示
年末に本気出す(クリプタクトさん、価格取得対応してる資産もっと増やしてくれ)