Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions content/mips/_overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,12 @@ notes, and a path to activation.
- **MIP-8 — Page-ified Storage.** Aligns EVM storage layout with the underlying
hardware page boundary, reducing I/O amplification on commits. Final and
active on Monad mainnet since the MONAD_TEN upgrade on September 2, 2026.
- **MIP-12 — Decrease Vote Pace.** Shortens the consensus vote pace from 400ms
to 300ms, with the per-block limits and the block reward scaled down
proportionally. A draft consensus-layer change, not yet live on mainnet.
- **MIP-12 — Decrease Block Time.** Final; its 400ms to 300ms target vote pace
activated on Monad mainnet at round 89,758,000 (July 23, 2026). Per-block
transaction, gas, and byte limits fell 25%; the block reward fell from 25 to
18 MON (28%). At the nominal cadence, capacity limits per second stay the
same while rewards change from 62.5 to 60 MON per second. Target cadence does
not guarantee observed latency or finality; see `mip-12.md` for dated sources.

> TODO(author): paste the canonical one-paragraph summary for each MIP here.
> Anything below this line in this file is treated as authoritative context by
Expand Down
57 changes: 27 additions & 30 deletions content/mips/mip-12.md
Original file line number Diff line number Diff line change
@@ -1,40 +1,37 @@
# MIP-12: Decrease Vote Pace
# MIP-12: Decrease Block Time

**Status:** Draft (not live on mainnet)
**Summary:** Shortens the consensus vote pace from 400ms to 300ms, a 25%
reduction, with the related per-block parameters scaled down proportionally so
blocks arrive sooner while each one carries a little less.
**Proposal status:** Final

## Motivation
**Network status:** Activated on Monad mainnet at round 89,758,000 (July 23, 2026, approximately 14:30 UTC).

