HiÐΞClassic

Dune Analyticsに入門してみよう

ビビドット
3 years ago
はじめに入門してみるQuery を作る①デコードされたコントラクトのデータ②SQLを書く場所③可視化を行う場所習うより慣れろX時間以内のTXを全部取得するtoアドレスごとにgas_usedの合計を出す良い感じに調整可視化してDashboard最後にアイディア

はじめに

はじめまして、vividotと申します。

いつもは「DeFiで落ちてるお金を拾いたいブログ(タイトル詐欺)」というブログで記事を書いていますが、 HiÐΞで記事を書くとお金が降ってくると聞いて出張してきました。

唐突ですが、DeFierの皆さんはこんな感じのサイトを一度は見たことがありますよね?

このサイトはDune Analyticsと言って、Ethereumのオンチェーンの情報をSQLを用いてユーザが分析できるサイトとなっています。
ユーザ自身でブロックチェーンから情報を集める必要がないことや、情報の可視化が簡単に行えることがメリットとして挙げられます。

今回は、ひょんなことからDune Analyticsを触ったので備忘録的に記事を残しておこうと思います。
正直、ドキュメントを見れば完結するのですが、日本語の記事がないためハードルが高そうに見える現象があり「想像してたより簡単だったわ」ってことを伝えることが記事の目的です。

※筆者はSQL初心者のため、効率的でないSQLを生成していても怒らないでください

入門してみる

まず、Dune AnalyticsにはDashboardQueryと呼ばれる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価格を取得・表示

年末に本気出す(クリプタクトさん、価格取得対応してる資産もっと増やしてくれ)


コメント
いいね
投げ銭
最新順
人気順
ビビドット
3 years ago
コメント
いいね
投げ銭
最新順
人気順
トピック
アプリ

Astar Network

DFINITY / ICP

NFT

DAO

DeFi

L2

メタバース

BCG

仮想通貨 / クリプト

ブロックチェーン別

プロジェクト

目次
Tweet
ログイン