Addressing
IPC Actors addressing
Filecoin adressing schemes
When the contracts described below (Gateway, Registry, Subnet) are deployed to a Filecoin network (e.g. Mainnet, Calibration), f0, f2 and f410 addresses will be assigned to them. The latter is equivalent to an Ethereum hex address. Detailed explanation of Filecoin addressing scheme is available in the documentation.
This also applies to IPC L2+ networks since IPC inherits the addressing model, the Init actor mechanics, and the EVM runtime and the Ethereum Address Manager from Filecoin.
Gateway Actor and Registry Actor addressing
Gateway and Registry actors are EVM smart contracts, so they inherit the addresses specified above.
Subnet Actor addressing
Subnet Actor is an EVM smart contract deployed separately for each child Subnet and registered in the parent's Gateway. It gets assigned the address types stated above. The creation of Subnet Actor is performed via the Registry actor (which acts like a factory). The Ethereum address acquired by the Subnet Actor is determined by the semantics of the EVM CREATE opcode. It's worth noting that the caller address seen by CREATE will be that of the Registry diamond contract. One can use this fact to counterfactually predict subnet actor deployment addresses ahead of time, although being aware of the non-determinism present in us using CREATE instead of CREATE2 for the time being.
Subnet address
IPC subnets are uniquely identified by their SubnetId which consists of
uint64 root- a Chain ID of the root subnet. Eg. all subnets anchored to Filecoin Mainnet haverootequal to314address[] route- the array of addresses down the IPC hierarchy.
SubnetIDHelper contains utility functions to create and operate on SubnetIDs
String representation
The string representation of subnet address equals:
prefix
/rindicating root chainID directly followed by the value ofrootChain ID (eg./r314for Filecoin Mainnet).concatenated with the f410 addresses of the subnet actors top-to-bottom in the hierarchy, separated by
/as a divider.
Example 1: the string representation of the Filecoin Mainnet itself is /r314 as this is a root, not anchored to any parent.
Example 2: the string representation of an L3 subnet anchored to Filecoin Calibration (chainID equal 314159) could be /r314159/t410fgalav7yo342zbem3kkqhx4l5d43d3iyswlpwkby/t410fixm5mqenkfm2g6msjt2chs36cxaa7ka745xo2jq
where t410fgalav7yo342zbem3kkqhx4l5d43d3iyswlpwkby and t410fixm5mqenkfm2g6msjt2chs36cxaa7ka745xo2jq are addresses of L2 and L3 subnet respectively.
Note that the
tprefix denotes a test network.fdenotes mainnet.
Binary representation
SubnetID is serialised using keccak256(abi.encode(SubnetID)) (utility function).
This hash is used as the way to verify equality of 2 SubnetID s (utility function), store mapping of hash to the Subnet object etc.
IPC Address
IPCAddress contains both SubnetID and FvmAddress to uniquely identify an actor (EOA or smart contract) existing within the IPC hierarchy.
Last updated