A block every 300ms instead of every 400ms means about 33% more blocks each
second. Because each block now holds 25% fewer transactions, less gas, and
fewer bytes, the network's per-second capacity stays roughly the same: it is a
faster pipe, not a bigger one. Faster votes also mean faster confirmations and
finality.
**Verified:** October 4, 2026, against the [canonical MIP-12 specification](https://github.com/monad-crypto/MIPs/blob/2a7e18894f1e55fb043080cb8cef15c7f5647768/MIPs/MIP-12.md) and the [official release notes](https://docs.monad.xyz/developer-essentials/changelog/releases#v0-15-1).

## Specification
## Summary

Vote pace leads the change, dropping from 400ms to 300ms. Four more per-block
parameters scale down with it:
MIP-12 is a Final consensus-layer change that reduced the target vote pace from 400ms to 300ms. The mainnet activation was recorded at round 89,758,000. The 300ms figure describes the protocol's target cadence; it does not guarantee a particular observed block latency or time to finality.

- **Vote pace:** how often validators vote on a block. Lower means faster
confirmations and finality. Drops from 400ms to 300ms.
- **Transactions per block:** the most transactions that can be packed into a
single block. Scales down proportionally.
- **Compute per block (gas):** the total computation a block is allowed to do,
where gas is the EVM's unit for compute. Scales down proportionally.
- **Data per block (bytes):** the largest a single block can get, measured in
bytes. Scales down proportionally.
- **Block reward:** the MON paid to the validator that proposes a block. Shrinks
for the same reason, since blocks are smaller and more frequent.
## Parameter changes

## Backwards compatibility
| Parameter | Before | After | Change |
| --- | ---: | ---: | --- |
| Target vote pace | 400ms | 300ms | 25% shorter |
| Transactions per block | 5,000 | 3,750 | 25% lower |
| Proposal gas limit | 200,000,000 | 150,000,000 | 25% lower |
| Proposal byte limit | 2,000,000 bytes | 1,500,000 bytes | 25% lower |
| Block reward | 25 MON | 18 MON | 28% lower |

This is a consensus-layer change only. The execution layer is unaffected and
existing contracts behave exactly as before. Activating it requires a hard fork
on the consensus client.
At the nominal target cadence, the transaction, gas, and byte limits per second stay the same: 12,500 transactions, 500 million gas, and 5 million bytes per second. The reward rate changes from 62.5 to 60 MON per second at those nominal rates; it is not unchanged.

## Discussion link
## Scope and interpretation

https://mipland.org/mip-12
The MIP changes consensus parameters and does not change execution-layer behavior. A shorter target vote pace is not a measurement of observed block latency or finality, which can vary with network conditions.

## Sources

- [Canonical MIP-12 specification (pinned revision)](https://github.com/monad-crypto/MIPs/blob/2a7e18894f1e55fb043080cb8cef15c7f5647768/MIPs/MIP-12.md) — proposal status and parameter values.
- [Monad v0.15.1 release notes](https://docs.monad.xyz/developer-essentials/changelog/releases#v0-15-1) — mainnet activation round and date.
- [Monad v0.15.0 release notes](https://docs.monad.xyz/developer-essentials/changelog/releases#v0-15-0) — testnet activation at round 43,821,000 (approximately July 9, 2026, 14:30 UTC).

## Discussion

https://forum.monad.xyz/t/mip-12-decrease-vote-pace/488
4 changes: 2 additions & 2 deletions src/app/mip-12/opengraph-image.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ImageResponse } from "next/og";

export const runtime = "edge";
export const alt = "MIP-12: Decrease Vote Pace";
export const alt = "MIP-12: Decrease Block Time";
export const size = { width: 1200, height: 630 };
export const contentType = "image/png";

Expand Down Expand Up @@ -42,7 +42,7 @@ export default function Image() {
marginBottom: "40px",
}}
>
Decrease Vote Pace
Decrease Block Time
</div>

{/* 400 → 300 */}
Expand Down
8 changes: 4 additions & 4 deletions src/app/mip-12/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ import DiscussionCtaSection from "@/components/DiscussionCtaSection";
import FooterSection from "@/components/FooterSection";

export const metadata: Metadata = {
title: "MIP-12: Decrease Vote Pace",
title: "MIP-12: Decrease Block Time",
description:
"A plain-language look at MIP-12: shortening block vote pace from 400ms to 300ms, and what each parameter change actually means.",
"MIP-12 is Final and its 400ms to 300ms target vote pace activated on Monad mainnet. Explore the exact parameter changes and their effects on capacity and rewards.",
alternates: { canonical: "/mip-12" },
openGraph: {
title: "MIP-12: Decrease Vote Pace",
title: "MIP-12: Decrease Block Time",
description:
"A plain-language look at MIP-12: shortening block vote pace from 400ms to 300ms, and what each parameter change actually means.",
"MIP-12 is Final and its 400ms to 300ms target vote pace activated on Monad mainnet. Explore the exact parameter changes and their effects on capacity and rewards.",
url: "/mip-12",
},
};
Expand Down
2 changes: 1 addition & 1 deletion src/app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ const structuredData = {
["MIP-3: Linear Memory", "/mip-3"],
["MIP-4: Reserve Balance Introspection", "/mip-4"],
["MIP-7: Extension Opcodes", "/mip-7"],
["MIP-12: Decrease Vote Pace", "/mip-12"],
["MIP-12: Decrease Block Time", "/mip-12"],
].map(([name, path], index) => ({
"@type": "ListItem",
position: index + 1,
Expand Down
22 changes: 20 additions & 2 deletions src/components/FooterSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@
import { usePathname } from "next/navigation";
import { useLanguage } from "@/i18n/LanguageContext";

const FOOTER_DATA: Record<string, { specUrl: string; specLabel: string; noteKey: string }> = {
const FOOTER_DATA: Record<string, {
specUrl: string;
specLabel: string;
noteKey: string;
activationUrl?: string;
}> = {
"/mip-8": {
specUrl: "https://github.com/monad-crypto/MIPs/blob/main/MIPs/MIP-8.md",
specLabel: "MIP-8 on GitHub",
Expand All @@ -25,9 +30,12 @@ const FOOTER_DATA: Record<string, { specUrl: string; specLabel: string; noteKey:
noteKey: "footer.mip7Note",
},
"/mip-12": {
specUrl: "https://github.com/monad-crypto/MIPs/blob/main/MIPs/MIP-12.md",
specUrl:
"https://github.com/monad-crypto/MIPs/blob/2a7e18894f1e55fb043080cb8cef15c7f5647768/MIPs/MIP-12.md",
specLabel: "MIP-12 on GitHub",
noteKey: "footer.mip12Note",
activationUrl:
"https://docs.monad.xyz/developer-essentials/changelog/releases#v0-15-1",
},
};

Expand All @@ -52,6 +60,16 @@ export default function FooterSection() {
>
{data.specLabel} →
</a>
{data.activationUrl && (
<a
href={data.activationUrl}
target="_blank"
rel="noopener noreferrer"
className="mt-3 block text-sm text-surface/80 hover:text-surface transition-colors underline underline-offset-4 decoration-surface/20 hover:decoration-surface/60"
>
{t("footer.mip12ActivationSource")} →
</a>
)}
</div>
<div>
<p className="font-mono text-xs tracking-wider uppercase text-surface/50 mb-3">
Expand Down
2 changes: 1 addition & 1 deletion src/components/SpecDisclaimer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const SPEC_URLS: Record<string, { url: string; mip: string }> = {
mip: "MIP-8",
},
"/mip-12": {
url: "https://github.com/monad-crypto/MIPs/blob/main/MIPs/MIP-12.md",
url: "https://github.com/monad-crypto/MIPs/blob/2a7e18894f1e55fb043080cb8cef15c7f5647768/MIPs/MIP-12.md",
mip: "MIP-12",
},
};
Expand Down
6 changes: 3 additions & 3 deletions src/components/mip12/WhyProportionalSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -61,20 +61,20 @@ export default function WhyProportionalSection() {
>
<div className="grid grid-cols-2 gap-6 sm:gap-10">
<BlockCadence
label="400 ms · 3 blocks"
label={t("mip12.why.beforeLabel")}
count={3}
color="#9b9084"
heightPct={100}
/>
<BlockCadence
label="300 ms · 4 blocks"
label={t("mip12.why.afterLabel")}
count={4}
color="#2a7d6a"
heightPct={75}
/>
</div>
<p className="font-mono text-[10px] text-text-tertiary mt-5 text-center">
same 1.2s window · more blocks, each 25% smaller
{t("mip12.why.chartNote")}
</p>
</motion.div>

Expand Down
25 changes: 15 additions & 10 deletions src/i18n/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,10 @@ const en = {
"One reserved slot expands to ~220 selectors. Monad adds opcode-level features without risking collision with future Ethereum upgrades.",
},
mip12: {
title: "Decrease Vote Pace",
subtitle: "Faster consensus, scaled proportionally",
title: "Decrease Block Time",
subtitle: "Final · active on Monad mainnet",
description:
"A draft proposal to vote on blocks 25% faster, dropping the pace from 400ms to 300ms, with per-block limits scaled down to match. See what each parameter change actually means.",
"MIP-12 is Final and its 400ms to 300ms target vote pace is active on mainnet. See the exact per-block changes and what they mean for capacity and rewards.",
},
},
mip8: {
Expand Down Expand Up @@ -727,21 +727,21 @@ const en = {
},
mip12: {
hero: {
title: "Faster consensus.",
title: "Shorter target cadence.",
before: "400",
after: "300",
unit: "ms",
caption: "vote pace",
delta: "−25%",
desc: "MIP-12 proposes a 25% shorter vote pace, dropping from 400ms to 300ms. Related per-block parameters scale down to match, so blocks arrive sooner while each one carries a little less.",
desc: "MIP-12 is Final. Its target vote pace changed from 400ms to 300ms and activated on Monad mainnet at round 89,758,000 on July 23, 2026 (about 14:30 UTC). Target cadence does not guarantee observed block latency or finality.",
},
params: {
title: "What actually changes",
subtitle:
"Vote pace leads the change (above). Four more parameters scale down with it. Here's what each one means in plain terms.",
"The target vote pace and four per-block parameters changed. The cards show the exact before-and-after values.",
votePaceName: "Vote pace",
votePaceMeaning:
"How often validators vote on a block. Lower means faster confirmations and finality.",
"The target interval for consensus votes. It is not a measurement or guarantee of observed block latency or finality.",
txName: "Transactions per block",
txMeaning:
"The most transactions that can be packed into a single block.",
Expand All @@ -756,10 +756,14 @@ const en = {
},
why: {
title: "Why turn down every dial?",
body: "A block every 300ms instead of every 400ms means about 33% more blocks each second. Since each block now holds 25% fewer transactions, less gas, and fewer bytes, the network's per-second capacity stays roughly the same. You're not getting a bigger pipe, just a faster one. The block reward shrinks for the same reason: smaller, more frequent blocks.",
body: "At the nominal target cadence, the 25% lower per-block transaction, gas, and byte limits keep those capacity limits per second unchanged: 12,500 transactions, 500 million gas, and 5 million bytes. The reward falls from 25 to 18 MON per block (28%); at the target cadence, that changes issuance from 62.5 to 60 MON per second, rather than keeping it identical.",
beforeLabel: "400 ms · 3 blocks",
afterLabel: "300 ms · 4 blocks",
chartNote:
"same 1.2s target window · per-block transaction, gas, and byte limits fall 25%",
scopeTitle: "What it touches",
scopeBody:
"This is a consensus-layer change only. The execution layer is unaffected and existing contracts behave exactly as before. Activating it requires a hard fork on the consensus client.",
"This consensus-layer change does not alter execution-layer behavior. The 300ms target cadence does not guarantee any specific observed latency or finality.",
},
},
clearSigning: {
Expand Down Expand Up @@ -884,7 +888,8 @@ const en = {
mip7Note:
"MIP-7 aligns with EIP-8163, which reserves 0xAE on Ethereum L1 for non-L1 extension use. All ~220 selectors are currently unassigned; future MIPs will claim specific slots.",
mip12Note:
"MIP-12 is a draft proposal to reduce the consensus vote pace from 400ms to 300ms, with proportional cuts to per-block limits and reward. It is a consensus-layer change and is not live on mainnet.",
"MIP-12 is Final. Its target vote pace changed from 400ms to 300ms and activated on Monad mainnet at round 89,758,000 (July 23, 2026, about 14:30 UTC). Verified against the pinned specification and official release notes on October 4, 2026. Target cadence does not guarantee observed latency or finality.",
mip12ActivationSource: "Official activation evidence (release notes)",
},
specDisclaimer: {
prefix: "The information on this page should not be quoted. Please refer to ",
Expand Down
34 changes: 34 additions & 0 deletions src/i18n/mip12.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { describe, expect, it } from "vitest";
import en from "./en";
import zh from "./zh";

describe("MIP-12 localized status", () => {
it("states Final status and mainnet activation in English and Chinese", () => {
expect(en.home.mip12.description).toContain("Final");
expect(en.mip12.hero.desc).toContain("round 89,758,000");
expect(en.mip12.why.chartNote).toContain("limits fall 25%");
expect(en.footer.mip12Note).toContain("activated on Monad mainnet");
expect(en.footer.mip12Note).toContain("October 4, 2026");
expect(en.footer.mip12ActivationSource).toContain("activation evidence");

expect(zh.home.mip12.description).toContain("已定稿");
expect(zh.mip12.hero.desc).toContain("89,758,000");
expect(zh.mip12.why.chartNote).toContain("上限降低 25%");
expect(zh.footer.mip12Note).toContain("主网");
expect(zh.footer.mip12Note).toContain("2026 年 10 月 4 日");
expect(zh.footer.mip12ActivationSource).toContain("官方激活证据");
});

it("removes the stale draft and not-live claims", () => {
const copy = [
en.home.mip12.description,
en.mip12.hero.desc,
en.footer.mip12Note,
zh.home.mip12.description,
zh.mip12.hero.desc,
zh.footer.mip12Note,
].join(" ");

expect(copy).not.toMatch(/draft|not live on mainnet|草案|未在主网上线/i);
});
});
Loading
Loading