Most of these proposed changes make sense, especially considering that these cost increases are targeted towards actions that cause the largest latency & scalability hurdles on a per subnet basis.
Here’s my impressions of the side-effects (intended or not) from of each of the proposed increases, as well as a additional few suggestions/areas targeted at subnet scalability.
Increase the message base fee from 590K to 5M cycles.
Side effects:
- Makes event-based inter-canister messaging systems more expensive
- Incentivizes sending fewer, larger payloads
- Pushes developers to centralize logic into a single canister (fewer microservices/less parent ↔ child communication)
- Canisters will move to debounce/batch calls more (batch ICRC-1 & 2 endpoints would be nice to haves)
Edit: I see now that in inter-canister calls the calling canister pays the fees
Increase the instruction fee from 0.4 to 1 cycle.
Side effects:
- Makes computationally heavy apps (AI initiatives, etc.) ~2X more expensive to run.
- Makes heartbeat significantly more expensive & incentivizes timer usage
Increase the canister installation fee from 0.1 to 0.5 trillion cycles.
Side effects:
- Developers build more single/few-canister architectures instead of MMC architectures that dynamically spawn tens of thousands of canisters.
Additional ideas to consider:
-
Sandbox usage fee - In last week’s performance & scalability session, the team went over the improvements to the scheduler, as well as associated sandbox memory limits with plans to support 10-15k canisters in sandboxes at a time. It might sense to design a fee for operations that incur a sandbox overhead (activation and/or eviction). These types of fees would encourage usage of a smaller number of canisters, rather than frequent activation & eviction of tens of thousands of canisters. Then you already have message & instruction fee increases that ensures a canister is paying a fair amount for compute while it is activated and occupies sandbox space.
-
Raising the idle canister fee - as Bjorn mentioned above, subnets with 90k+ canisters have a significantly lower finalization rate than other subnets. However, with performance cliffs at around 100k, even with the canister increase bump it takes ~50k USD for an attacker to fill up a new subnet an important canister is on (ICPSwap, etc.) with fresh canisters that do essentially nothing. Many large project teams have valuations in the millions, whereas these spin-up costs are just a one time fee. Most subnets have at least 20k canisters since September, so this one-time payment number to get to 100k canisters per subnet is reduced to ~40k USD. Raising the idle canister fee means the attacker would need to continue paying the protocol to keep up all canisters in operation.