第23章 · オンチェーンデータで現実を観察する
他人の結論に頼らず、今起きていることを自分で見るには?
- 練習する能力
- Onchain LiteracyResearch
- 実践
- オンチェーンデータ基盤で最初のグラフを作る。あるプロトコルの過去 90 日の収益とアクティブアドレスを示す。
- AI Lab
- AI にデータ取得の定義とクエリを書かせ、自分で実行してインセンティブを収益に含めていないか確認する。
現実の問題
同じプロトコルを調べていて、三つの資料が手元にある。
公式の四半期報告は、前四半期の収入を2400万ドルとする。 調査機関の報告は、同じ期間を900万ドルとする。 SNSで誰かが作った表は、純損失1800万ドルとする。
同じプロトコル、同じ四半期の三つの数字が一桁違い、符号まで違う。
最初は「誰かが嘘をついている」と思うかもしれない。しかし一つずつ調べると、さらに厄介なことが分かる。すべての数字に対応する取引を、チェーンで見つけられる。
捏造ではなく、異なる三つの問いに答えている。
- 第一は、利用者が払った費用の総額。
- 第二は、そのうちプロトコルに帰属する部分。
- 第三は、その期に配ったトークン報酬も含めた純額。
三つとも正しい。「収入」が一度も定義されていないからだ。
業界で最も一般的な混乱だ。データは公開され、集計の定義は非公開だ。
すべての取引を誰もが見られるのは、ほぼすべての他業界に対する巨大な利点だ。ただし公開されるのは原事実であり、結論ではない。その間の段階、どの取引を計算に含めるかという決定が最終の数字を決める。
そして、その段階は報告に書かれないことが多い。
この章の課題は、すべての人の結論を迂回し、原事実から自分が根拠を説明できる数字を作る方法だ。
Part Aで最も技能の密度が高く、卒業制作でも最も使う能力となる。
思考実験
チェーンを離れ、コーヒー店を見よう。
宅配プラットフォームで売っている店の、先月の帳簿だ。
- 顧客は合計100万元を払った。
- プラットフォームは20%、20万元を取った。
- 店は新規顧客向けに15万元分の金券を配り、顧客が代金に充てた。
- 金券は店主が印刷し、印刷費用はほぼゼロだった。
店の先月の「収入」はいくらか?
少なくとも五つの答えがあり、それぞれ説明できる。
A 100万 顧客が払った総額
B 80万 プラットフォームの取り分を引いて店へ入った額
C 65万 さらに金券の額面を引く
D 80万 金券は自分で刷り、現金流出がないので引かない
E 65万 将来本物のコーヒーに交換するので、費用は実在するDとEの違いで立ち止まろう。金券は費用なのか?
今月の現金だけなら費用ではない。店主は一銭も出していない。長期なら費用だ。いつか15万分を実際のコーヒーで履行する。
オンチェーンのトークン報酬も同じ状況だ。 自分が発行するトークンを配り、当期の現金流出はないが、全保有者を希薄化する(第20章)。費用に入れるかは、答える問いによる。
さらに混同しやすい二つを見よう。
店にあるお金と、店が稼いだお金は同じではない。
金庫に500万元があり、そのうち480万は顧客のチャージ残高としよう。総額は見栄えが良いが、店のお金ではなく顧客のもので、いつでも引き出せる。
チェーンにも、この金庫の総額に相当する指標がある。 規模の代表とされがちだが、実際に測るのは「他人がここへ置いた額」だ。
今日来た人数も、分解が必要だ。
先月の来店は延べ6000回。そのうち4500回は無料券を取りに来ただけで、定価の一杯も買わずに去った。残る1500回は、300人が五回来たものだった。
「6000」は、延べ6000回、独立した1800人、本物のリピーター300人、実取引1500件という四つの数字に分けられる。どれも本当で、表すものはまったく違う。
店をプロトコル、顧客をアドレスへ置き換えれば、三組の問いはそのまま成り立つ。違いは一つ、チェーンには一件ずつ記録があり、自分で数えられることだ。
あなたが決める
先月いくら稼いだか、という具体的な問いに答える。どこから始めるか?
結果を観察する
四つは同じ結論を指す。
難しいのは取得ではなく、定義だ。
技術的には、正しく書いたクエリで90日の手数料を調べるのは数秒だ。時間がかかるのは、六つへの答えだ。
| 定義の六問 | 決めること |
|---|---|
| どのアドレスを含むか | 主コントラクト、全バージョン、全チェーン、プロキシか実装か |
| どのイベントを含むか | 使用とみなす取引、失敗取引や内部送金を含むか |
| 総額か純額か | 利用者の総費用か、流動性提供者への分配を引いた部分か |
| 報酬をどう扱うか | トークン報酬を費用にするか、どの価格で換算するか |
| 時間をどう区切るか | 暦月か直近30日、ブロック時間かUTC日付か |
| 重複をどう除くか | アドレスか人か、保管アドレスや一人の複数アドレスをどうするか |
一つでも違えば数字も違う。しかし、引用する記事の大半は一つも説明しない。
同じ月でも、正当に次の数字が得られる。
| 数字の名前 | 計算するもの | よくある誤用 |
|---|---|---|
| 利用者の総費用 | 全利用者が払ったお金 | そのままプロトコル収入と呼ぶ |
| プロトコルの取り分 | 流動性提供者分を引いたもの | 見落とし、数倍過大評価する |
| 純収入 | さらに当期トークン報酬を引く | 宣伝にはほぼ現れない |
| ロック総額 | 他人が預けたお金 | 規模や価値として扱う |
| 取引量 | 通過する資金の流量 | 操作できるのに需要と扱う |
| アクティブアドレス | 交流するアドレス数 | 利用者数と扱う |
数字を見るたびに、まずどの行かを分類し、それから使うか決めよう。
別に強調すべき点がある。第19章の流通時価総額と完全希薄化後評価額の違いは、データ実務で最も一般的な誤りだ。どちらか示さずに評価額を引用すれば、分析全体が成立しない。 十倍以上違いうるのに、初期表示で片方を説明なく出すデータ源も多い。
モデルを作る
六段階の手順がモデルだ。各段階に必須の成果物がある。
- 問いを決める
- 定義を決める
- データ源を探す
- 取得する
- 相互検証
- 不確実性を示す
段階別に見よう。
| 段階 | 成果物 | できないと |
|---|---|---|
| 1 問い | 時間範囲付きの、反証できる一文 | 「調べてみる」は永遠に終わらない |
| 2 定義 | 六問への六つの答えを文章に | 数字を説明・再現できない |
| 3 データ源 | 独立した最低二つの出典 | 一つが誤っても気付けない |
| 4 取得 | 再現可能なクエリか手順記録 | 来月はやり直しになる |
| 5 相互検証 | 二出典の差と説明 | 最も情報の多い差を無視する |
| 6 不確実性 | 分からない場所のリスト | 読者は信頼の程度を判断できない |
第五段階を詳しく見よう。価値は一致の確認ではなく、不一致の理由の説明にある。
3%の差なら時間境界かもしれない。40%ならほぼ定義の違いで、それを見つけると構造的特徴を理解する。差は情報であって、ノイズではない。
第六段階が研究と宣伝を分ける。正直な分析には「不確かな点」が必要だ。ほかの二チェーンを覆わない、報酬を当期平均価格で換算したので変動が影響する、大口三アドレスが同じ主体か分からない、などだ。
盲点を明記する分析は、無敵に見える分析より信じる価値がある。
最後に、六つの主要指標の定義と罠を示す。ノートへ写そう。卒業制作で使い続ける。
| 指標 | 実際に測るもの | 主な罠 |
|---|---|---|
| 保有者 | 保有アドレス数 | 人数ではない。エアドロップの一回限り、保管の後ろの多数の人 |
| ロック総額 | 預けた資産価値 | 他人のお金。複数プロトコルで重複。値上がりが成長に見える |
| 費用 | 利用者の総支払額 | 多くは流動性提供者へ行き、プロトコルに帰属しない |
| 収入 | プロトコルの取り分 | 報酬を引くか明示が必要で、引かない定義も多い |
| 純フロー | 期間の流入 − 流出 | 内部送金やマーケットメーカーの調整が混ざる。取引所と利用者を分ける |
| 建玉 | 未決済のデリバティブ規模 | コイン・ドル建ての形、場所ごとの定義が違う。方向を示さない |
何と呼ぶか
特定のトークンを持つアドレス数。
測るのはアドレスで、人数ではない。一人が千アドレスを持ち、取引所の一つの後ろには数十万人いるかもしれない。
過去30日の交流、一回受け取ってから動かないもの、作成時期の分布へ分解すると有用だ。第22章のLabで使った方法だ。
プロトコルのコントラクトに預けられた資産の総価値。
三つの性質を知ろう。利用者のお金で、プロトコルのものではない。資産の値上がりが事業成長に見える。組み合わせ可能なプロトコルでは、同じ資金を複数のTVLへ数えられる。
有用な規模指標だが、収入でも価値でもない。第26章の題名は、そのためにある。
利用者がプロトコルの使用に払う総額。
鍵は、最後にどこへ行くかだ。多くの取引型では、大部分が流動性提供者へ行き、小さな部分だけがプロトコルへ帰属する。
費用を直接収入と呼ぶのは、最もよくある過大表示だ。
費用のうち、プロトコル自身に帰属する部分。
さらに下に、当期トークン報酬を引いた純収入がある。宣伝にはほぼ出ないが、稼いでいるか、成長を買っているかに答える数字だ。
引用には層の明示が必須で、なければ理解できない。
一定期間の、ある種のアドレスの流入から流出を引くもの。
取引所の観察によく使うが、罠も多い。内部ウォレットの整理が意味のない大口転送を作り、マーケットメーカーの調整を利用者行動と誤読し、ホット・コールド間の移動も内部操作だ。
分析前にアドレスを分類し、その分類自体も検証しなければならない。
未決済デリバティブの総規模。第18、21章で使った。
罠は表示基準(激しい変動でコイン・ドル建てが逆向きになる)と取引所の範囲(出典ごとに違う)だ。
レバレッジの規模で、方向情報はない。単独でロング・ショートを判断するのは誤用だ。
実践
目標は具体的だ。過去90日の収入とアクティブアドレスを図にし、すべての数字の根拠を説明する。
前より長いLabなので、二回に分けるのがおすすめだ。
プロトコルを選び、問いを書く。
明確な手数料の仕組みがある取引所、借入プロトコル、無期限プラットフォームなどを選び、複雑すぎるものは避ける。
例えば「過去90日の、日次のプロトコル収入と独立した交流アドレス数はいくらか?」と書く。
文書の最上部へ置き、毎段階で照らし合わせる。
六問の定義を、一つずつ書く。
飛ばしてはいけない。核心だ。
アドレス:主コントラクト0x…(チェーンで確認し、記事から写さない)。メインネットのみ。
他チェーンは除外(不確実性リストへ書く)
イベント:Swap / Borrow / …(具体的な名前)。失敗取引は除外
総額か純額:プロトコル取り分 = 総費用 × 分配比率
比率はコントラクトのパラメータ…(名前と現在値を記録)
報酬:今回は引かず、支出曲線を別に示して比較
時間:UTC暦日で、直近90の完全な日
重複除去:fromアドレス別で、人として統合しない(不確実性へ書く)コントラクトアドレスを探し、エクスプローラーで照合する。
記事や投稿からコピーせず、公式文書から探す。開いて、プロキシ表示、新バージョン、最近の取引の有無を確認する。
任意の取引を一つ開き、起きたイベントの名前とフィールドを写す。クエリが取るのは、そのイベントだ。
第一のクエリ:日次費用を書く。
テーブル名とフィールドは場所により異なるが、構造は同じだ。
select
date_trunc('day', block_time) as day,
sum(fee_amount_usd) as fees_usd,
count(*) as tx_count
from <プラットフォームのイベント表>
where contract_address = <確認済みのコントラクトアドレス>
and block_time >= now() - interval '90' day
group by 1
order by 1まず三日だけ実行する。エクスプローラーの実際の三日の取引と照合し、桁が合わなければ理由を探し、先へ進まない。
第二のクエリ:日次アクティブアドレスを書く。
select
date_trunc('day', block_time) as day,
count(distinct tx_from) as active_addresses
from <プラットフォームのイベント表>
where contract_address = <コントラクトアドレス>
and block_time >= now() - interval '90' day
group by 1
order by 1tx_fromは取引を開始するアドレスだ。アグリゲーターやコントラクトウォレット経由なら、利用者ではなくアグリゲーターのアドレスになる。実取引をいくつか見て、どの層を取るか確認する。 最も一般的な誤りだ。
二曲線を同じ図へ描く。 収入は棒、アドレスは折れ線、Y軸を二つ使う。
同じ向きか、収入だけ急増する日(大口取引かもしれない)、アドレスだけ急増する日(報酬活動や水増しかもしれない)があるかを見る。
乖離した日が、最も深掘りする価値がある。 一日選び、実取引で原因を探す。
相互検証する。 90日の総収入を、公式と第三者集計の最低二つと比べる。
表を埋める。
| 出典 | 90日の数字 | 自分との差 | 差の説明 |
|---|---|---|---|
| 自分のクエリ | — | — | |
| 公式ダッシュボード | |||
| 第三者プラットフォーム |
第四列が最も価値ある成果だ。 20%超の差を説明できなければ、定義で考え切れていないものがある。
不確実性リストを書く。 最低三点。ほかのチェーンを覆わない、開始アドレス集計なので経由利用者をアグリゲーターへ計上する、報酬を当期平均価格で換算し変動が影響する、などだ。
図、再現可能なクエリ、正直な盲点リストの三つができる。
合わせて、適切な一次研究の最小単位となる。 第26、31章で積み上げ、卒業制作のデータ部分は、この手順を数回繰り返すことになる。
AI Lab
先に前のLabを自分で終えてから行う。逆なら、出力の正誤を判断できない。
次を与えよう。
あるプロトコルの過去90日の収入と日次アクティブアドレスを集計します。
第一段階では、クエリをまだ書かず、六問に答える集計定義書を出してください。
1. 対象コントラクト(メインネットと他チェーンを別々に列挙)
2. イベントと失敗取引の扱い
3. 利用者の総費用かプロトコル純額か。分配比率のパラメータ
4. 報酬の扱い。引くなら、どの価格で換算するか
5. 時間の区切りと境界処理
6. アクティブアドレスの重複除去フィールドと、経由利用者の扱い
第二段階で、この定義に基づくクエリと、使うテーブル・フィールド名を書いてください。
第三段階で、覆えないものと、過小・過大評価の可能性を別に列挙してください。
ルール:
- すべてのアドレス、パラメータ、イベント名に出典を付ける。
- 不確かなものは「人手での確認が必要」とし、もっともらしい値を出さない。受け取ったら、最初にアドレスとイベント名をエクスプローラーで照合し、それからクエリを実行する。
危険度順に、五つの高頻度の誤りがある。
- 報酬を収入へ含めるか、支出を完全に無視する。 冒頭の三報告の差の源で、最も高くつく。
- 費用を収入とする。 総額と取り分を分けず、一つの誤りで数倍になる。
- アドレスとフィールド名を捏造する。 書式は正しく、破綻が見えなくても、チェーンに存在しない。照合でしか発見できない。
- 評価額の定義を混ぜる。 流通か完全希薄化かを示さない。第19章で十倍違いうると学んだ。
- 多チェーンと複数バージョンを落とす。 主ネット一コントラクトだけで、系統的に低い数字になる。
実際に出会った誤りを記録しよう。モデルだけの欠点ではない。人の報告にも同じ五つはよくあるが、一つずつ確認されていないだけだ。
応用として、自分とAIの定義書を並べ、双方の見落としを比べる。第31章で固定の研究工程にする。
AI の回答後、自分で必ず検証すること
- アドレスを照合したか。プロキシか、最新版か
- イベントとフィールド名は実取引に存在するか
- 総費用とプロトコルの取り分のどちらかを明示したか
- 最重要点として、報酬を収入に含めたり、報酬支出を完全に無視したりしていないか
- FDVと流通時価総額を混同せず、評価額の種類を示したか
- 時間はブロック時間かほかか、境界をどう処理したか
- どのフィールドでアドレスを重複除去し、経由利用者を誰へ計上するか
- 覆えない部分を、自分から列挙したか
実例
冒頭は架空の構造ではない。報酬のあるどのプロトコルも、利用者の総費用、取り分、報酬後の純額を同時に出せる。
一桁違うこともあり、第三は負であることが多い。
それぞれ正しい用途がある。第一は使用規模、第二は事業モデル、第三は稼いでいるか成長を買うかを測る。問題はどれを使うかではなく、使うときに明示するかだ。
資金を借入プロトコルへ預け、証書トークンを得る。それを別で担保にし、借りた資産を第三へ預ける。
同じ原資を、三つのロック総額で各一回数える。業界全体では三回になる。
不正ではなく、組み合わせ可能性の自然な結果だ。ただし、横断集計では系統的に膨らむ。倍率はレバレッジ拡大で上がり、縮小で下がる。第21章の構造がデータへ投影された姿だ。
ある週に十数倍となり、宣伝は成長の証拠とした。
見ると大半は開始後三日以内に作成され、受取条件に届く最小の交流だけ行い、終了後は一切活動しなかった。
完全にチェーンで見え、作成時期の分布と終了後30日の継続率という二つのクエリで検証できる。第28章で固定の判断方法にする。
取得の論理を公開するデータプロジェクトがある。収入計算、分配のパラメータ、報酬を含むかを公開リポジトリに書き、誰でも修正を提案できる。
数字ではなく、定義について議論できるようになる。同じ収入に意見が違えば、何行目の定義かを直接指せる。
データ源の最初の選別条件は、定義がどこにあるかだ。見つからなければ、権威がありそうでも引用しない。
変数を一つ変える
すべての数字が系統的に低くなり、割合も時間で変わる。他チェーンへ移行中なら、偽の下降曲線になる。
正当な方法は二つ。タイトルにも「メインネットのみ」と書いて範囲を限定するか、五つ全部を覆う。
不当なのは、主ネットだけで全体の結論を述べる第三の方法だ。 最もよくある系統的な誤りで、故意ではないことが多い。
収入が正から負へ変わるかもしれない。さらに、形がトークン価格と強く相関する。
値上がりでは同じ量の報酬がより多くのドルとなり、費用が増え、純収入が下がる。値下がりは逆だ。主にコイン価格が動かす純収入曲線になる。
誤りではなく定義固有の性質だ。当期価格換算とトークン数量の二曲線を示そう。副作用を明らかにするほうが、ないふりをするより正直だ。
開始アドレスで数えると、その半分は少数の経由アドレスへ計上される。大幅に過小評価し、程度はシェア次第だ。
一層下へ取る方法がある。内部呼び出しを解析して本当の開始者を探す。対応データのある場所では可能だが、クエリは大きく複雑になる。
できなければ、無視せず不確実性リストへ書く。 繰り返す要点だ。抜けを減らすこと以上に、何が抜けたかを知ることが重要だ。
チェーンではできないと分かる。少なくとも、確実にはできない。
近づく方法は、資金関係のあるアドレスをまとめ、行動で分類し、外部の身元情報で関連付けることなどだ。どれも新しい誤差を入れ、プライバシーと直接衝突する行為となる。第5章で公開台帳の代償を学んだ。
実務では答えられる問いへ変える。「何人か」ではなく、「過去30日に活動し、同じ一時間で大量作成されていないアドレスはいくつか」と問う。
答えられない問いを答えられるものへ変え、変えたことも明示するのは、研究で最も有用な習慣の一つだ。
持ち帰る問い
実行できる答え方を得た。分解されていない利用者数は受け入れない。
アクティブ、独立、実際に支払う、終了30日後も残るアドレスの四層へ分け、合わせて初めて誰なのか答えられる。第28章で固定手順にする。
利点は具体的なアドレスまで検証できることだ。どこから出て、どのコントラクトを通り、最後にどこへ残るか。
特に注意しよう。プロトコル自身の発行トークンなら、払うのは全保有者だ。 実収入と同じように見えるため、コントラクトを読むことでしか分けられない。
総費用、プロトコルの取り分、報酬後の純額という三層に分ける。
引用前にどの層かを明示する。この一習慣で、業界の大半の資料より追問に耐える分析になる。
標準的な取得法がある。報酬終了日を探し、期間内の新規アドレスの30、60、90日後の継続率を数える。
三点を線にすれば、意見は要らず、答えが出る。これが一次事実の意味だ。
章末チェック
統一定義がなく、三つの問いに答えるからだ。
- 総費用は、使用規模。
- 取り分は、事業モデルが取れる額。
- 報酬後の純額は、稼ぐか成長を買うか。
一件ずつ照合できる。問題はデータではなく、定義が宣言されないことだ。
正しい引用は、数字 + 定義 + 取得時刻 + 出典だ。一つ欠ければ使えない。
違う。他人がここに置く額で、利用者の資産であり、収入ではない。
三つの誤読もある。値上がりが事業成長に見える、組み合わせ可能な場所で重複する、大半はいつでも引き出せる。
規模と粘着性の粗い指標として使い、収入は別に計算する。第26章の「TVLが高くても、プロトコル自身は稼いだか」はこのための題名だ。
報酬の扱いだ。
目立たないからだ。ほかの五問は技術的でクエリに避けられないが、報酬は別の場所の支出で、無視しても美しい数字が出る。
結果は系統的だ。大量報酬のプロトコルも、引かなければ高成長・高収益、引けば純流出かもしれない。二つの姿は正反対の判断になる。
次は第三問の総額か純額かで、数倍に膨らませる。
大きさが、異なる原因の性質に対応するからだ。
数ポイントなら、時間境界、為替、小さなイベントの抜けなど、通常は技術ノイズだ。
数十ポイントなら、ほぼ定義の差だ。ほかのチェーン、純額ではなく総額、特定の取引の除外など。違いを探すと構造的特徴を理解でき、数字自体より価値がある。
正しい終点は「一致」ではなく、「不一致の理由を説明できる」だ。
標準解答はない。次を確認しよう。
- 時間範囲付きで、反証できる一文の問いか?
- 六問を頭で考えただけでなく、書いたか?
- アドレスは照合したか、記事からコピーしたか?
- 相互検証を行い、差を説明したか?
- 不確実性はいくつか? 三つ未満なら、まだ考え切れていないことが多い。
- 来月も同じクエリを実行できるか?
多くは第二段階が最長で、進みを遅くしていると感じる。逆だ。定義なしに取得すると、後の各段階をやり直し、そのときには当初の理由も忘れている。
要点
オンチェーンデータは、この業界で自分で検証できる数少ない一次資料の一つだ。