T3 · Onchain Data Engineer
チェーンに散らばるバイト列を、他者が意思決定に使える数字へ変える。
データエンジニアリングと分析の分野向けです。
このページの T3 は Track です。講座の章は「第 T17 章」のようにリンク付きで区別します。講座の T3 は、取引がコードからチェーンへ届くまでを扱います。
この Track に向いている人
取得スクリプトは書いたが、完全だとは言えない。 RPC を繰り返し呼び、表へ保存して動いても、最初から現在までブロックの欠落がないことを証明できません。
他者の数字と合わず、どちらが誤りか分からない。 日別取引量がデータサービスと 8 パーセント違い、定義の問題と思っても、自分の定義が三つの SQL と二つのスクリプトに散り、説明できません。
再編で一度失敗し、以後は補修を重ねている。 経験した状況しか防げないと分かっていても、正しい構造が分かりません。
クエリは書けても、基盤を作れない。 既存サービスでは複雑な検索ができても、RPC から独自のパイプラインを作ると、最初に何層へ分けるか判断できません。
境界は、誰でも再実行でき、結果がバイト単位で一致するパイプラインを提供することです。
前提
想定より長い前提になるのは、バイトを意味へ変えるにはコントラクト標準が必要だからです。第 T13 章は第 T9 章に依存し、第 T16・T17 章もそこへ戻ります。
- 第 T1 章
- 第 T3 章
- 第 T4 章
- 第 T7–T9 章
- 第 T13–T15 章
- 第 T16 章
- 第 T17 章
- 第 T25 章
| 先に読む章 | グラフ上の理由 |
|---|---|
| 第 T1 章 · Blockchain データとは何か | 意味の出発点。State は事実、Event は投影という区別が層を決める |
| 第 T3 章と第 T4 章 | 第 T25 章は第 T3 章に直接依存。RPC の制限、ページ分割、履歴の範囲が物理的上限 |
| 第 T7 章から第 T9 章 | ABI と標準なしでは、誰から誰へいくら送ったかを解読できない。非標準実装も実際のデータに現れる |
| 第 T13 章から第 T15 章 | 第 T16 章への必須経路。冪等性と制限はパイプラインにも現れる |
| 第 T16 章 · データベースとオンチェーンデータ | イベントを事実、ブロック高を版とするモデルの基礎 |
| 第 T17 章 · Indexer | 再編、再開、冪等性を正面から扱う |
| 第 T25 章 · Blockchain Data Infrastructure | 第 T3 章と第 T20 章に依存。三層、分割キー、manifest が本題 |
第 T20 章への依存は重要です。データエンジニアリングを業務の意味から切り離せません。 交換イベントを索引化するには、ルート、プール、見積りを知り、表の設計へ反映する必要があります。
学ぶ内容
- RPC
- Scanner
- Indexer
- ETL
- Postgres
- ClickHouse
- DuckDB
- Data Pipeline
八テーマを四群に分け、それぞれ具体的な失敗を解決します。
1.収集:RPC と Scanner — 欠落を把握する
いつでも、どの高さまで覆い、その間に穴があるかを答えられるようにします。
複数ノードの切替と照合、同じ高さの結果が異なる場合の判断、ページ分割と制限、履歴の範囲を学びます。特に、進捗はデータの後に記録します。先に checkpoint を書くと、一度の停止で永久に欠落します。
2.加工:Indexer と ETL — 再実行しても結果を保つ
元データ層はバイトを保持し、デコード層は ABI で構造を復元し、業務層は集計します。誤ってもデコードだけを再実行でき、最も高価な全履歴の再取得を防げます。
三つの規則は、分割キーをサーバーではなくブロック時刻から得る、区画を完全に存在または不在にする、再編時は高さ単位で完全に削除する、です。
3.保存:関係型、列型、組込み分析 — エンジンを選ぶ
三種類は択一ではなく、異なる役割を担います。
| 役割 | 得意な処理 | 保存するもの |
|---|---|---|
| 関係型データベース | トランザクション、制約、個別検索 | カーソル、checkpoint、強い整合性が必要な業務表、外部 API の読取モデル |
| 列型データベース | 大規模走査と集計 | デコード済みイベント、期間別集計用の広い表 |
| 組込み分析エンジン | 運用不要でローカルやオブジェクト保存の列型ファイルを読む | 探索、バックフィル検証、一回限りの定義比較 |
イベントを関係型へ入れると数億行で集計が遅くなり、checkpoint を列型へ入れると必要なトランザクションが得られません。
4.提供:Data Pipeline と API — 数字を信頼可能にする
成果は表ではなく、根拠を問い直せる数字です。どの表と条件で計算し、どの高さを覆い、いつ更新したかを、すべての指標で答えます。
API には、ページ分割、制限、キャッシュ、明確な鮮度フィールドも設けます。
卒業成果物
全量を再生可能な索引パイプラインと、外部検索 API。
卒業プロジェクトは全体のプロダクトで、索引は一層です。ここではその一層に絞り、全量と再生可能性を求めます。全量は過去のすべての不規則なデータ、再生可能性は手動修正へ頼れないことを意味します。
他者が動かせるか。 clone 後、一コマンドで依存サービス、一コマンドで指定高から索引を開始します。RPC の種類、アーカイブの要否、全量処理の時間、履歴ノードがない場合の開始高を README に書きます。
最初の数字を得られる例のクエリも付けます。
同じ区間を二回実行し、バイト単位で一致するか。 再生可能性の定義であり、譲れない基準です。
索引済みの区間の成果を消して再実行し、チェックサムで比較します。差は現在のサーバー時刻、順不同の走査、ランダムなバッチ境界など、非決定性を示します。
再編の実地訓練と記録があるか。 分岐を作るか再生し、対象データを完全に削除して、新しいデータを正しく補えると示します。
想定する深さと、超えた場合の対応も書きます。明確に防がない範囲として記録し、ないことにはしません。
各指標に定義文書と範囲があるか。 最低限、定義、元の表と条件、高さの範囲、最終更新を記します。
応答へ鮮度を付けます。いつの数字か分からないものは、数字がないより危険です。
独立した照合を行い、差を正直に示したか。 状態を直接読む、公開サービスを同じ定義で使うなど、別経路で一指標を再計算します。
差がゼロでなくても、一パーセントずつの由来を説明します。説明できる差は理解、できない差は bug です。
達成したかを判断するには
二つの書き込みの間に、いつでも停止し得るからです。
データを先に書くと、checkpoint は実態より遅れ、再開時に繰り返します。冪等な書き込みなら害はありません。
checkpoint を先に書くと、処理済みと記録されたのにデータがなく、二度と再処理されません。穴ができても、それを知らせるものがありません。
繰り返しても、飛ばさないという一つの規則です。
再生には決定性が必要です。保存時刻で分けると、今日と明日で異なるディレクトリに入り、成果の構造が一致しません。
過去三か月のバックフィルも今日の区画へ入り、期間で絞る検索で見つかりません。
時刻はブロックヘッダーから得て、サーバーからは得ません。
ログはコントラクトが出す投影で、事実自体ではありません。主な差は三つです。
直接送金、内部呼び出しによる残高変化、古い非標準実装など、イベントを出さない状態変化が見えません。
更新で同じ署名の意味が変わり、一つの ABI で全履歴を読むと誤ります。
失敗取引のログは残らなくても、Gas 消費と nonce 変化は実際に起きます。成功だけを数えると活動を過小評価します。
イベント流にはログを使い、残高や保有量は状態から独立して検証します。
ブロック時刻から同じタイムゾーンの日付を導き、物理区画を日別にし、内部は高さ、次にログ番号で並べます。
人の問いは期間単位なので日付で絞り、書き込み、重複排除、再処理は高さ単位なので内部を高さ順にします。走査の省略と、範囲の正確な確認を両立できます。
時間単位まで細分化すると小ファイルの管理負荷が利点を失わせます。manifest に行数、高さの範囲、チェックサム、デコーダーの版を記録します。
正解は一つではありません。三つを確認します。
- 通知なしで安全に定義を変えられますか。できなければ定義の版管理が必要です。
- 誤りを下流はいつ知りますか。問い合わせ待ちではなく、自動の整合性検査がありますか。
- 二週間休暇中に失敗したバックフィルを、他者が再実行できますか。コードより文書の問いです。
よくある誤解
元データは大きいので、先に集計する
RPC から直接集計すると、保存が一層減って見えます。しかし解析の誤りを見つけたら、元データがあれば数十分の再デコードで済み、なければ数日かけ全履歴を再取得し、サービスにも制約されます。
未デコードのバイトを残します。全量の再取得より安い保存費用は、将来の解読ミスに備える保険です。
再編はまれなので後で対応する
再編はチェーンの通常の動作です。起きるのは一度のエラーではなく、静かに誤るデータ区間で、残高や指標がずれても警報はありません。
初日から巻戻しを設計し、深さの仮定と超過時の対応を書きます。
定義の数パーセントの差は重要でない
8 パーセント違う数字は、誤った数字と区別できません。次は 80 パーセントかもしれず、定義がなければ追跡もできません。
各指標へ SQL や説明による実行可能な定義と、独立経路の照合結果を付けます。説明できる差は理解、できない差は bug です。
リアルタイム流があればバックフィル不要
流は遅延、バッチは完全性を扱います。流だけでは、受信側の停止や上流の切断で永久に欠けます。
両経路を残し、同じ結果を出すようにします。流の書き込みをバッチの再実行で上書きしても一致させます。第 T18 章の再生可能性に対応します。
次に進むには
- 自分のパイプラインとともに、第 T16 章、第 T17 章、第 T25 章を読み直します。
- 第 23 章 · オンチェーンデータで現実を観察するで業務の問いを学びます。定義の正しさは、最終的に業務の意味が決めます。
- Track T4 · DeFi Engineerで索引対象、Track T6 · AI × Crypto Engineerで Agent のデータ源、Track T2 · Solana / SVM Engineerで非 EVM の形を学べます。
- 非技術側は Track N1 · Crypto Research & Investmentです。自分でデータを取る基準は、あなたには容易でも、多くの調査者には最も難しい部分です。
- 完全なプロダクトへ接続するなら卒業プロジェクトへ進みます。