@hyperlane-xyz/core 1.1.3 → 1.1.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 (176) hide show
  1. package/contracts/GasRouter.sol +103 -0
  2. package/contracts/OwnableMulticall.sol +5 -4
  3. package/contracts/PausableReentrancyGuard.sol +2 -2
  4. package/contracts/igps/InterchainGasPaymaster.sol +2 -1
  5. package/contracts/libs/Call.sol +108 -19
  6. package/contracts/middleware/InterchainAccountRouter.sol +47 -34
  7. package/contracts/middleware/InterchainCallMessage.sol +112 -0
  8. package/contracts/middleware/InterchainQueryRouter.sol +36 -80
  9. package/contracts/mock/MockHyperlaneEnvironment.sol +4 -4
  10. package/contracts/test/TestGasRouter.sol +28 -0
  11. package/contracts/test/TestInterchainGasPaymaster.sol +8 -17
  12. package/contracts/test/TestQuery.sol +11 -6
  13. package/contracts/test/TestQuerySender.sol +22 -11
  14. package/dist/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.d.ts +75 -0
  15. package/dist/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.d.ts.map +1 -0
  16. package/dist/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.js +4 -0
  17. package/dist/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.js.map +1 -0
  18. package/dist/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.d.ts +2 -0
  19. package/dist/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.d.ts.map +1 -0
  20. package/dist/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.js +3 -0
  21. package/dist/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.js.map +1 -0
  22. package/dist/@openzeppelin/contracts/token/ERC20/extensions/index.d.ts +3 -0
  23. package/dist/@openzeppelin/contracts/token/ERC20/extensions/index.d.ts.map +1 -0
  24. package/dist/@openzeppelin/contracts/token/ERC20/extensions/index.js +4 -0
  25. package/dist/@openzeppelin/contracts/token/ERC20/extensions/index.js.map +1 -0
  26. package/dist/@openzeppelin/contracts/token/ERC20/index.d.ts +2 -0
  27. package/dist/@openzeppelin/contracts/token/ERC20/index.d.ts.map +1 -1
  28. package/dist/@openzeppelin/contracts/token/ERC20/index.js +1 -0
  29. package/dist/@openzeppelin/contracts/token/ERC20/index.js.map +1 -1
  30. package/dist/contracts/GasRouter.d.ts +336 -0
  31. package/dist/contracts/GasRouter.d.ts.map +1 -0
  32. package/dist/contracts/GasRouter.js +4 -0
  33. package/dist/contracts/GasRouter.js.map +1 -0
  34. package/dist/contracts/InterchainGasPaymaster.d.ts +162 -0
  35. package/dist/contracts/InterchainGasPaymaster.d.ts.map +1 -0
  36. package/dist/contracts/InterchainGasPaymaster.js +4 -0
  37. package/dist/contracts/InterchainGasPaymaster.js.map +1 -0
  38. package/dist/contracts/OwnableMulticall.d.ts +13 -5
  39. package/dist/contracts/OwnableMulticall.d.ts.map +1 -1
  40. package/dist/contracts/igps/GasOverheadIgp.d.ts +194 -0
  41. package/dist/contracts/igps/GasOverheadIgp.d.ts.map +1 -0
  42. package/dist/contracts/igps/GasOverheadIgp.js +4 -0
  43. package/dist/contracts/igps/GasOverheadIgp.js.map +1 -0
  44. package/dist/contracts/index.d.ts +1 -0
  45. package/dist/contracts/index.d.ts.map +1 -1
  46. package/dist/contracts/middleware/InterchainAccountRouter.d.ts +60 -44
  47. package/dist/contracts/middleware/InterchainAccountRouter.d.ts.map +1 -1
  48. package/dist/contracts/middleware/InterchainQueryRouter.d.ts +36 -57
  49. package/dist/contracts/middleware/InterchainQueryRouter.d.ts.map +1 -1
  50. package/dist/contracts/middleware/liquidity-layer/interfaces/circle/ICircleBridge.d.ts +78 -0
  51. package/dist/contracts/middleware/liquidity-layer/interfaces/circle/ICircleBridge.d.ts.map +1 -0
  52. package/dist/contracts/middleware/liquidity-layer/interfaces/circle/ICircleBridge.js +4 -0
  53. package/dist/contracts/middleware/liquidity-layer/interfaces/circle/ICircleBridge.js.map +1 -0
  54. package/dist/contracts/mock/MockCircleBridge.d.ts +86 -0
  55. package/dist/contracts/mock/MockCircleBridge.d.ts.map +1 -0
  56. package/dist/contracts/mock/MockCircleBridge.js +4 -0
  57. package/dist/contracts/mock/MockCircleBridge.js.map +1 -0
  58. package/dist/contracts/mock/MockInterchainAccountRouter.d.ts +422 -0
  59. package/dist/contracts/mock/MockInterchainAccountRouter.d.ts.map +1 -0
  60. package/dist/contracts/mock/MockInterchainAccountRouter.js +4 -0
  61. package/dist/contracts/mock/MockInterchainAccountRouter.js.map +1 -0
  62. package/dist/contracts/test/TestGasRouter.d.ts +441 -0
  63. package/dist/contracts/test/TestGasRouter.d.ts.map +1 -0
  64. package/dist/contracts/test/TestGasRouter.js +4 -0
  65. package/dist/contracts/test/TestGasRouter.js.map +1 -0
  66. package/dist/contracts/test/TestInterchainGasPaymaster.d.ts +122 -12
  67. package/dist/contracts/test/TestInterchainGasPaymaster.d.ts.map +1 -1
  68. package/dist/contracts/test/TestQuery.d.ts +9 -9
  69. package/dist/contracts/test/TestQuery.d.ts.map +1 -1
  70. package/dist/contracts/test/index.d.ts +1 -0
  71. package/dist/contracts/test/index.d.ts.map +1 -1
  72. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory.d.ts +23 -0
  73. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory.d.ts.map +1 -0
  74. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory.js +93 -0
  75. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory.js.map +1 -0
  76. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.d.ts +2 -0
  77. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.d.ts.map +1 -0
  78. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.js +9 -0
  79. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.js.map +1 -0
  80. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/index.d.ts +2 -0
  81. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/index.d.ts.map +1 -0
  82. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/index.js +31 -0
  83. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/index.js.map +1 -0
  84. package/dist/factories/@openzeppelin/contracts/token/ERC20/index.d.ts +1 -0
  85. package/dist/factories/@openzeppelin/contracts/token/ERC20/index.d.ts.map +1 -1
  86. package/dist/factories/@openzeppelin/contracts/token/ERC20/index.js +25 -1
  87. package/dist/factories/@openzeppelin/contracts/token/ERC20/index.js.map +1 -1
  88. package/dist/factories/contracts/GasRouter__factory.d.ts +52 -0
  89. package/dist/factories/contracts/GasRouter__factory.d.ts.map +1 -0
  90. package/dist/factories/contracts/GasRouter__factory.js +392 -0
  91. package/dist/factories/contracts/GasRouter__factory.js.map +1 -0
  92. package/dist/factories/contracts/InterchainGasPaymaster__factory.d.ts +62 -0
  93. package/dist/factories/contracts/InterchainGasPaymaster__factory.d.ts.map +1 -0
  94. package/dist/factories/contracts/InterchainGasPaymaster__factory.js +178 -0
  95. package/dist/factories/contracts/InterchainGasPaymaster__factory.js.map +1 -0
  96. package/dist/factories/contracts/Mailbox__factory.d.ts +1 -1
  97. package/dist/factories/contracts/Mailbox__factory.js +1 -1
  98. package/dist/factories/contracts/OwnableMulticall__factory.d.ts +20 -3
  99. package/dist/factories/contracts/OwnableMulticall__factory.d.ts.map +1 -1
  100. package/dist/factories/contracts/OwnableMulticall__factory.js +23 -7
  101. package/dist/factories/contracts/OwnableMulticall__factory.js.map +1 -1
  102. package/dist/factories/contracts/igps/GasOverheadIgp__factory.d.ts +75 -0
  103. package/dist/factories/contracts/igps/GasOverheadIgp__factory.d.ts.map +1 -0
  104. package/dist/factories/contracts/igps/GasOverheadIgp__factory.js +263 -0
  105. package/dist/factories/contracts/igps/GasOverheadIgp__factory.js.map +1 -0
  106. package/dist/factories/contracts/igps/InterchainGasPaymaster__factory.d.ts +1 -1
  107. package/dist/factories/contracts/igps/InterchainGasPaymaster__factory.js +2 -2
  108. package/dist/factories/contracts/index.d.ts +1 -0
  109. package/dist/factories/contracts/index.d.ts.map +1 -1
  110. package/dist/factories/contracts/index.js +3 -1
  111. package/dist/factories/contracts/index.js.map +1 -1
  112. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.d.ts +13 -3
  113. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.d.ts.map +1 -1
  114. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.js +70 -39
  115. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.js.map +1 -1
  116. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.d.ts +13 -3
  117. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.d.ts.map +1 -1
  118. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.js +24 -92
  119. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.js.map +1 -1
  120. package/dist/factories/contracts/middleware/liquidity-layer/interfaces/circle/ICircleBridge__factory.d.ts +36 -0
  121. package/dist/factories/contracts/middleware/liquidity-layer/interfaces/circle/ICircleBridge__factory.d.ts.map +1 -0
  122. package/dist/factories/contracts/middleware/liquidity-layer/interfaces/circle/ICircleBridge__factory.js +104 -0
  123. package/dist/factories/contracts/middleware/liquidity-layer/interfaces/circle/ICircleBridge__factory.js.map +1 -0
  124. package/dist/factories/contracts/mock/MockCircleBridge__factory.d.ts +59 -0
  125. package/dist/factories/contracts/mock/MockCircleBridge__factory.d.ts.map +1 -0
  126. package/dist/factories/contracts/mock/MockCircleBridge__factory.js +151 -0
  127. package/dist/factories/contracts/mock/MockCircleBridge__factory.js.map +1 -0
  128. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.d.ts +1 -1
  129. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.d.ts.map +1 -1
  130. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.js +2 -2
  131. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.js.map +1 -1
  132. package/dist/factories/contracts/mock/MockInterchainAccountRouter__factory.d.ts +69 -0
  133. package/dist/factories/contracts/mock/MockInterchainAccountRouter__factory.d.ts.map +1 -0
  134. package/dist/factories/contracts/mock/MockInterchainAccountRouter__factory.js +556 -0
  135. package/dist/factories/contracts/mock/MockInterchainAccountRouter__factory.js.map +1 -0
  136. package/dist/factories/contracts/test/TestGasRouter__factory.d.ts +64 -0
  137. package/dist/factories/contracts/test/TestGasRouter__factory.d.ts.map +1 -0
  138. package/dist/factories/contracts/test/TestGasRouter__factory.js +579 -0
  139. package/dist/factories/contracts/test/TestGasRouter__factory.js.map +1 -0
  140. package/dist/factories/contracts/test/TestInterchainGasPaymaster__factory.d.ts +1 -1
  141. package/dist/factories/contracts/test/TestInterchainGasPaymaster__factory.d.ts.map +1 -1
  142. package/dist/factories/contracts/test/TestInterchainGasPaymaster__factory.js +97 -5
  143. package/dist/factories/contracts/test/TestInterchainGasPaymaster__factory.js.map +1 -1
  144. package/dist/factories/contracts/test/TestMailbox__factory.d.ts +1 -1
  145. package/dist/factories/contracts/test/TestMailbox__factory.js +1 -1
  146. package/dist/factories/contracts/test/TestQuerySender__factory.d.ts +1 -1
  147. package/dist/factories/contracts/test/TestQuerySender__factory.d.ts.map +1 -1
  148. package/dist/factories/contracts/test/TestQuerySender__factory.js +1 -1
  149. package/dist/factories/contracts/test/TestQuerySender__factory.js.map +1 -1
  150. package/dist/factories/contracts/test/TestQuery__factory.d.ts +1 -1
  151. package/dist/factories/contracts/test/TestQuery__factory.d.ts.map +1 -1
  152. package/dist/factories/contracts/test/TestQuery__factory.js +2 -2
  153. package/dist/factories/contracts/test/TestQuery__factory.js.map +1 -1
  154. package/dist/factories/contracts/test/index.d.ts +1 -0
  155. package/dist/factories/contracts/test/index.d.ts.map +1 -1
  156. package/dist/factories/contracts/test/index.js +3 -1
  157. package/dist/factories/contracts/test/index.js.map +1 -1
  158. package/dist/factories/interfaces/IInterchainAccountRouter__factory.d.ts +12 -2
  159. package/dist/factories/interfaces/IInterchainAccountRouter__factory.d.ts.map +1 -1
  160. package/dist/factories/interfaces/IInterchainAccountRouter__factory.js +27 -20
  161. package/dist/factories/interfaces/IInterchainAccountRouter__factory.js.map +1 -1
  162. package/dist/factories/interfaces/IInterchainQueryRouter__factory.d.ts +12 -2
  163. package/dist/factories/interfaces/IInterchainQueryRouter__factory.d.ts.map +1 -1
  164. package/dist/factories/interfaces/IInterchainQueryRouter__factory.js +17 -85
  165. package/dist/factories/interfaces/IInterchainQueryRouter__factory.js.map +1 -1
  166. package/dist/index.d.ts +6 -0
  167. package/dist/index.d.ts.map +1 -1
  168. package/dist/index.js +8 -2
  169. package/dist/index.js.map +1 -1
  170. package/dist/interfaces/IInterchainAccountRouter.d.ts +35 -35
  171. package/dist/interfaces/IInterchainAccountRouter.d.ts.map +1 -1
  172. package/dist/interfaces/IInterchainQueryRouter.d.ts +23 -44
  173. package/dist/interfaces/IInterchainQueryRouter.d.ts.map +1 -1
  174. package/interfaces/IInterchainAccountRouter.sol +5 -6
  175. package/interfaces/IInterchainQueryRouter.sol +1 -15
  176. package/package.json +5 -4
