プログラミング

JavascriptでEthereum(イーサリアム)のアドレス残高を取得する方法

今回はブロックチェーン上に存在するイーサの残高を取得する方法についてご紹介します。

方法

多くの場合、仮想通貨を買ったら自分のアドレスに送金してウォレットで管理します。Ethreumも他の仮想通貨と同様に残高はウォレットアプリから確認することができます。いたって普通のことです。

しかし、ブロックチェーンは本来誰の管理下にも置かれず、私たちは自分の資産として仮想通貨を保有しているはずです。

それなのにウォレットのアプリが無いと自分の持っている通貨の残高を確認できないのでしょうか?実はそんなことはありません。私たちもやろうと思えば残高確認くらい自分の力だけでできるのです。

そこで今回は、アドレスという情報のみから「Ethereumの残高を確認する方法」それを応用した「プログラミングへの組み込み方法」について調べてみました。

大きく分けて方法は二つ

  1. 既存のサービスのAPIを使用する
  2. ブロックチェーンを直接参照する

Ethereumの残高を確認する方法は大きく分けてこの二つがあります。既存のサービスのAPIを使用する方法はすでにWeb上に存在するEthereumのブロックチェーンにアクセスするサービスを使って残高を取得する方法です。二つ目のブロックチェーンを直接参照する方法は少し難しいのですが、Ethereumのノードに接続してブロックチェーンの情報を直接参照する方法のことを言います。

① 既存のサービスのAPIを使用する

まずは一番簡単な既存のサービスを使う方法を紹介します。

EtherScan

https://etherscan.io

こちらのサイトはEthereumのブロックチェーンに関わる情報をブラウザ上から取得できるサービスです。画面右上の検察バーに自分のアドレスを入力して検索をかけると、イーサ残高やトランザクション履歴を簡単に確認できます。また、AirDropの際などに必要になるERC20トークンのコントラクトアドレスもこのサイトで調べることができます。

Air DropでもらったERC20トークンをHB Walletアプリに追加する方法AirDrop タダでもらえる仮想通貨 こんにちは!不労所得を目指す管理人です。 皆さんはAirDropはご存知でしょうか??...

blockcypher

https://www.blockcypher.com/dev/ethereum/#address-balance-endpoint

こちらのサイトはEthereumのブロックチェーンに関わる情報をAPI経由で取得できるサービスです。

Request

curl -s https://api.blockcypher.com/v1/eth/main/addrs/738d145faabb1e00cf5a017588a9c0f998318012/balance

addrs/の後に続く文字列がEthereumのアドレスになります。このようなhttpsリクエストを送ると、

Response

{
  "address": "738d145faabb1e00cf5a017588a9c0f998318012",
  "total_received": 9762206505909057760,
  "total_sent": 6916970312523512365,
  "balance": 2845236193385545395,
  "unconfirmed_balance": 0,
  "final_balance": 2845236193385545395,
  "n_tx": 702,
  "unconfirmed_n_tx": 0,
  "final_n_tx": 702
}

このようなレスポンスがJSONで帰ってきます。このbalance項目がEthereumの残高を表しているのですが、ここで表示されているのはweiと呼ばれるEtherの最小単位なので残高を目で確認するためにはEtherの単位に変換する処理が必要になります。それについてはプログラミング編で触れたいと思います。

プログラミング編

二つ目の方法にいく前にjavascriptからEthereumを扱う方法も紹介します。jsからethereumを操作するためにはweb3.jsというライブラリを使います。

yarn add web3

web3.jsをインストールしたら

// ライブラリ読み込み
const Web3 = require('web3');

// オブジェクト生成
const web3 = new Web3();

// ノード接続
web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'));

// 残高取得
const balance = web3.eth.getBalance([アドレス])

// 単位変換
web3.fromWei(balance, 'ether');
こんな感じで残高を取得できます。

https://qiita.com/oggata/items/53f533503481edde6da4

 
https://tomokazu-kozuma.com/how-to-access-ethereums-block-chain-using-web3js/
 

② ブロックチェーンを直接参照する

続いてプロックチェーンを直接参照する方法について紹介します。 Ethereumを含むブロックチェーンは、複数のノード(マイニングをするコンピューターのこと)の集合によって構成されています。ブロックチェーンは全てのノードに同じ情報が保存されることで、みんなで権力を分散して運営していくシステムです。よって、ブロックチェーンという存在を直接参照するイメージではなく、ブロックチェーンを構成するノードの一つに接続してノードが全員で共有している情報を見せてもらう。というイメージの方がわかりやすいかもしれません。

Infura (サービスを使う)

https://infura.io/ こちらのサイトはEthereumのメインネットに接続できるノードを提供しています。まずはすでに誰かが作ってくれたノードにアクセスして情報を見せてもらう方法を紹介します。https://mainnet.infura.io/[your-api-key] これをProviderにセットすることでInfuraのノードに接続できます。

geth (自力で作る)

自分でノードを作ってしまう方法も存在します。

brew tap ethereum/ethereum
brew install ethereum

まずはインストールをします。

geth console

コマンドを使えばノードが起動してブロックの同期を始めます。(死ぬほど容量食います) 同時にコンソールも開くので先ほどのweb3のAPIもここから使うことができます。

ABOUT ME
gitackt
お金をかけないサバイバル術の記事を書きます。温泉と餃子が好きです。プログラミングが得意です。趣味はメルカリです。