F-2025-0006·centralization-risk

Missing state tracking in treasury transfers leads to unaccountable fund movements

Acknowledgednfterc721erc20
TL;DR

transferFromTreasury moves tokens from the treasury address (70% of supply) without state tracking, allocation limits, or events, leaving holders no transparency into how the largest allocation is used.

Severity
MEDIUM
Impact
MEDIUM
Likelihood
MEDIUM
Method
MManual review
CAT.
Complexity
LOW
Exploitability
MEDIUM
02Section · Description

Description

The transferFromTreasury function allows the owner to transfer tokens from the treasury address without any accounting or state tracking. Unlike the distributeShareHolderTokens and airdrop functions which properly track allocations through state variables, treasury transfers are completely unaccounted for.

The contract allocates 70% of the total supply (700,000 tokens) to the treasury address during deployment, but provides no mechanism to track how these funds are used:

solidity
function transferFromTreasury(address to, uint256 amount) public onlyOwner {
require(to != address(0), "Cannot transfer to zero address");
_transfer(treasury, to, amount); // No state tracking
}

This creates an inconsistent accounting model where shareholder and airdrop allocations are carefully tracked, but the largest allocation (treasury) has no transparency or limits.

Vulnerable Scenario:

The following steps help understand the issue:

  1. Contract deploys with 700,000 tokens allocated to treasury (70% of supply).
  2. Owner can call transferFromTreasury to move any amount from treasury to any address.
  3. No state variables track how much treasury allocation has been used.
  4. No limits prevent owner from draining entire treasury allocation.
  5. Token holders have no visibility into treasury fund usage.
03Section · Impact

Impact

Complete centralized control over 70% of token supply without transparency, accountability, or usage tracking.

04Section · Recommendation

Recommendation

Implement proper accounting for treasury transfers similar to other allocations. Track _unallocatedTreasuryTokens, decrement on each transfer, and emit a TreasuryTransfer event so off-chain monitors can audit treasury fund usage.

05Section · Resolution

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 transferFromTreasury function still lacks state tracking for treasury fund usage, allowing unlimited transfers without accountability or transparency.

F-2025-0006

oog
zealynx

Smart Contract Security Digest

Monthly exploit breakdowns, audit checklists, and DeFi security research — straight to your inbox

© 2026 Zealynx