Omniscia Tokemak Network Audit
OnChainVoteL1 Manual Review Findings
OnChainVoteL1 Manual Review Findings
OCV-01M: Unsanitized State Transition
| Type | Severity | Location |
|---|---|---|
| Logical Fault | Minor | OnChainVoteL1.sol:L56-L60 |
Description:
The setEventSend function should only set the _eventSend value to true when the values of the destinations struct have been set.
Example:
contracts/vote/OnChainVoteL1.sol
56function setEventSend(bool _eventSendSet) external override onlyOwner {57 _eventSend = _eventSendSet;58
59 emit EventSendSet(_eventSendSet);60}61
62function encodeAndSendData(bytes32 _eventSig, UserVotePayload memory userVotePayload)63 private64 onEventSend65{66 require(address(destinations.fxStateSender) != address(0), "ADDRESS_NOT_SET");67 require(destinations.destinationOnL2 != address(0), "ADDRESS_NOT_SET");68
69 bytes memory data = abi.encode(_eventSig, abi.encode(userVotePayload));70
71 destinations.fxStateSender.sendMessageToChild(destinations.destinationOnL2, data);72}Recommendation:
We advise such sanitization to be imposed via corresponding require checks as otherwise almost all functions will become inexecutable.
Alleviation:
The function can now only be executed when the destinations.destinationOnL2 value has been set.