# SC07:2023 - ロジックエラー (Logic Errors)

## 説明:

ロジックエラーは、ビジネスロジック脆弱性とも呼ばれ、スマートコントラクトの捉えにくい欠陥です。これはコントラクトのコードが意図した動作と一致しない場合に発生します。これらのエラーは見つけにくく、コントラクトのロジック内に隠れて発見されるのを待っています。

## 事例 :

```
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract LendingPlatform {
    mapping(address => uint256) public userBalances;
    uint256 public totalLendingPool;

    function deposit() public payable {
        userBalances[msg.sender] += msg.value;
        totalLendingPool += msg.value;
    }

    function withdraw(uint256 amount) public {
        require(userBalances[msg.sender] >= amount, "Insufficient balance");
        
        // Faulty calculation: Incorrectly reducing the user's balance without updating the total lending pool
        userBalances[msg.sender] -= amount;
        
        // This should update the total lending pool, but it's omitted here.
        
        payable(msg.sender).transfer(amount);
    }
}
```

## 影響:

* ロジックエラーはスマートコントラクトが予期しない動作をしたり、完全に使用できなくなる可能性さえあります。これらのエラーは、資金の損失、トークンの不正な配布、その他の好ましくない結果をもたらす可能性があり、ユーザーや利害関係者に重大な金銭的影響や運用上の影響を及ぼす可能性があります。

## 対策:

* 考えられるすべてのビジネスロジックを網羅する包括的なテストケースを記述して、常にコードを検証します。
* 徹底的なコードレビューと監査を実施し、潜在的なロジックエラーを特定して修正します。
* 各機能やモジュールの意図した動作を文書化し、実際の実装と比較して整合性を確認します。

## ロジックエラーの被害を受けたスマートコントラクトの事例:

1. [Level Finance ハック](https://bscscan.com/address/0x9f00fbd6c095d2c542687ed5afb68d9c3fb2f464#code#F11#L165) : 包括的な [ハック分析](https://blog.solidityscan.com/level-finance-hack-analysis-16fda3996ecb)
2. [BNO ハック](https://bscscan.com/address/0xdca503449899d5649d32175a255a8835a03e4006#code) : 包括的な [ハック分析](https://blog.solidityscan.com/bno-hack-analysis-15436d73e44e)