@@ -5,6 +5,8 @@ pragma solidity ^0.8.13;
5
5
  import {CallLib} from "../libs/Call.sol";
6
6
  import {Router} from "../Router.sol";
7
7
  import {IInterchainQueryRouter} from "../../interfaces/IInterchainQueryRouter.sol";
8
+ import {InterchainCallMessage} from "./InterchainCallMessage.sol";
9
+ import {TypeCasts} from "../libs/TypeCasts.sol";
8
10
 
9
11
  // ============ External Imports ============
10
12
  import {Create2} from "@openzeppelin/contracts/utils/Create2.sol";
@@ -16,13 +18,8 @@ import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Ini
16
18
  * @dev Currently does not support Sovereign Consensus (user specified Interchain Security Modules).
17
19
  */
18
20
  contract InterchainQueryRouter is Router, IInterchainQueryRouter {
19
- using CallLib for address;
20
- using CallLib for CallLib.Call[];
21
-
22
- enum Action {
23
- DISPATCH,
24
- RESOLVE
25
- }
21
+ using TypeCasts for address;
22
+ using TypeCasts for bytes32;
26
23
 
27
24
  /**
28
25
  * @notice Emitted when a query is dispatched to another chain.
@@ -34,11 +31,11 @@ contract InterchainQueryRouter is Router, IInterchainQueryRouter {
34
31
  address indexed sender
35
32
  );
36
33
  /**
37
- * @notice Emitted when a query is returned to the origin chain.
38
- * @param originDomain The domain of the chain to return the result to.
34
+ * @notice Emitted when a query is executed on the and callback dispatched to the origin chain.
35
+ * @param originDomain The domain of the chain that dispatched the query and receives the callback.
39
36
  * @param sender The address to receive the result.
40
37
  */
41
- event QueryReturned(uint32 indexed originDomain, address indexed sender);
38
+ event QueryExecuted(uint32 indexed originDomain, bytes32 indexed sender);
42
39
  /**
43
40
  * @notice Emitted when a query is resolved on the origin chain.
44
41
  * @param destinationDomain The domain of the chain that was queried.
@@ -71,63 +68,21 @@ contract InterchainQueryRouter is Router, IInterchainQueryRouter {
71
68
  }
72
69
 
73
70
  /**
74
- * @param _destinationDomain Domain of destination chain
75
- * @param target The address of the contract to query on destination chain.
76
- * @param queryData The calldata of the view call to make on the destination chain.
77
- * @param callback Callback function selector on `msg.sender` and optionally abi-encoded prefix arguments.
78
- * @return messageId The ID of the message encoding the query.
71
+ * @notice Dispatches a sequence of static calls (query) to the destination domain and set of callbacks to resolve the results on the dispatcher.
72
+ * @param _destinationDomain The domain of the chain to query.
73
+ * @param calls The sequence of static calls to dispatch and callbacks on the sender to resolve the results.
74
+ * @dev Recommend using CallLib.build to format the interchain calls.
75
+ * @dev Callbacks must be returned to the `msg.sender` for security reasons. Require this contract is the `msg.sender` on callbacks.
79
76
  */
80
77
  function query(
81
78
  uint32 _destinationDomain,
82
- address target,
83
- bytes calldata queryData,
84
- bytes calldata callback
85
- ) external returns (bytes32 messageId) {
86
- // TODO: fix this ugly arrayification
87
- CallLib.Call[] memory calls = new CallLib.Call[](1);
88
- calls[0] = CallLib.Call({to: target, data: queryData});
89
- bytes[] memory callbacks = new bytes[](1);
90
- callbacks[0] = callback;
91
- messageId = query(_destinationDomain, calls, callbacks);
92
- }
93
-
94
- /**
95
- * @param _destinationDomain Domain of destination chain
96
- * @param call Call (to and data packed struct) to be made on destination chain.
97
- * @param callback Callback function selector on `msg.sender` and optionally abi-encoded prefix arguments.
98
- */
99
- function query(
100
- uint32 _destinationDomain,
101
- CallLib.Call calldata call,
102
- bytes calldata callback
103
- ) external returns (bytes32 messageId) {
104
- // TODO: fix this ugly arrayification
105
- CallLib.Call[] memory calls = new CallLib.Call[](1);
106
- calls[0] = call;
107
- bytes[] memory callbacks = new bytes[](1);
108
- callbacks[0] = callback;
109
- messageId = query(_destinationDomain, calls, callbacks);
110
- }
111
-
112
- /**
113
- * @param _destinationDomain Domain of destination chain
114
- * @param calls Array of calls (to and data packed struct) to be made on destination chain in sequence.
115
- * @param callbacks Array of callback function selectors on `msg.sender` and optionally abi-encoded prefix arguments.
116
- */
117
- function query(
118
- uint32 _destinationDomain,
119
- CallLib.Call[] memory calls,
120
- bytes[] memory callbacks
79
+ CallLib.StaticCallWithCallback[] calldata calls
121
80
  ) public returns (bytes32 messageId) {
122
- require(
123
- calls.length == callbacks.length,
124
- "InterchainQueryRouter: calls and callbacks must be same length"
125
- );
81
+ emit QueryDispatched(_destinationDomain, msg.sender);
126
82
  messageId = _dispatch(
127
83
  _destinationDomain,
128
- abi.encode(Action.DISPATCH, msg.sender, calls, callbacks)
84
+ InterchainCallMessage.format(calls, msg.sender.addressToBytes32())
129
85
  );
130
- emit QueryDispatched(_destinationDomain, msg.sender);
131
86
  }
132
87
 
133
88
  /**
@@ -140,27 +95,28 @@ contract InterchainQueryRouter is Router, IInterchainQueryRouter {
140
95
  bytes32, // router sender
141
96
  bytes calldata _message
142
97
  ) internal override {
143
- Action action = Action(uint8(bytes1(_message[31])));
144
- if (action == Action.DISPATCH) {
145
- (
146
- ,
147
- address sender,
148
- CallLib.Call[] memory calls,
149
- bytes[] memory callbacks
150
- ) = abi.decode(
151
- _message,
152
- (Action, address, CallLib.Call[], bytes[])
153
- );
154
- callbacks = calls._multicallAndResolve(callbacks);
155
- _dispatch(_origin, abi.encode(Action.RESOLVE, sender, callbacks));
156
- emit QueryReturned(_origin, sender);
157
- } else if (action == Action.RESOLVE) {
158
- (, address sender, bytes[] memory resolveCallbacks) = abi.decode(
159
- _message,
160
- (Action, address, bytes[])
98
+ InterchainCallMessage.CallType calltype = InterchainCallMessage
99
+ .calltype(_message);
100
+ bytes32 sender = InterchainCallMessage.sender(_message);
101
+ if (
102
+ calltype == InterchainCallMessage.CallType.STATIC_CALL_WITH_CALLBACK
103
+ ) {
104
+ CallLib.StaticCallWithCallback[]
105
+ memory callsWithCallback = InterchainCallMessage
106
+ .callsWithCallbacks(_message);
107
+ bytes[] memory callbacks = CallLib.multistaticcall(
108
+ callsWithCallback
161
109
  );
162
- sender._multicall(resolveCallbacks);
163
- emit QueryResolved(_origin, sender);
110
+ emit QueryExecuted(_origin, sender);
111
+ _dispatch(_origin, InterchainCallMessage.format(callbacks, sender));
112
+ } else if (calltype == InterchainCallMessage.CallType.RAW_CALLDATA) {
113
+ address senderAddress = sender.bytes32ToAddress();
114
+ bytes[] memory rawCalls = InterchainCallMessage.rawCalls(_message);
115
+ CallLib.multicallto(senderAddress, rawCalls);
116
+ //
117
+ emit QueryResolved(_origin, senderAddress);
118
+ } else {
119
+ assert(false);
164
120
  }
165
121
  }
166
122
  }
@@ -3,7 +3,7 @@ pragma solidity ^0.8.13;
3
3
 
4
4
  import "./MockMailbox.sol";
5
5
  import "../middleware/InterchainQueryRouter.sol";
6
- import "../igps/InterchainGasPaymaster.sol";
6
+ import "../test/TestInterchainGasPaymaster.sol";
7
7
  import "../test/TestIsm.sol";
8
8
 
9
9
  import {TypeCasts} from "../libs/TypeCasts.sol";
@@ -13,7 +13,7 @@ contract MockHyperlaneEnvironment {
13
13
  uint32 destinationDomain;
14
14
 
15
15
  mapping(uint32 => MockMailbox) public mailboxes;
16
- mapping(uint32 => InterchainGasPaymaster) public igps;
16
+ mapping(uint32 => TestInterchainGasPaymaster) public igps;
17
17
  mapping(uint32 => IInterchainSecurityModule) public isms;
18
18
  mapping(uint32 => InterchainQueryRouter) public queryRouters;
19
19
 
@@ -27,8 +27,8 @@ contract MockHyperlaneEnvironment {
27
27
  originMailbox.addRemoteMailbox(_destinationDomain, destinationMailbox);
28
28
  destinationMailbox.addRemoteMailbox(_originDomain, originMailbox);
29
29
 
30
- igps[originDomain] = new InterchainGasPaymaster();
31
- igps[destinationDomain] = new InterchainGasPaymaster();
30
+ igps[originDomain] = new TestInterchainGasPaymaster();
31
+ igps[destinationDomain] = new TestInterchainGasPaymaster();
32
32
 
33
33
  isms[originDomain] = new TestIsm();
34
34
  isms[destinationDomain] = new TestIsm();
@@ -0,0 +1,28 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.6.11;
3
+
4
+ import "./TestRouter.sol";
5
+ import "../GasRouter.sol";
6
+
7
+ contract TestGasRouter is TestRouter, GasRouter {
8
+ function dispatchWithGas(
9
+ uint32 _destinationDomain,
10
+ bytes memory _messageBody,
11
+ uint256 _gasPayment,
12
+ address _gasPaymentRefundAddress
13
+ ) external payable {
14
+ _dispatchWithGas(
15
+ _destinationDomain,
16
+ _messageBody,
17
+ _gasPayment,
18
+ _gasPaymentRefundAddress
19
+ );
20
+ }
21
+
22
+ function dispatchWithGas(
23
+ uint32 _destinationDomain,
24
+ bytes memory _messageBody
25
+ ) external payable {
26
+ _dispatchWithGas(_destinationDomain, _messageBody);
27
+ }
28
+ }
@@ -2,30 +2,21 @@
2
2
  pragma solidity >=0.8.0;
3
3
 
4
4
  // ============ Internal Imports ============
5
- import {IInterchainGasPaymaster} from "../../interfaces/IInterchainGasPaymaster.sol";
5
+ import {InterchainGasPaymaster} from "../igps/InterchainGasPaymaster.sol";
6
6
 
7
- contract TestInterchainGasPaymaster is IInterchainGasPaymaster {
8
- event GasPayment(
9
- bytes32 indexed messageId,
10
- uint256 gasAmount,
11
- uint256 payment
12
- );
7
+ contract TestInterchainGasPaymaster is InterchainGasPaymaster {
8
+ uint256 gasPrice = 0;
13
9
 
14
- function payForGas(
15
- bytes32 _messageId,
16
- uint32,
17
- uint256 _gasAmount,
18
- address
19
- ) external payable override {
20
- emit GasPayment(_messageId, _gasAmount, msg.value);
10
+ function setGasPrice(uint256 _gasPrice) external {
11
+ gasPrice = _gasPrice;
21
12
  }
22
13
 
23
- function quoteGasPayment(uint32, uint256)
14
+ function quoteGasPayment(uint32, uint256 gasAmount)
24
15
  public
25
- pure
16
+ view
26
17
  override
27
18
  returns (uint256)
28
19
  {
29
- return 0;
20
+ return gasPrice * gasAmount;
30
21
  }
31
22
  }
@@ -3,6 +3,9 @@ pragma solidity ^0.8.13;
3
3
 
4
4
  import {InterchainQueryRouter} from "../middleware/InterchainQueryRouter.sol";
5
5
  import {TypeCasts} from "../libs/TypeCasts.sol";
6
+ import {CallLib} from "../libs/Call.sol";
7
+
8
+ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
6
9
 
7
10
  contract TestQuery {
8
11
  InterchainQueryRouter public router;
@@ -18,18 +21,20 @@ contract TestQuery {
18
21
  */
19
22
  function queryRouterOwner(uint32 domain, uint256 secret) external {
20
23
  address target = TypeCasts.bytes32ToAddress(router.routers(domain));
21
- bytes memory data = abi.encodeWithSignature("owner()");
22
- bytes memory callback = bytes.concat(
23
- this.receiveRouterOwer.selector,
24
- bytes32(secret)
24
+ CallLib.StaticCallWithCallback[]
25
+ memory calls = new CallLib.StaticCallWithCallback[](1);
26
+ calls[0] = CallLib.build(
27
+ target,
28
+ abi.encodeWithSelector(Ownable.owner.selector),
29
+ abi.encodeWithSelector(this.receiveRouterOwner.selector, secret)
25
30
  );
26
- router.query(domain, target, data, callback);
31
+ router.query(domain, calls);
27
32
  }
28
33
 
29
34
  /**
30
35
  * @dev `msg.sender` must be restricted to `this.router` to prevent any local account from spoofing query data.
31
36
  */
32
- function receiveRouterOwer(uint256 secret, address owner) external {
37
+ function receiveRouterOwner(uint256 secret, address owner) external {
33
38
  require(msg.sender == address(router), "TestQuery: not from router");
34
39
  emit Owner(secret, owner);
35
40
  }
@@ -3,6 +3,7 @@ pragma solidity >=0.8.0;
3
3
 
4
4
  import {IInterchainGasPaymaster} from "../../interfaces/IInterchainGasPaymaster.sol";
5
5
  import {IInterchainQueryRouter} from "../../interfaces/IInterchainQueryRouter.sol";
6
+ import {CallLib} from "../libs/Call.sol";
6
7
 
7
8
  contract TestQuerySender {
8
9
  IInterchainQueryRouter queryRouter;
@@ -32,13 +33,13 @@ contract TestQuerySender {
32
33
  bytes calldata _targetData,
33
34
  uint256 _gasAmount
34
35
  ) external payable {
35
- bytes32 _messageId = queryRouter.query(
36
+ queryAndPayFor(
36
37
  _destinationDomain,
37
38
  _target,
38
39
  _targetData,
39
- abi.encodePacked(this.handleQueryAddressResult.selector)
40
+ this.handleQueryAddressResult.selector,
41
+ _gasAmount
40
42
  );
41
- _payForGas(_messageId, _destinationDomain, _gasAmount);
42
43
  }
43
44
 
44
45
  function handleQueryAddressResult(address _result) external {
@@ -52,13 +53,13 @@ contract TestQuerySender {
52
53
  bytes calldata _targetData,
53
54
  uint256 _gasAmount
54
55
  ) external payable {
55
- bytes32 _messageId = queryRouter.query(
56
+ queryAndPayFor(
56
57
  _destinationDomain,
57
58
  _target,
58
59
  _targetData,
59
- abi.encodePacked(this.handleQueryUint256Result.selector)
60
+ this.handleQueryUint256Result.selector,
61
+ _gasAmount
60
62
  );
61
- _payForGas(_messageId, _destinationDomain, _gasAmount);
62
63
  }
63
64
 
64
65
  function handleQueryUint256Result(uint256 _result) external {
@@ -72,13 +73,13 @@ contract TestQuerySender {
72
73
  bytes calldata _targetData,
73
74
  uint256 _gasAmount
74
75
  ) external payable {
75
- bytes32 _messageId = queryRouter.query(
76
+ queryAndPayFor(
76
77
  _destinationDomain,
77
78
  _target,
78
79
  _targetData,
79
- abi.encodePacked(this.handleQueryBytes32Result.selector)
80
+ this.handleQueryBytes32Result.selector,
81
+ _gasAmount
80
82
  );
81
- _payForGas(_messageId, _destinationDomain, _gasAmount);
82
83
  }
83
84
 
84
85
  function handleQueryBytes32Result(bytes32 _result) external {
@@ -86,11 +87,21 @@ contract TestQuerySender {
86
87
  lastBytes32Result = _result;
87
88
  }
88
89
 
89
- function _payForGas(
90
- bytes32 _messageId,
90
+ function queryAndPayFor(
91
91
  uint32 _destinationDomain,
92
+ address _target,
93
+ bytes calldata _targetData,
94
+ bytes4 _callbackSelector,
92
95
  uint256 _gasAmount
93
96
  ) internal {
97
+ CallLib.StaticCallWithCallback[]
98
+ memory calls = new CallLib.StaticCallWithCallback[](1);
99
+ calls[0] = CallLib.build(
100
+ _target,
101
+ _targetData,
102
+ abi.encodePacked(_callbackSelector)
103
+ );
104
+ bytes32 _messageId = queryRouter.query(_destinationDomain, calls);
94
105
  interchainGasPaymaster.payForGas{value: msg.value}(
95
106
  _messageId,
96
107
  _destinationDomain,
@@ -0,0 +1,75 @@
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, BigNumberish, BytesLike, CallOverrides, ContractTransaction, Overrides, PopulatedTransaction, Signer, utils } from "ethers";
5
+ export interface IERC20PermitInterface extends utils.Interface {
6
+ functions: {
7
+ "DOMAIN_SEPARATOR()": FunctionFragment;
8
+ "nonces(address)": FunctionFragment;
9
+ "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment;
10
+ };
11
+ getFunction(nameOrSignatureOrTopic: "DOMAIN_SEPARATOR" | "nonces" | "permit"): FunctionFragment;
12
+ encodeFunctionData(functionFragment: "DOMAIN_SEPARATOR", values?: undefined): string;
13
+ encodeFunctionData(functionFragment: "nonces", values: [string]): string;
14
+ encodeFunctionData(functionFragment: "permit", values: [
15
+ string,
16
+ string,
17
+ BigNumberish,
18
+ BigNumberish,
19
+ BigNumberish,
20
+ BytesLike,
21
+ BytesLike
22
+ ]): string;
23
+ decodeFunctionResult(functionFragment: "DOMAIN_SEPARATOR", data: BytesLike): Result;
24
+ decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result;
25
+ decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result;
26
+ events: {};
27
+ }
28
+ export interface IERC20Permit extends BaseContract {
29
+ connect(signerOrProvider: Signer | Provider | string): this;
30
+ attach(addressOrName: string): this;
31
+ deployed(): Promise<this>;
32
+ interface: IERC20PermitInterface;
33
+ queryFilter<TEvent extends TypedEvent>(event: TypedEventFilter<TEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TEvent>>;
34
+ listeners<TEvent extends TypedEvent>(eventFilter?: TypedEventFilter<TEvent>): Array<TypedListener<TEvent>>;
35
+ listeners(eventName?: string): Array<Listener>;
36
+ removeAllListeners<TEvent extends TypedEvent>(eventFilter: TypedEventFilter<TEvent>): this;
37
+ removeAllListeners(eventName?: string): this;
38
+ off: OnEvent<this>;
39
+ on: OnEvent<this>;
40
+ once: OnEvent<this>;
41
+ removeListener: OnEvent<this>;
42
+ functions: {
43
+ DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>;
44
+ nonces(owner: string, overrides?: CallOverrides): Promise<[BigNumber]>;
45
+ permit(owner: string, spender: string, value: BigNumberish, deadline: BigNumberish, v: BigNumberish, r: BytesLike, s: BytesLike, overrides?: Overrides & {
46
+ from?: string | Promise<string>;
47
+ }): Promise<ContractTransaction>;
48
+ };
49
+ DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<string>;
50
+ nonces(owner: string, overrides?: CallOverrides): Promise<BigNumber>;
51
+ permit(owner: string, spender: string, value: BigNumberish, deadline: BigNumberish, v: BigNumberish, r: BytesLike, s: BytesLike, overrides?: Overrides & {
52
+ from?: string | Promise<string>;
53
+ }): Promise<ContractTransaction>;
54
+ callStatic: {
55
+ DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<string>;
56
+ nonces(owner: string, overrides?: CallOverrides): Promise<BigNumber>;
57
+ permit(owner: string, spender: string, value: BigNumberish, deadline: BigNumberish, v: BigNumberish, r: BytesLike, s: BytesLike, overrides?: CallOverrides): Promise<void>;
58
+ };
59
+ filters: {};
60
+ estimateGas: {
61
+ DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<BigNumber>;
62
+ nonces(owner: string, overrides?: CallOverrides): Promise<BigNumber>;
63
+ permit(owner: string, spender: string, value: BigNumberish, deadline: BigNumberish, v: BigNumberish, r: BytesLike, s: BytesLike, overrides?: Overrides & {
64
+ from?: string | Promise<string>;
65
+ }): Promise<BigNumber>;
66
+ };
67
+ populateTransaction: {
68
+ DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<PopulatedTransaction>;
69
+ nonces(owner: string, overrides?: CallOverrides): Promise<PopulatedTransaction>;
70
+ permit(owner: string, spender: string, value: BigNumberish, deadline: BigNumberish, v: BigNumberish, r: BytesLike, s: BytesLike, overrides?: Overrides & {
71
+ from?: string | Promise<string>;
72
+ }): Promise<PopulatedTransaction>;
73
+ };
74
+ }
75
+ //# sourceMappingURL=IERC20Permit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IERC20Permit.d.ts","sourceRoot":"","sources":["../../../../../../../types/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ /* Autogenerated file. Do not edit manually. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=IERC20Permit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IERC20Permit.js","sourceRoot":"","sources":["../../../../../../../types/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.ts"],"names":[],"mappings":";AAAA,+CAA+C"}
@@ -0,0 +1,2 @@
1
+ export type { IERC20Permit } from "./IERC20Permit";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../types/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts"],"names":[],"mappings":"AAGA,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../types/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type * as draftIerc20PermitSol from "./draft-IERC20Permit.sol";
2
+ export type { draftIerc20PermitSol };
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../types/@openzeppelin/contracts/token/ERC20/extensions/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,oBAAoB,MAAM,0BAA0B,CAAC;AAEtE,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ /* Autogenerated file. Do not edit manually. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../types/@openzeppelin/contracts/token/ERC20/extensions/index.ts"],"names":[],"mappings":";AAAA,+CAA+C"}
@@ -1,2 +1,4 @@
1
+ import type * as extensions from "./extensions";
2
+ export type { extensions };
1
3
  export type { IERC20 } from "./IERC20";
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../types/@openzeppelin/contracts/token/ERC20/index.ts"],"names":[],"mappings":"AAGA,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../types/@openzeppelin/contracts/token/ERC20/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,UAAU,MAAM,cAAc,CAAC;AAEhD,YAAY,EAAE,UAAU,EAAE,CAAC;AAC3B,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
@@ -1,3 +1,4 @@
1
1
  "use strict";
2
+ /* Autogenerated file. Do not edit manually. */
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../types/@openzeppelin/contracts/token/ERC20/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../types/@openzeppelin/contracts/token/ERC20/index.ts"],"names":[],"mappings":";AAAA,+CAA+C"}