仮想通貨 IXT(iXLedger)のERC20トークンのコードを解析
今回はiXledgerのERC20トークンのコードを見てみます。
特に技術者でなければ興味ないと思うので、興味ない人は「いいね」だけお願いします🙏
まずERC20について。
いわゆるイーサリアムプラットフォーム上で使えるトークンを定義する規格です。
こちらに本文があります。
Ethereumとしてソースコードとか発行用のプログラムを用意してくれてるわけではなく上記の規格に沿って各々がsolidityなどでコーディングします。
サンプルコードは上のページから辿っていくと用意されてます。
規格の中身としては最低限以下のメソッドとイベントというものをコーディングすれば乗っ取っていると言えます。(もちろんインプット、アウトプットなども合わせる)
Methods
- name
- symbol
- decimals
- totalSupply
- balanceOf
- transfer
- transferFrom
- approve
- allowance
Events
- Transfer
- Approval
実際のコードを見てみる
で、IXTの実際のコードはこちらで見れます。
https://etherscan.io/address/0xfca47962d45adfdfd1ab2d972315db4ce7ccf094#code
気になったら見てみてください。
コントラクトの関連図
コードレベルだと全体が把握しにくいのでコントラクトレベルでまとめたIXTコントラクトの関連図。
矢印は継承を表します。
最終的にはCrowdsaleTokenというコントラクトがあり、これにコントラクトアドレスが割り当てられてIXTのコントラクトとなっています。
他のトークンとかを見るとZRXやFirstBloodなら以下のような感じ。明らかにIXTのコードは構造が複雑ですね。最後のCrowdsaleTokenコントラクトはIXTTokenとかにして欲しかったけど、まぁ問題はないです。
メソッド単位で見てみる
ということで何がどうなってるんだろうとまとめたのがこちら。小さくてすいません。
必須以外に色々なメソッドが用意されてました。
大別すると5つのカテゴリからなります。
- ERC20トークンとして必須のメソッド
- 追加情報や管理用のメソッド
- 鋳造(マイニングみたいなもの)に関するメソッド
- ICO後のリリース関連のメソッド
- コードにバグがあった場合などにコントラクトを別に移すためのメソッド
なるほど。
良くできてるんですね。
おそらくこれを書いたのはiXledgerチームではなくICOの実施を担当したTokenMarket側の開発者。IXTに限らずICOを実施するトークンに汎用的に対応するために上記の構造になっています。
これで何がわかったって言うとICOするときにこうやって書くのかーって言うマニアックな内容でした。
コード内を見るとFirstBloodやGolemなどのコードからもインスパイアを受けているみたいです。
あとIXTのコントラクトコードはSafeMathを使っているし、以下のBatchOverFlowで問題となったBatchTransfer関数も実装されていないこともわかりました。
※ZRXはSafeMathコントラクトはないけれど同様のことを内部でやってます。
以上です。