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 have root equal to 314

  • address[] 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 /r indicating root chainID directly followed by the value of root Chain ID (eg. /r314 for 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 t prefix denotes a test network. f denotes 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