なんだか batchOverflow バグで ERC20 トークンの脆弱性がやばい!って騒ぎになっていたので、この問題を報告してた Medium の記事を読んでみて、そこに書かれているコードも読んでみました。
結論からいうと、今のところ ERC20 標準そのものの問題ではなくて、一部の ERC20 トークンを実現しているスマートコントラクトの実装に欠陥があった、という認識です。
(なので ERC20 やばいんだ!と盲目的に騒ぐのはキケンだと思います)
まとめ
- すべての ERC20 トークンで起きる問題ではない(重要)。
- ERC20 標準そのものに欠陥があるわけではない。
- ということで、ERC20 というより、個別のスマートコントラクトの実装の問題、といったほうが適切(だと思う)。
- 具体的には、いくつかの ERC20 トークン(のスマートコントラクト)で実装されている batchTransfer メソッドに脆弱性がある。
- 非常に単純な整数のオーバーフローが原因。
- Medium の記事でも指摘されているけど、 問題のあるトークンが Exchange で取引可能で、BTC とか ETH の価格操作に利用されてしまう可能性があるのが真の問題。
- たぶん、SafeMath を使えば、普通に assert されて起きないはず。
以下、この問題の報告者の Medium に掲載されていたコードを読みながらコメントをつけてみました。
batchOverflow with comments in Japanese
他の箇所ではちゃんと SafeMath つかっているっぽいのに、なんで amount の計算だけ生で積算してるんだろう??
良い子のみんなは素直に SafeMath つかおう!
それにしてもブロックチェーンやらスマートコントラクトの社会実験しちゃっている感はやっぱり面白いなあ。