Ethereum トークン (ERC20 Token Standard) の残高を取得する

8月頃にプレセールで買ったとあるトークンが最近発行されて、Etherscan や My Ether Wallet でトークンが発行されたことを確認したのだけど、自分用の Wallet App を作ってみたくなったので、プログラムからトークンの残高を取得する方法を調べてみた。

web3 という Ethereum JavaScript API の module を使う。version は 1.0.0-beta.23。

const Web3 = require('web3');
const web3 = new Web3();
const WALLET_ADDRESS = 'XXX';
const CONTRACT_ADDRESS = 'XXX';

web3.setProvider(new web3.providers.HttpProvider('https://api.myetherapi.com/eth'));
web3.eth.call({
  data: `0x70a08231000000000000000000000000${WALLET_ADDRESS}`,
  to: CONTRACT_ADDRESS
}, "pending").then((res) => {
  console.log(parseInt(res, 16));
})

data の部分は、コントラクトのメソッドを SHA3 256 でエンコードした値(web3.utils.sha3('balanceOf(address)').substring(0,10))とトークンを保管しているアドレスを合わせて、全体が 32 byte になるように結合したもの。

参考