@hyperlane-xyz/core 1.3.2 → 1.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/contracts/interfaces/IInterchainSecurityModule.sol +1 -1
  2. package/contracts/interfaces/{IAggregationIsm.sol → isms/IAggregationIsm.sol} +1 -1
  3. package/contracts/interfaces/isms/IRoutingIsm.sol +17 -0
  4. package/contracts/isms/aggregation/AbstractAggregationIsm.sol +2 -2
  5. package/contracts/isms/routing/AbstractRoutingIsm.sol +45 -0
  6. package/contracts/isms/routing/DomainRoutingIsm.sol +105 -0
  7. package/contracts/isms/routing/DomainRoutingIsmFactory.sol +46 -0
  8. package/contracts/isms/routing/InterchainAccountIsm.sol +42 -0
  9. package/contracts/libs/MinimalProxy.sol +7 -0
  10. package/contracts/libs/middleware/InterchainAccountMessage.sol +9 -0
  11. package/contracts/mock/MockHyperlaneEnvironment.sol +6 -3
  12. package/contracts/mock/MockMailbox.sol +60 -9
  13. package/contracts/test/TestMultisigIsm.sol +39 -0
  14. package/dist/contracts/interfaces/index.d.ts +0 -1
  15. package/dist/contracts/interfaces/index.d.ts.map +1 -1
  16. package/dist/contracts/interfaces/{IAggregationIsm.d.ts → isms/IAggregationIsm.d.ts} +1 -1
  17. package/dist/contracts/interfaces/isms/IAggregationIsm.d.ts.map +1 -0
  18. package/dist/contracts/interfaces/isms/IAggregationIsm.js.map +1 -0
  19. package/dist/contracts/interfaces/isms/IRoutingIsm.d.ts +67 -0
  20. package/dist/contracts/interfaces/isms/IRoutingIsm.d.ts.map +1 -0
  21. package/dist/contracts/{test/TestIsm.js → interfaces/isms/IRoutingIsm.js} +1 -1
  22. package/dist/contracts/interfaces/isms/IRoutingIsm.js.map +1 -0
  23. package/dist/contracts/interfaces/isms/index.d.ts +2 -0
  24. package/dist/contracts/interfaces/isms/index.d.ts.map +1 -1
  25. package/dist/contracts/isms/index.d.ts +2 -0
  26. package/dist/contracts/isms/index.d.ts.map +1 -1
  27. package/dist/contracts/isms/routing/AbstractRoutingIsm.d.ts +67 -0
  28. package/dist/contracts/isms/routing/AbstractRoutingIsm.d.ts.map +1 -0
  29. package/dist/contracts/isms/routing/AbstractRoutingIsm.js +4 -0
  30. package/dist/contracts/isms/routing/AbstractRoutingIsm.js.map +1 -0
  31. package/dist/contracts/isms/routing/DomainRoutingIsm.d.ts +197 -0
  32. package/dist/contracts/isms/routing/DomainRoutingIsm.d.ts.map +1 -0
  33. package/dist/contracts/isms/routing/DomainRoutingIsm.js +4 -0
  34. package/dist/contracts/isms/routing/DomainRoutingIsm.js.map +1 -0
  35. package/dist/contracts/isms/routing/DomainRoutingIsmFactory.d.ts +64 -0
  36. package/dist/contracts/isms/routing/DomainRoutingIsmFactory.d.ts.map +1 -0
  37. package/dist/contracts/isms/routing/DomainRoutingIsmFactory.js +4 -0
  38. package/dist/contracts/isms/routing/DomainRoutingIsmFactory.js.map +1 -0
  39. package/dist/contracts/isms/routing/InterchainAccountIsm.d.ts +67 -0
  40. package/dist/contracts/isms/routing/InterchainAccountIsm.d.ts.map +1 -0
  41. package/dist/contracts/isms/routing/InterchainAccountIsm.js +4 -0
  42. package/dist/contracts/isms/routing/InterchainAccountIsm.js.map +1 -0
  43. package/dist/contracts/isms/routing/index.d.ts +5 -0
  44. package/dist/contracts/isms/routing/index.d.ts.map +1 -0
  45. package/dist/contracts/isms/routing/index.js +3 -0
  46. package/dist/contracts/isms/routing/index.js.map +1 -0
  47. package/dist/contracts/mock/MockMailbox.d.ts +47 -17
  48. package/dist/contracts/mock/MockMailbox.d.ts.map +1 -1
  49. package/dist/contracts/test/{TestIsm.d.ts → TestMultisigIsm.d.ts} +13 -5
  50. package/dist/contracts/test/TestMultisigIsm.d.ts.map +1 -0
  51. package/dist/contracts/test/TestMultisigIsm.js +4 -0
  52. package/dist/contracts/test/TestMultisigIsm.js.map +1 -0
  53. package/dist/contracts/test/index.d.ts +1 -1
  54. package/dist/contracts/test/index.d.ts.map +1 -1
  55. package/dist/factories/contracts/Mailbox__factory.d.ts +1 -1
  56. package/dist/factories/contracts/Mailbox__factory.js +1 -1
  57. package/dist/factories/contracts/ValidatorAnnounce__factory.d.ts +1 -1
  58. package/dist/factories/contracts/ValidatorAnnounce__factory.js +1 -1
  59. package/dist/factories/contracts/interfaces/index.d.ts +0 -1
  60. package/dist/factories/contracts/interfaces/index.d.ts.map +1 -1
  61. package/dist/factories/contracts/interfaces/index.js +1 -3
  62. package/dist/factories/contracts/interfaces/index.js.map +1 -1
  63. package/dist/factories/contracts/interfaces/{IAggregationIsm__factory.d.ts → isms/IAggregationIsm__factory.d.ts} +1 -1
  64. package/dist/factories/contracts/interfaces/isms/IAggregationIsm__factory.d.ts.map +1 -0
  65. package/dist/factories/contracts/interfaces/isms/IAggregationIsm__factory.js.map +1 -0
  66. package/dist/factories/contracts/interfaces/isms/IRoutingIsm__factory.d.ts +23 -0
  67. package/dist/factories/contracts/interfaces/isms/IRoutingIsm__factory.d.ts.map +1 -0
  68. package/dist/factories/contracts/interfaces/isms/IRoutingIsm__factory.js +74 -0
  69. package/dist/factories/contracts/interfaces/isms/IRoutingIsm__factory.js.map +1 -0
  70. package/dist/factories/contracts/interfaces/isms/index.d.ts +2 -0
  71. package/dist/factories/contracts/interfaces/isms/index.d.ts.map +1 -1
  72. package/dist/factories/contracts/interfaces/isms/index.js +5 -1
  73. package/dist/factories/contracts/interfaces/isms/index.js.map +1 -1
  74. package/dist/factories/contracts/isms/aggregation/StaticAggregationIsmFactory__factory.d.ts +1 -1
  75. package/dist/factories/contracts/isms/aggregation/StaticAggregationIsmFactory__factory.js +1 -1
  76. package/dist/factories/contracts/isms/aggregation/StaticAggregationIsm__factory.d.ts +1 -1
  77. package/dist/factories/contracts/isms/aggregation/StaticAggregationIsm__factory.js +1 -1
  78. package/dist/factories/contracts/isms/index.d.ts +1 -0
  79. package/dist/factories/contracts/isms/index.d.ts.map +1 -1
  80. package/dist/factories/contracts/isms/index.js +2 -1
  81. package/dist/factories/contracts/isms/index.js.map +1 -1
  82. package/dist/factories/contracts/isms/multisig/LegacyMultisigIsm__factory.d.ts +1 -1
  83. package/dist/factories/contracts/isms/multisig/LegacyMultisigIsm__factory.js +1 -1
  84. package/dist/factories/contracts/isms/multisig/StaticMultisigIsmFactory__factory.d.ts +1 -1
  85. package/dist/factories/contracts/isms/multisig/StaticMultisigIsmFactory__factory.js +1 -1
  86. package/dist/factories/contracts/isms/multisig/StaticMultisigIsm__factory.d.ts +1 -1
  87. package/dist/factories/contracts/isms/multisig/StaticMultisigIsm__factory.js +1 -1
  88. package/dist/factories/contracts/isms/routing/AbstractRoutingIsm__factory.d.ts +23 -0
  89. package/dist/factories/contracts/isms/routing/AbstractRoutingIsm__factory.d.ts.map +1 -0
  90. package/dist/factories/contracts/isms/routing/AbstractRoutingIsm__factory.js +74 -0
  91. package/dist/factories/contracts/isms/routing/AbstractRoutingIsm__factory.js.map +1 -0
  92. package/dist/factories/contracts/isms/routing/DomainRoutingIsmFactory__factory.d.ts +55 -0
  93. package/dist/factories/contracts/isms/routing/DomainRoutingIsmFactory__factory.d.ts.map +1 -0
  94. package/dist/factories/contracts/isms/routing/DomainRoutingIsmFactory__factory.js +83 -0
  95. package/dist/factories/contracts/isms/routing/DomainRoutingIsmFactory__factory.js.map +1 -0
  96. package/dist/factories/contracts/isms/routing/DomainRoutingIsm__factory.d.ts +48 -0
  97. package/dist/factories/contracts/isms/routing/DomainRoutingIsm__factory.d.ts.map +1 -0
  98. package/dist/factories/contracts/isms/routing/DomainRoutingIsm__factory.js +254 -0
  99. package/dist/factories/contracts/isms/routing/DomainRoutingIsm__factory.js.map +1 -0
  100. package/dist/factories/contracts/isms/routing/InterchainAccountIsm__factory.d.ts +45 -0
  101. package/dist/factories/contracts/isms/routing/InterchainAccountIsm__factory.d.ts.map +1 -0
  102. package/dist/factories/contracts/isms/routing/InterchainAccountIsm__factory.js +108 -0
  103. package/dist/factories/contracts/isms/routing/InterchainAccountIsm__factory.js.map +1 -0
  104. package/dist/factories/contracts/isms/routing/index.d.ts +5 -0
  105. package/dist/factories/contracts/isms/routing/index.d.ts.map +1 -0
  106. package/dist/factories/contracts/isms/routing/index.js +15 -0
  107. package/dist/factories/contracts/isms/routing/index.js.map +1 -0
  108. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.d.ts +1 -1
  109. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.js +1 -1
  110. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.d.ts +1 -1
  111. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.js +1 -1
  112. package/dist/factories/contracts/middleware/liquidity-layer/LiquidityLayerRouter__factory.d.ts +1 -1
  113. package/dist/factories/contracts/middleware/liquidity-layer/LiquidityLayerRouter__factory.js +1 -1
  114. package/dist/factories/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter__factory.d.ts +1 -1
  115. package/dist/factories/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter__factory.js +1 -1
  116. package/dist/factories/contracts/middleware/liquidity-layer/adapters/PortalAdapter__factory.d.ts +1 -1
  117. package/dist/factories/contracts/middleware/liquidity-layer/adapters/PortalAdapter__factory.js +1 -1
  118. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.d.ts +1 -1
  119. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.d.ts.map +1 -1
  120. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.js +1 -1
  121. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.js.map +1 -1
  122. package/dist/factories/contracts/mock/MockMailbox__factory.d.ts +1 -1
  123. package/dist/factories/contracts/mock/MockMailbox__factory.d.ts.map +1 -1
  124. package/dist/factories/contracts/mock/MockMailbox__factory.js +45 -9
  125. package/dist/factories/contracts/mock/MockMailbox__factory.js.map +1 -1
  126. package/dist/factories/contracts/test/LightTestRecipient__factory.d.ts +1 -1
  127. package/dist/factories/contracts/test/LightTestRecipient__factory.js +1 -1
  128. package/dist/factories/contracts/test/TestGasRouter__factory.d.ts +1 -1
  129. package/dist/factories/contracts/test/TestGasRouter__factory.js +1 -1
  130. package/dist/factories/contracts/test/TestHyperlaneConnectionClient__factory.d.ts +1 -1
  131. package/dist/factories/contracts/test/TestHyperlaneConnectionClient__factory.js +1 -1
  132. package/dist/factories/contracts/test/TestLegacyMultisigIsm__factory.d.ts +1 -1
  133. package/dist/factories/contracts/test/TestLegacyMultisigIsm__factory.js +1 -1
  134. package/dist/factories/contracts/test/TestMailbox__factory.d.ts +1 -1
  135. package/dist/factories/contracts/test/TestMailbox__factory.js +1 -1
  136. package/dist/factories/contracts/test/TestMultisigIsm__factory.d.ts +41 -0
  137. package/dist/factories/contracts/test/TestMultisigIsm__factory.d.ts.map +1 -0
  138. package/dist/factories/contracts/test/TestMultisigIsm__factory.js +133 -0
  139. package/dist/factories/contracts/test/TestMultisigIsm__factory.js.map +1 -0
  140. package/dist/factories/contracts/test/TestQuery__factory.d.ts +1 -1
  141. package/dist/factories/contracts/test/TestQuery__factory.js +1 -1
  142. package/dist/factories/contracts/test/TestRecipient__factory.d.ts +1 -1
  143. package/dist/factories/contracts/test/TestRecipient__factory.js +1 -1
  144. package/dist/factories/contracts/test/TestRouter__factory.d.ts +1 -1
  145. package/dist/factories/contracts/test/TestRouter__factory.js +1 -1
  146. package/dist/factories/contracts/test/TestSendReceiver__factory.d.ts +1 -1
  147. package/dist/factories/contracts/test/TestSendReceiver__factory.js +1 -1
  148. package/dist/factories/contracts/test/index.d.ts +1 -1
  149. package/dist/factories/contracts/test/index.d.ts.map +1 -1
  150. package/dist/factories/contracts/test/index.js +3 -3
  151. package/dist/factories/contracts/test/index.js.map +1 -1
  152. package/dist/index.d.ts +14 -4
  153. package/dist/index.d.ts.map +1 -1
  154. package/dist/index.js +16 -6
  155. package/dist/index.js.map +1 -1
  156. package/package.json +2 -2
  157. package/contracts/test/TestIsm.sol +0 -21
  158. package/dist/contracts/interfaces/IAggregationIsm.d.ts.map +0 -1
  159. package/dist/contracts/interfaces/IAggregationIsm.js.map +0 -1
  160. package/dist/contracts/test/TestIsm.d.ts.map +0 -1
  161. package/dist/contracts/test/TestIsm.js.map +0 -1
  162. package/dist/factories/contracts/interfaces/IAggregationIsm__factory.d.ts.map +0 -1
  163. package/dist/factories/contracts/interfaces/IAggregationIsm__factory.js.map +0 -1
  164. package/dist/factories/contracts/test/TestIsm__factory.d.ts +0 -35
  165. package/dist/factories/contracts/test/TestIsm__factory.d.ts.map +0 -1
  166. package/dist/factories/contracts/test/TestIsm__factory.js +0 -104
  167. package/dist/factories/contracts/test/TestIsm__factory.js.map +0 -1
  168. /package/dist/contracts/interfaces/{IAggregationIsm.js → isms/IAggregationIsm.js} +0 -0
  169. /package/dist/factories/contracts/interfaces/{IAggregationIsm__factory.js → isms/IAggregationIsm__factory.js} +0 -0
