@hyperlane-xyz/core 1.0.0-beta1 → 1.0.0-beta3

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 (123) hide show
  1. package/contracts/OwnableMulticall.sol +4 -0
  2. package/contracts/Router.sol +33 -14
  3. package/contracts/libs/EnumerableMapExtended.sol +72 -0
  4. package/contracts/libs/MinimalProxy.sol +16 -0
  5. package/contracts/middleware/InterchainAccountRouter.sol +12 -2
  6. package/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter.sol +1 -1
  7. package/contracts/mock/MockInterchainAccountRouter.sol +15 -79
  8. package/dist/contracts/OwnableMulticall.d.ts +17 -1
  9. package/dist/contracts/OwnableMulticall.d.ts.map +1 -1
  10. package/dist/contracts/Router.d.ts +19 -11
  11. package/dist/contracts/Router.d.ts.map +1 -1
  12. package/dist/contracts/middleware/InterchainAccountRouter.d.ts +19 -11
  13. package/dist/contracts/middleware/InterchainAccountRouter.d.ts.map +1 -1
  14. package/dist/contracts/middleware/InterchainQueryRouter.d.ts +42 -18
  15. package/dist/contracts/middleware/InterchainQueryRouter.d.ts.map +1 -1
  16. package/dist/contracts/middleware/liquidity-layer/LiquidityLayerRouter.d.ts +19 -11
  17. package/dist/contracts/middleware/liquidity-layer/LiquidityLayerRouter.d.ts.map +1 -1
  18. package/dist/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter.d.ts +19 -11
  19. package/dist/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter.d.ts.map +1 -1
  20. package/dist/contracts/mock/MockInterchainAccountRouter.d.ts +259 -1
  21. package/dist/contracts/mock/MockInterchainAccountRouter.d.ts.map +1 -1
  22. package/dist/contracts/test/TestRouter.d.ts +19 -11
  23. package/dist/contracts/test/TestRouter.d.ts.map +1 -1
  24. package/dist/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy__factory.d.ts +1 -1
  25. package/dist/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy__factory.js +1 -1
  26. package/dist/factories/@openzeppelin/contracts/proxy/transparent/ProxyAdmin__factory.d.ts +1 -1
  27. package/dist/factories/@openzeppelin/contracts/proxy/transparent/ProxyAdmin__factory.js +1 -1
  28. package/dist/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy__factory.d.ts +1 -1
  29. package/dist/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy__factory.js +1 -1
  30. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable__factory.d.ts +1 -1
  31. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable__factory.js +1 -1
  32. package/dist/factories/contracts/Create2Factory__factory.d.ts +1 -1
  33. package/dist/factories/contracts/Create2Factory__factory.js +1 -1
  34. package/dist/factories/contracts/InterchainGasPaymaster__factory.d.ts +1 -1
  35. package/dist/factories/contracts/InterchainGasPaymaster__factory.js +1 -1
  36. package/dist/factories/contracts/Mailbox__factory.d.ts +1 -1
  37. package/dist/factories/contracts/Mailbox__factory.js +1 -1
  38. package/dist/factories/contracts/OwnableMulticall__factory.d.ts +1 -1
  39. package/dist/factories/contracts/OwnableMulticall__factory.d.ts.map +1 -1
  40. package/dist/factories/contracts/OwnableMulticall__factory.js +8 -1
  41. package/dist/factories/contracts/OwnableMulticall__factory.js.map +1 -1
  42. package/dist/factories/contracts/Router__factory.d.ts.map +1 -1
  43. package/dist/factories/contracts/Router__factory.js +15 -2
  44. package/dist/factories/contracts/Router__factory.js.map +1 -1
  45. package/dist/factories/contracts/isms/MultisigIsm__factory.d.ts +1 -1
  46. package/dist/factories/contracts/isms/MultisigIsm__factory.d.ts.map +1 -1
  47. package/dist/factories/contracts/isms/MultisigIsm__factory.js +1 -1
  48. package/dist/factories/contracts/isms/MultisigIsm__factory.js.map +1 -1
  49. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.d.ts +9 -2
  50. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.d.ts.map +1 -1
  51. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.js +21 -3
  52. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.js.map +1 -1
  53. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.d.ts +1 -1
  54. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.d.ts.map +1 -1
  55. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.js +23 -3
  56. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.js.map +1 -1
  57. package/dist/factories/contracts/middleware/liquidity-layer/LiquidityLayerRouter__factory.d.ts +1 -1
  58. package/dist/factories/contracts/middleware/liquidity-layer/LiquidityLayerRouter__factory.d.ts.map +1 -1
  59. package/dist/factories/contracts/middleware/liquidity-layer/LiquidityLayerRouter__factory.js +16 -3
  60. package/dist/factories/contracts/middleware/liquidity-layer/LiquidityLayerRouter__factory.js.map +1 -1
  61. package/dist/factories/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter__factory.d.ts +1 -1
  62. package/dist/factories/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter__factory.d.ts.map +1 -1
  63. package/dist/factories/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter__factory.js +16 -3
  64. package/dist/factories/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter__factory.js.map +1 -1
  65. package/dist/factories/contracts/mock/MockCircleBridge__factory.d.ts +1 -1
  66. package/dist/factories/contracts/mock/MockCircleBridge__factory.js +1 -1
  67. package/dist/factories/contracts/mock/MockCircleMessageTransmitter__factory.d.ts +1 -1
  68. package/dist/factories/contracts/mock/MockCircleMessageTransmitter__factory.js +1 -1
  69. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.d.ts +1 -1
  70. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.d.ts.map +1 -1
  71. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.js +1 -1
  72. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.js.map +1 -1
  73. package/dist/factories/contracts/mock/MockInterchainAccountRouter__factory.d.ts +1 -1
  74. package/dist/factories/contracts/mock/MockInterchainAccountRouter__factory.d.ts.map +1 -1
  75. package/dist/factories/contracts/mock/MockInterchainAccountRouter__factory.js +316 -1
  76. package/dist/factories/contracts/mock/MockInterchainAccountRouter__factory.js.map +1 -1
  77. package/dist/factories/contracts/mock/MockMailbox__factory.d.ts +1 -1
  78. package/dist/factories/contracts/mock/MockMailbox__factory.js +1 -1
  79. package/dist/factories/contracts/mock/MockToken__factory.d.ts +1 -1
  80. package/dist/factories/contracts/mock/MockToken__factory.js +1 -1
  81. package/dist/factories/contracts/test/TestHyperlaneConnectionClient__factory.d.ts +1 -1
  82. package/dist/factories/contracts/test/TestHyperlaneConnectionClient__factory.js +1 -1
  83. package/dist/factories/contracts/test/TestIsm__factory.d.ts +1 -1
  84. package/dist/factories/contracts/test/TestIsm__factory.js +1 -1
  85. package/dist/factories/contracts/test/TestLiquidityLayerMessageRecipient__factory.d.ts +1 -1
  86. package/dist/factories/contracts/test/TestLiquidityLayerMessageRecipient__factory.js +1 -1
  87. package/dist/factories/contracts/test/TestMailbox__factory.d.ts +1 -1
  88. package/dist/factories/contracts/test/TestMailbox__factory.js +1 -1
  89. package/dist/factories/contracts/test/TestMerkle__factory.d.ts +1 -1
  90. package/dist/factories/contracts/test/TestMerkle__factory.js +1 -1
  91. package/dist/factories/contracts/test/TestMessage__factory.d.ts +1 -1
  92. package/dist/factories/contracts/test/TestMessage__factory.js +1 -1
  93. package/dist/factories/contracts/test/TestMultisigIsm__factory.d.ts +1 -1
  94. package/dist/factories/contracts/test/TestMultisigIsm__factory.d.ts.map +1 -1
  95. package/dist/factories/contracts/test/TestMultisigIsm__factory.js +1 -1
  96. package/dist/factories/contracts/test/TestMultisigIsm__factory.js.map +1 -1
  97. package/dist/factories/contracts/test/TestQuerySender__factory.d.ts +1 -1
  98. package/dist/factories/contracts/test/TestQuerySender__factory.js +1 -1
  99. package/dist/factories/contracts/test/TestQuery__factory.d.ts +1 -1
  100. package/dist/factories/contracts/test/TestQuery__factory.js +1 -1
  101. package/dist/factories/contracts/test/TestRecipient__factory.d.ts +1 -1
  102. package/dist/factories/contracts/test/TestRecipient__factory.js +1 -1
  103. package/dist/factories/contracts/test/TestRouter__factory.d.ts +1 -1
  104. package/dist/factories/contracts/test/TestRouter__factory.d.ts.map +1 -1
  105. package/dist/factories/contracts/test/TestRouter__factory.js +16 -3
  106. package/dist/factories/contracts/test/TestRouter__factory.js.map +1 -1
  107. package/dist/factories/contracts/test/TestSendReceiver__factory.d.ts +1 -1
  108. package/dist/factories/contracts/test/TestSendReceiver__factory.js +1 -1
  109. package/dist/factories/contracts/test/TestTokenRecipient__factory.d.ts +1 -1
  110. package/dist/factories/contracts/test/TestTokenRecipient__factory.js +1 -1
  111. package/dist/factories/contracts/test/bad-recipient/BadRecipient1__factory.d.ts +1 -1
  112. package/dist/factories/contracts/test/bad-recipient/BadRecipient1__factory.js +1 -1
  113. package/dist/factories/contracts/test/bad-recipient/BadRecipient2__factory.d.ts +1 -1
  114. package/dist/factories/contracts/test/bad-recipient/BadRecipient2__factory.js +1 -1
  115. package/dist/factories/contracts/test/bad-recipient/BadRecipient3__factory.d.ts +1 -1
  116. package/dist/factories/contracts/test/bad-recipient/BadRecipient3__factory.js +1 -1
  117. package/dist/factories/contracts/test/bad-recipient/BadRecipient5__factory.d.ts +1 -1
  118. package/dist/factories/contracts/test/bad-recipient/BadRecipient5__factory.js +1 -1
  119. package/dist/factories/contracts/test/bad-recipient/BadRecipient6__factory.d.ts +1 -1
  120. package/dist/factories/contracts/test/bad-recipient/BadRecipient6__factory.js +1 -1
  121. package/dist/factories/contracts/upgrade/Versioned__factory.d.ts +1 -1
  122. package/dist/factories/contracts/upgrade/Versioned__factory.js +1 -1
  123. package/package.json +6 -4
