Solidity docs warn about using low-level calls directly due to security reasons;
You should avoid using .call()
whenever possible when executing another contract function as it bypasses type checking, function existence check, and argument packing.
Due to the fact that the EVM considers a call to a non-existing contract to always succeed, Solidity includes an extra check using the extcodesize
opcode when performing external calls. This ensures that the contract that is about to be called either actually exists (it contains code) or an exception is raised. The low-level calls which operate on addresses rather than contract instances (i.e. .call()
, .delegatecall()
, .staticcall()
, .send()
and .transfer()
) do not include this check, which makes them cheaper in terms of gas but also less safe.
Manual Analysis
Use Openzeppelin Address library to perform the external call.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.