Crypto OS
キャリアトラック

T3 · Onchain Data Engineer

チェーンに散らばるバイト列を、他者が意思決定に使える数字へ変える。

データエンジニアリングと分析の分野向けです。

このページの T3 は Track です。講座の章は「第 T17 章」のようにリンク付きで区別します。講座の T3 は、取引がコードからチェーンへ届くまでを扱います。

この Track に向いている人

取得スクリプトは書いたが、完全だとは言えない。 RPC を繰り返し呼び、表へ保存して動いても、最初から現在までブロックの欠落がないことを証明できません。

他者の数字と合わず、どちらが誤りか分からない。 日別取引量がデータサービスと 8 パーセント違い、定義の問題と思っても、自分の定義が三つの SQL と二つのスクリプトに散り、説明できません。

再編で一度失敗し、以後は補修を重ねている。 経験した状況しか防げないと分かっていても、正しい構造が分かりません。

クエリは書けても、基盤を作れない。 既存サービスでは複雑な検索ができても、RPC から独自のパイプラインを作ると、最初に何層へ分けるか判断できません。

境界は、誰でも再実行でき、結果がバイト単位で一致するパイプラインを提供することです。

前提

想定より長い前提になるのは、バイトを意味へ変えるにはコントラクト標準が必要だからです。第 T13 章は第 T9 章に依存し、第 T16・T17 章もそこへ戻ります。

  1. 第 T1 章
  2. 第 T3 章
  3. 第 T4 章
  4. 第 T7–T9 章
  5. 第 T13–T15 章
  6. 第 T16 章
  7. 第 T17 章
  8. 第 T25 章
graph.ts の依存関係に基づきます。長く見えても、すべてデコードや冪等性に必要です
先に読む章グラフ上の理由
第 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 章への依存は重要です。データエンジニアリングを業務の意味から切り離せません。 交換イベントを索引化するには、ルート、プール、見積りを知り、表の設計へ反映する必要があります。

学ぶ内容

  1. RPC
  2. Scanner
  3. Indexer
  4. ETL
  5. Postgres
  6. ClickHouse
  7. DuckDB
  8. Data Pipeline

八テーマを四群に分け、それぞれ具体的な失敗を解決します。

1.収集:RPC と Scanner — 欠落を把握する

いつでも、どの高さまで覆い、その間に穴があるかを答えられるようにします。

複数ノードの切替と照合、同じ高さの結果が異なる場合の判断、ページ分割と制限、履歴の範囲を学びます。特に、進捗はデータの後に記録します。先に checkpoint を書くと、一度の停止で永久に欠落します。

2.加工:Indexer と ETL — 再実行しても結果を保つ

元データ層はバイトを保持し、デコード層は ABI で構造を復元し、業務層は集計します。誤ってもデコードだけを再実行でき、最も高価な全履歴の再取得を防げます。

三つの規則は、分割キーをサーバーではなくブロック時刻から得る、区画を完全に存在または不在にする、再編時は高さ単位で完全に削除する、です。

3.保存:関係型、列型、組込み分析 — エンジンを選ぶ

三種類は択一ではなく、異なる役割を担います。

役割得意な処理保存するもの
関係型データベーストランザクション、制約、個別検索カーソル、checkpoint、強い整合性が必要な業務表、外部 API の読取モデル
列型データベース大規模走査と集計デコード済みイベント、期間別集計用の広い表
組込み分析エンジン運用不要でローカルやオブジェクト保存の列型ファイルを読む探索、バックフィル検証、一回限りの定義比較

イベントを関係型へ入れると数億行で集計が遅くなり、checkpoint を列型へ入れると必要なトランザクションが得られません。

4.提供:Data Pipeline と API — 数字を信頼可能にする

成果は表ではなく、根拠を問い直せる数字です。どの表と条件で計算し、どの高さを覆い、いつ更新したかを、すべての指標で答えます。

API には、ページ分割、制限、キャッシュ、明確な鮮度フィールドも設けます。

卒業成果物

全量を再生可能な索引パイプラインと、外部検索 API。

卒業プロジェクトは全体のプロダクトで、索引は一層です。ここではその一層に絞り、全量と再生可能性を求めます。全量は過去のすべての不規則なデータ、再生可能性は手動修正へ頼れないことを意味します。

他者が動かせるか。 clone 後、一コマンドで依存サービス、一コマンドで指定高から索引を開始します。RPC の種類、アーカイブの要否、全量処理の時間、履歴ノードがない場合の開始高を README に書きます。

最初の数字を得られる例のクエリも付けます。

同じ区間を二回実行し、バイト単位で一致するか。 再生可能性の定義であり、譲れない基準です。

索引済みの区間の成果を消して再実行し、チェックサムで比較します。差は現在のサーバー時刻、順不同の走査、ランダムなバッチ境界など、非決定性を示します。

再編の実地訓練と記録があるか。 分岐を作るか再生し、対象データを完全に削除して、新しいデータを正しく補えると示します。

想定する深さと、超えた場合の対応も書きます。明確に防がない範囲として記録し、ないことにはしません。

各指標に定義文書と範囲があるか。 最低限、定義、元の表と条件、高さの範囲、最終更新を記します。

応答へ鮮度を付けます。いつの数字か分からないものは、数字がないより危険です。

独立した照合を行い、差を正直に示したか。 状態を直接読む、公開サービスを同じ定義で使うなど、別経路で一指標を再計算します。

差がゼロでなくても、一パーセントずつの由来を説明します。説明できる差は理解、できない差は bug です。

達成したかを判断するには

よくある誤解

元データは大きいので、先に集計する

RPC から直接集計すると、保存が一層減って見えます。しかし解析の誤りを見つけたら、元データがあれば数十分の再デコードで済み、なければ数日かけ全履歴を再取得し、サービスにも制約されます。

未デコードのバイトを残します。全量の再取得より安い保存費用は、将来の解読ミスに備える保険です。

再編はまれなので後で対応する

再編はチェーンの通常の動作です。起きるのは一度のエラーではなく、静かに誤るデータ区間で、残高や指標がずれても警報はありません。

初日から巻戻しを設計し、深さの仮定と超過時の対応を書きます。

定義の数パーセントの差は重要でない

8 パーセント違う数字は、誤った数字と区別できません。次は 80 パーセントかもしれず、定義がなければ追跡もできません。

各指標へ SQL や説明による実行可能な定義と、独立経路の照合結果を付けます。説明できる差は理解、できない差は bug です。

リアルタイム流があればバックフィル不要

流は遅延、バッチは完全性を扱います。流だけでは、受信側の停止や上流の切断で永久に欠けます。

両経路を残し、同じ結果を出すようにします。流の書き込みをバッチの再実行で上書きしても一致させます。第 T18 章の再生可能性に対応します。

次に進むには

このページの内容