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 になるように結合したもの。