この記事のリード画像は、「ホワイトボード上のブロックチェーン トランザクション ハッシュ」というプロンプトを介して HackerNoon の によって生成されました。 AI 画像ジェネレーター この記事では、ブロックチェーンから有用なデータを超高速でクエリできる、誰も知らない秘密のオープンソース ツールについて説明します。 ブロックチェーンから有用なデータを取得するために実行できるサンプル クエリを示し、非常に高速な分析を可能にするツールのアーキテクチャについて説明します。 その前に、そもそもなぜ からのトランザクションを分析する必要があるのかについて話しましょう。 ブロックチェーン 各ビットコイントランザクションには、 送信者アドレス 受信者のアドレス 送金額 だけでなく、 送り主の残高 コインが送信者のウォレットの中でどのくらいの期間眠っていたのか 受取人の残高 上記から、次の情報を推定して取得できます。 送信者は通常、ビットコインを送信するまでどのくらいの期間保管しますか ブロックチェーン上のすべてのウォレットの平均残高はいくらですか 平均トランザクションサイズ 100 種類以上のその他の分析。 ご覧のとおり、ビットコイン市場に関して入手できるデータは、従来の市場に比べてはるかに包括的です。そして最も重要なことは、一般の人でもアクセスできることです。対照的に、レガシー市場ではこのようなデータにアクセスできるのはヘッジファンドと銀行だけです。 したがって、ビットコインブロックチェーン上のトランザクションを分析することで、ビットコイン市場をより深く理解し、このデータに基づいてより適切な投資決定を下すことができます。 ブロックチェーン分析を取引や投資に応用する以外にも、ブロックチェーン分析を使用する方法は他にも複数あります。 ウォレットアドレスの匿名化 違法行為の特定 コンプライアンス では、このツールはどのように機能するのでしょうか? BlockSci のアーキテクチャ 既存のブロックチェーン分析ツールの 3 つの問題点に対処することを目指しています。 BlockSci は、 業績不振、 限られた機能 そして扱いにくいプログラミングインターフェース。 パフォーマンスの低下は、BlockSci が最もよく解決する問題点です。たとえば、ビットコイン取引を分析する強引なアプローチも機能します。コンピューター/サーバー上でビットコイン ノードを実行し、自分のノードを直接クエリできます。しかし、このアプローチは非常に時間がかかるため、10 億ビットコインのトランザクションをすべて処理するには何年もかかる可能性があります。 他の既存のツールも、特に汎用グラフ データベースを使用する場合にパフォーマンスが低下するという問題があり、シーケンシャル クエリでは数百倍遅くなり、グラフ トラバーサル クエリを含むすべてのクエリでは大幅に遅くなります。 BlockSci の設計は主に、ブロックチェーンでは過去のブロックは変更できず、ブロックチェーン上に表示されるすべての新しいデータは追加専用であるという事実に基づいています。 これは、トランザクション データベースの ACID プロパティが不要であることを意味し、インメモリ分析データベースが自然な選択になります。ディスク ストレージの代わりにメモリを使用すると、まさに必要なデータ処理が大幅に高速化されます。 実際、BlockSci はブロックチェーン全体をメモリにロードして計算を実行し、分散処理アプローチを回避します。これは、ブロックチェーン データがグラフ構造になっているため、効果的に分割するのが難しいという事実によって動機付けられています。 その設計者の推測は、ブロックチェーン分析に従来の分散トランザクション データベースを使用すると、最適化されたシングル スレッド実装を上回る並列処理レベルがないという意味で、無限のコスト (シングル スレッドを上回る構成) がかかるというものでした。 また、ハッシュ ポインタを実際のポインタに変換したり、アドレス データの重複を排除したりするなど、いくつかの技術を適用して、速度をさらに向上させ、データ サイズを削減します。 ノードからデータをインポートするために、BlockSci は、組み込みの JSON-RPC インターフェイスからではなく、ディスク上の生データを直接読み取る独自の高性能インポーターを使用します。それでも、ノードからすべてのデータをインポートしてインデックスを作成するには、通常 24 時間かかります。ただし、データが解析されると、実際の分析は高速になります。 ブロックチェーンがディスクに保存される方法を分析するのは簡単ではありません。彼らは、トランザクションをチェックしたり、大きなネットワーク内のデータを検索したりするなど、他のことを行うように作られています。また、ブロックをディスク上に基本フォーマットで保持することで、メモリ内のスペースを節約するようにも作られています。ただし、メモリに収まるようにデータを変更する必要があるため、BlockSci にはこのステップを処理できるパーサーが用意されています。このパーサーが適切に最適化されていることを確認しました。 このツールがこのような高速性を実現するもう 1 つの方法は、「ブルーム フィルターの最適化」です。ブルーム フィルターは、セット内のメンバーシップをテストできる確率的データ構造です。 のコンテキストでは、存在しないアドレスに対するデータベース クエリの数を最小限に抑えながら、認識されたすべてのアドレスを保存し、既存のアドレスの検索の正確性を保証します。これは、入力の約 88% が最後の 4000 ブロックで作成された出力に使用され、ビットコイン アドレスの 8.6% のみが複数回使用されるという事実に基づいて達成されます。 ブロックチェーン BlockSci が高い分析速度を達成できるようにする最後の最も重要な最適化は、高い分析速度を実現し、メモリにあまり負担をかけないデータ レイアウト構造です。 BlockSci のデータ レイアウトは、利用可能なデータを 3 つのカテゴリに分割し、ハイブリッド スキームで組み合わせます。コア トランザクション グラフはほとんどの分析に必要であり、常にメモリ内にロードされ、行ベースの形式で保存されます。分析のサブセットのみに必要なスクリプトと追加データは、ハイブリッド (部分的に列ベース、部分的に行ベース) 形式で保存され、オンデマンドでロードされます。ハッシュによって個々のトランザクションまたはアドレスを検索するためのインデックスは、ディスク上の別のデータベースに保存されます。 さらに、可能な場合はデータ フィールドに固定サイズのエンコーディングを使用し、参照の局所性を考慮してメモリ レイアウトを最適化し、効率的な走査のために出力を入力にリンクし、メモリ マッピングと並列処理を共有します。 最後に、手数料が 0.1 ビットコインを超えるすべてのトランザクションを 1 分以内に検索するクエリを次に示します。 chain.blocks.txes.where(lambda tx: tx.fee > 10**7).to_list() まとめ BlockSci は、ブロックチェーンから有用なデータを超高速でクエリできるブロックチェーン分析ツールです。ビットコイン取引を分析することで、市場をより深く理解し、より適切な投資決定を下すことができます。 BlockSci のアーキテクチャは、ブロックチェーン データがグラフ構造で効果的に分割するのが難しいという事実に基づいているため、ブロックチェーン全体をメモリにロードして計算を実行します。ハッシュ ポインタから実際のポインタへの変換、アドレス データの重複排除、ブルーム フィルタ最適化の使用など、いくつかの手法を適用して速度を向上させます。データ レイアウト構造により、分析速度が向上し、メモリにあまり負担をかけません。