Been following this thread in itās entirety and the direction seems really promising. Much appreciation for all the thoughtful contributions thus far. There are two notes that would help bring this proposal home, for me anyways. First, on timing attacks:
Please excuse this stab in the dark that Iām about to takeāI am not up to speed on timing attacksābut I want to poke at the notion that publishing cycles balance is tantamount to publishing all internal state. Iāll start with a question, which essentially question boils down to this: how much surface area does an attacker need to compromise secrets via a timing attack? Let me expand.
A canister can of course inspect message callers, restricting access such that only certain principal(s) stored in internal state can call any of its methods. (Thereās also message inspection, but this doesnāt cover inter-canister calls.) It seems to me that a canister sufficiently ālocked downā in this manner might provide the exact same timing data in response to all of an attackerās messages, since methods would uniformly route them into the same āpermission deniedā trap. Iād test this notion, but perhaps those of us more familiar timing attacks could disprove this for me theoretically and save me some experimentation. 
ā
Regardless of how right/wrong that idea is, I think itās easy to conceptualize a project that might want reveal cycles balance, without throwing open the barn doors of internal state, simply because itās possible to pick the lock. The suggestion here to lump in public stable memory pages seems like a possible overstep:
I would be in favor of an implementation of the āpublic canister status flagā that makes risks clear, makes good things easy and bad things hard, but doesnāt necessarily decide really broad swathes of your projectās security/privacy strategy for you.
This flag seems to be obviously useful and to have broad support in this thread. Perhaps Iāve missed the mark, but coupling it with āmake my stable memory pages publicā would turn many people off, and perhaps is not necessary. (Sorry if Iām asking you to make the same points again and again @ulan and @rossberg
)
While I do think the canisterland implementation of cycles balances seems quite workable for many purposes such as topups, community monitoring, etc., it might too heavy, intrusive, etc. for some projects to take the blackhole approach. Public cycles balances behind a flag could be a more attractive option in those instances, but making your canisterās entire internal state explicitly public might kill that notion altogether.