Deterministic Storage Program name for (channelId, subnetMemberId).
Public so resolveMember can re-derive it; included verbatim in tests.
Components are percent-encoded so the layout stays one-to-one. Without
this guard, the pairs ("a:b", "c") and ("a", "b:c") would collide on
the same SP name and resolveMember could be tricked into returning a
binding from one channel/member context for a lookup of another.
Deterministic Storage Program name for
(channelId, subnetMemberId). Public soresolveMembercan re-derive it; included verbatim in tests.Components are percent-encoded so the layout stays one-to-one. Without this guard, the pairs
("a:b", "c")and("a", "b:c")would collide on the same SP name andresolveMembercould be tricked into returning a binding from one channel/member context for a lookup of another.