セキュリティ考慮事項
既知の問題と対策
1. 許可の競合状態(Approve Race Condition)
問題:
approve関数で許可量を変更する際、悪意のあるspenderが古い許可と新しい許可の両方を使用する可能性があります。
対策:
// 許可量を変更する前に0に設定
token.approve(spender, 0);
token.approve(spender, newAmount);
// または、increaseAllowance/decreaseAllowanceを使用
token.increaseAllowance(spender, additionalAmount);
token.decreaseAllowance(spender, subtractedAmount);
2. ゼロアドレスへの転送
問題: ゼロアドレスへの転送は実質的にトークンのバーンですが、意図しない操作の可能性があります。
対策:
このコントラクトでは、ERC20InvalidReceiverエラーによりゼロアドレスへの転送を禁止しています。
3. 整数オーバーフロー
問題: 残高や許可量の計算でオーバーフローが発生する可能性があります。
対策:
- Solidity 0.8.0以降の組み込みオーバーフロー保護
uncheckedブロックは安全性が証明された箇所でのみ使用