Community Takeover (CTO) Voting

Any token holder can initiate a vote to replace the current deployer. The CTO mechanism ensures community governance over deployer fee rights without requiring any admin intervention.

How CTO Works

1
Initiation
An initiator calls Hook.initiate_cto_vote(token) with 0.0001 ETH fee (Base) and 60M tokens approved. A new CTOVote proxy is cloned and initialized. The initiator's tokens count as an automatic YES vote.
2
Voting Period (3 days)
Token holders deposit tokens into the vote contract to vote YES or NO. Each token deposited = 1 vote weight. Additional tokens can be added to an existing vote via add_votes().
3
End Vote
After 3 days, anyone calls end_vote(). If quorum is met and majority achieved, end_vote_early() can end it before the deadline.
4
Finalize
If successful, anyone calls finalize(). The vote contract calls Hook.finalize_cto() which transfers deployer rights, pays out any pending deployer balance, and transfers TokenSocials ownership.
5
Withdraw Tokens
All voters (both YES and NO) can withdraw their deposited tokens after the vote ends, regardless of outcome.

Vote Requirements

RequirementValue
Initiator Stake60,000,000 tokens (5% of total supply)
Initiation Fee0.0001 ETH (Base) / 0.0002 BNB (BSC)
Quorum40% of circulating supply must participate
MajorityYES votes > NO votes (simple majority)
Duration3 days (259,200 seconds)
Early EndAllowed if quorum + majority both met
Concurrent VotesOnly 1 active CTO vote per token

Circulating Supply Calculation

The quorum is calculated against circulating supply, which excludes tokens held by the PoolManager (LP) and burned tokens (dead address):

circulating = TOTAL_SUPPLY - balanceOf(V4_POOL_MANAGER) - balanceOf(DEAD_ADDRESS)

What Changes When CTO Succeeds

  • The deployer address in tokenInfo[token] is updated to the vote initiator
  • Any accumulated deployerBalance is paid out to the old deployer
  • TokenSocials ownership is transferred to the new deployer
  • The active CTO vote slot is cleared, allowing future votes