v1 storage layout:
├──OwnerUpgradeable
├──AbacusConnectionClient
│ ├──IAbacusConnectionManager public abacusConnectionManager; <--|
│ ├──IInterchainGasPaymaster public interchainGasPaymaster; | 50 slots
│ └──uint256[48] private __GAP; <--|
|
├──mapping(uint32 => bytes32) public routers; <--|
| | 50 slots
└──uint256[49] private __GAP; <--|
v2 storage layout:
├──OwnerUpgradeable
├──HyperlaneConnectionClient
│ ├──IMailbox public mailbox; <--|
│ ├──IInterchainGasPaymaster public interchainGasPaymaster; |
| ├──IInterchainSecurityModule public interchainSecurityModule; |
| | # __GAP should have been decreased to 47 because of | 51 slots
| | # the addition of interchainSecurityModule in order to |
| | # maintain backwards-compatibility between v1->v2 |
│ └──uint256[48] private __GAP; <--|
|
├──mapping(uint32 => bytes32) public routers; <--|
| | 50 slots
└──uint256[49] private __GAP; <--|
v3 storage layout:
├──OwnerUpgradeable
├──MailboxClient
│ ├──IPostDispatchHook public hook; <--|
│ └──IInterchainSecurityModule public interchainSecurityModule; | 2 slots
| # MailboxClient misses a gap to make it upgrade-safe <--|
|
├──EnumerableMapExtended.UintToBytes32Map internal _routers; <--|
| | 49 slots
└──uint256[48] private __GAP; <--|
v2 layout