TechnologyJuly 20, 2022

Web3.jsでリアルタイムのEthereumトランザクションを入手

Web3.jsでリアルタイムのEthereumトランザクションを入手
  1. この記事は、新しいAstra DB Cryptoブログシリーズの2番目の記事です。このシリーズでは、Web3について知っておく必要があるすべてのことを網羅しています。NFTの概要と、DataStax Astra DBにNFTをロードする方法に関する段階的な説明をご覧になりたい場合には Part 1をご参照ください。

    今週のDataStax Cryptoシリーズでは、RPCノードの基本、RPCノードへの接続方法、およびリアルタイム・トランザクションの表示について説明します。イーサリアム では JSON-RPC (Remote Procedure Protocol) API を使用して、ノードと対話するアプリケーションの統一されたメソッドを確保しています。開発者は、RPC Nodeと対話するためにさまざまな言語を利用することができます (Go, C#, Java) 。この記事では、Web3.jsとは何か、そしてそれがイーサリアム(Ethereum)のブロックチェーンに関連してイーサリアム(Ethereum)の取引データを収集する際にどのように使用できるのかについて、簡単な背景も説明します。

    Web3.jsを熟知する

    Web3.jsは、HTTP、IPC、またはWebSocketを使用してローカルまたはリモートのEthereumノードにアクセスするためのライブラリのコレクションです。Ethereumブロックチェーン上でブロックチェーンアプリケーションを開発するには、コンテンツがブロックチェーンと相互作用することを確認し、それに応じてデプロイされるスマートコントラクトを開発するという、いくつかの異なる側面に注意する必要があります。Web3.jsは、Ethereumブロックチェーンと直接対話するクライアントを開発することで、前者の側面を達成することができます。Web3.jsが提供する様々な機能のうち、あるアカウントから別のアカウントへのEtherの送信やスマートコントラクトの作成と編集など、一般的にEthereumブロックチェーンと対話するプロセスを効率化するのに役立ちます。Web3 APIは、イーサリアムの取引データ、必要な取引ハッシュ、アカウントアドレス、スマートコントラクトを引き出すのに役立ちます。Web3.jsの機能は、Ethereumブロックチェーン内で多くのことを達成することができるため、Web3スペース内で広大で貴重なものです。

    さて、Web3.jsとは何かという背景がわかったところで、Web3.jsを使ってブロックチェーンからリアルタイムのEthereumトランザクションを引き出す方法について始めましょう。

    Ethereumノードの基礎知識

    要するにノード(暗号通貨やブロックチェーンの世界で)とは、イーサリアムのクライアントソフトウェアが動作するコンピュータのことです。ノードは互いに接続して情報をやり取りし、トランザクションを検証し、ブロックチェーンの現在の状態に関するデータを保存します。要するに、ノードはブロックチェーン・ネットワークの全体を構成するものであり、イーサリアム・ブロックチェーンのような技術にアクセスする唯一の方法である。リアルタイムのイーサリアム取引を引く場合、ブロックチェーンにデータを書き込み、その現在の状態を更新することになります。このプロセスがどのようなものかは、web3.jsとEthereumノードを活用することでより深く理解することができます。

    Ethereumブロックチェーンから情報を取得し始めるには、まずノードをセットアップする必要があります。以下の手順で始めてみてください。

    • Ethereumノードは、Ethereumソフトウェアを実行するサーバーで、既存のブロックを検証し、新しいブロックが採掘されたときに同期を維持します。
    • Ethereumノードは、既存のブロックを検証し、新しいブロックを採掘する際に同期するEthereumソフトウェアを実行するサーバーです。自分でEthereumノードを実行するか、Ankr ($) 、Infura ($$$) またはAlchemy ($) などの会社から“NaaS (node-as-a-service)”を購入することができます。
    • 独自のEthereumノードを実行するための最も人気のあるセットアップは、AWS上で動作するGethです。その他の一般的なセットアップに関してはこちらでご覧いただけます。
    • RPCノードにGraphQL、Websocket、HTTP APIコールを行い、ブロックチェーンデータを受信することができます。
    • クライアントのライブラリとしてWeb3.jsのようなライブラリーを使用すると、RPCノードへのAPIコールが非常に簡単に行えます。

    トランザクションデータの取得

    Nodeをセットアップしたら、Web3.jsを使ってEthereumデータを取得するのは簡単です。このWeb3.jsのライブラリ集を使えば、ノードに接続することができます。

    Step 1. 基本的なNode.jsプロジェクトのセットアップ

    mkdir w3 cd w3 yarn init touch app.js

    Step 2. Web3.jsをインストール

    yarn add web3

    Step 3. app.jsの先頭に以下を追加

    const Web3 = require('web3');

    const RPC_ENDPOINT = “REPLACE_ME”;

    const web3 = new Web3(RPC_ENDPOINT); # RPC_ENDPOINTをStep 1 でスピンアップしたエンドポイントに置き換える

    Step 4. web3.jsを使用して新しいブロックをListenする。新しいブロックがマイニングされた瞬間に、最後のブロック番号がログに記録される

    const subscription = web3.eth.subscribe(

     "newBlockHeaders",

     (err, result) => {

         const { number } = result;

         console.log(number)

    });

    Step 5. これで最新のブロック番号がわかるので、getBlock()で呼び出し最新のトランザクションデータを取得します。

    web3.eth.getBlock('123').then(blockResults => console.log(blockResults))

    getBlock() 呼び出しはブロック内で処理されたすべてのトランザクションを返します。block #123の場合、結果は以下の通りです。

    { difficulty: '18118731572', extraData: '0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32', gasLimit: 5000, gasUsed: 0, hash: '0x37cb73b97d28b4c6530c925d669e4b0e07f16e4ff41f45d10d44f4c166d650e5', logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', miner: '0xbb7B8287f3F0a933474a79eAe42CBCa977791171', mixHash: '0x2e4b92a11b1bac2a311f6a47006442bf1dc689e76c9c1fee90da56ff6f2df7a7', nonce: '0x18c851620e8d6cb6', number: 123, parentHash: '0x701bc7632e80976d1a2c408ffa58e4f11aa3ed3c5a030d1125930a9d944e4343', receiptsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', size: 542, stateRoot: '0x2d1e6407139174d74e9485ce0b9f80d31f6ec55f447708796d2582e3ffbdbb85', timestamp: 1438270492, totalDifficulty: '2181259381686', transactions: [], transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', uncles: [] }

    最終的な注意事項

    この記事では、数分以内にブロックの読み取りを開始するための直接的なアプローチを紹介します。ブロックチェーン上に構築されるあらゆるアプリケーションのバックボーンとなるものです。

    すべてのデータを入手した今、構築の選択肢は無限に広がっています。ブロックチェーンで開発するためのより基礎的な知識を得るには、このシリーズを続けてご覧ください。分散型金融の世界では、ブロックチェーンが提供する動きの速い瞬時のユーザーエクスペリエンスに対応するために、簡単に利用できるデータが必要です。そのために、DataStaxがAstra DB を提供するのはそのためです。 : 金融と暗号通貨のあらゆるニーズに対応する真のピアツーピア、24時間365日のデータベースです。リアルタイムの取引分析、Ethereumトランザクションのチャート作成、スマート・コントラクトの記録など、DataStaxはあらゆるニーズに対応します。すべてのユーザーでEthereumトランザクションのデータを完全に可視化し、Web3やEthereumトランザクションに適合した財務を実現しましょう。Astra DB の詳細と、Astra DBが暗号通貨の処理にどのように役立つかをご確認ください。

    上記の手順に関してのご質問やサポートが必要な場合には、お手数ですが hello@datastax.com までお問い合わせください。

    リソース

    1. イーサリアム(Ethereum)
    2. JSON-RPC (Remote Procedure Protocol)
    3. Ankr.com
    4. Infura.io
    5. Alchemy.com
    6. Gethのインストール | Ethereumに関して
    7. Ethernodes.org
    8. web3.js - Ethereum JavaScript API ドキュメンテーション

One-stop Data API for Production GenAI

Astra DB gives JavaScript developers a complete data API and out-of-the-box integrations that make it easier to build production RAG apps with high relevancy and low latency.