Missing event emission in token distribution functions leads to lack of transparency and monitoring
Token distribution functions perform critical allocation movements (25% shareholder, 5% airdrop, 70% treasury) without emitting events, blocking off-chain monitoring and analytics.
Description
The token distribution functions distributeShareHolderTokens, airdrop, and transferFromTreasury do not emit events despite performing critical token allocation operations. These functions handle significant token movements (25% shareholder allocation, 5% airdrop allocation, and 70% treasury transfers) but provide no on-chain logging for transparency or off-chain monitoring.
function distributeShareHolderTokens(address to, uint256 amount) public onlyOwner {if (amount > _unallocatedShareHolderTokens) {revert InsufficientShareHolderTokens();}_unallocatedShareHolderTokens -= amount;_transfer(address(this), to, amount);// Missing event emission}function airdrop(address to, uint256 amount) public onlyOwner {if (amount > _unallocatedAirdropTokens) {revert InsufficientAirdropTokens();}_unallocatedAirdropTokens -= amount;_transfer(address(this), to, amount);// Missing event emission}function transferFromTreasury(address to, uint256 amount) public onlyOwner {require(to != address(0), "Cannot transfer to zero address");_transfer(treasury, to, amount);// Missing event emission}
This lack of event emission prevents:
- Token holders from monitoring allocation distributions
- Off-chain applications from tracking token movements
- Analytics platforms from providing distribution insights
- Community governance from maintaining transparency
- Audit trails for token allocation decisions
Impact
Reduced transparency and monitoring capability around the largest token allocations, weakening community oversight and integrations.
Recommendation
Add appropriate event emissions for all token distribution functions:
event ShareHolderTokensDistributed(address indexed to, uint256 amount, uint256 remainingAllocation);event AirdropExecuted(address indexed to, uint256 amount, uint256 remainingAllocation);event TreasuryTransfer(address indexed to, uint256 amount);
Emit each event right after the token transfer in the corresponding function.
Resolution
Ipal Network: Acknowledged. This finding relates to a contract that was decided to be outside the scope of the audit during the audit process.
Zealynx: Acknowledged. The token distribution functions still lack event emissions, preventing proper transparency and monitoring of token allocation activities.

