こんにちは。ALIS CEOの安(@YasuMasahiro)です。
ALISブロックチェーンブログ、今回は指定したEOAのERC20トークンのトランザクション履歴を抽出する方法を共有する記事(後編)です。web3summitなどの参加のためドタバタしており前編から間が空いてしまいましたが、一段落いたしましたので後編を公開いたします。
※本記事はCEOの安が社内のブロックチェーンエンジニア育成プログラムに参加し、ブロックチェーン技術の調査や習熟、実装をする過程でアウトプットしたものになります。恥ずかしながら本来エンジニアリングには精通しておらず、盛大な罠や勘違いが記事内に埋め込まれている可能性があるためご容赦・ご指摘いただけますと幸甚です。
前編を公開した直後に、hideyoshi moriyaさんより「ERC20 のトークン転送時に Transfer というイベントが index つきで記録されるので、それを web3.eth.filter でみれば指定の EOA のトークントランザクション履歴を確認できると思いました。」というご指摘をいただきました。お陰様で、もともとはパワープレイでゴリ押しした実装になっておりましたが、随分とすっきりした実装ができました。この場を借りてお礼を申し上げます!改めて、コミュニティのエンジニアの方々の重要さを認識いたしました。
もともとはLibraryを公開する前提でコードを作成していましたが、web3.eht.filterを使うことでわざわざLibrary化するまでもなく簡単にトランザクション履歴を抽出できることが判明したため、Library公開は不要の前提で話を進めます。
早速実装の内容を見てゆきましょう。
内容の詳細に関してはhideyoshi moriyaさんのscrapboxも非常に参考になります。
* 多くを参考にする形で実装させていただきました。moriyaさんありがとうございます!
比較的シンプルなコードになりましたので、あえて解説するまでもないとは思いますが、
・ENTER URL HEREにproviderのURIを指定
・ENTER EOA HEREに履歴を抽出したいEOAを指定
すればコードを動かすことができます。
getTransferHistory
の関数にaddress(これはALISトークンのコントラクトアドレス), fromBLock, eoaの3つのパラメータを渡しているのですが、fromBlockは今回全てのトランザクションを抽出したいので1を設定しています(9行目)。
また、実際に履歴データを抽出する際に利用しているweb3.eth.filterのAPIドキュメントはこちらをご参照ください。
2点だけ以下注意事項を。
・web3.jsのv0.2x.x系の書き方であるため、v1.x系では書き方が異なります
(v1.x系での書き方についてもmoriyaさんがscrapboxで言及されておりますのでご参考まで)
・babelを用いている点にご注意ください
以上が後編になります。web3のapiを利用いてここまでシンプルに実装できるとは思っておらず、非常にありがたいご指摘をいただけて良かったです。
我々も同じ様な形で、今後の開発者の方々の一助となるべく少しずつ貢献できればと思います。以上、ご査収いただけると幸いです。
・ALIS CEO 安(@YasuMasahiro)
・この記事は、運営による記事のためいいねによるトークン配布はありません
・この記事への投げ銭はBurnされます
・ALISではエンジニア・R&Dメンバー絶賛募集中です 😉