今回はDuneAnalyticsでBitcoinの分析を実際にやってみた結果をまとめていきます。
まだまだ、情報が少ないWEB3の分析ですが、先人たちの知恵も借りながらDuneAnalyticsでBitcoinの分析をやる方法について解説していきます。
おすすめの勉強方法も解説していますので、WEB3のデータ分析を学びたい方には必見の内容だと思います。
WEB3の分析に足を踏み入れるには、ブロックチェーンなど前提の知識が非常に重要になると感じました。
結論としては、「ユーザーとしてWEB3に参加しつつ、勉強を進めていく」のがいいでしょう。
では、本題に移ります。
DuneAnalyticsとは?
DuneAnalyticsはWEB3を分析するために、有用な分析ツールです。
WEB3の分析を広めるために、世界中のデータ分析者に向けて作られているコミュニティ志向のオープンな分析プラットフォームです。
WEB3の分析プラットフォームは様々ありますが、特に分析者が使いやすい形で多くのカスタムテーブルを用意している点が特徴です。
また、DuneAnalyticsは基本的にはEthereumのチェーンがメインですが、今回は認知度が高いBitcoinの分析を実施していきます。
⇒DuneAnalyticsについて詳しく知りたい方はこちら
⇒WEB3の分析プラットフォームについて詳しく知りたい方はこちら
Bitcoinとは
今回分析の対象となるBitcoinについて簡単に説明していきます。
Bitcoinは2009年に発表された最初の仮想通貨であり、デジタル通貨です。
Bitcoinは中央集権的な機関や銀行を必要とせず、P2P(ピア・ツー・ピア)ネットワークを通じて取引が行われるため、世界中のユーザーが直接取引できます。
Bitcoinの重要な特徴は以下です。
- デジタル通貨: Bitcoinは物理的な紙幣や硬貨とは異なり、インターネット上でのやり取りに特化しています。
- ブロックチェーン技術: Bitcoinの取引はブロックチェーンと呼ばれる分散型の公開台帳に記録されます。ブロックチェーンは改ざんが困難であり、トランザクションの透明性とセキュリティを確保します。
- 非中央集権性: Bitcoinの取引は中央集権的な機関や銀行を介さずに行われます。そのため、ユーザーは自分のBitcoinを直接管理する必要があります。
- マイニング: 新しいBitcoinの発行や取引の承認はマイニングと呼ばれる計算作業によって行われます。マイナーはブロックを生成することで報酬を得ることができます。
- 限られた供給: Bitcoinの供給量は2,100万枚に制限されており、新たなBitcoinの発行は徐々に減少していきます。
Bitcoinは世界中で広く受け入れられ、多くの場所で商品やサービスの支払いに使われています。
価格は需給や市場の変動によって変化しますが、WEB3の新たな通貨として期待されています。
DuneAnalyticsでの分析の勉強方法
DuneAnalyticsの分析の勉強方法について解説していきます。
今回はDuneAnalyticsでBitcoinを分析していきますが、多くの方がWEB3を分析したことがなく、勉強方法に悩まれると思います。
そこで、DuneAnalyticsの優れた機能を使っていこうと思います。
DuneAnalyticsでは世界中のデータ分析者が分析結果をダッシュボードを提供しています。そして、ダッシュボードを作成するクエリもあわせて公開されています。
そのため、新参者は先駆者のクエリを参考にしながら学習することができます。
今回は先駆者のクエリを参照する形でDuneAnalyticsの利用方法について理解を深めていきたいと思います。
参考するダッシュボードとしては「Bitcoin」の検索で最もよい評価を得ている「@dgtl_assets」さんの「Bitcoin Ordinals Analysis」を参考にしていきたいと思います。
⇒同じ分析をFlipside Cryptoでもやってみた結果はこちら
DuneAnalyticsで分析できるBitcoinのデータ
DuneAnalyticsで分析できるBitcoinのデータは下記の4つがあります。
- Blocks(ブロック)
- Transactions(トランザクション)
- Outputs(出力)
- Inputs(入力)
簡単に解説していきます。
Blocks(ブロック)
ブロックは、すべてのトランザクションが含まれる基本単位です。
Bitcoinのブロックは、複数のトランザクションをまとめて1つのブロックとして承認し、ブロックチェーンに追加する仕組みです。
このデータには、ブロックに含まれるトランザクションやその他の情報が含まれています。
Transactions(トランザクション)
トランザクションには、UTXO(未使用取引出力)トランザクションの全ての入力と出力が含まれます。
BitcoinはUTXOモデルを使用しており、トランザクションが以前の取引出力を消費し、新しい取引出力を作成します。
このデータには、トランザクションの詳細やUTXOの関連情報が含まれています。
Outputs(出力)
このデータには、トランザクションの出力(新しい取引出力)の情報が含まれています。
トランザクションは、複数の入力を消費して新しい取引出力を作成しますが、このデータはそれらの新しい出力の情報のみが含まれています。
Inputs(入力)
このデータには、トランザクションの入力(以前の取引出力を消費するための情報)が含まれています。
トランザクションは、前のトランザクションの出力を参照することで新しい入力を作成しますが、このデータはそれらの入力の情報のみが含まれています。
今回は簡単に説明しましたが、データ定義についてもっと詳しく知りたい方はこちらの公式ドキュメントを参照ください。
Bitcoinの分析をやってみる
では、実際にBitcoinの分析をやってみます。
主に見ていくデータテーブル
今回は主に「Transaction」のデータテーブルを使って分析します。「Transaction」のデータの中身は下記のようになっています。
カラム名 | 型 | データ内容 |
---|---|---|
block_time | timestamp | ブロックの時刻 |
block_date | date | ブロックの日付 |
block_height | bigint | ブロックの番号 |
block_hash | string | このトランザクションを含むブロックのハッシュ |
index | int | ブロック内でのトランザクションの番号 |
id | string | このトランザクションのID(ハッシュ値) |
input_value | double | トランザクションのインプットの合計値 |
output_value | double | トランザクションのアウトプットの合計値 |
fee | double | マイナーに支払われるトランザクションの手数料(output_value – input_value) |
input_count | int | トランザクションのインプットの数 |
output_count | int | トランザクションのアウトプットの数 |
size | bigint | トランザクションのサイズ(バイト) |
virtual_size | bigint | トランザクションの仮想サイズ(ウィットネストランザクションの場合に実際のサイズと異なる) |
is_coinbase | boolean | トランザクションがコインベーストランザクションかどうか(ブロック内の最初のトランザクション) |
coinbase | string | トランザクションがコインベーストランザクションの場合、コインベースデータが含まれる。そうでなければnull。 |
input | struct | トランザクションのインプットに関するデータ(ネストされた階層的なデータ) |
output | struct | トランザクションのアウトプットに関するデータ(ネストされた階層的なデータ) |
lock_time | bigint | マイナーがトランザクションをブロックに組み込むことができる最も早い時刻 |
hex | string | トランザクションを16進数でエンコードしたもの |
「Transaction」テーブルはビットコインのブロックチェーンのトランザクションを保有しているデータです。
参考にするクエリ
今回は下記のクエリを参考にしていこうと思います。
SELECT date_trunc('day', block_time) AS DATE
,count(*) AS Daily_Inscriptions
,sum(count(*)) OVER (
ORDER BY date_trunc('day', block_time) range unbounded preceding
) AS Total_Inscriptions
,sum(fee) AS Daily_fees
,sum(sum(fee)) OVER (
ORDER BY date_trunc('day', block_time) range unbounded preceding
) AS Total_fees
FROM bitcoin.transactions
WHERE 1 = 1
AND block_height > 767429
AND cast(hex AS VARCHAR) LIKE '%0063036f726401%'
GROUP BY 1
ORDER by 1 DESC;
各句ごとに詳しくみていきます。
SELECT句
クエリの結果として表示されるデータを指定しています。
- date_trunc(‘day’, block_time) AS DATE:
block_time 列から日付部分のみを取得して DATE として表示します。 - count() AS Daily_Inscriptions:
各日付ごとにインスクリプションされたトランザクション数を Daily_Inscriptions として表示します。 - sum(count()) OVER … ASTotal_Inscriptions:
各日付までの累積インスクリプション数を Total_Inscriptions として表示します。OVER 句を使用して、date_trunc(‘day’, block_time) で日付ごとにグループ化し、range unbounded preceding を指定して、その日以前のすべてのデータを合計します。 - sum(fee) AS Daily_fees:
各日付ごとにインスクリプションされたトランザクションの合計手数料を Daily_fees として表示します。 - sum(sum(fee)) OVER … AS Total_fees:
各日付までの累積手数料を Total_fees として表示します。OVER 句を使用して、date_trunc(‘day’, block_time) で日付ごとにグループ化し、range unbounded preceding を指定して、その日以前のすべてのデータの手数料を合計します。
FROM句
bitcoin.transactions テーブルからデータを取得します。
WHERE句
データのフィルタリングを行います。
- block_height > 767429: block_height 列が767429より大きいトランザクションのみを対象とします。
- cast(hex AS VARCHAR) LIKE ‘%0063036f726401%’: hex 列が特定の16進コード(0063036f726401)を含むトランザクションのみを対象とします。
これは、詳細の説明は割愛しますが、ビットコインのインスクリプションがなされた後のデータのみを取得する条件です。
インスクリプションとは特定のデータ(画像、テキスト、音楽など)をビットコインのトランザクションに組み込んで保存することができる拡張機能のようなものです。
参考記事はこちらになります。
GROUP BY句
結果を日付ごとにグループ化します。1は日付を指します。
ORDER BY句
結果を日付の降順(新しい日付から古い日付の順)で並べ替えます。
出力結果
最終的なアウトプットは下記のようなものになります。無事、日ごとの指標を出力することができました。
Daily_Inscriptions
2023年の1月から徐々にインスクリプションが発生しており、2023年5月ごろに大きくインスクリプション数が増加しています。
Total_Inscriptions
累計のインスクリプション数は右肩上がりで伸び続けていることがわかります。
Daily_fees
日ごとの手数料は5月に急激に高騰していることがわかります。
Total_fees
累計手数料では、徐々に鈍化しています。
この結果を見て、筆者も知ったのですが、ビットコイン版NFT「Ordinals」が大きく影響しているようです。
ビットコイン版のNFTが2023年1月より発行されることになり、急激にインスクリプションが伸びていることが背景(というより、そもそもこの分析の目的)だったようです。
NFTは元来Ethereumベースのものが主流でしたが、Bitcoin版として「Ordinals」というプロジェクトが立ち上がり、上記の分析が評価を得ていた背景でした。
データから事象を知る最もよくない例ですが、分析に興味を持ったことで重要な動きを知ることができました。
分析をやって見た所感・感想
今回はBitcoinの分析をしてみました。所感としてはブロックチェーンに関する深い知識が必要であることを痛感しました。
ブロックチェーンがどのように稼働しているのか、どのような値を蓄積しているのかを理解することでより、柔軟に価値のある分析ができるだろうと感じました。
ブロックチェーンを深く理解することがWEB3のデータサイエンティストとしては重要なのではないかと感じさせられました。
また、今回はBitcoinでありましたが、各プロトコルごとに特徴があり、分析する観点・データなども変わってきます。
そのため、幅広く各プロトコルを知っておくことも重要なポイントになります。
上記の例のようににブロックチェーンのデータを見ることで、市場の盛り上がりをデータで確認することが世界中の誰でもできます。
いままで市場調査などが必要だった領域に対しても、個人で分析できてしまう環境ができるのはWEB3特有のものであり、大きな変化を感じました。
WEB3では、データが公開されることで企業に属さずとも活躍できる場が増えてくる将来性を実感できました。
【まとめ】まずはユーザーとして参加すべし
今回はDuneAnalyticsでBitcoinの分析をしてみました。
ブロックチェーンのデータを分析してみましたが、やはり前提となる知識が多く出てきます。
WEB3でデータサイエンティストとして活躍するにはこのドメイン知識の習得が必須です。
勉強もさることながら、1ユーザーとしてWEB3に参加することも重要です。WEB3の利便性や世界観を感じることなく、データ分析は難しいと思います。
まずは、暗号通貨取引所に登録して、WEB3の世界に入ってみることをおすすめします。
下記に詳しく解説していますので、まずはWEB3へ一歩踏み込んでみましょう。
今回は以上です。