Description
Description
The Bech32 address format allows the use of 1 to 83 US-ASCII characters for the Human-Readable Part (hrp). An address could have an hrp like this:
xxx:yyy
Wasmd generates the port ID for IBC using the address of a contract, which is in Bech32 format. When the hrp is used as shown above, the resulting port ID takes the following form:
wasm.xxx:yyy1......
However, as specified in ICS-024 Host Requirements, IBC port IDs are only allowed to contain alphanumeric characters, as well as the following symbols:
'.', '_', '+', '-', '#', '[', ']', '<', '>'
This means that Bech32 addresses are incompatible with the requirements of ICS-024 Host Requirements.
The code responsible for creating the port ID in this way can be found in the following location:
The functions involved in this issue are:
- PortIDForContract
- ContractFromPortID
Possible Solutions
- Create parameters within the Wasmd module to allow for the translation of disallowed characters into the permitted set. For example, in the Wasmd module, you can add a parameter that specifies the translation of
:
to.
, or to another compatible character. - Change the method for creating the port ID by using, for example, using hexadecimal representation of the address and adding the chain ID as a prefix.
- Create a fork of the Wasmd repository, keep it aligned with the original, and add a custom translation. This is more of a question than a solution: Is it possible to do this without introducing compatibility issues?