Indirect addresses work together with asset registries.
From the specification:
Indirect
The BBAN for this code when indirect will be 16 characters and will comprise three fields:
Asset identifier, 3-character alphanumeric (< 16-bit);
Institution identifier, 4-character alphanumeric (< 21-bit);
Institution client identifier, 9-character alphanumeric (< 47-bit);
Including the four initial characters, this leads to a final client-account address length of 20 characters, of the form:
XE81ETHXREGGAVOFYORK
Split into:
XE The country code for Ethereum;
81 The checksum;
ETH The asset identifier within the client account - in this case, "ETH" is the only valid asset identifier, since Ethereum's base registry contract supports only this asset;
XREG The institution code for the account - in this case, Ethereum's base registry contract;
GAVOFYORK The client identifier within the institution - in this case, a direct payment with no additional data to whatever primary address is associated with the name "GAVOFYORK" in Ethereum's base registry contract;
When sending a transaction to an Indirect ICAP address, the following will happen:
- The ICAP registry is queried with the institution code. This will give a contract address for the institution if found.
- A specific contract transaction is made with the institution which includes the client identifier.
I do not think this part is fully specified yet, although there is a hint at it in the web3.js sources: