Have you ever watched a chain look calm on the surface while the people running it were quietly racing a clock? That is the feeling around Polygon this week. Two hard forks went live first. The public write-up arrived later. In my experience, that sequence is usually the sign of a security team that would rather look secretive than look sloppy.
Why Austin And Kyoto Matter More Than A Routine Patch
Polygon Labs used the Austin and Kyoto hard forks to close several proof-of-stake security flaws before talking about them in public. The most unsettling one could have forced the entire validator set to burn expensive processing time on a single crafted transaction. Nobody wants that sentence hanging over a payments-heavy network.
The Validators Support Team posted the disclosure after both upgrades had already been tested and activated. Consensus-affecting fixes were deployed privately, checked on the Amoy testnet, then explained only after the mainnet fleet was covered. I find that approach blunt, and honestly a little refreshing. Waiting for applause is a luxury. Waiting for an attacker is not.
The issues sat in two places that together make Polygon PoS tick. Bor is the execution client. Heimdall handles validator coordination and other consensus work. Polygon said it found no evidence that any of the flaws were exploited or used to disrupt mainnet. That claim matters. It does not mean the bugs were cute.
What The Austin Fork Actually Closed
Austin lifted Bor to version 2.10.0 and targeted two denial-of-service paths tied to block processing. These were not framed as consensus-correctness bugs. They were framed as ways to exhaust machines that should have been busy confirming honest traffic.
One path involved state-sync events used for L1-to-L2 bridge deposits. Those events can execute contract code and precompiles. Before the fork, that work was not sitting under an effective per-block gas bound. In plain language, a noisy event could chew through processing resources that a block should have rationed. Austin added a limit on how much gas state-sync events can consume inside a block.
The second weakness lived in TxDependency data used during block processing. A malicious block producer could feed an oversized field, push peers into heavy memory allocation, and crash nodes that were only trying to process the block. That is a nasty kind of leverage. You do not need to rewrite history if you can knock the people reading history offline.
A chain can look healthy on a dashboard while a single oversized field is still a loaded spring.
Polygon described both Austin issues as block-processing denial-of-service vectors. Neither had caused known disruption before the patches landed. Still, I would not call that a win so much as a narrow escape. The difference between a research finding and an incident is often timing, not talent.
The Kyoto Fork And The Nested Message Problem
Kyoto moved Heimdall to version 0.11.0 and covered a broader set of input-validation and consensus-hardening fixes. The headline item was deeply nested google.protobuf.Any fields. If that sounds like an engineer’s footnote, sit with it for a second. Heimdall transactions can wrap messages inside Any fields, and those wrappers can nest again.
Without a depth limit, an attacker could build a transaction with deep nesting at relatively little cost. Every validator that processed it would then do a lot of decoding work. That is the ugly part. The attack does not need a privileged seat. It is a permissionless way to impose coordinated cost across the validator set.
Kyoto added a byte-level scan that rejects a transaction once nesting crosses a defined threshold. The check runs at mempool admission and again at the consensus processing stage. That dual gate is not decorative. A transaction that sneaks in through one door and dies at the other door is how networks invent weird split-brain behavior.
Other Heimdall fixes touched milestone accounting, checkpoint processing, and L1 event replay. Failed future-span creation can now degrade and retry at the next boundary instead of blocking a milestone commit. New replay keys cover an edge case where distinct L1 events could otherwise collide. These are the unglamorous repairs. They rarely trend. They keep finality from turning into a waiting room.
Who Has To Upgrade And What Happens If They Do Not
Both hard forks are mandatory for operators who want to stay on the canonical Polygon PoS network. Bor v2.10.0 is required for all nodes. Heimdall v0.11.0 applies to validators and full nodes. Operators running versions from before the activation heights have already forked away from canonical consensus. That sentence should make a few people sit up straighter.
The upgrades arrived as binary updates. Operators do not need to migrate state, rewrite genesis, or grind through a full resync just to apply the patch. Nodes that fell out of consensus can upgrade, roll back to the right pre-hard-fork height, then catch the canonical chain. It is still work. It is not a reconstruction project.
- Bor 2.10.0 is the floor for every node that wants to stay current.
- Heimdall 0.11.0 is required for validators and full nodes.
- Pre-activation software has already left canonical consensus.
- State migration and genesis edits are not part of this rollout.
- Lagging nodes can upgrade, roll back to the proper height, then sync forward.
I’ve found that operators sometimes treat “binary upgrade” as a synonym for “quick.” It can be quick. It can also be the moment someone discovers an old runbook, a stale monitoring alert, and a colleague who left six months ago. The code change is simple. The operational habit is not always simple.
A Short Map Of The Two Clients
People talk about Polygon as if it were one program. It is not. The split between execution and consensus is the reason these two forks arrived as a pair. When one side can be jammed, the other side still has to live with the mess.
| Component | Role | Fork Focus |
| Bor | Execution client and block processing | Austin: gas bounds and oversized dependency data |
| Heimdall | Validator coordination and consensus functions | Kyoto: nested fields, milestones, checkpoints, replay |
| Node operators | Keep the fleet on the canonical chain | Mandatory versions after activation heights |
Think of Bor as the kitchen and Heimdall as the reservation book. If the kitchen can be flooded with one ridiculous order, dinner stops. If the reservation book can be stuffed with nested nonsense, the whole room slows down together. The forks tried to put a manager at both doors.
Why Private Disclosure First Is A Tradeoff, Not A Virtue Signal
Security teams love to argue about disclosure timing. Publish too early and you hand a map to anyone still unpatched. Publish too late and you look like you were hiding the furniture. Polygon chose the first path in practice: patch, validate, cover the fleet, then talk.
That choice will annoy people who want every bug discussed in public the minute it is named. Fair. Transparency is not free when the audience includes both users and adversaries. Perhaps the most interesting aspect is how ordinary this now feels in proof-of-stake land. Coordinated client upgrades are part of the job, not an emergency ritual reserved for once-a-decade crises.
Still, private windows create a trust tax. Users have to believe the “no exploitation on mainnet” line. They have to believe the testnet work was real. They have to believe the activation heights were not a soft invitation for a quiet experiment. I tend to believe competent teams that ship versions and then explain them. I also keep a notepad.
This Was Not Polygon’s First Infrastructure Shock
Hard forks are not a new habit here. In September 2025, developers pushed a fork after a software bug delayed transaction finality by as much as fifteen minutes. Validator synchronization and local fast finality took the hit. Block production and Ethereum checkpointing kept moving, which is a mixed comfort. The chain was not dead. It was late, and late is a dirty word in payments.
Bor and Heimdall updates restored milestone processing, state synchronization, and consensus finalization after that episode. A month later, the Rio mainnet upgrade brought witness-based stateless validation and a Validator-Elected Block Producer model. The network has been rewriting how it processes and verifies transactions for a while. Austin and Kyoto fit that longer pattern more than they break it.
In May 2026, average block time dropped to about 1.75 seconds, the first reduction since launch. A Polygon software engineer said the change lifted theoretical throughput to roughly 3,260 transactions per second and let the network handle about 14 percent more payments per second. That work sat inside a broader push toward stablecoin payments and decentralized finance volume. Security patches land differently when the product story is speed.
Faster blocks are a marketing line until a crafted transaction turns every validator into a decoding factory.
The Token Backdrop Nobody Should Overread
These fixes arrived after Polygon finished replacing MATIC with POL as the native gas and staking token on PoS. The migration started in September 2024 under the Polygon 2.0 roadmap. MATIC held directly on Polygon PoS converted to POL one-for-one. POL was meant to cover gas and staking, with more jobs expected as staking and aggregated-chain plans matured.
The market did not throw a party for the security note. POL traded near $0.09983 on August 30, down about 2.3 percent over twenty-four hours and 6.8 percent over seven days, according to market data bundled with the disclosure window. The token was still about 60.8 percent lower than a year earlier, with a market cap around $1.07 billion. That is not a morality tale. Security work rarely prints a candle.
Company structure moved too. In July, Polygon Labs cut another round of jobs while finishing the integration of a crypto exchange. The chief executive framed the restructuring as a path toward profitability by 2027 and a tighter payments-focused model. Readers can argue about that strategy all day. The relevant point for this story is simpler. A leaner firm still has to keep validators from eating poison packets.
How A Crafted Transaction Becomes A Network-Wide Tax
Let’s stay with the nested-field issue because it is the one that should make operators slightly angry. Cost asymmetry is the whole trick. The sender spends a little. The validator set spends a lot. Multiply that by every honest node that must decode the same junk, and you have a tax on coordination itself.
Proof-of-stake networks sell the idea that validators are doing shared work for shared safety. That only holds if the work is bounded. Unbounded decoding is not “more security.” It is a way to turn diligence into a liability. Kyoto’s depth scan is basically a bouncer with a ruler. Ugly. Necessary.
The Austin gas bound on state-sync events follows the same instinct. Bridge-related execution is useful. Unmetered useful work is how you turn a feature into a hose. I’ve seen too many systems treat “this path is special” as “this path can skip the budget.” Special paths are where tired attackers go first.
Denial Of Service Is Not A Soft Bug Class
People sometimes shrug at denial-of-service labels. No stolen funds, no inverted balances, so how bad can it be? Bad enough. If peers crash while processing a block, liveness wobbles. If validators burn cycles on nested junk, attention leaves the honest queue. Payments networks live and die on whether the next block arrives on time.
Polygon was careful to say these were not consensus-correctness flaws. That distinction is real. A node can agree on the rules and still fall over while applying them. Users do not experience that nuance. They experience a stuck transfer, a late settlement, or a dashboard that suddenly looks like a waiting room.
- Identify the cheap input that creates expensive shared work.
- Bound that work at admission and again at processing.
- Make the bound identical on every honest path.
- Force the fleet onto software that actually enforces the bound.
- Talk after the floor is no longer optional.
That sequence is not poetry. It is the only sequence that makes sense once you accept that public chains have public enemies. The last step is the one that creates headlines. The first four are the ones that keep those headlines from becoming incident reports.
What Node Operators Should Check Before They Call It Done
Version numbers are the start, not the finish. After Austin and Kyoto, an operator should confirm the running binaries, the activation heights, and whether the node is still following the canonical head. A box that “feels fine” can still be living on a quiet fork of one.
Watch memory and decode time. The old bugs lived in processing cost. If a node starts allocating like it just swallowed a dictionary, that is not a vibe. That is a signal. The same goes for milestone lag, checkpoint oddities, and replay confusion. Kyoto tried to sand those edges. Monitoring should prove the sandpaper worked.
Have a rollback height ready. The official guidance is that stranded nodes can upgrade and return to the proper pre-hard-fork point before catching up. That only helps if someone wrote the height down, stored the binaries, and practiced the motion when nobody was shouting. Emergency competence is mostly rehearsal.
Operator checklist after Austin and Kyoto: Confirm Bor 2.10.0 on every node Confirm Heimdall 0.11.0 on validators and full nodes Verify canonical head, not a private cousin Watch decode cost, memory, milestone lag Keep a known rollback height and a clean binary path
Why Payments Ambition Makes These Bugs Louder
Polygon has spent years trying to look like rails, not a novelty. Shorter block times, stablecoin volume, and a payments-shaped corporate story all point the same way. Rails are judged by boredom. Money should move. Nothing else should be interesting.
That ambition raises the cost of processing flaws. A collector NFT mint can survive a bad afternoon. A settlement network cannot. If one crafted transaction can make every validator do extra homework, the product promise starts to look theoretical. I do not think Austin and Kyoto were marketed as a payments feature. They are one anyway.
There is also a credibility loop. Institutions testing trade-finance flows do not need a thriller. They need evidence that the operator class can absorb a security finding without turning it into a carnival. Shipping first and explaining later is part of that evidence, provided the “no exploitation” claim keeps holding.
The Quiet Lesson About Client Diversity And Shared Assumptions
When a network leans on a small set of clients, a bug in one codepath is a bug in the culture. Bor and Heimdall are not anonymous utilities. They are the pair that defines what “Polygon PoS” means in practice. That concentration makes coordinated forks possible. It also makes coordinated pain possible.
I am not arguing for chaos. I am arguing for suspicion toward any path that assumes messages are shallow, fields are small, and special events will behave. Those assumptions are polite. Attackers are not polite. Depth limits and gas bounds are how you stop treating politeness as a security model.
Shared assumptions also explain why the same families of bugs keep visiting different chains. Serialization wrappers, replay keys, oversized sidecar data, unmetered side execution: these are not exotic. They are the seams of software that grew features faster than it grew fences. Kyoto and Austin are fences.
How To Read “No Exploitation Found” Without Getting Soft
Absence of evidence is not a trophy. It is a status report. Logs can miss a quiet probe. A failed attempt can look like noise. A successful attempt can look like load. Polygon’s statement is still useful. It tells you the team looked, and that the public chain did not present an obvious crime scene.
Treat it as a floor. The right follow-up questions are operational. How fast did the fleet move? How many nodes were still sitting on old binaries after activation? How painful was the rollback path for anyone who blinked? Those answers will not all be public. Operators will feel them first.
If you hold POL, or you build on the chain, the useful reaction is not a victory lap. It is a calendar reminder. Client versions drift. Runbooks rot. The next bound will fail somewhere else. Security work is seasonal only in the press. In the machine room it is weather.
What This Episode Says About Hard Forks As A Tool
Some users hear “hard fork” and imagine a civil war. That is the old drama. Here the fork is a seatbelt. Consensus rules and processing limits needed a clean cut so old software could not keep pretending it was current. Mandatory upgrades are rude. Optional upgrades are how vulnerabilities stay employed.
The fact that state migration was unnecessary is a gift. It means the social cost was concentrated in coordination, not reconstruction. That is the better kind of hard fork, if one has to choose. You still need the humans. You do not need to rebuild the house to change the locks.
Previous forks after finality delays and the Rio changes show a network willing to move the ground under operators when the old ground is unsafe or too slow. That willingness can look restless. It can also look adult. Chains that refuse to fork for safety often pay later in folklore and postmortems.
A Practical Take For Builders Sitting On Polygon PoS
If you ship an app on this network, you probably cannot patch Bor yourself. You can still act like an adult. Confirm that the RPC providers and validators you depend on are past the required versions. Ask the boring questions. Which client? Which height? When did they cut over?
Bridge-heavy products should care about the state-sync bound more than they care about the press wording. Deposits that execute extra work now live under a clearer budget. That can change edge-case behavior. Test the ugly paths. Do not assume last month’s gas intuition still holds.
If your product is latency-sensitive, watch milestone and checkpoint health after the Heimdall bump. Kyoto tried to stop a failed future-span from blocking a commit. Good. Prove it in your own telemetry. I would rather look paranoid for a week than look surprised for a quarter.
The Human Side Of A “Quiet” Security Week
There is always a person who applied the binary at 2 a.m. and then stared at a Grafana panel like it owed them rent. There is always a validator who hated the short notice and still did the work. Public chains run on that unromantic competence. The forum post is the last scene, not the first.
I have a soft spot for teams that accept looking late to the conversation because they refused to look late to the patch. That is not the same as giving anyone a blank check. It is an admission that adversaries read faster than comment threads. The internet is full of people who want every secret in public and every system unharmed. Those two wishes fight.
So yes, the week looks calm if you only watch the token. Underneath, a fleet changed clothes. Older nodes drifted off the canonical road. The rest of us get to argue about communication style, which is cheaper than arguing about a halted set.
Where The Story Goes From Here
The useful ending is not a slogan. It is a posture. Polygon used Austin to cap block-processing abuse in Bor. It used Kyoto to stop cheap nested messages from taxing Heimdall. It told operators the old versions are no longer the chain they think they are on. That is a complete thought.
What remains is follow-through. Keep the versions current. Keep the rollback path real. Keep treating special execution paths as first-class budget items. Keep remembering that a payments network is only as boring as its worst unmetered input.
Will another fork show up the next time a seam appears? Almost certainly. That is not a scandal. That is the maintenance contract nobody prints on a homepage. If this episode felt quiet, good. Quiet is the point. The loud version is the one where a single crafted transaction gets a full night of everyone else’s time.