Please, explain (it also should be in docs), how cycles in CyclesLedger.create_canister
work.
Does it always take cycles from caller canister?
If yes, it is a design error. Cycles are better managed with ExperimentalCycles
module of the standard library: It allows to take cycles not only from the caller canister, but from caller of caller canister, if it add<system>()
cycles, etc. This one seems to support taking cycles only from the direct caller.
Also, it is unclear how this is implemented: Does CyclesLedger
have special rights to take cycles from a canister that didn’t allow this explicitly?