Hi, I’m very new. Reading and trying to get my mind around everything, haven’t touched the code yet. A lot of my questions have been asked already, but one concept has me lost.
As I understand it, each canister will have a minimum of 7 to 151 (Edit: 7 to 28) duplicates for redundancy and consensus. Every message will operate on lots of canisters at once, and their memory pages all (or most) have to be identical by the end.
Implications:
- Everything that a canister can call will need to be able to be very idempotent. Every update must be written as an upsert?
- As the architecture gets deeper and we have many canisters built on top of each other, does consensus occur for every call? Will one call to my canister, become 10, become 100 to a canister I use, become 1000 to a canister it uses? It has to be this way, right? Or else there wouldn’t be any security I’d think.
- For something like a logging service, is there an existing way to de-dupe multiple duplicate messages? I haven’t looked super closely at the interfaces, will the 1000 calls share a guid of some sort?
- Update calls don’t return values, or they do if you wait on the future promise, wouldn’t the IC say that the majority response of an update respond “No change” and one, ignored as an outlier, responded with “Inserted”?