@@ -15,6 +15,10 @@ contract OwnableMulticall is OwnableUpgradeable {
15
15
  _transferOwnership(msg.sender);
16
16
  }
17
17
 
18
+ function initialize() external initializer {
19
+ _transferOwnership(msg.sender);
20
+ }
21
+
18
22
  function proxyCalls(Call[] calldata calls) external onlyOwner {
19
23
  for (uint256 i = 0; i < calls.length; i += 1) {
20
24
  (bool success, bytes memory returnData) = calls[i].to.call(
@@ -6,14 +6,16 @@ import {HyperlaneConnectionClient} from "./HyperlaneConnectionClient.sol";
6
6
  import {IInterchainGasPaymaster} from "../interfaces/IInterchainGasPaymaster.sol";
7
7
  import {IMessageRecipient} from "../interfaces/IMessageRecipient.sol";
8
8
  import {IMailbox} from "../interfaces/IMailbox.sol";
9
+ import {EnumerableMapExtended} from "./libs/EnumerableMapExtended.sol";
9
10
 
10
11
  abstract contract Router is HyperlaneConnectionClient, IMessageRecipient {
12
+ using EnumerableMapExtended for EnumerableMapExtended.UintToBytes32Map;
13
+
11
14
  string constant NO_ROUTER_ENROLLED_REVERT_MESSAGE =
12
15
  "No router enrolled for domain. Did you specify the right domain ID?";
13
16
 
14
17
  // ============ Mutable Storage ============
15
-
16
- mapping(uint32 => bytes32) public routers;
18
+ EnumerableMapExtended.UintToBytes32Map internal _routers;
17
19
  uint256[49] private __GAP; // gap for upgrade safety
18
20
 
19
21
  // ============ Events ============
@@ -55,6 +57,22 @@ abstract contract Router is HyperlaneConnectionClient, IMessageRecipient {
55
57
  }
56
58
 
57
59
  // ============ External functions ============
60
+ function domains() external view returns (uint32[] memory) {
61
+ bytes32[] storage rawKeys = _routers.keys();
62
+ uint32[] memory keys = new uint32[](rawKeys.length);
63
+ for (uint256 i = 0; i < rawKeys.length; i++) {
64
+ keys[i] = uint32(uint256(rawKeys[i]));
65
+ }
66
+ return keys;
67
+ }
68
+
69
+ function routers(uint32 _domain) public view returns (bytes32) {
70
+ if (_routers.contains(_domain)) {
71
+ return _routers.get(_domain);
72
+ } else {
73
+ return bytes32(0); // for backwards compatibility with storage mapping
74
+ }
75
+ }
58
76
 
59
77
  /**
60
78
  * @notice Register the address of a Router contract for the same Application on a remote chain
@@ -72,15 +90,15 @@ abstract contract Router is HyperlaneConnectionClient, IMessageRecipient {
72
90
  /**
73
91
  * @notice Batch version of `enrollRemoteRouter`
74
92
  * @param _domains The domaisn of the remote Application Routers
75
- * @param _routers The addresses of the remote Application Routers
93
+ * @param _addresses The addresses of the remote Application Routers
76
94
  */
77
95
  function enrollRemoteRouters(
78
96
  uint32[] calldata _domains,
79
- bytes32[] calldata _routers
97
+ bytes32[] calldata _addresses
80
98
  ) external virtual onlyOwner {
81
- require(_domains.length == _routers.length, "!length");
99
+ require(_domains.length == _addresses.length, "!length");
82
100
  for (uint256 i = 0; i < _domains.length; i += 1) {
83
- _enrollRemoteRouter(_domains[i], _routers[i]);
101
+ _enrollRemoteRouter(_domains[i], _addresses[i]);
84
102
  }
85
103
  }
86
104
 
@@ -111,24 +129,24 @@ abstract contract Router is HyperlaneConnectionClient, IMessageRecipient {
111
129
  /**
112
130
  * @notice Set the router for a given domain
113
131
  * @param _domain The domain
114
- * @param _router The new router
132
+ * @param _address The new router
115
133
  */
116
- function _enrollRemoteRouter(uint32 _domain, bytes32 _router) internal {
117
- routers[_domain] = _router;
118
- emit RemoteRouterEnrolled(_domain, _router);
134
+ function _enrollRemoteRouter(uint32 _domain, bytes32 _address) internal {
135
+ _routers.set(_domain, _address);
136
+ emit RemoteRouterEnrolled(_domain, _address);
119
137
  }
120
138
 
121
139
  /**
122
140
  * @notice Return true if the given domain / router is the address of a remote Application Router
123
141
  * @param _domain The domain of the potential remote Application Router
124
- * @param _router The address of the potential remote Application Router
142
+ * @param _address The address of the potential remote Application Router
125
143
  */
126
- function _isRemoteRouter(uint32 _domain, bytes32 _router)
144
+ function _isRemoteRouter(uint32 _domain, bytes32 _address)
127
145
  internal
128
146
  view
129
147
  returns (bool)
130
148
  {
131
- return routers[_domain] == _router;
149
+ return routers(_domain) == _address;
132
150
  }
133
151
 
134
152
  /**
@@ -141,7 +159,7 @@ abstract contract Router is HyperlaneConnectionClient, IMessageRecipient {
141
159
  view
142
160
  returns (bytes32 _router)
143
161
  {
144
- _router = routers[_domain];
162
+ _router = routers(_domain);
145
163
  require(_router != bytes32(0), NO_ROUTER_ENROLLED_REVERT_MESSAGE);
146
164
  }
147
165
 
@@ -182,6 +200,7 @@ abstract contract Router is HyperlaneConnectionClient, IMessageRecipient {
182
200
  */
183
201
  function _dispatch(uint32 _destinationDomain, bytes memory _messageBody)
184
202
  internal
203
+ virtual
185
204
  returns (bytes32)
186
205
  {
187
206
  // Ensure that destination chain has an enrolled router.
@@ -0,0 +1,72 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.6.11;
3
+
4
+ // ============ External Imports ============
5
+ import "@openzeppelin/contracts/utils/structs/EnumerableMap.sol";
6
+
7
+ // extends EnumerableMap with uint256 => bytes32 type
8
+ // modelled after https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.8.0/contracts/utils/structs/EnumerableMap.sol
9
+ library EnumerableMapExtended {
10
+ using EnumerableMap for EnumerableMap.Bytes32ToBytes32Map;
11
+
12
+ struct UintToBytes32Map {
13
+ EnumerableMap.Bytes32ToBytes32Map _inner;
14
+ }
15
+
16
+ // ============ Library Functions ============
17
+ function keys(UintToBytes32Map storage map)
18
+ internal
19
+ view
20
+ returns (bytes32[] storage)
21
+ {
22
+ return map._inner._keys._inner._values;
23
+ }
24
+
25
+ function set(
26
+ UintToBytes32Map storage map,
27
+ uint256 key,
28
+ bytes32 value
29
+ ) internal {
30
+ map._inner.set(bytes32(key), value);
31
+ }
32
+
33
+ function get(UintToBytes32Map storage map, uint256 key)
34
+ internal
35
+ view
36
+ returns (bytes32)
37
+ {
38
+ return map._inner.get(bytes32(key));
39
+ }
40
+
41
+ function remove(UintToBytes32Map storage map, uint256 key)
42
+ internal
43
+ returns (bool)
44
+ {
45
+ return map._inner.remove(bytes32(key));
46
+ }
47
+
48
+ function contains(UintToBytes32Map storage map, uint256 key)
49
+ internal
50
+ view
51
+ returns (bool)
52
+ {
53
+ return map._inner.contains(bytes32(key));
54
+ }
55
+
56
+ function length(UintToBytes32Map storage map)
57
+ internal
58
+ view
59
+ returns (uint256)
60
+ {
61
+ return map._inner.length();
62
+ }
63
+
64
+ function at(UintToBytes32Map storage map, uint256 index)
65
+ internal
66
+ view
67
+ returns (uint256, bytes32)
68
+ {
69
+ (bytes32 key, bytes32 value) = map._inner.at(index);
70
+ return (uint256(key), value);
71
+ }
72
+ }
@@ -0,0 +1,16 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.6.11;
3
+
4
+ // Library for building bytecode of minimal proxies (see https://eips.ethereum.org/EIPS/eip-1167)
5
+ library MinimalProxy {
6
+ bytes20 constant PREFIX = hex"3d602d80600a3d3981f3363d3d373d3d3d363d73";
7
+ bytes15 constant SUFFIX = hex"5af43d82803e903d91602b57fd5bf3";
8
+
9
+ function bytecode(address implementation)
10
+ internal
11
+ pure
12
+ returns (bytes memory)
13
+ {
14
+ return abi.encodePacked(PREFIX, bytes20(implementation), SUFFIX);
15
+ }
16
+ }
@@ -5,6 +5,7 @@ pragma solidity ^0.8.13;
5
5
  import {OwnableMulticall, Call} from "../OwnableMulticall.sol";
6
6
  import {Router} from "../Router.sol";
7
7
  import {IInterchainAccountRouter} from "../../interfaces/IInterchainAccountRouter.sol";
8
+ import {MinimalProxy} from "../libs/MinimalProxy.sol";
8
9
 
9
10
  // ============ External Imports ============
10
11
  import {Create2} from "@openzeppelin/contracts/utils/Create2.sol";
@@ -16,8 +17,8 @@ import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Ini
16
17
  * @dev You can use this simple app as a starting point for your own application.
17
18
  */
18
19
  contract InterchainAccountRouter is Router, IInterchainAccountRouter {
19
- bytes constant bytecode = type(OwnableMulticall).creationCode;
20
- bytes32 constant bytecodeHash = bytes32(keccak256(bytecode));
20
+ address immutable implementation;
21
+ bytes32 immutable bytecodeHash;
21
22
 
22
23
  event InterchainAccountCreated(
23
24
  uint32 indexed origin,
@@ -25,6 +26,13 @@ contract InterchainAccountRouter is Router, IInterchainAccountRouter {
25
26
  address account
26
27
  );
27
28
 
29
+ constructor() {
30
+ implementation = address(new OwnableMulticall());
31
+ // cannot be stored immutably because it is dynamically sized
32
+ bytes memory bytecode = MinimalProxy.bytecode(implementation);
33
+ bytecodeHash = keccak256(bytecode);
34
+ }
35
+
28
36
  function initialize(
29
37
  address _mailbox,
30
38
  address _interchainGasPaymaster,
@@ -70,7 +78,9 @@ contract InterchainAccountRouter is Router, IInterchainAccountRouter {
70
78
  bytes32 salt = _salt(_origin, _sender);
71
79
  address interchainAccount = _getInterchainAccount(salt);
72
80
  if (!Address.isContract(interchainAccount)) {
81
+ bytes memory bytecode = MinimalProxy.bytecode(implementation);
73
82
  interchainAccount = Create2.deploy(0, salt, bytecode);
83
+ OwnableMulticall(interchainAccount).initialize();
74
84
  emit InterchainAccountCreated(_origin, _sender, interchainAccount);
75
85
  }
76
86
  return OwnableMulticall(interchainAccount);
@@ -96,7 +96,7 @@ contract CircleBridgeAdapter is ILiquidityLayerAdapter, Router {
96
96
  uint32 _circleDomain = hyperlaneDomainToCircleDomain[
97
97
  _destinationDomain
98
98
  ];
99
- bytes32 _remoteRouter = routers[_destinationDomain];
99
+ bytes32 _remoteRouter = routers(_destinationDomain);
100
100
  require(
101
101
  _remoteRouter != bytes32(0),
102
102
  "CircleBridgeAdapter: No router for domain"
@@ -1,22 +1,17 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.13;
3
3
 
4
+ import {InterchainAccountRouter} from "../middleware/InterchainAccountRouter.sol";
4
5
  import {OwnableMulticall, Call} from "../OwnableMulticall.sol";
5
- import {IInterchainAccountRouter} from "../../interfaces/IInterchainAccountRouter.sol";
6
-
7
- // ============ External Imports ============
8
- import {Create2} from "@openzeppelin/contracts/utils/Create2.sol";
9
- import {Address} from "@openzeppelin/contracts/utils/Address.sol";
10
6
 
11
7
  /*
12
8
  * @title The Hello World App
13
9
  * @dev You can use this simple app as a starting point for your own application.
14
10
  */
15
- contract MockInterchainAccountRouter is IInterchainAccountRouter {
11
+ contract MockInterchainAccountRouter is InterchainAccountRouter {
16
12
  struct PendingCall {
17
13
  uint32 originDomain;
18
- address sender;
19
- bytes serializedCalls;
14
+ bytes senderAndCalls;
20
15
  }
21
16
 
22
17
  uint32 public originDomain;
@@ -25,88 +20,29 @@ contract MockInterchainAccountRouter is IInterchainAccountRouter {
25
20
  uint256 totalCalls = 0;
26
21
  uint256 callsProcessed = 0;
27
22
 
28
- bytes constant bytecode = type(OwnableMulticall).creationCode;
29
- bytes32 constant bytecodeHash = bytes32(keccak256(bytecode));
30
-
31
- event InterchainAccountCreated(
32
- uint32 indexed origin,
33
- address sender,
34
- address account
35
- );
36
-
37
- constructor(uint32 _originDomain) {
23
+ constructor(uint32 _originDomain) InterchainAccountRouter() {
38
24
  originDomain = _originDomain;
39
25
  }
40
26
 
41
- function dispatch(uint32 _destinationDomain, Call[] calldata calls)
42
- public
27
+ function _dispatch(uint32, bytes memory _messageBody)
28
+ internal
29
+ override
43
30
  returns (bytes32)
44
31
  {
45
- return _dispatch(_destinationDomain, calls);
46
- }
47
-
48
- function dispatch(
49
- uint32 _destinationDomain,
50
- address target,
51
- bytes calldata data
52
- ) external returns (bytes32) {
53
- Call[] memory calls = new Call[](1);
54
- calls[0] = Call({to: target, data: data});
55
- return _dispatch(_destinationDomain, calls);
56
- }
57
-
58
- function _dispatch(uint32, Call[] memory calls) internal returns (bytes32) {
59
- pendingCalls[totalCalls] = PendingCall(
60
- originDomain,
61
- msg.sender,
62
- abi.encode(calls)
63
- );
32
+ pendingCalls[totalCalls] = PendingCall(originDomain, _messageBody);
64
33
  totalCalls += 1;
65
34
  return keccak256(abi.encodePacked(totalCalls));
66
35
  }
67
36
 
68
- function getInterchainAccount(uint32 _origin, address _sender)
69
- public
70
- view
71
- returns (address)
72
- {
73
- return _getInterchainAccount(_salt(_origin, _sender));
74
- }
75
-
76
- function getDeployedInterchainAccount(uint32 _origin, address _sender)
77
- public
78
- returns (OwnableMulticall)
79
- {
80
- bytes32 salt = _salt(_origin, _sender);
81
- address interchainAccount = _getInterchainAccount(salt);
82
- if (!Address.isContract(interchainAccount)) {
83
- interchainAccount = Create2.deploy(0, salt, bytecode);
84
- emit InterchainAccountCreated(_origin, _sender, interchainAccount);
85
- }
86
- return OwnableMulticall(interchainAccount);
87
- }
88
-
89
- function _salt(uint32 _origin, address _sender)
90
- internal
91
- pure
92
- returns (bytes32)
93
- {
94
- return bytes32(abi.encodePacked(_origin, _sender));
95
- }
96
-
97
- function _getInterchainAccount(bytes32 salt)
98
- internal
99
- view
100
- returns (address)
101
- {
102
- return Create2.computeAddress(salt, bytecodeHash);
103
- }
104
-
105
37
  function processNextPendingCall() public {
106
38
  PendingCall memory pendingCall = pendingCalls[callsProcessed];
107
- Call[] memory calls = abi.decode(pendingCall.serializedCalls, (Call[]));
39
+ (address sender, Call[] memory calls) = abi.decode(
40
+ pendingCall.senderAndCalls,
41
+ (address, Call[])
42
+ );
43
+
44
+ getDeployedInterchainAccount(originDomain, sender).proxyCalls(calls);
108
45
 
109
- getDeployedInterchainAccount(originDomain, pendingCall.sender)
110
- .proxyCalls(calls);
46
+ callsProcessed += 1;
111
47
  }
112
48
  }
@@ -12,16 +12,19 @@ export declare type CallStructOutput = [string, string] & {
12
12
  };
13
13
  export interface OwnableMulticallInterface extends utils.Interface {
14
14
  functions: {
15
+ "initialize()": FunctionFragment;
15
16
  "owner()": FunctionFragment;
16
17
  "proxyCalls((address,bytes)[])": FunctionFragment;
17
18
  "renounceOwnership()": FunctionFragment;
18
19
  "transferOwnership(address)": FunctionFragment;
19
20
  };
20
- getFunction(nameOrSignatureOrTopic: "owner" | "proxyCalls" | "renounceOwnership" | "transferOwnership"): FunctionFragment;
21
+ getFunction(nameOrSignatureOrTopic: "initialize" | "owner" | "proxyCalls" | "renounceOwnership" | "transferOwnership"): FunctionFragment;
22
+ encodeFunctionData(functionFragment: "initialize", values?: undefined): string;
21
23
  encodeFunctionData(functionFragment: "owner", values?: undefined): string;
22
24
  encodeFunctionData(functionFragment: "proxyCalls", values: [CallStruct[]]): string;
23
25
  encodeFunctionData(functionFragment: "renounceOwnership", values?: undefined): string;
24
26
  encodeFunctionData(functionFragment: "transferOwnership", values: [string]): string;
27
+ decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result;
25
28
  decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
26
29
  decodeFunctionResult(functionFragment: "proxyCalls", data: BytesLike): Result;
27
30
  decodeFunctionResult(functionFragment: "renounceOwnership", data: BytesLike): Result;
@@ -62,6 +65,9 @@ export interface OwnableMulticall extends BaseContract {
62
65
  once: OnEvent<this>;
63
66
  removeListener: OnEvent<this>;
64
67
  functions: {
68
+ initialize(overrides?: Overrides & {
69
+ from?: string | Promise<string>;
70
+ }): Promise<ContractTransaction>;
65
71
  owner(overrides?: CallOverrides): Promise<[string]>;
66
72
  proxyCalls(calls: CallStruct[], overrides?: Overrides & {
67
73
  from?: string | Promise<string>;
@@ -73,6 +79,9 @@ export interface OwnableMulticall extends BaseContract {
73
79
  from?: string | Promise<string>;
74
80
  }): Promise<ContractTransaction>;
75
81
  };
82
+ initialize(overrides?: Overrides & {
83
+ from?: string | Promise<string>;
84
+ }): Promise<ContractTransaction>;
76
85
  owner(overrides?: CallOverrides): Promise<string>;
77
86
  proxyCalls(calls: CallStruct[], overrides?: Overrides & {
78
87
  from?: string | Promise<string>;
@@ -84,6 +93,7 @@ export interface OwnableMulticall extends BaseContract {
84
93
  from?: string | Promise<string>;
85
94
  }): Promise<ContractTransaction>;
86
95
  callStatic: {
96
+ initialize(overrides?: CallOverrides): Promise<void>;
87
97
  owner(overrides?: CallOverrides): Promise<string>;
88
98
  proxyCalls(calls: CallStruct[], overrides?: CallOverrides): Promise<void>;
89
99
  renounceOwnership(overrides?: CallOverrides): Promise<void>;
@@ -96,6 +106,9 @@ export interface OwnableMulticall extends BaseContract {
96
106
  OwnershipTransferred(previousOwner?: string | null, newOwner?: string | null): OwnershipTransferredEventFilter;
97
107
  };
98
108
  estimateGas: {
109
+ initialize(overrides?: Overrides & {
110
+ from?: string | Promise<string>;
111
+ }): Promise<BigNumber>;
99
112
  owner(overrides?: CallOverrides): Promise<BigNumber>;
100
113
  proxyCalls(calls: CallStruct[], overrides?: Overrides & {
101
114
  from?: string | Promise<string>;
@@ -108,6 +121,9 @@ export interface OwnableMulticall extends BaseContract {
108
121
  }): Promise<BigNumber>;
109
122
  };
110
123
  populateTransaction: {
124
+ initialize(overrides?: Overrides & {
125
+ from?: string | Promise<string>;
126
+ }): Promise<PopulatedTransaction>;
111
127
  owner(overrides?: CallOverrides): Promise<PopulatedTransaction>;
112
128
  proxyCalls(calls: CallStruct[], overrides?: Overrides & {
113
129
  from?: string | Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"OwnableMulticall.d.ts","sourceRoot":"","sources":["../../types/contracts/OwnableMulticall.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OwnableMulticall.d.ts","sourceRoot":"","sources":["../../types/contracts/OwnableMulticall.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import type { Listener, Provider } from "@ethersproject/providers";
4
4
  import type { BaseContract, BigNumber, BigNumberish, BytesLike, CallOverrides, ContractTransaction, Overrides, PopulatedTransaction, Signer, utils } from "ethers";
5
5
  export interface RouterInterface extends utils.Interface {
6
6
  functions: {
7
+ "domains()": FunctionFragment;
7
8
  "enrollRemoteRouter(uint32,bytes32)": FunctionFragment;
8
9
  "enrollRemoteRouters(uint32[],bytes32[])": FunctionFragment;
9
10
  "handle(uint32,bytes32,bytes)": FunctionFragment;
@@ -18,7 +19,8 @@ export interface RouterInterface extends utils.Interface {
18
19
  "setMailbox(address)": FunctionFragment;
19
20
  "transferOwnership(address)": FunctionFragment;
20
21
  };
21
- getFunction(nameOrSignatureOrTopic: "enrollRemoteRouter" | "enrollRemoteRouters" | "handle" | "interchainGasPaymaster" | "interchainSecurityModule" | "mailbox" | "owner" | "renounceOwnership" | "routers" | "setInterchainGasPaymaster" | "setInterchainSecurityModule" | "setMailbox" | "transferOwnership"): FunctionFragment;
22
+ getFunction(nameOrSignatureOrTopic: "domains" | "enrollRemoteRouter" | "enrollRemoteRouters" | "handle" | "interchainGasPaymaster" | "interchainSecurityModule" | "mailbox" | "owner" | "renounceOwnership" | "routers" | "setInterchainGasPaymaster" | "setInterchainSecurityModule" | "setMailbox" | "transferOwnership"): FunctionFragment;
23
+ encodeFunctionData(functionFragment: "domains", values?: undefined): string;
22
24
  encodeFunctionData(functionFragment: "enrollRemoteRouter", values: [BigNumberish, BytesLike]): string;
23
25
  encodeFunctionData(functionFragment: "enrollRemoteRouters", values: [BigNumberish[], BytesLike[]]): string;
24
26
  encodeFunctionData(functionFragment: "handle", values: [BigNumberish, BytesLike, BytesLike]): string;
@@ -32,6 +34,7 @@ export interface RouterInterface extends utils.Interface {
32
34
  encodeFunctionData(functionFragment: "setInterchainSecurityModule", values: [string]): string;
33
35
  encodeFunctionData(functionFragment: "setMailbox", values: [string]): string;
34
36
  encodeFunctionData(functionFragment: "transferOwnership", values: [string]): string;
37
+ decodeFunctionResult(functionFragment: "domains", data: BytesLike): Result;
35
38
  decodeFunctionResult(functionFragment: "enrollRemoteRouter", data: BytesLike): Result;
36
39
  decodeFunctionResult(functionFragment: "enrollRemoteRouters", data: BytesLike): Result;
37
40
  decodeFunctionResult(functionFragment: "handle", data: BytesLike): Result;
@@ -117,10 +120,11 @@ export interface Router extends BaseContract {
117
120
  once: OnEvent<this>;
118
121
  removeListener: OnEvent<this>;
119
122
  functions: {
123
+ domains(overrides?: CallOverrides): Promise<[number[]]>;
120
124
  enrollRemoteRouter(_domain: BigNumberish, _router: BytesLike, overrides?: Overrides & {
121
125
  from?: string | Promise<string>;
122
126
  }): Promise<ContractTransaction>;
123
- enrollRemoteRouters(_domains: BigNumberish[], _routers: BytesLike[], overrides?: Overrides & {
127
+ enrollRemoteRouters(_domains: BigNumberish[], _addresses: BytesLike[], overrides?: Overrides & {
124
128
  from?: string | Promise<string>;
125
129
  }): Promise<ContractTransaction>;
126
130
  handle(_origin: BigNumberish, _sender: BytesLike, _message: BytesLike, overrides?: Overrides & {
@@ -133,7 +137,7 @@ export interface Router extends BaseContract {
133
137
  renounceOwnership(overrides?: Overrides & {
134
138
  from?: string | Promise<string>;
135
139
  }): Promise<ContractTransaction>;
136
- routers(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>;
140
+ routers(_domain: BigNumberish, overrides?: CallOverrides): Promise<[string]>;
137
141
  setInterchainGasPaymaster(_interchainGasPaymaster: string, overrides?: Overrides & {
138
142
  from?: string | Promise<string>;
139
143
  }): Promise<ContractTransaction>;
@@ -147,10 +151,11 @@ export interface Router extends BaseContract {
147
151
  from?: string | Promise<string>;
148
152
  }): Promise<ContractTransaction>;
149
153
  };
154
+ domains(overrides?: CallOverrides): Promise<number[]>;
150
155
  enrollRemoteRouter(_domain: BigNumberish, _router: BytesLike, overrides?: Overrides & {
151
156
  from?: string | Promise<string>;
152
157
  }): Promise<ContractTransaction>;
153
- enrollRemoteRouters(_domains: BigNumberish[], _routers: BytesLike[], overrides?: Overrides & {
158
+ enrollRemoteRouters(_domains: BigNumberish[], _addresses: BytesLike[], overrides?: Overrides & {
154
159
  from?: string | Promise<string>;
155
160
  }): Promise<ContractTransaction>;
156
161
  handle(_origin: BigNumberish, _sender: BytesLike, _message: BytesLike, overrides?: Overrides & {
@@ -163,7 +168,7 @@ export interface Router extends BaseContract {
163
168
  renounceOwnership(overrides?: Overrides & {
164
169
  from?: string | Promise<string>;
165
170
  }): Promise<ContractTransaction>;
166
- routers(arg0: BigNumberish, overrides?: CallOverrides): Promise<string>;
171
+ routers(_domain: BigNumberish, overrides?: CallOverrides): Promise<string>;
167
172
  setInterchainGasPaymaster(_interchainGasPaymaster: string, overrides?: Overrides & {
168
173
  from?: string | Promise<string>;
169
174
  }): Promise<ContractTransaction>;
@@ -177,15 +182,16 @@ export interface Router extends BaseContract {
177
182
  from?: string | Promise<string>;
178
183
  }): Promise<ContractTransaction>;
179
184
  callStatic: {
185
+ domains(overrides?: CallOverrides): Promise<number[]>;
180
186
  enrollRemoteRouter(_domain: BigNumberish, _router: BytesLike, overrides?: CallOverrides): Promise<void>;
181
- enrollRemoteRouters(_domains: BigNumberish[], _routers: BytesLike[], overrides?: CallOverrides): Promise<void>;
187
+ enrollRemoteRouters(_domains: BigNumberish[], _addresses: BytesLike[], overrides?: CallOverrides): Promise<void>;
182
188
  handle(_origin: BigNumberish, _sender: BytesLike, _message: BytesLike, overrides?: CallOverrides): Promise<void>;
183
189
  interchainGasPaymaster(overrides?: CallOverrides): Promise<string>;
184
190
  interchainSecurityModule(overrides?: CallOverrides): Promise<string>;
185
191
  mailbox(overrides?: CallOverrides): Promise<string>;
186
192
  owner(overrides?: CallOverrides): Promise<string>;
187
193
  renounceOwnership(overrides?: CallOverrides): Promise<void>;
188
- routers(arg0: BigNumberish, overrides?: CallOverrides): Promise<string>;
194
+ routers(_domain: BigNumberish, overrides?: CallOverrides): Promise<string>;
189
195
  setInterchainGasPaymaster(_interchainGasPaymaster: string, overrides?: CallOverrides): Promise<void>;
190
196
  setInterchainSecurityModule(_module: string, overrides?: CallOverrides): Promise<void>;
191
197
  setMailbox(_mailbox: string, overrides?: CallOverrides): Promise<void>;
@@ -206,10 +212,11 @@ export interface Router extends BaseContract {
206
212
  RemoteRouterEnrolled(domain?: BigNumberish | null, router?: BytesLike | null): RemoteRouterEnrolledEventFilter;
207
213
  };
208
214
  estimateGas: {
215
+ domains(overrides?: CallOverrides): Promise<BigNumber>;
209
216
  enrollRemoteRouter(_domain: BigNumberish, _router: BytesLike, overrides?: Overrides & {
210
217
  from?: string | Promise<string>;
211
218
  }): Promise<BigNumber>;
212
- enrollRemoteRouters(_domains: BigNumberish[], _routers: BytesLike[], overrides?: Overrides & {
219
+ enrollRemoteRouters(_domains: BigNumberish[], _addresses: BytesLike[], overrides?: Overrides & {
213
220
  from?: string | Promise<string>;
214
221
  }): Promise<BigNumber>;
215
222
  handle(_origin: BigNumberish, _sender: BytesLike, _message: BytesLike, overrides?: Overrides & {
@@ -222,7 +229,7 @@ export interface Router extends BaseContract {
222
229
  renounceOwnership(overrides?: Overrides & {
223
230
  from?: string | Promise<string>;
224
231
  }): Promise<BigNumber>;
225
- routers(arg0: BigNumberish, overrides?: CallOverrides): Promise<BigNumber>;
232
+ routers(_domain: BigNumberish, overrides?: CallOverrides): Promise<BigNumber>;
226
233
  setInterchainGasPaymaster(_interchainGasPaymaster: string, overrides?: Overrides & {
227
234
  from?: string | Promise<string>;
228
235
  }): Promise<BigNumber>;
@@ -237,10 +244,11 @@ export interface Router extends BaseContract {
237
244
  }): Promise<BigNumber>;
238
245
  };
239
246
  populateTransaction: {
247
+ domains(overrides?: CallOverrides): Promise<PopulatedTransaction>;
240
248
  enrollRemoteRouter(_domain: BigNumberish, _router: BytesLike, overrides?: Overrides & {
241
249
  from?: string | Promise<string>;
242
250
  }): Promise<PopulatedTransaction>;
243
- enrollRemoteRouters(_domains: BigNumberish[], _routers: BytesLike[], overrides?: Overrides & {
251
+ enrollRemoteRouters(_domains: BigNumberish[], _addresses: BytesLike[], overrides?: Overrides & {
244
252
  from?: string | Promise<string>;
245
253
  }): Promise<PopulatedTransaction>;
246
254
  handle(_origin: BigNumberish, _sender: BytesLike, _message: BytesLike, overrides?: Overrides & {
@@ -253,7 +261,7 @@ export interface Router extends BaseContract {
253
261
  renounceOwnership(overrides?: Overrides & {
254
262
  from?: string | Promise<string>;
255
263
  }): Promise<PopulatedTransaction>;
256
- routers(arg0: BigNumberish, overrides?: CallOverrides): Promise<PopulatedTransaction>;
264
+ routers(_domain: BigNumberish, overrides?: CallOverrides): Promise<PopulatedTransaction>;
257
265
  setInterchainGasPaymaster(_interchainGasPaymaster: string, overrides?: Overrides & {
258
266
  from?: string | Promise<string>;
259
267
  }): Promise<PopulatedTransaction>;