# Heap Delta - what is this?

**URL:** <https://forum.dfinity.org/t/heap-delta-what-is-this/65423>\
**Category:** Language Support\
**Created:** [March 19, 2026, 3:00pm UTC](https://forum.dfinity.org/t/heap-delta-what-is-this/65423 "2026-03-19T15:00:08Z")\
**Posts on this page:** 5\
**Page:** 1

<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:** [March 19, 2026, 3:00pm UTC](https://forum.dfinity.org/t/heap-delta-what-is-this/65423/1 "2026-03-19T15:00:08Z")

</div>

I ran across this error today and was curious what it was and how to best avoid it. I had a pretty much max DTS transaction run just before this(trying to get an edge case optimized enough to stay atomic and under 40B Instructions:shaking\_face:)

```auto

    Canister call failed: Error from Wasm chunk store: Canister is heap delta rate limited. Current delta debit: 225660928, limit: 78643200.
    Use the `stored_chunks` API to check which hashes are present or top up the canister if it is low on cycles. See documentation: https://internetcomputer.org/docs/current/references/execution-errors#wasm-chunk-store-error. Reject code: CanisterError. Error code: CanisterContractViolation. Certified: true

```

I don’t think it is low on cycles…this is via pocket-ic and I give it a billionty-billion.

---

<div class="post-metadata">

**Author:** ![stefan.schneider](https://avatars.discourse-cdn.com/v4/letter/s/a3d4f5/32.png) [@stefan.schneider](https://forum.dfinity.org/u/stefan.schneider)\
**Post date:** [March 19, 2026, 3:17pm UTC](https://forum.dfinity.org/t/heap-delta-what-is-this/65423/2 "2026-03-19T15:17:16Z")

</div>

The heap delta rate limit caps how much a single canister is allowed to write to its state, both to protect the health of the overall subnet and for fairness with regards to other canisters.

If you write a lot in one transaction, messages in the next few rounds can get shed. You can just retry a few seconds later, when your canister gets some of its heap delta allowance back. In pocket-ic, you can also add a few dummy rounds to simulate that.

---

<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:** [March 19, 2026, 4:13pm UTC](https://forum.dfinity.org/t/heap-delta-what-is-this/65423/3 "2026-03-19T16:13:03Z")

</div>

Is my transaction thrown out, or I just have to chill for a bit?

---

<div class="post-metadata">

**Author:** ![stefan.schneider](https://avatars.discourse-cdn.com/v4/letter/s/a3d4f5/32.png) [@stefan.schneider](https://forum.dfinity.org/u/stefan.schneider)\
**Post date:** [March 19, 2026, 4:21pm UTC](https://forum.dfinity.org/t/heap-delta-what-is-this/65423/5 "2026-03-19T16:21:02Z")

</div>

I think it’s rejected. Was it a call to `upload_chunk`? You’ll have to retry, or if it’s several calls in a loop then consult `stored_chunks` like the error says, to find out which chunks made it.

---

<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:** [March 19, 2026, 4:55pm UTC](https://forum.dfinity.org/t/heap-delta-what-is-this/65423/6 "2026-03-19T16:55:05Z")

</div>

None of that sounds like my code…hmmm…the next test in my suite probably reuploads the canister to get a fresh baseline.

I guess the question I want to ask is, will the transaction that causes the disparity be rejected…or am I basically waiting for it to settle? I don’t think it failed because my test ended up passing and I resolved this by adding a bunch of pic.js ticks after my main function call that is being tested…but I wanted to confirm that there wasn’t some kind of hidden heap trap-\>rollback in addition to the instruction limit.
