Governance
Timelock-based on-chain governance for the Inferno token — proposals, roles, parameter changes, and emergency controls.
Live: Safe-controlled Governance and timelock execution. Council ballots: EX-01 approved on 4 October 2026 (no IFR incentives for exchanges); EX-02 and CV-01 open; signed votes on Council Votes. Planned: Council web voting and the Phase 4 DAO.
The Council portal is not live. An agenda discussion is not a vote, a funding allocation or permission to execute a transaction. Open decisions and their gates are tracked in the decision register.
On-chain proposals progress from Pending to Executable after the timelock, then Executed; the guardian can cancel an eligible proposal, making it Cancelled. Proposed voting weights are one vote per eligible Council member and eligible locked-IFR weight for the Forum, subject to ratification. Open and secret voting modes require independent security and privacy review. Network anonymity is not guaranteed. Full procedure, historical records and privacy requirements: https://ifrunit.tech/wiki/governance.html.
Proposal procedure, timelock and roles
1. Overview
The Governance contract is a timelock governor that controls the InfernoToken contract. After transferOwnership() was called, ALL token parameter changes must go through Governance — there is no backdoor.
- Mandatory delay between proposal creation and execution (default: 48 hours)
- Guardian role can emergency-cancel proposals at any time before execution
- Self-governing: even the timelock delay itself can only be changed through a proposal
- Fully transparent — every proposal and execution is an on-chain event
Contract:
0xc43d48E7FDA576C5022d0670B652A622E8caD041
— View on Etherscan
2. Timelock Mechanics
Every proposal is subject to a mandatory delay before it can be executed. This gives the community time to review and, if necessary, raise concerns.
| Parameter | Value | Notes |
|---|---|---|
MIN_DELAY |
1 hour (3,600s) | Absolute minimum — hardcoded, cannot be lowered |
MAX_DELAY |
30 days (2,592,000s) | Absolute maximum — hardcoded |
delay (current) |
48 hours (172,800s) | Default value, changeable via self-governance |
When a proposal is created, its ETA (Earliest Time of Arrival) is set to
block.timestamp + delay. The proposal cannot be executed before this timestamp.
Important: Changing the delay itself must go through the timelock. This prevents an attacker from reducing the delay to zero and immediately executing a malicious proposal. See Section 9: Self-Governance for details.
3. Proposal Lifecycle
Every governance proposal follows the same lifecycle. Below is the visual flow:
propose(target, data)eta = now + 48h
execute(proposalId)cancel(proposalId)States Explained
- Pending — Proposal has been created but ETA has not been reached. Cannot be executed yet.
- Executable — ETA has passed. The owner can call
execute()to carry out the proposal. - Executed — The target function has been called successfully. This is a terminal state.
- Cancelled — The proposal was cancelled by the owner or guardian before execution. Terminal state.
4. Roles
The Governance contract defines three distinct roles with clearly separated permissions:
| Role | Permissions | Current Holder |
|---|---|---|
| Owner |
propose, execute, cancel,
setGuardian, setOwner
|
TreasurySafe 3-of-5 0x5ad6193eD6E1e31ed10977E73e3B609AcBfEcE3b Transferred 20.03.2026 — TX |
| Guardian |
cancel only (emergency)Cannot propose or execute |
TreasurySafe 3-of-5 (since 03.10.2026) 0x5ad6193eD6E1e31ed10977E73e3B609AcBfEcE3b Emergency cancel only — no governance power. Moved from the deployer EOA 0x6b36…Fed67 on 3 October 2026 (block 26108062)
|
| Self (Governance contract) |
setDelay (only via its own timelock)
|
Governance 0xc43d48E7FDA576C5022d0670B652A622E8caD041 |
Note: The Owner role was transferred to TreasurySafe (Gnosis Safe 3-of-5) on 20.03.2026. All proposals now require 3-of-5 multisig signatures. Since 03.10.2026 the Guardian role is also held by TreasurySafe (guardian migration, CWA-09); it retains only the emergency cancel() function — it cannot propose or execute. Guardian roles in IFRLock, Vesting and PartnerVault moved to TreasurySafe as well; Since 05.10.2026 (Governance proposals #19 and #20, executed at Mainnet block 26124647) the LiquidityReserve and BurnReserve guardian is TreasurySafe as well. The BuybackVault and BuybackController guardian is immutable and remains the deployer EOA (pause only). Trade-off: an emergency pause or cancel now needs 3-of-5 Safe signatures, there is no independent canceller while guardian and owner are the same Safe, and the Vesting pause has no maximum duration.
5. What Parameters Can Be Changed
The following functions on InfernoToken (and Governance.setDelay) can only be called through the governance timelock. Protocol parameter changes go through Governance proposals with a 48-hour timelock. The deployed Governance contract’s ownership itself can be transferred directly by its owner, the Treasury Safe (3-of-5), without that delay (tracked as CWA-25). TreasurySafe can also rotate the guardian through untimelocked setGuardian.
| Function | Description | Constraints |
|---|---|---|
InfernoToken.setFeeRates(senderBurnBps, recipientBurnBps, poolFeeBps) |
Change the fee rates for transfers | Total must not exceed 5% (500 bps) |
InfernoToken.setFeeExempt(address, bool) |
Add or remove fee exemptions for specific addresses | — |
InfernoToken.setPoolFeeReceiver(address) |
Change the address that receives pool fees | Cannot be zero address |
Governance.setDelay(uint256) |
Change the timelock delay | Self-governance only; MIN_DELAY ≤ value ≤ MAX_DELAY |
6. Creating a Proposal
Use ethers.js (v6) to create a governance proposal. The propose() function takes the target contract address and the encoded calldata:
// Example: Change fee rates to 1.5% sender burn + 0.5% recipient burn + 1% pool fee
const governance = new ethers.Contract(GOV_ADDRESS, GOV_ABI, signer);
// Encode the function call
const iface = new ethers.Interface([
"function setFeeRates(uint256,uint256,uint256)"
]);
const calldata = iface.encodeFunctionData("setFeeRates", [150, 50, 100]);
// Submit the proposal
const tx = await governance.propose(TOKEN_ADDRESS, calldata);
const receipt = await tx.wait();
// Get the proposal ID from the event
const event = receipt.logs.find(l => l.fragment && l.fragment.name === "ProposalCreated");
console.log("Proposal ID:", event.args.proposalId.toString());
console.log("ETA:", new Date(Number(event.args.eta) * 1000));
Tip: The proposal ID is emitted in the ProposalCreated event. Store it — you will need it to execute or cancel the proposal later.
7. Executing a Proposal
After the 48-hour delay has passed, the owner can execute the proposal:
// After 48h delay has passed
const tx = await governance.execute(proposalId);
const receipt = await tx.wait();
console.log("Proposal executed in block:", receipt.blockNumber);
// The target function (e.g., setFeeRates) has now been called
If you try to execute before the ETA, the transaction will revert with "too early".
8. Guardian Emergency Cancel
The Guardian role exists as a safety mechanism. A guardian can cancel any pending proposal instantly, without waiting for the timelock delay.
- Designed for emergency response (e.g., a malicious proposal is detected)
- The guardian cannot propose or execute — only cancel
- Cannot undo an already-executed proposal (execution is permanent on-chain)
- The owner can also cancel proposals (they have a superset of permissions)
// Guardian cancels a suspicious proposal
const guardianGovernance = governance.connect(guardianSigner);
const tx = await guardianGovernance.cancel(proposalId);
await tx.wait();
console.log("Proposal", proposalId, "cancelled by guardian");
9. Self-Governance
The setDelay() function has the onlySelf modifier, meaning it can only be called by the Governance contract itself. No external account — not even the owner — can call it directly.
How to Change the Delay
- Propose a call where the target is the Governance contract itself and the calldata encodes
setDelay(newDelay) - Wait for the current delay to elapse (48h by default)
- Execute the proposal — the Governance contract calls itself
// Example: Change delay from 48h to 72h (259200 seconds)
const iface = new ethers.Interface(["function setDelay(uint256)"]);
const calldata = iface.encodeFunctionData("setDelay", [259200]);
// Target is the Governance contract itself
const tx = await governance.propose(GOV_ADDRESS, calldata);
await tx.wait();
// ... wait 48 hours ...
await governance.execute(proposalId);
Security: This design prevents "instant delay reduction" attacks. An attacker who gains owner access cannot reduce the delay to zero and then immediately execute a malicious proposal — they must still wait for the current delay to pass, giving the guardian time to cancel.
Mainnet proposals and execution record
Mainnet Governance Proposals
Governance proposals submitted on the Ethereum Mainnet deployment (0xc43d48E7FDA576C5022d0670B652A622E8caD041):
| ID | Action | Proposed | ETA | Status |
|---|---|---|---|---|
| #0 | setFeeExempt(BootstrapVault V1, true)V1 deprecated — transferFrom bug. Replaced by BootstrapVaultV3. |
05.03.2026 | 07.03.2026 20:12 CET | Executed |
| #1 | setFeeExempt(Vesting, true)Redundant — already exempt before ownership transfer. |
08.03.2026 | 10.03.2026 00:21 CET | Cancelled |
| #2 | setFeeExempt(BurnReserve, true)Redundant — already exempt before ownership transfer. |
08.03.2026 | 10.03.2026 00:21 CET | Cancelled |
| #3 | setFeeExempt(BootstrapVaultV3, true)Replaced by #4 with correct timing. |
08.03.2026 | 10.03.2026 00:50 CET | Cancelled |
| #4 | setFeeExempt(BootstrapVaultV3, true)TX: 0x625a6618…
|
09.03.2026 | 11.03.2026 08:45 CET | Executed 11.03.2026 |
| #5 | setFeeExempt(FeeRouterV1, true)TX: 0x82d2d1b8…
|
09.03.2026 | 11.03.2026 08:46 CET | Executed 11.03.2026 |
| #6 | setPoolFeeReceiver(FeeRouterV1)Execution recorded on-chain; no full execution hash is published in the current evidence set. |
11.03.2026 | 13.03.2026 09:23 CET | Executed 13.03.2026 |
| #7 | setFeeExempt(Deployer, true)TX: 0xfbb98818…
|
16.03.2026 | 18.03.2026 | Executed 18.03.2026 |
| #8 | setFeeExempt(TreasurySafe, true)TX: 0x4caadb53…
|
16.03.2026 | 18.03.2026 | Executed 18.03.2026 |
| #9 | setFeeExempt(CommunitySafe, true)TX: 0x1d43de02…
|
16.03.2026 | 18.03.2026 | Executed 18.03.2026 |
| #10 | setOwner(TreasurySafe)Cancelled (onlyOwner bug) — direct setOwner() via Deployer. TX |
18.03.2026 | 20.03.2026 | ✅ Owner transferred 20.03.2026 |
Protocol Proposals #11–#21
| # | Action | Timing | Status |
|---|---|---|---|
| #11 | setFeeExempt(CommitmentVault, true)Required precondition completed before supported user locks. 0x0719d9eb28dF7f5e63F91fAc4Bbb2d579C4F73d3
|
Executed 06.04.2026 | Executed 06.04.2026 |
| #12 | setFeeExempt(LendingVault, true)Required precondition completed before supported deposits; borrowing remains separately disabled. 0x974305Ab0EC905172e697271C3d7d385194EB9DF
|
Executed 06.04.2026 | Executed 06.04.2026 |
| #13 | setFeeExempt(BuybackController, true)0x1e0547D50005A4Af66AbD5e6915ebfAA2d711F7cTX: 0x74a7c9c9…404f · Block 24890909 · BuybackController feeExempt = TRUE |
Submitted 14.04.2026 · Executed 16.04.2026 10:31 Athen | Executed 16.04.2026 |
| #14 | setFeeCollector(BuybackController) on FeeRouterV1Sets the receiver for native ETH fees charged by FeeRouter swaps. It does not forward IFR transfer-pool fees already held by FeeRouterV1. Target: 0x4807B77B...C60a · Argument: 0x1e0547D5...F7c · FeeRouterV1.feeCollector = BuybackController ✅
|
Submitted 16.04.2026 · Executed 18.04.2026 | Executed 18.04.2026 |
| #15 | setFeeExempt(LP Token, true)LP Token: 0xbE495E9c0d8cc2DCf95570cf95B63c4844dF31A0Execute TX: 0xd5a3bc95…4204 · Block 25271071 · LP Token feeExempt = TRUE — IFR now tradeable on Uniswap 🔥 |
Executed 08.06.2026 | ✅ Executed 08.06.2026 |
| #16 | setP0(CommitmentVault)P0 = 300,000,000 wei — IMMUTABLE ✅ CommitmentVault: 0x0719d9eb28dF7f5e63F91fAc4Bbb2d579C4F73d3Execute TX: 0xf60b25b9… · Block 25278067 · p0Set = TRUE ✅ |
Executed 09.06.2026 | ✅ Executed 09.06.2026 |
| #17 | setFeeExempt(CommitmentVault V2, true)CV-01 repair vault, time-only locks: 0x8efae0C85ad6d44C731cAEDA1cBC275904Fc7c8FExecute TX: 0xbb53640c…835c · Block 26121846 · InfernoToken.feeExempt(V2) = TRUE ✅ |
Queued 02.10.2026 · Executed 04.10.2026 22:01 UTC | ✅ Executed 04.10.2026 |
| #18 | setVoucherSigner(0x790D99c3…CA0d) on FeeRouterV1Voucher signer rotation (CWA-06). Target: 0x4807B77B...C60aExecute TX: 0x40a856b9…9679 · Block 26124623 · FeeRouterV1.voucherSigner = 0x790D…CA0d ✅ |
ETA 04.10.2026 23:25:47 UTC · Executed 05.10.2026 07:17 UTC | ✅ Executed 05.10.2026 |
| #19 / #20 | setGuardian(Treasury Safe) on LiquidityReserve and BurnReserveGuardian migration from the Deployer to the Treasury Safe 0x5ad6193e...cE3bExecute TX: 0xa432f061…df27 · one Safe TX for both · Block 26124647 · guardian() of both = Treasury Safe ✅ |
ETA 04.10.2026 23:56:11 UTC · Executed 05.10.2026 07:22 UTC | ✅ Executed 05.10.2026 |
| #21 | setPoolFeeReceiver(BuybackController) on InfernoTokenNew IFR pool fees go to BuybackController 0x1e0547D5...F7c; the balance already held by FeeRouterV1 stays lost (CWA-02)Execute TX: 0x8de48b47…ca26 · Block 26124660 · FeeRouterV1 IFR balance 734,545.074097347 IFR as of this block ✅ |
ETA 05.10.2026 00:18:23 UTC · Executed 05.10.2026 07:25 UTC | ✅ Executed 05.10.2026 |
| Planned | LP milestone additions (50M/100M IFR + proportional ETH) | At pool depth $2k / $10k | Planned |
Protocol Proposals #17–#21 (executed)
Queued by the Treasury Safe (3-of-5) through the 48-hour Governance timelock. All five were executed by the Treasury Safe after their ETA: #17 on 4 October 2026 (block 26121846), #18 on 5 October 2026 (block 26124623), #19 and #20 on 5 October 2026 (block 26124647), #21 on 5 October 2026 (block 26124660); execute transactions are linked in the proposal table above.
| # | Action | Timing | Status |
|---|---|---|---|
| #17 | InfernoToken.setFeeExempt(CommitmentVault V2, true)0x8efae0C85ad6d44C731cAEDA1cBC275904Fc7c8FQueue TX: 0x6e113b6c…39bd · Block 26107450 |
Queued 02.10.2026 · executable from 2026-10-04 21:53:11 UTC | Executed 04.10.2026 |
| #18 | FeeRouterV1.setVoucherSigner(dedicated signer)0x790D99c320dafA03d83bEa152178A6523b49CA0dQueue TX: 0xa3a9de84…914e · Block 26107910 |
Queued 02.10.2026 · executable from 2026-10-04 23:25:47 UTC | Executed 05.10.2026 |
| #19 | LiquidityReserve.setGuardian(Treasury Safe)0x5ad6193eD6E1e31ed10977E73e3B609AcBfEcE3bQueue TX: 0xfdd90c5e…394c · Block 26108062 |
Queued 02.10.2026 · executable from 2026-10-04 23:56:11 UTC | Executed 05.10.2026 |
| #20 | BurnReserve.setGuardian(Treasury Safe)0x5ad6193eD6E1e31ed10977E73e3B609AcBfEcE3bQueue TX: 0xfdd90c5e…394c · Block 26108062 |
Queued 02.10.2026 · executable from 2026-10-04 23:56:11 UTC | Executed 05.10.2026 |
| #21 | InfernoToken.setPoolFeeReceiver(BuybackController)0x1e0547D50005A4Af66AbD5e6915ebfAA2d711F7cQueue TX: 0x92b5a6fa…db9f · Block 26108173 |
Queued 02.10.2026 · executable from 2026-10-05 00:18:23 UTC | Executed 05.10.2026 |
✅ Bootstrap FINALIZED (05.06.2026 23:51 UTC) — Block 25254575 —
TX: 0x949848bd…
totalETHRaised: 0.030 ETH — LP Token: 0xbE495E9c0d8cc2DCf95570cf95B63c4844dF31A0
Proposal #15 (setFeeExempt LP Token) EXECUTED 08.06.2026 ✅ — IFR tradeable on Uniswap. Proposal #16 (setP0 CommitmentVault) EXECUTED 09.06.2026 ✅ — P0 = 300,000,000 wei · TX: 0xf60b25b9…
Telegram Notifications
New governance proposals are automatically announced in the @IFRtoken channel and the IFR Community group. Notifications are sent for:
- New proposals (with action, target, ETA, and verify.html link)
- Proposals becoming executable (timelock passed)
- Proposals executed on-chain
- Proposals cancelled
Polling interval: every 30 minutes. Deduplication ensures no double announcements. Service: voteAnnouncement.js (12 tests).
LP Reserve Safe Transfer (18.03.2026): 400.6M IFR transferred from Deployer EOA (0x6b36...ed67) to LP Reserve Safe (0x5D93E7919a71d725054e31017eCA86B026F86C04), a Gnosis Safe 3-of-5 with the same 5 signers as Treasury and Community Safes. Deployer now holds 0 IFR. This was a direct ERC-20 transfer, not a governance proposal. TX: 0xd33c771d…
0x6b36…ed67) on 09.03.2026.
Historical proposals: Sepolia testnet archive
Historical Proposals (Sepolia)
Below are the governance proposals that have been submitted on the Sepolia testnet deployment:
| ID | Action | Status | Details |
|---|---|---|---|
| #0 | setFeeExempt(0xA4A1ea...6A36f90, true) |
Executed |
Executed 2026-02-20 Target: InfernoToken — Fee exemption for DEX Router Proposed by: Deployer ( 0x5Ecc...dE406)TX: 0x13ff46d8... |
| #1 | setFeeExempt(0x0Cab0A...36675d3, true) |
Executed |
Executed 2026-02-22 Target: InfernoToken — Fee exemption for IFRLock (required for unlock()) Proposed by: Deployer ( 0x5Ecc...dE406)TX: 0x211b7949...4253a909 |
| #2 | setFeeExempt(0x6EF04c...7AF090, true) |
Cancelled |
Cancelled via Guardian Target: InfernoToken — Fee exemption for PartnerVault v1 (deprecated) Reason: PartnerVault v1 replaced by v2 with upgraded features TX: 0xaa829332... |
| #3 | setFeeExempt(0x5F12...490A39, true) |
Executed |
Executed: 2026-02-26 09:44 CET Target: InfernoToken — Fee exemption for PartnerVault v2 1.4M IFR top-up completed — PartnerVault now 40M IFR TX: 0x3f28690a04345700cc847bb495efc7bf50c98456be3d10ebf3926237f57de6e8
|
| #4 | transferOwnership(Governance) |
Cancelled | Target: LiquidityReserve (v1) — immutable owner, cannot transfer. v2 redeployed instead. |
| #5 | transferOwnership(Governance) |
Cancelled | Target: BuybackVault (v1) — immutable owner, cannot transfer. v2 redeployed instead. |
| #6 | transferOwnership(Governance) |
Cancelled | Target: BurnReserve (v1) — immutable owner, cannot transfer. v2 redeployed instead. |
| #7 | setFeeExempt(0x3447...1957, true) |
Executed |
Executed: 2026-03-02 Target: InfernoToken — Fee exemption for LiquidityReserve v2 TX: 0x7b54a77571fdcdd0961f100e45cc53621360cfacc80d8fdb8fe161e7937c8a25
|
| #8 | setFeeExempt(0x2E61...b68c, true) |
Executed |
Executed: 2026-03-02 Target: InfernoToken — Fee exemption for BuybackVault v2 TX: 0xd43d40aa9dd88c3277c0272fc823fcc7445e2b7204d11e49f58c3bda997e686e
|
| #9 | setFeeExempt(0xB9Fb...D75, true) |
Executed |
Executed: 2026-03-02 Target: InfernoToken — Fee exemption for BurnReserve v2 TX: 0x9d51bf49d8727c46db0491cedcb60a98979d94f4699623798189454dfb48bc18
|
0x5F12...490A39).
Governance Learnings (Sepolia)
- Contract upgrades invalidate pending proposals. When PartnerVault v1 was replaced by v2, Proposal #2 became obsolete. Always cancel outdated proposals before creating new ones for the replacement address.
- Guardian cancel is faster than waiting. Instead of waiting 48h for an outdated proposal to expire, the Guardian can cancel immediately. This prevents accidental execution of proposals targeting deprecated contracts.
- feeExempt must be set before funding. Transferring 40M IFR to PartnerVault v1 before setting feeExempt resulted in a 1.4M IFR fee deduction. On mainnet: always set feeExempt first, fund second.
- Include version info in proposal descriptions. On-chain proposals have no description field — document the target contract version off-chain (GitHub Issue, wiki, CHANGELOG) to avoid confusion between v1/v2 addresses.
- 48h delay is sufficient for testnet operations. The delay provides enough time for review while not blocking rapid iteration. For mainnet, consider increasing to 72h for critical parameter changes.
Current governance and transition options
Current Governance Model
Inferno currently operates through the 3-of-5 Treasury Safe + Governance Timelock. This is a deliberate choice for the early phase of the protocol.
| Property | Current State |
|---|---|
| Model | 3-of-5 Treasury Safe + 48h Timelock |
| Token Voting | No — not implemented yet |
| DAO | No — planned for future phase |
| Who can propose | Owner (TreasurySafe 3-of-5) only |
| Safety mechanism | Guardian can cancel any pending proposal |
| Transparency | All proposals and executions are on-chain events with 48h public review window |
Important: Inferno is not a DAO today. The current Governance owner is the 3-of-5 Treasury Safe and governed actions use the mandatory timelock, except for the separately disclosed guardian rotation path. This is intentional — see below for the rationale and roadmap.
Future: Governance Roadmap
Governance will evolve in clearly defined phases, each building on the trust and battle-testing of the previous one:
3-of-5 Safe + Timelock
Council tooling + signer expansion
Full DAO
-
Current: 3-of-5 Safe + Timelock —
Treasury Safe controls Governance. Proposals use the configured delay; owner-only guardian rotation and transferring the deployed Governance contract’s ownership through owner-only
setOwner(tracked as CWA-25) are untimelocked, and the guardian can cancel pending proposals. - Next: Council tooling and community signer expansion — The existing Safe remains the execution authority. A reviewed voting surface may record Council decisions, while any 4-of-7 expansion follows the separate signer-expansion procedure.
- Future: Full DAO — Lock-weighted voting (IFRLock balances as voting power). Community proposals. On-chain quorum requirements. Builder tokens grant additional voting rights.
Why Not DAO from Day One?
- Security over speed: Early-stage protocols need fast response to vulnerabilities
- Whale manipulation: Token voting without safeguards enables hostile governance takeovers
- Flash-loan attacks: Without lock-weighted voting, attackers can borrow tokens to swing votes
- Community maturity: DAO governance requires an engaged, informed token holder base
- Iterative decentralization: Gradual transition builds trust and battle-tests each layer
Community signer expansion: the planned path is 3-of-5 now, 4-of-7 after community voting is live, and optional 5-of-9 after one stable term. Candidate selection should combine eligibility checks, public nomination, community voting, security review, rotation, and emergency replacement rules. Read the full signer expansion plan.
Capability Comparison
Each governance model unlocks different capabilities:
| Capability | 3-of-5 Safe + Timelock (now) | Council tooling + signer expansion (next) | Full DAO (future) |
|---|---|---|---|
| Fee Rate Changes | Treasury Safe proposal | Council recommendation; Safe execution | Community vote |
| Guardian Updates | Treasury Safe direct owner call | Council recommendation; Safe execution | Community vote |
| Emergency Cancel | Guardian | Guardian under Council policy | Guardian + vote |
| Delay Changes | Treasury Safe self-proposal | Council recommendation; Safe self-proposal | Community vote |
| Builder Onboarding | Governance/admin decision | Council process; Safe-administered | Community proposal |
| Token Voting | Not available | Not available | Lock-weighted |
Builder Voting Rights (DAO Phase)
In the DAO phase, voting power will be derived from locked IFR balances (via IFRLock), not freely tradable tokens. This prevents flash-loan governance attacks. Builder tokens earned through the PartnerVault also grant voting rights, ensuring that governance influence reflects real ecosystem contribution.
Security > Speed: Every governance transition is irreversible. We will only move to the next phase when the current model has been battle-tested and the community is ready. There is no timeline pressure.
PartnerVault controls and governance dashboard
PartnerVault Governance Features
The PartnerVault contract introduces additional governance-controlled mechanisms beyond basic parameter changes.
AuthorizedCaller Whitelist
By default, only the admin (Governance Timelock) can call recordLockReward().
To enable automated reward recording, governance can whitelist backend wallets via
setAuthorizedCaller(address, true). These callers can record lock rewards
but cannot change any other parameters.
Algorithmic Emission Throttle
When setIFRLock(address) is configured, the effective reward rate scales down
automatically as more IFR is locked globally:
- Lock ratio < 1% → full
rewardBps - Lock ratio ≥ 50% →
MIN_REWARD_BPS(500 = 5%) - Between 1%–50% → linear interpolation
This prevents pool exhaustion in high-adoption scenarios while maintaining attractive rewards during early growth.
Anti-Double-Count
Each (wallet, partnerId) pair can only be rewarded once, enforced by the
walletRewardClaimed mapping. This prevents gaming via repeated lock/unlock cycles.
Governance Dashboard
A read-only React dashboard for on-chain governance monitoring is available at
apps/governance-dashboard/. Run locally:
cd apps/governance-dashboard && npm run dev
Tabs: Overview (PartnerVault stats, algo throttle curve) • Builders (event-based table) • Timelock Queue (proposals with countdown) • Calldata Generator (encode governance calls).
Governance Constitution: Hard bounds, roles, upgrade path, and transparency rules are documented in GOVERNANCE_CONSTITUTION.md.
Phase 4 plans: DAO, Council and Forum
Phase 4 — Full DAO Roadmap
Draft, not an active voting system. The Council portal is a separate security-gated milestone within this direction, not a replacement for Safe execution. The proposed model below separates Council membership from Forum token weight. It is not an approved production voting rule. Quorum, thresholds, fees and timing below are draft parameters pending ratification and tests.
Proposed voting-weight clarification
- Council: one vote per eligible member in a fixed membership snapshot, independent of token holdings or the number of wallets controlled. Binding Safe execution remains separate.
- Forum: voting weight based on eligible locked IFR at a fixed snapshot, not one vote per lock or wallet. Splitting an amount into multiple locks must not increase its total weight.
- Before ratification: define eligible lock contracts, snapshot and lock-duration requirements, delegation, duplicate-count prevention, quorum and concentration safeguards. No automatic activation follows from this proposal.
Prerequisites for Phase 4
- Minimum 6 months of mainnet operation
- Minimum 1,000 active IFR lockers
- Security audit completed
- Governance Constitution ratified
Token-Voting Mechanism
In full DAO mode, IFR lockers vote on proposals. Proposed Forum voting power = eligible locked IFR at the agreed snapshot (not wallet balance). Final eligibility and safeguards require ratification.
| Parameter | Value |
|---|---|
| Quorum | 10% of total locked IFR |
| Voting Period | 7 days |
| Timelock | 48h (unchanged) |
| Proposal Threshold | 10,000 IFR locked |
Telegram DAO Layer — Topic Access Control (Phase 2)
Gated Telegram topics enforce on-chain lock requirements via WalletConnect verification on ifrunit.tech. Users connect their wallet, sign once, and the bot whitelists their Telegram account — no manual wallet entry required.
| Topic | Requirement |
|---|---|
| Vote | Verified wallet + minimum IFR lock |
| Council | Verified wallet + higher lock threshold |
| Core Dev | Restricted to Gnosis Safe signers |
Roadmap
| Milestone | ETA | Status |
|---|---|---|
| Genesis: 1-of-2 Safe | Feb 2026 | Completed |
| Interim: 1-of-3, then 2-of-4 and 2-of-5 | Mar 2026 | Completed |
| Current: 3-of-5 Safe | 15 Mar 2026 | Active ✅ |
| Community expansion: 4-of-7 | After community voting is live | Planned — full plan |
| Optional 5-of-9 / Full DAO | After one stable signer term | Planned |
Two-Chamber DAO Design (Phase 4)
Note: The two-chamber model described below is the planned Phase 4 architecture. It is not yet deployed. Current governance uses the single-owner Timelock described above.
Overview
IFR governance will transition to a two-chamber model combining strategic oversight (The Council) with community innovation (The Forum). Both chambers anchor votes on-chain and share the same 48h Timelock for execution.
⚖️ Chamber 1: The Council
Planned strategic-governance design for eligible Council members. A future RatVoting.sol could anchor Merkle-root vote results; no such voting contract is deployed today.
- Gnosis Safe Signers only
- Protocol parameters + upgrades
- 48h Timelock on execution
🏛️ Chamber 2: The Forum
Planned community-innovation design with ratification-gated voting weights and a future spam-protection contract. It is not live.
- Proposed: eligible locked-IFR voting weight, subject to ratification
- 10 IFR spam protection per proposal
- Top proposals → on-chain execution
Interaction Matrix
| Action | The Council | The Forum |
|---|---|---|
| Submit Proposal | Signer only | Any IFR holder (10 IFR fee) |
| Vote (proposed) | One vote per eligible Council member | Eligible locked-IFR weight at a fixed snapshot; subject to ratification |
| Execute | Separate TreasurySafe 3-of-5 action after Timelock | Separate Safe/Governance action after consensus |
| Cancel | Guardian role | Downvote > 50% |
| Fee | None | 10 IFR (refunded if successful) |
Smart Contracts (Phase 4)
| Contract | Purpose | Status |
|---|---|---|
RatVoting.sol | Team governance, Merkle tree, on-chain anchoring | Planned |
ForumVoting.sol | Community voting, ecrecover signatures | Planned |
IFRSpamProtection.sol | 10 IFR per proposal, deflationary burn | Planned |
Council Agenda & Vote Log
Urgent vote open: CV-01. The status below applies to the exchange discussion items EX-01 and EX-02.
Status: EX-01 approved on 4 October 2026; EX-02 open. EX-01 (no IFR incentives for exchanges) was approved with 3 YES votes; it is a policy decision with no on-chain action. EX-02 is an open Council ballot without a deadline. Every signed vote and the tally are recorded on Council Votes. No IFR is allocated, and no exchange has Council membership or TreasurySafe permissions. Publishing an agenda item does not authorize spending or an on-chain action. Agenda entries contain no proposer attribution or personal name.
Agenda CV-01 — CommitmentVault V1 Compensation Urgent vote
Price-conditioned CommitmentVault V1 tranches holding 26,418,467.994338353 IFR can never unlock, because the deployed vault has no working price check. The proposal compensates each affected tranche from the LP Reserve Safe, following the tranche's original unlock date and price target: a 7-day TWAP from the IFR/WETH pair, with the transfer fee grossed up. No payout happens before Council approval and an executed Safe transaction. Details, the live status of every tranche, the full proposal text and the signed votes: CommitmentVault V1 Compensation (CV-01). The vote is open with no deadline; a deadline can only be set by a separate Council vote. The Council has five members: M.G., A.M., Y.K., A.P. and G.M. All five are eligible signers, and 3 YES signatures are required. Two YES signatures (M.G., Y.K.) have been received so far. G.M.'s abstention is unverified and not counted.
Agenda EX-01 — Exchange Incentives
Approved on 4 October 2026: centralized exchanges receive no IFR incentives from any project pool; a future incentive requires a new Council proposal. The table below lists the options that were discussed before the ballot. This decision is separate from the already approved CEX fee-exemption policy.
| Discussion option | Proposed ceiling | Conditions before any later allocation |
|---|---|---|
| No token incentive | 0 IFR | A verified address may still be considered under the existing fee-exemption policy. |
| Integration pilot | Up to 500,000 IFR per exchange from PartnerVault | Only genuine qualifying integration work; milestones, vesting, disclosed recipient, conflict review and separate Governance approval. |
| Liquidity pilot | Up to 2,000,000 IFR per exchange and 5,000,000 IFR aggregate per 90-day period from LiquidityReserve | Returnable or escrowed mandate, proportional liquidity plan, reporting, termination/clawback terms, market-impact review and separate Governance approval. |
These are proposed agenda ceilings, not allocations. LiquidityReserve holds 200,000,000 IFR. Although 50,000,000 IFR is technically withdrawable under the current 90-day cap, 0 IFR has been withdrawn. Technical availability is not spending authority. PartnerVault is a possible source only when an exchange performs genuine work that qualifies under the builder-reward mandate.
Agenda EX-02 — Exchange Governance Role
Option A: exchanges receive no voting seat and no TreasurySafe signer or execution access in return for listing, liquidity or services. This avoids custody concentration, conflicts of interest and governance capture.
Option B: at most two publicly disclosed, non-voting exchange advisers with no Safe permissions. Any future voting or signer candidacy must follow the same independent eligibility, conflict, security, community-selection and rotation process described in the Community Signer Expansion Plan. It requires a separate public decision and must never be bundled with a commercial exchange agreement.
Agenda status and results
Public Vote Log
| Agenda ID | Subject | Date | State | Result / execution |
|---|---|---|---|---|
| CV-01 | CommitmentVault V1 compensation from the LP Reserve Safe | Opened 2026-10-03, no deadline | Urgent vote open: 5 eligible signers (G.M., M.G., A.M., Y.K., A.P.), 3 YES required; 2 YES so far (M.G., Y.K.); G.M. abstention unverified, not counted; not approved | None |
| EX-01 | Exchange IFR incentives and funding limits (ballot: no incentives) | Opened 2026-10-03; approved 2026-10-04 | Approved (3 YES: G.M., M.G., Y.K.) | Policy decision, no on-chain action. Signatures: 339715, 339733, 339736; Council Votes |
| EX-02 | Exchange advisory, voting or Safe role (Option A or B) | Opened 2026-10-03, no deadline | Open ballot (3 abstentions: G.M., M.G., Y.K.; A.M., A.P. outstanding) | Open. Three eligible signers abstained; with two signers outstanding no option can reach 3 votes unless votes change. Until a decision, the status quo applies: exchanges have no governance role. The owner is checking whether the outstanding signers want to vote. Council Votes |
Planned Council Voting Portal
Planned, not live. No Council login or web ballot currently creates a binding vote. The implementation remains a security-gated task block.
Voting modes, privacy boundaries and release requirements
Privacy requirements, not a certification: the following describes a planned system. Network-level anonymity is not guaranteed. For general background on connection metadata and privacy, see Ethereum's privacy roadmap.
The safe design connects an individual signer wallet, issues a domain-bound expiring EIP-4361 challenge, and checks eligibility against a recorded, block-numbered Council/Safe-owner snapshot. EOA signatures and Safe smart-account signatures require separate verification paths; Safe signatures use EIP-1271. Eligibility fails closed if the snapshot or verification path is unavailable. Every nonce is single-use and every ballot is bound to one immutable agenda version.
Current mode (since 3 October 2026): all ballots are open and run through the Etherscan verified-signature procedure on Council Votes. Secret ballots are in planning as a separate milestone (anonymous credential or zero-knowledge membership, threshold tally) behind a threat model, scheme selection, independent cryptography and privacy review, and staging.
Open and secret ballots are separate modes. The mode is published when an agenda opens and cannot be changed while voting is active. An open ballot may publish a wallet and initials only where that mapping is already public and the member has consented; otherwise it publishes initials only. Whether a consented public pseudonym may replace initials is an open decision. A secret ballot publishes no wallet, initials, individual vote, signature or voter-linked ballot hash. It publishes only the final turnout count, aggregate result and a verification proof after voting closes.
Secret voting requires unlinkable eligibility issuance and ballot casting. The planned design therefore separates the service that verifies Council eligibility from the service that accepts an anonymous one-time credential, uses one-time nullifiers to prevent duplicate voting, encrypts ballots for threshold tallying, and exposes only non-identifying commitments and the aggregate proof. The existing Telegram wallet mapper and ordinary SIWE session flow are not suitable for secret ballots.
Privacy boundary: the planned portal must retain no source IP, user-agent, request body, wallet-provider telemetry or analytics in application, proxy, error or audit logs. This is a release requirement, not a verified property of a deployed service. No cookies are required for the planned secret-voting mode. Network, hosting, RPC and wallet providers may still process connection metadata; the project cannot honestly promise that an IP address is never seen anywhere on the network path. A production design must document each processor and offer a privacy-preserving access path.
The current Safe owners and their initials-to-address mappings are already public on the Multisig and Transparency pages and in on-chain history. Removing a page cannot erase that history. Future signer onboarding must obtain explicit consent before publishing an initials-to-wallet mapping.
The portal will never request or store a private key, seed phrase or unrestricted signature. It will not submit or execute TreasurySafe transactions. Even a completed Council ballot remains separate from the binding 3-of-5 Safe proposal, public 48-hour Governance timelock and on-chain execution.
Definition of Ready
- Threat model and independent security review completed
- Explicit Council registry plus a published block number and hash of the Safe-owner eligibility snapshot; no environment or deployer fallback
- Domain, chain, agenda version, nonce and expiry bound into every challenge
- EOA plus EIP-1271 verification, replay/CSRF protection and one ballot per eligible identity
- Open or secret mode fixed before opening; agenda version and mode remain immutable until the ballot closes
- Open mode: append-only public agenda, consent-aware identity display, ballots, tally and final status
- Secret mode: independently reviewed anonymous credential or ZK-membership scheme, separated issuance/casting services, one-time nullifiers, encrypted ballots and threshold tally
- Secret public record limited to turnout, aggregate result, non-identifying commitments/nullifiers and verification proof
- Verified zero-retention configuration for application, proxy and error logs; no analytics, cookies or Telegram identity linkage; honest third-party metadata disclosure
- Desktop, tablet, Android, iOS, accessibility and multi-wallet acceptance tests
- Independent cryptography, privacy and infrastructure review before production
- No key custody, no backend executor and no automatic TreasurySafe/Governance action
Telegram participation and planned commands
Participating in Governance
Step 0 — Verify Your Wallet
Before participating, link your wallet to your Telegram account. This proves token ownership without sharing your private key.
🔐 Verify Wallet →Required for: Vote topic access, proposal submission, governance voting
Telegram Bot Commands
Telegram community access is separate from Council ballots and on-chain execution. The command list below includes planned Phase 4 voting commands, not a live web ballot. The @IFR Community bot's identity mapping must not be reused for secret Council voting.
| Command | Chamber | Who | Description |
|---|---|---|---|
| /verify | — | Everyone | Link wallet to Telegram account |
| /mystatus | — | Everyone | Show wallet tier and topic access |
| /proposals | Both | Everyone | List active governance proposals |
| /propose "title" | The Forum | IFR Holders | Submit proposal (10 IFR spam protection) |
| /vote [id] [yes/no] | The Forum | IFR Holders | Vote via cryptographic signature — no gas |
| /result [id] | Both | Everyone | Show result + on-chain TX if executed |
| /ratpropose "title" | The Council | Signers only | Strategic proposal (no fee) |
| /ratvote [id] [yes/no] | The Council | Signers only | Signer vote — Merkle tree anchored |
Note: /propose, /vote, /ratpropose, /ratvote are Phase 4 commands — not yet active. /verify and /mystatus are live now.
Topic Access Requirements
| Topic | Requirement | How to qualify |
|---|---|---|
| ⚖️ Core Dev | Gnosis Safe Signer | Added by governance as Safe owner |
| ⚖️ Council | Gnosis Safe Signer | Same as Core Dev |
| 🗳️ Vote | Any locked IFR > 0 | Lock IFR → then /verify |
| 🔨 Dev & Builder | Registered Builder | Apply as Builder → then /verify |