1

私は堅牢性とブロックチェーン テクノロジに取り組んでいる初心者で、コードを改善するための優れた方法をいくつか読んでいました。

そして、よく理解していないコードについて質問があります。

ソース: https://github.com/ConsenSys/smart-contract-best-practices/blob/master/docs/known_attacks.md

// INSECURE
mapping (address => uint) private userBalances;

function withdrawBalance() public {
    uint amountToWithdraw = userBalances[msg.sender];
    require(msg.sender.call.value(amountToWithdraw)()); // At this point, the caller's code is executed, and can call withdrawBalance again
    userBalances[msg.sender] = 0;
}

上記のコードでは、悪意のあるエージェントが必要な回数だけステップ 2 を呼び出すことができるため、安全ではないと言われています。これに関する私の質問は、悪意のあるエージェントがどのようにしてこれを誤用し、そのコード行を複数回呼び出すことができるかということです。ここで明らかに何かが欠けています。

4

1 に答える 1