← Inferno

Native Governance

Two-chamber token-weighted governance via Telegram — on-chain truth, off-chain voting.

Phase 4 — Planned

What is IFR Native Governance?

IFR governance happens where the community already lives: Telegram. Instead of building a separate voting dApp, the governance system is integrated directly into Telegram groups and channels.

The system uses a hybrid on-chain/off-chain model. Voting is free and happens off-chain (via Telegram reactions and polls), while results are permanently anchored on-chain for transparency and tamper-proofing.

Why Telegram? No extra app to install. No wallet connection friction for voting. The community is already there. Higher participation = better governance.

Architecture

Three-layer design: Presentation (Telegram), Logic (Bot Backend), Truth (Blockchain).

Telegram — UI Layer
Announcements (read-only)
Team proposals, read-only — t.me/IFR_token/21
Community & Forum — t.me/IFR_token
Voting thread — t.me/IFR_token/23
↓ ↓
Backend — Bot Layer (Node.js)
Wallet-Mapper
TelegramID ↔ Wallet (encrypted)
IFR-Reader
Reads IFRLock contract, caches balances
Reaction-Tracker
Tracks votes with lock weights
Poll-Manager
Creates weighted Telegram polls
Cron: Ranking
Daily top proposal calculation
Cron: Consensus
Monitors 10-day Top 3 condition
Cron: Finalizer
Submits results on-chain
Executor
Sole private key holder for TXs
↓ ↓
Blockchain — On-Chain Layer (Ethereum)
IFR Core
InfernoToken + IFRLock Contract
New Contracts
RatVoting.sol • ForumVoting.sol • IFRSpamProtection.sol

Chamber 1 — The Council

Team governance for strategic decisions, treasury allocation, and partnerships. Only the dev team and multisig signers can create proposals. The community can discuss and vote, but proposal rights are restricted.

1
Create Proposal
Team member runs
/council_proposal
with title, description, duration
2
Publish & Discuss
Bot posts proposal to the Council thread (read-only for community). Discussion in the Community Forum.
3
Snapshot Vote
IFR Lockers vote off-chain. Weighted by lock balance: 1 IFR = 1 vote.
4
Finalize On-Chain
Bot aggregates results, builds Merkle Tree, sends single TX to RatVoting.sol.

Verifiable votes: Every voter can cryptographically prove their vote was correctly included in the Merkle Tree using the public verifyVote() function on RatVoting.sol.

Chamber 2 — The Forum

Community innovation chamber. Anyone with IFR locked can submit proposals. A 10 IFR spam protection fee is required — refunded on successful consensus, burned if rejected. This reinforces IFR’s deflationary design.

1
Submit Proposal
/propose in the Community Forum (t.me/IFR_token). 10 IFR deposited to IFRSpamProtection.sol.
2
7-Day Voting
Community reacts. Lock-weighted. Auto-deleted if downvotes > 50%.
3
Daily Ranking
Cron calculates scores. Top 3 proposals posted every day.
4
Consensus Phase
10 days in Top 3 triggers binding vote. EIP-712 signing via /sign [id] yes.
5
On-Chain Result
Bot bundles signatures, sends single TX to ForumVoting.sol. Result permanent on-chain.

Deflationary mechanic: The 10 IFR spam fee reinforces IFR’s deflationary design. Bad proposals burn IFR permanently. Good proposals earn it back. Every rejected proposal reduces total supply.

How Voting Works

Voting is designed to be free, simple, and verifiable. No gas costs, no wallet popups, no dApp switching.

Step-by-Step

1
Connect wallet: Send /connect in @IFR_Forum. The bot opens a Mini-App where you sign a free message with MetaMask. This links your Telegram account to your Ethereum address (one-time only).
2
Voting power: Automatically calculated from the IFR Lock Contract (read-only query, no transaction needed). 1 IFR locked = 1 vote.
3
Cast vote: React with thumbs up or thumbs down on proposals in the Community Forum, or cast your vote in the Vote thread (t.me/IFR_token/23). The bot records your vote and weights it by your lock balance.
4
No gas costs: All voting happens off-chain (reactions and polls). Only the final result is sent on-chain — and the bot pays for that transaction.
5
Verify: After finalization, anyone can verify their vote was counted correctly via the Merkle proof on RatVoting.sol (public view function).

