# Urgent: SNS Governance Canisters Are Garbage Collecting Old Proposals – Immediate Fix Required

**URL:** <https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439>\
**Category:** SNS Framework\
**Tags:** Functional-Programming, candid, Discussing, sns\
**Created:** [September 1, 2025, 11:46am UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439 "2025-09-01T11:46:10Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![bitel911](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/bitel911/32/29385_2.png) [@bitel911](https://forum.dfinity.org/u/bitel911)\
**Post date:** [September 1, 2025, 11:46am UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/1 "2025-09-01T11:46:10Z")

</div>

# 

Hello DFINITY community and team,

@Leadership@lara

I’m posting this as the recently elected SNS Canister Management Voting Grant Neuron holder, and I’m deeply concerned about a critical issue I’ve uncovered while auditing SNS DAO proposals. This affects the integrity of governance data on the Internet Computer and needs urgent attention from DFINITY to prevent potential loss of historical records and enable proper auditing.

## Background and Discovery

Over the weekend, I set out to audit treasury transfer proposals across various SNS DAOs. I used the excellent Social Hub app developed by Snassy from Sneed DAO ([app.sneeddao.com](http://app.sneeddao.com)), which allows fetching and exporting proposals via the NNS API. Snassy even added CSV export functionality at my request to make bulk downloads easier.

While exporting proposals filtered by topic (e.g., “Transfer SNS Treasury Funds”), I noticed significant discrepancies. For example, in OpenChat (SNS root canister: 3e3x2-xyaaa-aaaaq-aaalq-cai):

- The app indicated 1,339 total proposals for this topic.
- However, only 95 were actually loadable and exportable.
- Proposal IDs showed large gaps (e.g., Proposal 48 exists, but 49 does not; jumps from 1,030 to 1,032).
- Direct checks on nns.ic0.app confirmed these missing proposals return “Proposal not found” errors.

Initially, I thought this was a bug in the Social Hub app, so I debugged with Snassy. We confirmed the app was correctly querying the NNS API— the proposals simply don’t exist there anymore.

I then reached out to the OpenChat dev team for clarification. Their explanation was shocking: SNS governance canisters perform **garbage collection on proposals per action/topic** , limited by a parameter called `max_proposals_to_keep_per_action`. For OpenChat, this is set to 100 (likely the default for many SNSes).

- Topics with high proposal volumes (like treasury transfers) have old proposals deleted once the limit is exceeded, creating gaps in IDs.
- Topics with fewer proposals (e.g., adding nervous system functions) retain their history.
- Proposal IDs increment sequentially across all topics, but garbage collection is topic-specific, leading to non-sequential visible IDs.

The IC Dashboard ([dashboard.internetcomputer.org](http://dashboard.internetcomputer.org)) shows more complete history because it pulls and stores data in its own DB, whereas the NNS app and API fetch live from the canisters, where old data is gone.

## Evidence and Examples

- **OpenChat Treasury Transfers** : 1,339 indicated, but only ~95 retrievable via API. Missing examples: Proposal 49 (nns.ic0.app/proposal/?u=3e3x2-xyaaa-aaaaq-aaalq-cai&proposal=49) – not found.
- Similar issues in other SNSes like Water Neuron (282 indicated treasury proposals, but only ~60 retrievable).
- Sneed DAO (smaller volume) has no missing proposals, as limits aren’t exceeded.
- Confirmed via canister parameters: For the SNS root canister 2jvtu-yqaaa-aaaaq-aaama-cai, `max_proposals_to_keep_per_action` is 100 (visible on [dashboard.internetcomputer.org/canister/2jvtu-yqaaa-aaaaq-aaama-cai#get\_nervous\_system\_parameters](http://dashboard.internetcomputer.org/canister/2jvtu-yqaaa-aaaaq-aaama-cai#get_nervous_system_parameters)).

I’ve compiled a preliminary list of affected SNSes in this Google Sheet for reference: [https://docs.google.com/spreadsheets/d/1gs7G0AV4KZYtGt-xTKzM3kuyuSqiNzcn4OT6acTnJio/edit?usp=sharing](https://docs.google.com/spreadsheets/d/1gs7G0AV4KZYtGt-xTKzM3kuyuSqiNzcn4OT6acTnJio/edit?usp=sharing)

## Why This Is a Major Problem

- **Auditing Impossible** : Without full proposal history, we can’t verify treasury movements, decisions, or potential misuse. For blockchain governance, this is unacceptable—how can we “audit all the proposals” if they’re deleted?
- **Blockchain Integrity** : IC is meant to be immutable and transparent. Garbage collecting governance data undermines trust, especially for DAOs handling funds.
- **Wider Implications** : This affects multiple SNSes. If not fixed, historical data loss will worsen as DAOs grow. It also echoes past issues, like vote data being discarded post-rewards.

## Call to Action

DFINITY team: As the stewards of SNS architecture, please address this ASAP.

1. **Immediate Fix** : Increase or remove `max_proposals_to_keep_per_action` limits across all SNSes. Make full proposal history persistent by default.
2. **Data Recovery** : Do you have backups or replicas of garbage-collected proposals? If so, can they be restored or made queryable (e.g., via API or dashboard export)?
3. **Explanation and Timeline** : Provide a detailed response on why this design was chosen, who’s responsible, and a timeline for resolution. If this is an NNS/SNS core function, propose an upgrade motion.
4. **Community Input** : Let’s discuss alternatives, like off-chain archiving or canister upgrades, to preserve data without performance hits.

This isn’t just a technical glitch—it’s a governance crisis. I’ve paused my full audit until this is resolved, but the community deserves transparency now.

Looking forward to your urgent response.

Best,  
Dexter  
SNS Canister Management Voting Grant Neuron

P.S. Shoutout to Snassy for the Social Hub app—it’s invaluable for DAO oversight. If anyone wants to verify, try exporting from [app.sneeddao.com](http://app.sneeddao.com) and check against NNS.

 ![Scherm­afbeelding 2025-09-01 om 13.35.09](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/2/f/2fffae61ef0f662461d221e0cf0c96032fd39f43.jpeg)

 ![Scherm­afbeelding 2025-09-01 om 13.36.03](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/d/4/d42be15eeb51c78106b17240811fd92365a5bc08.jpeg)

 ![Scherm­afbeelding 2025-09-01 om 13.35.49](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/f/8/f898b61e87593cf9d9070464a656d26616061e91.jpeg)

> **[Network Nervous System](https://nns.ic0.app/proposal/?u=3e3x2-xyaaa-aaaaq-aaalq-cai&proposal=48)**
>
> Dapp for Staking Neurons + Voting Onchain

[https://nns.ic0.app/proposal/?u=3e3x2-xyaaa-aaaaq-aaalq-cai&proposal=49](https://nns.ic0.app/proposal/?u=3e3x2-xyaaa-aaaaq-aaalq-cai&proposal=49)

> **[proposals\_3e3x2-xyaaa-aaaaq-aaalq-cai\_2025-08-31T15-38-14\_TransferSnsTreasuryFun...](https://docs.google.com/spreadsheets/d/1gs7G0AV4KZYtGt-xTKzM3kuyuSqiNzcn4OT6acTnJio/edit?gid=1475823560#gid=1475823560)**
>
> This Sheet is private

> **[Sneed DAO](https://app.sneeddao.com/proposals?sns=3e3x2-xyaaa-aaaaq-aaalq-cai)**

Missing ID’s look at the numbers

 ![OPENCHAT](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/a/0/a014ee455dbb7284ef6cee7b295a7cf235dfdac5.jpeg)

---

<div class="post-metadata">

**Author:** ![bitel911](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/bitel911/32/29385_2.png) [@bitel911](https://forum.dfinity.org/u/bitel911)\
**Post date:** [September 1, 2025, 11:48am UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/2 "2025-09-01T11:48:22Z")

</div>

@Accumulating.icp Made a Post about auditing the SNS’s But he could not be acuurate due to missing proposals, thats why his numbers are not accurate

---

<div class="post-metadata">

**Author:** ![bitel911](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/bitel911/32/29385_2.png) [@bitel911](https://forum.dfinity.org/u/bitel911)\
**Post date:** [September 1, 2025, 11:51am UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/3 "2025-09-01T11:51:01Z")

</div>

Meaning that we can not AUDIT THE SNS’S that have reached over their set amount, what a shame who is resposible for this?

---

<div class="post-metadata">

**Author:** ![rem.codes](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/rem.codes/32/40260_2.png) [@rem.codes](https://forum.dfinity.org/u/rem.codes)\
**Post date:** [September 1, 2025, 12:02pm UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/4 "2025-09-01T12:02:50Z")

</div>

I think its better to look at more recent SNSes to see if the issue still occurs.

Openchat was the second SNS to launch, so the whole framework just took shape, note that all SNSes before Nuance still used the old (multi step) SNS creation path, it could be that there were some compatibility issues with the new upgrade, like a change in proposal types that caused serialization issues of the payloads and needed to be removed.

Note that this is just an assumption and pretty sure that @aterga or @lara knows the answer to this.

> Edit: i misunderstood the initial issue so the above response isn’t correct

---

<div class="post-metadata">

**Author:** ![bitel911](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/bitel911/32/29385_2.png) [@bitel911](https://forum.dfinity.org/u/bitel911)\
**Post date:** [September 1, 2025, 12:06pm UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/5 "2025-09-01T12:06:25Z")

</div>

This function should be removed from the SNS framework.

---

<div class="post-metadata">

**Author:** ![bitel911](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/bitel911/32/29385_2.png) [@bitel911](https://forum.dfinity.org/u/bitel911)\
**Post date:** [September 1, 2025, 12:12pm UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/6 "2025-09-01T12:12:47Z")

</div>

> [@bitel911](#):
>
> max\_proposals\_to\_keep\_per\_action

> <https://github.com/dfinity/ic/blob/master/rs/sns/governance/proto/ic_sns_governance/pb/v1/governance.proto>

”// The maximum number of proposals to keep, per action. When the  
// total number of proposals for a given action is greater than this  
// number, the oldest proposals that have reached final decision state  
// (rejected, executed, or failed) and final rewards status state  
// (settled) may be deleted.  
//  
// The number must be larger than zero and at most be as large as the  
// defined ceiling MAX\_PROPOSALS\_TO\_KEEP\_PER\_ACTION\_CEILING.  
optional uint32 max\_proposals\_to\_keep\_per\_action = 4;

---

<div class="post-metadata">

**Author:** ![rem.codes](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/rem.codes/32/40260_2.png) [@rem.codes](https://forum.dfinity.org/u/rem.codes)\
**Post date:** [September 1, 2025, 12:13pm UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/7 "2025-09-01T12:13:24Z")

</div>

Think there were some talks going about an archive canister for proposals with also the voting history. But if your goal is to check `Transfer SNS Treasury Funds` then you could also checkout the ledger to fetch the verified data.

also note that you can fetch these proposals from the offchain api as wel  
[https://sns-api.internetcomputer.org/api/v1/snses/3e3x2-xyaaa-aaaaq-aaalq-cai/proposals/49](https://sns-api.internetcomputer.org/api/v1/snses/3e3x2-xyaaa-aaaaq-aaalq-cai/proposals/49)

---

<div class="post-metadata">

**Author:** ![bitel911](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/bitel911/32/29385_2.png) [@bitel911](https://forum.dfinity.org/u/bitel911)\
**Post date:** [September 1, 2025, 12:15pm UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/8 "2025-09-01T12:15:28Z")

</div>

I Did not know this, Snassy a well known developer didnt know this, again all proposals should be in the SNS / NNS and not removed from the dashboard

Thanks for this but the point stands, the Max\_proposals\_per\_topic Should not exisist

---

<div class="post-metadata">

**Author:** ![rem.codes](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/rem.codes/32/40260_2.png) [@rem.codes](https://forum.dfinity.org/u/rem.codes)\
**Post date:** [September 1, 2025, 12:21pm UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/9 "2025-09-01T12:21:19Z")

</div>

I’m guessing the `max_proposals_per_topic` is still from the days that we only had limited heap storage, so this was probably an optimization the prevent bricking the canister. But good to bring it up, lets see what the reason is, curious as wel.

---

<div class="post-metadata">

**Author:** ![Accumulating.icp](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/accumulating.icp/32/29830_2.png) [@Accumulating.icp](https://forum.dfinity.org/u/Accumulating.icp)\
**Post date:** [September 1, 2025, 12:34pm UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/10 "2025-09-01T12:34:48Z")

</div>

I had no issues loading any proposals - I pulled from Dashboard, not NNS.

---

<div class="post-metadata">

**Author:** ![bitel911](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/bitel911/32/29385_2.png) [@bitel911](https://forum.dfinity.org/u/bitel911)\
**Post date:** [September 1, 2025, 12:35pm UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/11 "2025-09-01T12:35:20Z")

</div>

From here?  
[https://sns-api.internetcomputer.org/api/v1/snses/3e3x2-xyaaa-aaaaq-aaalq-cai/proposals/49](https://sns-api.internetcomputer.org/api/v1/snses/3e3x2-xyaaa-aaaaq-aaalq-cai/proposals/49)

Go to sneed hub, select openchat and teasury you will see 1339 proposals with that topic on dahsboard you only will se 96 of them

---

<div class="post-metadata">

**Author:** ![bitel911](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/bitel911/32/29385_2.png) [@bitel911](https://forum.dfinity.org/u/bitel911)\
**Post date:** [September 1, 2025, 12:38pm UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/13 "2025-09-01T12:38:21Z")

</div>

![Scherm­afbeelding 2025-09-01 om 14.37.56](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/f/3/f370d8780607042ba635ba169ddb90e6473a3572.jpeg)

Check for yourself [https://app.sneeddao.com/proposals?sns=3e3x2-xyaaa-aaaaq-aaalq-cai](https://app.sneeddao.com/proposals?sns=3e3x2-xyaaa-aaaaq-aaalq-cai)

---

<div class="post-metadata">

**Author:** ![WebTreeSoftwareSolut](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/webtreesoftwaresolut/32/35012_2.png) [@WebTreeSoftwareSolut](https://forum.dfinity.org/u/WebTreeSoftwareSolut)\
**Post date:** [September 1, 2025, 12:45pm UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/14 "2025-09-01T12:45:01Z")

</div>

> [@Accumulating.icp](#):
>
> I had no issues loading any proposals - I pulled from Dashboard, not NNS

This is still problematic even if possible.

Anyone should be able to pull this data from the chain.

The ic-api which the dashboard agregates and storew its Data from is still not even open source. To my knowledge.

---

<div class="post-metadata">

**Author:** ![rem.codes](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/rem.codes/32/40260_2.png) [@rem.codes](https://forum.dfinity.org/u/rem.codes)\
**Post date:** [September 1, 2025, 12:49pm UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/15 "2025-09-01T12:49:34Z")

</div>

The [dashboard](https://dashboard.internetcomputer.org/sns/3e3x2-xyaaa-aaaaq-aaalq-cai/proposal/49) uses the offchain api, sneed and toolkit use the governance canisters to fetch the proposals.

---

<div class="post-metadata">

**Author:** ![skilesare](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/skilesare/32/5609_2.png) [@skilesare](https://forum.dfinity.org/u/skilesare)\
**Post date:** [September 1, 2025, 12:50pm UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/16 "2025-09-01T12:50:11Z")

</div>

ICRC-133 defines a generic call and state change capture in an icrc3 log that can be easily archived using the existing icrc-3 framework to keep utility canister light while preserving transparency.

We may need to adjust it a bit give the proposed ICRC-3 updates, but it should be fairly robust for capturing the content and outcome of governance votes(every vote may be a bit chatty…sorry @Snassy-icp 🫤), but perhaps votes could be mekleized somehow?

---

<div class="post-metadata">

**Author:** ![Accumulating.icp](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/accumulating.icp/32/29830_2.png) [@Accumulating.icp](https://forum.dfinity.org/u/Accumulating.icp)\
**Post date:** [September 1, 2025, 1:24pm UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/17 "2025-09-01T13:24:23Z")

</div>

Dashboard will provide you with the complete registry of proposals 🤝

[https://dashboard.internetcomputer.org/sns/3e3x2-xyaaa-aaaaq-aaalq-cai/proposals](https://dashboard.internetcomputer.org/sns/3e3x2-xyaaa-aaaaq-aaalq-cai/proposals)

---

<div class="post-metadata">

**Author:** ![Gabriel](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/gabriel/32/546_2.png) [@Gabriel](https://forum.dfinity.org/u/Gabriel)\
**Post date:** [September 1, 2025, 1:27pm UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/18 "2025-09-01T13:27:24Z")

</div>

![image](https://us1.discourse-cdn.com/flex023/uploads/dfn/original/3X/6/2/620da774d8e7c93793e11e1425f22431d047af2c.png)

---

<div class="post-metadata">

**Author:** ![lara](https://avatars.discourse-cdn.com/v4/letter/l/e274bd/32.png) [@lara](https://forum.dfinity.org/u/lara)\
**Post date:** [September 1, 2025, 1:42pm UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/19 "2025-09-01T13:42:37Z")

</div>

Hi all,

you are right, the SNS governance proposal keeps 100 proposals per type. In the NNS there is a similar limit per proposal topic.  
This has always been the case and has been publicly discussed before, both in the forum and in public global R&D presentations.

The main reason for this is storage. In the SNSs, the proposals in the governance canister are needed to update and recover the SNS canister as well as the dapp canisters. Therefore, it is indispensable to ensure that the governance canister does not run out of memory.  
Back when the governance canister was implemented, there was no support for stable storage. Therefore, proposals are stored in heap and the limit needs to take this into account.  
Note that for this it doesn’t matter when an SNS was launched: in general, all SNSs that regularly upgrade to the latest version share the same SNS governance code and thus behavior. For this specific detail, all SNS versions had the same behavior.

For the NNS, we plan to look into moving proposals to stable storage later this year so that the constraint can be relaxed further there.

For interested people who would like to look at old proposals, the proposals are backed up on the dashboard. For example, you can find them [here](https://dashboard.internetcomputer.org/sns/3e3x2-xyaaa-aaaaq-aaalq-cai/proposals) for the OpenChat DAO.  
If someone would like to keep all the proposals on-chain, they could build a canister that regularly pulls proposals and makes them publicly available there. Such a canister could even be owned by the SNS that it backs up - avoiding having to trust one individual.

---

<div class="post-metadata">

**Author:** ![bitel911](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/bitel911/32/29385_2.png) [@bitel911](https://forum.dfinity.org/u/bitel911)\
**Post date:** [September 1, 2025, 1:46pm UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/20 "2025-09-01T13:46:06Z")

</div>

Thanks for the Response, excuses to be so alarming, but neither me or Sneed knew that they are backed up, as the person that would appreciate the storage of all proposals on chain I will take it upon me to build this canister maybe with the help of @snassy-icp and when its ready will show it for a proper audit.

As you understand we are talking about blob storage and such but the proposals are not even saved on chain which is a massive issue from my perspective at least.

I will close this topic off now and will open a new on once I am far enough with this canister development.

Cheers,

Dexter

---

<div class="post-metadata">

**Author:** ![Trils](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/trils/32/17579_2.png) [@Trils](https://forum.dfinity.org/u/Trils)\
**Post date:** [September 1, 2025, 2:14pm UTC](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439/21 "2025-09-01T14:14:37Z")

</div>

Maybe next time just ask first?

[Next page](https://forum.dfinity.org/t/urgent-sns-governance-canisters-are-garbage-collecting-old-proposals-immediate-fix-required/56439.md?page=2)
