Cross-function Race Conditions
Introduction to Cross-function Race Conditions
How Cross-function Race Conditions Occur
Example Scenario: Voting Contract
solidityCopy codepragma solidity ^0.8.0;
contract Voting {
mapping(address => bool) hasVoted;
mapping(uint => uint) public votes;
address public admin;
bool public votingOpen = false;
constructor() {
admin = msg.sender;
}
function openVoting() public {
require(msg.sender == admin, "Only admin can open voting.");
votingOpen = true;
}
function vote(uint candidate) public {
require(!hasVoted[msg.sender], "Already voted.");
require(votingOpen, "Voting is not open.");
votes[candidate]++;
hasVoted[msg.sender] = true;
}
function closeVoting() public {
require(msg.sender == admin, "Only admin can close voting.");
votingOpen = false;
}
}Prevention Strategies for Cross-function Race Conditions
Implementing Locks and State Checks
Using Transaction Ordering and Timestamps
Comprehensive Testing and Audits
Conclusion
Last updated