Cost Overview

Action Gas Cost How
Connect walletFreeOne-time MetaMask signature
Vote on proposalFreeTelegram reaction or poll
Submit proposal10 IFR/propose command
Final on-chain TXBot paysAutomatic after voting ends

Bot Architecture

A single Node.js bot serves both chambers with strict role separation. Only the Executor component holds private keys.

Component Function
Wallet-MapperEncrypted database mapping TelegramUserID to EthereumAddress (one-time free signature)
IFR-ReaderReads IFR Lock Contract via Infura/Alchemy, caches lock balances
Reaction-TrackerTracks every reaction with timestamp and lock weight of the voter
Poll-ManagerCreates native Telegram polls for Council votes, aggregates weighted results
Cron: RankingRuns daily, calculates top proposals by weighted score (upvotes minus downvotes)
Cron: ConsensusMonitors whether a proposal has stayed 10 consecutive days in Top 3
Cron: FinalizerSubmits collected votes on-chain after the signature phase ends
ExecutorSole component with private key / multisig access for on-chain transactions

Smart Contracts

Three new contracts will be deployed for the governance system.

RatVoting.sol Phase 4

Stores Council vote results using a snapshot model. One on-chain transaction per proposal.

  • finalizeProposal(proposalId, forWeight, againstWeight, merkleRoot) — bot-only, stores the finalized vote result
  • verifyVote(proposalId, voter, vote, weight, proof) — public view function for Merkle proof verification

ForumVoting.sol Phase 4

Manages binding community votes using an EIP-712 signed-vote model.

  • submitVotes(proposalId, votes[], signatures[]) — iterates over all votes, verifies each signature via ecrecover, checks IFR Lock balance, stores final result on-chain

IFRSpamProtection.sol Phase 4

Manages the 10 IFR proposal fee. Requires approve() from the user before submission.

  • Successful consensus → 10 IFR refunded to proposer (incentive for quality proposals)
  • Downvoted > 50% → 10 IFR burned permanently (deflationary)

User Journey

How a new user named Max discovers IFR governance:

1
Discover: Max joins @IFR_News and sees governance announcements.
2
Join Forum: Max wants to participate — joins @IFR_Forum.
3
Connect wallet: Bot prompts /connect → Mini-App opens → MetaMask signature (free).
4
Get voting power: Bot confirms: “You have 5,000 IFR locked. You now have 5,000 votes.”
5
Vote on Council proposal: Max sees a team proposal in @IFR_Council, discusses it in the Forum, votes in the poll. His vote counts as 5,000.
6
Submit own idea: /propose “Treasury should fund 10k IFR for community event” → 10 IFR deposited → idea posted.
7
Consensus phase: After 10 days in Top 3, bot DMs Max: “Your proposal is in consensus phase! Vote: /sign 42 yes
8
On-chain result: Max signs with wallet. Bot confirms: “Vote registered. Final result on-chain in 3 days.”

FAQ

Why Telegram and not a dedicated voting dApp?

The community lives in Telegram. No extra app to install means higher participation. Governance should meet users where they already are, not force them to a new platform.

Do I need ETH to vote?

No. Voting is completely free. Only submitting new proposals costs 10 IFR (spam protection). The bot pays all on-chain transaction fees for finalization.

What determines my voting power?

Your IFR Lock balance at the time of voting. 1 IFR locked = 1 vote. There is no minimum threshold for voting — only for proposing (you need IFR locked to submit a proposal).

When will this launch?

Phase 4 of the IFR roadmap. Follow @IFRtoken on X for updates.

Can I verify my vote was counted?

Yes. After finalization, every voter can verify their vote via the Merkle proof on RatVoting.sol. The verifyVote() function is a public view function — anyone can call it at any time, for free.

Join the Governance

Get involved in IFR governance today:

📢 Announcementst.me/IFRtoken

🏛 Councilt.me/IFR_token/21 (team proposals, read-only)

🗳 Votet.me/IFR_token/23 (cast your vote)

💬 Communityt.me/IFR_token (discussion & proposals)