🎃

Audiusのオンチェーン分析_vo1 【Dune】

2023/02/07に公開

はじめに

ここ数日分散型ストリーミングサービスのプラットフォームであるAudiusにハマっていて、色々と調べています。今回はその一環としてSQLの勉強も兼ねながら、独自トークンであるAUDIOを見ていきます。

Audiusとは

web3版のSpotifyという説明が一番分かりやすいかと思います。プラットフォーマーや中間業者が利益のほとんどを取ってしまい、ほんの一部しか利益を得ることのできない音楽業界を変えるべく創業されGeneral Catalyst, LightspeedといったVCだけでなくKaty PerryやSteve Aokiなどからも出資を受けています。
簡単なリサーチ記事も書いてみたので、興味のある方は読んでくださると励みになります。
https://chaichai.substack.com/p/audius

AUDIOとはAudiusがethereumネットワーク上の構築している独自トークンです。このトークンがプラットフォーム内の通貨として機能しアーティストへの報酬として分配されます。加えて

  1. ネットワークのセキュリティー確保
  2. 限定音源などへのアクセス権
  3. ガバナンスへの投票権

などの役割も果たしています。

AUDIOのオンチェーン分析

ここから本題です。Duneを使って出来る範囲で分析を行ってみました。SQLの勉強を進めていく中で徐々に分析できる範囲も増やしていければと思っています。以下が成果物です。
https://dune.com/chaichai/audius
今回は

  1. ウォレットアドレスに関する分析
  2. トランザクションに関する分析

を行っています。

ウォレットアドレス

まずは総ウォレット数を出してみました。

SELECT COUNT(DISTINCT to) AS "総アドレス数"
FROM erc20_ethereum.evt_Transfer
WHERE "contract_address" = 0x18aAA7115705e8be94bfFEBDE57Af9BFc265B998
;

トークンの送信先を重複なく数えています。
結果を見てみると、トークン保有者≠ユーザーかつアドレス数≠ユーザー数であることに注意する必要がありますがAudius公式が出しているMAUと比べてもかなり少ない数となりました。
(私のクエリが間違っているのか、他に理由があるのか分からないため調べてみたいところです。)
https://dashboard.audius.org/#/


次に日付別の新規アドレス数を算出しました。

SELECT B."firstDay" AS "Date", B."newAddress" AS "newAddress", SUM(B."newAddress") OVER(ORDER BY B."firstDay") AS "total"
FROM (
    SELECT COUNT(A."address") AS "newAddress", A."FirstDay" AS "firstDay"
    FROM (
        SELECT DISTINCT to AS "address", date_trunc('day', min(evt_block_time)) AS "FirstDay"
        FROM erc20_ethereum.evt_Transfer
        WHERE "contract_address" = 0x18aAA7115705e8be94bfFEBDE57Af9BFc265B998
        GROUP BY 1
        ORDER BY 2
    ) AS A
    GROUP BY 2
    ORDER BY 2
) AS B

局所的に分かりやすく新規登録数が増加しています。理由としては

  1. 周期的なもの(夏は登録しやすくなるとか)
  2. 単発のキャンペーンやイベント
  3. 参加しているアーティストの活動によるもの

などが考えられそうですが、データを見る限り1は無さそうです。


最後にウォレットの増加を累計値として算出し調べてみました。

--- ウォレットがAUDIOを獲得した日、アドレス値、累計値
SELECT B."firstDay" AS "date", B."newAddress" AS "newAddress", SUM(B."newAddress") OVER(ORDER BY B."firstDay") AS "total"
FROM (
   SELECT COUNT(A."address") AS "newAddress", A."FirstDay" AS "firstDay"
   FROM (
   --- 送信先のアドレスを重複なく列挙、最初の日付を取得
       SELECT DISTINCT to AS "address", date_trunc('day', min(evt_block_time)) AS "FirstDay"
       FROM erc20_ethereum.evt_Transfer
   --- AUDIOのコントラクトアドレス
       WHERE "contract_address" = 0x18aAA7115705e8be94bfFEBDE57Af9BFc265B998
       GROUP BY 1
       ORDER BY 2
   ) AS A
   GROUP BY 2
   ORDER BY 2
) AS B

基本的にはサービス開始から着実にユーザーを増やしてきたように見えます。もちろん前述のように必ずしもユーザー獲得の過程を示しているわけではありませんが。

トランザクション

SELECT date_trunc('day', evt_block_time) AS date, CAST(value as double)/1e18 AS AUDIO, SUM(CAST(value as double)/1e18) OVER(ORDER BY evt_block_time) AS "累計取引量"
FROM erc20_ethereum.evt_Transfer
WHERE "contract_address" = 0x18aAA7115705e8be94bfFEBDE57Af9BFc265B998
ORDER BY "evt_block_time" ASC

こうやって振り返ってみると、ASの後の書き方など統一されておらず良くないと感じました。本当はdateをGROUP BYでまとめたかったのですが、力量不足です。
こちらも線形的増加を辿っています。

感想

第一回はここまでにしておきます。簡単な分析をしただけでも色々な学びがあったので、次回以降より詳細なユーザー属性などについても分析できればと思います。

Discussion