What is the inter-canister message size limit?

What is the inter-canister message size limit?

As a follow-up (assuming that a message must be consumed within a single round of consensus), what is the largest inter-canister message that could be received, and then saved to heap memory (applying the current instruction limit).

This response by @free indicates 10MB, but I’m curious how canister developers should approach this both in terms of a single message request, as well as if the changes to chunked wasm uploads apply to message sending.

2 Likes

I don’t have a deep understanding of the relationship between message size and instruction limits, but I’m quite sure that simply sending or receiving a 10 MB payload (whether in Rust or Motoko) is well under the instruction limit. Of course, your 10 MB payload may be a serialized structure, so serialization / deserialization may additionally require arbitrarily many instructions; same with processing it (e.g. converting an image).

Meaning that I don’t think there is anything special that canister developers must take into consideration when dealing with 10 MB large payloads.

And, as discussed in the thread you linked to, the canister payload size limit is 2 MB, with the exception of subnet-local requests, which can go up to 10 MB. Also per that same thread, we are considering deprecating (and eventually dropping) this 10 MB exception, now that chunked canister uploads are implemented, because as far as anyone can tell, large canister installs are currently the only use case; and since there is no way for canister developers / controllers to ensure that their (pairs of communicating) canisters are and will forever remain on the same subnet, relying on the 10 MB exception is actually error prone and dangerous.

1 Like