Description
Summary
Missing parts of ICS05 & ICS26 that deal with the Module management
Problem Statement
We currently only offer one interface for host chains to inspect the port, which is the get_port
method available through TokenTransferValidationContext
, and missed any other portKeeper/Manager interfaces that should deal with getting/setting/binding/releasing ports that are done by taking the PortPath. (which isn't in use anywhere at the moment)
It seems that relocating the ports’ interface under the core context (better to say under the Router
trait as our module manager) would enable any application to access this facility without the need for defining an additional app-specific get_port
separately.
In addition, we are also missing the following parts of the spec that enforces module management:
Missed Specs
-
Port Allocation: The IBC handler MUST implement
bindPort
.bindPort
binds to an unallocated port -
Exclusive Binding: Once a module has bound to a port, no other modules can use that port until the module releases it
-
Storing Ports:
portPath
takes anIdentifier
and returns the store path under which the object-capability reference or owner module identifier (in our caseModuleId
) associated with a port should be stored. -
Port Management: A module can, on its option, release a port or transfer it to another module
-
Port naming: we conventionally hardcode certain ports such as "transfer". Though this can be used as the default/reference value, the specification does not make any assumptions about exact naming and it can be customized by end users. So forth, the router should be able to allocate a custom-named port to a transfer module