@@ -3,7 +3,7 @@ pragma solidity >=0.6.11;
3
3
 
4
4
  interface IInterchainSecurityModule {
5
5
  enum Types {
6
- UNUSED_0,
6
+ UNUSED,
7
7
  ROUTING,
8
8
  AGGREGATION,
9
9
  LEGACY_MULTISIG,
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: MIT OR Apache-2.0
2
2
  pragma solidity >=0.6.11;
3
3
 
4
- import {IInterchainSecurityModule} from "./IInterchainSecurityModule.sol";
4
+ import {IInterchainSecurityModule} from "../IInterchainSecurityModule.sol";
5
5
 
6
6
  interface IAggregationIsm is IInterchainSecurityModule {
7
7
  /**
@@ -0,0 +1,17 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.0;
3
+
4
+ import {IInterchainSecurityModule} from "../IInterchainSecurityModule.sol";
5
+
6
+ interface IRoutingIsm is IInterchainSecurityModule {
7
+ /**
8
+ * @notice Returns the ISM responsible for verifying _message
9
+ * @dev Can change based on the content of _message
10
+ * @param _message Formatted Hyperlane message (see Message.sol).
11
+ * @return module The ISM to use to verify _message
12
+ */
13
+ function route(bytes calldata _message)
14
+ external
15
+ view
16
+ returns (IInterchainSecurityModule);
17
+ }
@@ -6,7 +6,7 @@ import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
6
6
 
7
7
  // ============ Internal Imports ============
8
8
  import {IInterchainSecurityModule} from "../../interfaces/IInterchainSecurityModule.sol";
9
- import {IAggregationIsm} from "../../interfaces/IAggregationIsm.sol";
9
+ import {IAggregationIsm} from "../../interfaces/isms/IAggregationIsm.sol";
10
10
  import {AggregationIsmMetadata} from "../../libs/isms/AggregationIsmMetadata.sol";
11
11
 
12
12
  /**
@@ -19,7 +19,7 @@ abstract contract AbstractAggregationIsm is IAggregationIsm {
19
19
 
20
20
  // solhint-disable-next-line const-name-snakecase
21
21
  uint8 public constant moduleType =
22
- uint8(IInterchainSecurityModule.Types.MULTISIG);
22
+ uint8(IInterchainSecurityModule.Types.AGGREGATION);
23
23
 
24
24
  // ============ Virtual Functions ============
25
25
  // ======= OVERRIDE THESE TO IMPLEMENT =======
@@ -0,0 +1,45 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.0;
3
+
4
+ // ============ Internal Imports ============
5
+ import {IInterchainSecurityModule} from "../../interfaces/IInterchainSecurityModule.sol";
6
+ import {IRoutingIsm} from "../../interfaces/isms/IRoutingIsm.sol";
7
+
8
+ /**
9
+ * @title RoutingIsm
10
+ */
11
+ abstract contract AbstractRoutingIsm is IRoutingIsm {
12
+ // ============ Constants ============
13
+
14
+ uint8 public constant moduleType =
15
+ uint8(IInterchainSecurityModule.Types.ROUTING);
16
+
17
+ // ============ Virtual Functions ============
18
+ // ======= OVERRIDE THESE TO IMPLEMENT =======
19
+
20
+ /**
21
+ * @notice Returns the ISM responsible for verifying _message
22
+ * @dev Can change based on the content of _message
23
+ * @param _message Formatted Hyperlane message (see Message.sol).
24
+ * @return module The ISM to use to verify _message
25
+ */
26
+ function route(bytes calldata _message)
27
+ public
28
+ view
29
+ virtual
30
+ returns (IInterchainSecurityModule);
31
+
32
+ // ============ Public Functions ============
33
+
34
+ /**
35
+ * @notice Routes _metadata and _message to the correct ISM
36
+ * @param _metadata ABI encoded module metadata
37
+ * @param _message Formatted Hyperlane message (see Message.sol).
38
+ */
39
+ function verify(bytes calldata _metadata, bytes calldata _message)
40
+ public
41
+ returns (bool)
42
+ {
43
+ return route(_message).verify(_metadata, _message);
44
+ }
45
+ }
@@ -0,0 +1,105 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.0;
3
+ // ============ External Imports ============
4
+ import {Address} from "@openzeppelin/contracts/utils/Address.sol";
5
+ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
6
+
7
+ // ============ Internal Imports ============
8
+ import {AbstractRoutingIsm} from "./AbstractRoutingIsm.sol";
9
+ import {IInterchainSecurityModule} from "../../interfaces/IInterchainSecurityModule.sol";
10
+ import {Message} from "../../libs/Message.sol";
11
+
12
+ /**
13
+ * @title DomainRoutingIsm
14
+ */
15
+ contract DomainRoutingIsm is AbstractRoutingIsm, OwnableUpgradeable {
16
+ // ============ Public Storage ============
17
+ mapping(uint32 => IInterchainSecurityModule) public modules;
18
+
19
+ // ============ Events ============
20
+
21
+ /**
22
+ * @notice Emitted when a module is set for a domain
23
+ * @param domain The origin domain.
24
+ * @param module The ISM to use.
25
+ */
26
+ event ModuleSet(uint32 indexed domain, IInterchainSecurityModule module);
27
+
28
+ // ============ External Functions ============
29
+
30
+ /**
31
+ * @param _owner The owner of the contract.
32
+ */
33
+ function initialize(address _owner) public initializer {
34
+ __Ownable_init();
35
+ _transferOwnership(_owner);
36
+ }
37
+
38
+ /**
39
+ * @notice Sets the ISMs to be used for the specified origin domains
40
+ * @param _owner The owner of the contract.
41
+ * @param _domains The origin domains
42
+ * @param _modules The ISMs to use to verify messages
43
+ */
44
+ function initialize(
45
+ address _owner,
46
+ uint32[] calldata _domains,
47
+ IInterchainSecurityModule[] calldata _modules
48
+ ) public initializer {
49
+ __Ownable_init();
50
+ require(_domains.length == _modules.length, "length mismatch");
51
+ uint256 _length = _domains.length;
52
+ for (uint256 i = 0; i < _length; ++i) {
53
+ _set(_domains[i], _modules[i]);
54
+ }
55
+ _transferOwnership(_owner);
56
+ }
57
+
58
+ /**
59
+ * @notice Sets the ISM to be used for the specified origin domain
60
+ * @param _domain The origin domain
61
+ * @param _module The ISM to use to verify messages
62
+ */
63
+ function set(uint32 _domain, IInterchainSecurityModule _module)
64
+ external
65
+ onlyOwner
66
+ {
67
+ _set(_domain, _module);
68
+ }
69
+
70
+ // ============ Public Functions ============
71
+
72
+ /**
73
+ * @notice Returns the ISM responsible for verifying _message
74
+ * @dev Can change based on the content of _message
75
+ * @param _message Formatted Hyperlane message (see Message.sol).
76
+ * @return module The ISM to use to verify _message
77
+ */
78
+ function route(bytes calldata _message)
79
+ public
80
+ view
81
+ virtual
82
+ override
83
+ returns (IInterchainSecurityModule)
84
+ {
85
+ IInterchainSecurityModule module = modules[Message.origin(_message)];
86
+ require(
87
+ address(module) != address(0),
88
+ "No ISM found for origin domain"
89
+ );
90
+ return module;
91
+ }
92
+
93
+ // ============ Internal Functions ============
94
+
95
+ /**
96
+ * @notice Sets the ISM to be used for the specified origin domain
97
+ * @param _domain The origin domain
98
+ * @param _module The ISM to use to verify messages
99
+ */
100
+ function _set(uint32 _domain, IInterchainSecurityModule _module) internal {
101
+ require(Address.isContract(address(_module)), "!contract");
102
+ modules[_domain] = _module;
103
+ emit ModuleSet(_domain, _module);
104
+ }
105
+ }
@@ -0,0 +1,46 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.0;
3
+
4
+ // ============ Internal Imports ============
5
+ import {DomainRoutingIsm} from "./DomainRoutingIsm.sol";
6
+ import {IInterchainSecurityModule} from "../../interfaces/IInterchainSecurityModule.sol";
7
+ import {MinimalProxy} from "../../libs/MinimalProxy.sol";
8
+
9
+ /**
10
+ * @title DomainRoutingIsmFactory
11
+ */
12
+ contract DomainRoutingIsmFactory {
13
+ // ============ Immutables ============
14
+ address private immutable _implementation;
15
+
16
+ /**
17
+ * @notice Emitted when a routing module is deployed
18
+ * @param module The deployed ISM
19
+ */
20
+ event ModuleDeployed(DomainRoutingIsm module);
21
+
22
+ // ============ Constructor ============
23
+
24
+ constructor() {
25
+ _implementation = address(new DomainRoutingIsm());
26
+ }
27
+
28
+ // ============ External Functions ============
29
+
30
+ /**
31
+ * @notice Deploys and initializes a DomainRoutingIsm using a minimal proxy
32
+ * @param _domains The origin domains
33
+ * @param _modules The ISMs to use to verify messages
34
+ */
35
+ function deploy(
36
+ uint32[] calldata _domains,
37
+ IInterchainSecurityModule[] calldata _modules
38
+ ) external returns (DomainRoutingIsm) {
39
+ DomainRoutingIsm _ism = DomainRoutingIsm(
40
+ MinimalProxy.create(_implementation)
41
+ );
42
+ emit ModuleDeployed(_ism);
43
+ _ism.initialize(msg.sender, _domains, _modules);
44
+ return _ism;
45
+ }
46
+ }
@@ -0,0 +1,42 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.0;
3
+ // ============ Internal Imports ============
4
+ import {AbstractRoutingIsm} from "./AbstractRoutingIsm.sol";
5
+ import {IMailbox} from "../../interfaces/IMailbox.sol";
6
+ import {IInterchainSecurityModule} from "../../interfaces/IInterchainSecurityModule.sol";
7
+ import {Message} from "../../libs/Message.sol";
8
+ import {InterchainAccountMessage} from "../../libs/middleware/InterchainAccountMessage.sol";
9
+
10
+ /**
11
+ * @title InterchainAccountIsm
12
+ */
13
+ contract InterchainAccountIsm is AbstractRoutingIsm {
14
+ IMailbox private immutable mailbox;
15
+
16
+ // ============ Constructor ============
17
+ constructor(address _mailbox) {
18
+ mailbox = IMailbox(_mailbox);
19
+ }
20
+
21
+ // ============ Public Functions ============
22
+
23
+ /**
24
+ * @notice Returns the ISM responsible for verifying _message
25
+ * @param _message Formatted Hyperlane message (see Message.sol).
26
+ * @return module The ISM to use to verify _message
27
+ */
28
+ function route(bytes calldata _message)
29
+ public
30
+ view
31
+ virtual
32
+ override
33
+ returns (IInterchainSecurityModule)
34
+ {
35
+ address _ism = InterchainAccountMessage.ism(Message.body(_message));
36
+ if (_ism == address(0)) {
37
+ return mailbox.defaultIsm();
38
+ } else {
39
+ return IInterchainSecurityModule(_ism);
40
+ }
41
+ }
42
+ }
@@ -7,6 +7,13 @@ library MinimalProxy {
7
7
  hex"3d602d80600a3d3981f3363d3d373d3d3d363d73";
8
8
  bytes15 private constant SUFFIX = hex"5af43d82803e903d91602b57fd5bf3";
9
9
 
10
+ function create(address implementation) internal returns (address proxy) {
11
+ bytes memory _bytecode = bytecode(implementation);
12
+ assembly {
13
+ proxy := create(0, add(_bytecode, 32), mload(_bytecode))
14
+ }
15
+ }
16
+
10
17
  function bytecode(address implementation)
11
18
  internal
12
19
  pure
@@ -83,4 +83,13 @@ library InterchainAccountMessage {
83
83
  {
84
84
  return abi.decode(_message, (bytes32, bytes32, CallLib.Call[]));
85
85
  }
86
+
87
+ /**
88
+ * @notice Parses and returns the ISM address from the provided message
89
+ * @param _message The interchain account message
90
+ * @return The ISM encoded in the message
91
+ */
92
+ function ism(bytes calldata _message) internal pure returns (address) {
93
+ return address(bytes20(_message[44:64]));
94
+ }
86
95
  }
@@ -4,7 +4,7 @@ pragma solidity ^0.8.13;
4
4
  import "./MockMailbox.sol";
5
5
  import "../middleware/InterchainQueryRouter.sol";
6
6
  import "../test/TestInterchainGasPaymaster.sol";
7
- import "../test/TestIsm.sol";
7
+ import "../test/TestMultisigIsm.sol";
8
8
 
9
9
  import {TypeCasts} from "../libs/TypeCasts.sol";
10
10
 
@@ -30,8 +30,11 @@ contract MockHyperlaneEnvironment {
30
30
  igps[originDomain] = new TestInterchainGasPaymaster(address(this));
31
31
  igps[destinationDomain] = new TestInterchainGasPaymaster(address(this));
32
32
 
33
- isms[originDomain] = new TestIsm();
34
- isms[destinationDomain] = new TestIsm();
33
+ isms[originDomain] = new TestMultisigIsm();
34
+ isms[destinationDomain] = new TestMultisigIsm();
35
+
36
+ originMailbox.setDefaultIsm(isms[originDomain]);
37
+ destinationMailbox.setDefaultIsm(isms[destinationDomain]);
35
38
 
36
39
  mailboxes[_originDomain] = originMailbox;
37
40
  mailboxes[_destinationDomain] = destinationMailbox;
@@ -1,26 +1,29 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  pragma solidity ^0.8.0;
3
3
 
4
+ import {Versioned} from "../upgrade/Versioned.sol";
4
5
  import {TypeCasts} from "../libs/TypeCasts.sol";
5
6
  import {IMessageRecipient} from "../interfaces/IMessageRecipient.sol";
7
+ import {IInterchainSecurityModule, ISpecifiesInterchainSecurityModule} from "../interfaces/IInterchainSecurityModule.sol";
6
8
 
7
- contract MockMailbox {
9
+ contract MockMailbox is Versioned {
8
10
  using TypeCasts for address;
9
11
  using TypeCasts for bytes32;
10
12
  // Domain of chain on which the contract is deployed
11
13
 
12
14
  // ============ Constants ============
13
15
  uint32 public immutable localDomain;
14
- uint32 public immutable VERSION = 0;
15
16
  uint256 public constant MAX_MESSAGE_BODY_BYTES = 2 * 2**10;
16
17
 
17
- uint256 public outboundNonce = 0;
18
- uint256 public inboundUnprocessedNonce = 0;
19
- uint256 public inboundProcessedNonce = 0;
18
+ uint32 public outboundNonce = 0;
19
+ uint32 public inboundUnprocessedNonce = 0;
20
+ uint32 public inboundProcessedNonce = 0;
21
+ IInterchainSecurityModule public defaultIsm;
20
22
  mapping(uint32 => MockMailbox) public remoteMailboxes;
21
- mapping(uint256 => Message) public inboundMessages;
23
+ mapping(uint256 => MockMessage) public inboundMessages;
22
24
 
23
- struct Message {
25
+ struct MockMessage {
26
+ uint32 nonce;
24
27
  uint32 origin;
25
28
  address sender;
26
29
  address recipient;
@@ -31,6 +34,10 @@ contract MockMailbox {
31
34
  localDomain = _domain;
32
35
  }
33
36
 
37
+ function setDefaultIsm(IInterchainSecurityModule _module) external {
38
+ defaultIsm = _module;
39
+ }
40
+
34
41
  function addRemoteMailbox(uint32 _domain, MockMailbox _mailbox) external {
35
42
  remoteMailboxes[_domain] = _mailbox;
36
43
  }
@@ -47,6 +54,7 @@ contract MockMailbox {
47
54
  "Missing remote mailbox"
48
55
  );
49
56
  _destinationMailbox.addInboundMessage(
57
+ outboundNonce,
50
58
  localDomain,
51
59
  msg.sender,
52
60
  _recipientAddress.bytes32ToAddress(),
@@ -57,12 +65,14 @@ contract MockMailbox {
57
65
  }
58
66
 
59
67
  function addInboundMessage(
68
+ uint32 _nonce,
60
69
  uint32 _origin,
61
70
  address _sender,
62
71
  address _recipient,
63
72
  bytes calldata _body
64
73
  ) external {
65
- inboundMessages[inboundUnprocessedNonce] = Message(
74
+ inboundMessages[inboundUnprocessedNonce] = MockMessage(
75
+ _nonce,
66
76
  _origin,
67
77
  _sender,
68
78
  _recipient,
@@ -72,7 +82,15 @@ contract MockMailbox {
72
82
  }
73
83
 
74
84
  function processNextInboundMessage() public {
75
- Message memory _message = inboundMessages[inboundProcessedNonce];
85
+ MockMessage memory _message = inboundMessages[inboundProcessedNonce];
86
+ address _recipient = _message.recipient;
87
+ IInterchainSecurityModule _ism = _recipientIsm(_recipient);
88
+ if (address(_ism) != address(0)) {
89
+ // Do not pass any metadata because we expect to
90
+ // be using TestIsms
91
+ require(_ism.verify("", _encode(_message)), "ISM verify failed");
92
+ }
93
+
76
94
  IMessageRecipient(_message.recipient).handle(
77
95
  _message.origin,
78
96
  _message.sender.addressToBytes32(),
@@ -80,4 +98,37 @@ contract MockMailbox {
80
98
  );
81
99
  inboundProcessedNonce++;
82
100
  }
101
+
102
+ function _encode(MockMessage memory _message)
103
+ private
104
+ view
105
+ returns (bytes memory)
106
+ {
107
+ return
108
+ abi.encodePacked(
109
+ VERSION,
110
+ _message.nonce,
111
+ _message.origin,
112
+ TypeCasts.addressToBytes32(_message.sender),
113
+ localDomain,
114
+ TypeCasts.addressToBytes32(_message.recipient),
115
+ _message.body
116
+ );
117
+ }
118
+
119
+ function _recipientIsm(address _recipient)
120
+ private
121
+ view
122
+ returns (IInterchainSecurityModule)
123
+ {
124
+ try
125
+ ISpecifiesInterchainSecurityModule(_recipient)
126
+ .interchainSecurityModule()
127
+ returns (IInterchainSecurityModule _val) {
128
+ if (address(_val) != address(0)) {
129
+ return _val;
130
+ }
131
+ } catch {}
132
+ return defaultIsm;
133
+ }
83
134
  }
@@ -0,0 +1,39 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.0;
3
+
4
+ import {IInterchainSecurityModule} from "../interfaces/IInterchainSecurityModule.sol";
5
+ import {IMultisigIsm} from "../interfaces/isms/IMultisigIsm.sol";
6
+
7
+ contract TestMultisigIsm is IMultisigIsm {
8
+ // solhint-disable-next-line const-name-snakecase
9
+ uint8 public constant moduleType =
10
+ uint8(IInterchainSecurityModule.Types.MULTISIG);
11
+
12
+ bool public accept;
13
+
14
+ constructor() {
15
+ accept = true;
16
+ }
17
+
18
+ function validatorsAndThreshold(bytes calldata)
19
+ external
20
+ pure
21
+ returns (address[] memory, uint8)
22
+ {
23
+ address[] memory validators = new address[](1);
24
+ validators[0] = address(0);
25
+ return (validators, 1);
26
+ }
27
+
28
+ function setAccept(bool _val) external {
29
+ accept = _val;
30
+ }
31
+
32
+ function verify(bytes calldata, bytes calldata)
33
+ external
34
+ view
35
+ returns (bool)
36
+ {
37
+ return accept;
38
+ }
39
+ }
@@ -4,7 +4,6 @@ import type * as middleware from "./middleware";
4
4
  export type { iInterchainSecurityModuleSol };
5
5
  export type { isms };
6
6
  export type { middleware };
7
- export type { IAggregationIsm } from "./IAggregationIsm";
8
7
  export type { IGasOracle } from "./IGasOracle";
9
8
  export type { IHyperlaneConnectionClient } from "./IHyperlaneConnectionClient";
10
9
  export type { IInterchainGasPaymaster } from "./IInterchainGasPaymaster";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../types/contracts/interfaces/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,4BAA4B,MAAM,iCAAiC,CAAC;AACrF,OAAO,KAAK,KAAK,IAAI,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,KAAK,UAAU,MAAM,cAAc,CAAC;AAEhD,YAAY,EAAE,4BAA4B,EAAE,CAAC;AAE7C,YAAY,EAAE,IAAI,EAAE,CAAC;AAErB,YAAY,EAAE,UAAU,EAAE,CAAC;AAC3B,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC/E,YAAY,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,YAAY,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACzF,YAAY,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../types/contracts/interfaces/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,4BAA4B,MAAM,iCAAiC,CAAC;AACrF,OAAO,KAAK,KAAK,IAAI,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,KAAK,UAAU,MAAM,cAAc,CAAC;AAEhD,YAAY,EAAE,4BAA4B,EAAE,CAAC;AAE7C,YAAY,EAAE,IAAI,EAAE,CAAC;AAErB,YAAY,EAAE,UAAU,EAAE,CAAC;AAC3B,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC/E,YAAY,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,YAAY,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACzF,YAAY,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "../../common";
1
+ import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "../../../common";
2
2
  import type { FunctionFragment, Result } from "@ethersproject/abi";
3
3
  import type { Listener, Provider } from "@ethersproject/providers";
4
4
  import type { BaseContract, BigNumber, BytesLike, CallOverrides, ContractTransaction, Overrides, PopulatedTransaction, Signer, utils } from "ethers";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IAggregationIsm.d.ts","sourceRoot":"","sources":["../../../../types/contracts/interfaces/isms/IAggregationIsm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IAggregationIsm.js","sourceRoot":"","sources":["../../../../types/contracts/interfaces/isms/IAggregationIsm.ts"],"names":[],"mappings":";AAAA,+CAA+C"}
@@ -0,0 +1,67 @@
1
+ import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "../../../common";
2
+ import type { FunctionFragment, Result } from "@ethersproject/abi";
3
+ import type { Listener, Provider } from "@ethersproject/providers";
4
+ import type { BaseContract, BigNumber, BytesLike, CallOverrides, ContractTransaction, Overrides, PopulatedTransaction, Signer, utils } from "ethers";
5
+ export interface IRoutingIsmInterface extends utils.Interface {
6
+ functions: {
7
+ "moduleType()": FunctionFragment;
8
+ "route(bytes)": FunctionFragment;
9
+ "verify(bytes,bytes)": FunctionFragment;
10
+ };
11
+ getFunction(nameOrSignatureOrTopic: "moduleType" | "route" | "verify"): FunctionFragment;
12
+ encodeFunctionData(functionFragment: "moduleType", values?: undefined): string;
13
+ encodeFunctionData(functionFragment: "route", values: [BytesLike]): string;
14
+ encodeFunctionData(functionFragment: "verify", values: [BytesLike, BytesLike]): string;
15
+ decodeFunctionResult(functionFragment: "moduleType", data: BytesLike): Result;
16
+ decodeFunctionResult(functionFragment: "route", data: BytesLike): Result;
17
+ decodeFunctionResult(functionFragment: "verify", data: BytesLike): Result;
18
+ events: {};
19
+ }
20
+ export interface IRoutingIsm extends BaseContract {
21
+ connect(signerOrProvider: Signer | Provider | string): this;
22
+ attach(addressOrName: string): this;
23
+ deployed(): Promise<this>;
24
+ interface: IRoutingIsmInterface;
25
+ queryFilter<TEvent extends TypedEvent>(event: TypedEventFilter<TEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TEvent>>;
26
+ listeners<TEvent extends TypedEvent>(eventFilter?: TypedEventFilter<TEvent>): Array<TypedListener<TEvent>>;
27
+ listeners(eventName?: string): Array<Listener>;
28
+ removeAllListeners<TEvent extends TypedEvent>(eventFilter: TypedEventFilter<TEvent>): this;
29
+ removeAllListeners(eventName?: string): this;
30
+ off: OnEvent<this>;
31
+ on: OnEvent<this>;
32
+ once: OnEvent<this>;
33
+ removeListener: OnEvent<this>;
34
+ functions: {
35
+ moduleType(overrides?: CallOverrides): Promise<[number]>;
36
+ route(_message: BytesLike, overrides?: CallOverrides): Promise<[string]>;
37
+ verify(_metadata: BytesLike, _message: BytesLike, overrides?: Overrides & {
38
+ from?: string | Promise<string>;
39
+ }): Promise<ContractTransaction>;
40
+ };
41
+ moduleType(overrides?: CallOverrides): Promise<number>;
42
+ route(_message: BytesLike, overrides?: CallOverrides): Promise<string>;
43
+ verify(_metadata: BytesLike, _message: BytesLike, overrides?: Overrides & {
44
+ from?: string | Promise<string>;
45
+ }): Promise<ContractTransaction>;
46
+ callStatic: {
47
+ moduleType(overrides?: CallOverrides): Promise<number>;
48
+ route(_message: BytesLike, overrides?: CallOverrides): Promise<string>;
49
+ verify(_metadata: BytesLike, _message: BytesLike, overrides?: CallOverrides): Promise<boolean>;
50
+ };
51
+ filters: {};
52
+ estimateGas: {
53
+ moduleType(overrides?: CallOverrides): Promise<BigNumber>;
54
+ route(_message: BytesLike, overrides?: CallOverrides): Promise<BigNumber>;
55
+ verify(_metadata: BytesLike, _message: BytesLike, overrides?: Overrides & {
56
+ from?: string | Promise<string>;
57
+ }): Promise<BigNumber>;
58
+ };
59
+ populateTransaction: {
60
+ moduleType(overrides?: CallOverrides): Promise<PopulatedTransaction>;
61
+ route(_message: BytesLike, overrides?: CallOverrides): Promise<PopulatedTransaction>;
62
+ verify(_metadata: BytesLike, _message: BytesLike, overrides?: Overrides & {
63
+ from?: string | Promise<string>;
64
+ }): Promise<PopulatedTransaction>;
65
+ };
66
+ }
67
+ //# sourceMappingURL=IRoutingIsm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IRoutingIsm.d.ts","sourceRoot":"","sources":["../../../../types/contracts/interfaces/isms/IRoutingIsm.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  /* Autogenerated file. Do not edit manually. */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- //# sourceMappingURL=TestIsm.js.map
4
+ //# sourceMappingURL=IRoutingIsm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IRoutingIsm.js","sourceRoot":"","sources":["../../../../types/contracts/interfaces/isms/IRoutingIsm.ts"],"names":[],"mappings":";AAAA,+CAA+C"}
@@ -1,2 +1,4 @@
1
+ export type { IAggregationIsm } from "./IAggregationIsm";
1
2
  export type { IMultisigIsm } from "./IMultisigIsm";
3
+ export type { IRoutingIsm } from "./IRoutingIsm";
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../types/contracts/interfaces/isms/index.ts"],"names":[],"mappings":"AAGA,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../types/contracts/interfaces/isms/index.ts"],"names":[],"mappings":"AAGA,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}