@hyperlane-xyz/core 0.5.2 → 0.5.3

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 (231) hide show
  1. package/contracts/middleware/token-bridge/TokenBridgeRouter.sol +135 -0
  2. package/contracts/middleware/token-bridge/adapters/CircleBridgeAdapter.sol +248 -0
  3. package/contracts/middleware/token-bridge/interfaces/ITokenBridgeAdapter.sol +18 -0
  4. package/contracts/middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient.sol +12 -0
  5. package/contracts/middleware/token-bridge/interfaces/circle/ICircleBridge.sol +59 -0
  6. package/contracts/middleware/token-bridge/interfaces/circle/ICircleMessageTransmitter.sol +38 -0
  7. package/contracts/mock/MockToken.sol +14 -0
  8. package/contracts/mock/MockTokenBridgeAdapter.sol +46 -0
  9. package/contracts/test/TestTokenBridgeMessageRecipient.sol +24 -0
  10. package/contracts/test/TestTokenRecipient.sol +44 -0
  11. package/dist/@openzeppelin/contracts/index.d.ts +2 -0
  12. package/dist/@openzeppelin/contracts/index.d.ts.map +1 -1
  13. package/dist/@openzeppelin/contracts/token/ERC20/IERC20.d.ts +139 -0
  14. package/dist/@openzeppelin/contracts/token/ERC20/IERC20.d.ts.map +1 -0
  15. package/dist/@openzeppelin/contracts/token/ERC20/IERC20.js +4 -0
  16. package/dist/@openzeppelin/contracts/token/ERC20/IERC20.js.map +1 -0
  17. package/dist/@openzeppelin/contracts/token/ERC20/index.d.ts +2 -0
  18. package/dist/@openzeppelin/contracts/token/ERC20/index.d.ts.map +1 -0
  19. package/dist/@openzeppelin/contracts/token/ERC20/index.js +3 -0
  20. package/dist/@openzeppelin/contracts/token/ERC20/index.js.map +1 -0
  21. package/dist/@openzeppelin/contracts/token/index.d.ts +3 -0
  22. package/dist/@openzeppelin/contracts/token/index.d.ts.map +1 -0
  23. package/dist/@openzeppelin/contracts/token/index.js +4 -0
  24. package/dist/@openzeppelin/contracts/token/index.js.map +1 -0
  25. package/dist/@openzeppelin/contracts-upgradeable/index.d.ts +2 -0
  26. package/dist/@openzeppelin/contracts-upgradeable/index.d.ts.map +1 -1
  27. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.d.ts +204 -0
  28. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.d.ts.map +1 -0
  29. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.js +4 -0
  30. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.js.map +1 -0
  31. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.d.ts +139 -0
  32. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.d.ts.map +1 -0
  33. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.js +4 -0
  34. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.js.map +1 -0
  35. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.d.ts +163 -0
  36. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.d.ts.map +1 -0
  37. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.js +4 -0
  38. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.js.map +1 -0
  39. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/index.d.ts +2 -0
  40. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/index.d.ts.map +1 -0
  41. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/index.js +3 -0
  42. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/index.js.map +1 -0
  43. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/index.d.ts +5 -0
  44. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/index.d.ts.map +1 -0
  45. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/index.js +4 -0
  46. package/dist/@openzeppelin/contracts-upgradeable/token/ERC20/index.js.map +1 -0
  47. package/dist/@openzeppelin/contracts-upgradeable/token/index.d.ts +3 -0
  48. package/dist/@openzeppelin/contracts-upgradeable/token/index.d.ts.map +1 -0
  49. package/dist/@openzeppelin/contracts-upgradeable/token/index.js +4 -0
  50. package/dist/@openzeppelin/contracts-upgradeable/token/index.js.map +1 -0
  51. package/dist/contracts/middleware/index.d.ts +2 -0
  52. package/dist/contracts/middleware/index.d.ts.map +1 -1
  53. package/dist/contracts/middleware/index.js +1 -0
  54. package/dist/contracts/middleware/index.js.map +1 -1
  55. package/dist/contracts/middleware/token-bridge/TokenBridgeRouter.d.ts +291 -0
  56. package/dist/contracts/middleware/token-bridge/TokenBridgeRouter.d.ts.map +1 -0
  57. package/dist/contracts/middleware/token-bridge/TokenBridgeRouter.js +4 -0
  58. package/dist/contracts/middleware/token-bridge/TokenBridgeRouter.js.map +1 -0
  59. package/dist/contracts/middleware/token-bridge/adapters/CircleBridgeAdapter.d.ts +416 -0
  60. package/dist/contracts/middleware/token-bridge/adapters/CircleBridgeAdapter.d.ts.map +1 -0
  61. package/dist/contracts/middleware/token-bridge/adapters/CircleBridgeAdapter.js +4 -0
  62. package/dist/contracts/middleware/token-bridge/adapters/CircleBridgeAdapter.js.map +1 -0
  63. package/dist/contracts/middleware/token-bridge/adapters/index.d.ts +2 -0
  64. package/dist/contracts/middleware/token-bridge/adapters/index.d.ts.map +1 -0
  65. package/dist/contracts/middleware/token-bridge/adapters/index.js +3 -0
  66. package/dist/contracts/middleware/token-bridge/adapters/index.js.map +1 -0
  67. package/dist/contracts/middleware/token-bridge/index.d.ts +6 -0
  68. package/dist/contracts/middleware/token-bridge/index.d.ts.map +1 -0
  69. package/dist/contracts/middleware/token-bridge/index.js +4 -0
  70. package/dist/contracts/middleware/token-bridge/index.js.map +1 -0
  71. package/dist/contracts/middleware/token-bridge/interfaces/ITokenBridgeAdapter.d.ts +67 -0
  72. package/dist/contracts/middleware/token-bridge/interfaces/ITokenBridgeAdapter.d.ts.map +1 -0
  73. package/dist/contracts/middleware/token-bridge/interfaces/ITokenBridgeAdapter.js +4 -0
  74. package/dist/contracts/middleware/token-bridge/interfaces/ITokenBridgeAdapter.js.map +1 -0
  75. package/dist/contracts/middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient.d.ts +51 -0
  76. package/dist/contracts/middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient.d.ts.map +1 -0
  77. package/dist/contracts/middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient.js +4 -0
  78. package/dist/contracts/middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient.js.map +1 -0
  79. package/dist/contracts/middleware/token-bridge/interfaces/circle/ICircleBridge.d.ts +78 -0
  80. package/dist/contracts/middleware/token-bridge/interfaces/circle/ICircleBridge.d.ts.map +1 -0
  81. package/dist/contracts/middleware/token-bridge/interfaces/circle/ICircleBridge.js +4 -0
  82. package/dist/contracts/middleware/token-bridge/interfaces/circle/ICircleBridge.js.map +1 -0
  83. package/dist/contracts/middleware/token-bridge/interfaces/circle/ICircleMessageTransmitter.d.ts +59 -0
  84. package/dist/contracts/middleware/token-bridge/interfaces/circle/ICircleMessageTransmitter.d.ts.map +1 -0
  85. package/dist/contracts/middleware/token-bridge/interfaces/circle/ICircleMessageTransmitter.js +4 -0
  86. package/dist/contracts/middleware/token-bridge/interfaces/circle/ICircleMessageTransmitter.js.map +1 -0
  87. package/dist/contracts/middleware/token-bridge/interfaces/circle/index.d.ts +3 -0
  88. package/dist/contracts/middleware/token-bridge/interfaces/circle/index.d.ts.map +1 -0
  89. package/dist/contracts/middleware/token-bridge/interfaces/circle/index.js +3 -0
  90. package/dist/contracts/middleware/token-bridge/interfaces/circle/index.js.map +1 -0
  91. package/dist/contracts/middleware/token-bridge/interfaces/index.d.ts +5 -0
  92. package/dist/contracts/middleware/token-bridge/interfaces/index.d.ts.map +1 -0
  93. package/dist/contracts/middleware/token-bridge/interfaces/index.js +4 -0
  94. package/dist/contracts/middleware/token-bridge/interfaces/index.js.map +1 -0
  95. package/dist/contracts/mock/MockToken.d.ts +236 -0
  96. package/dist/contracts/mock/MockToken.d.ts.map +1 -0
  97. package/dist/contracts/mock/MockToken.js +4 -0
  98. package/dist/contracts/mock/MockToken.js.map +1 -0
  99. package/dist/contracts/mock/MockTokenBridgeAdapter.d.ts +99 -0
  100. package/dist/contracts/mock/MockTokenBridgeAdapter.d.ts.map +1 -0
  101. package/dist/contracts/mock/MockTokenBridgeAdapter.js +4 -0
  102. package/dist/contracts/mock/MockTokenBridgeAdapter.js.map +1 -0
  103. package/dist/contracts/mock/index.d.ts +2 -0
  104. package/dist/contracts/mock/index.d.ts.map +1 -1
  105. package/dist/contracts/test/TestTokenBridgeMessageRecipient.d.ts +72 -0
  106. package/dist/contracts/test/TestTokenBridgeMessageRecipient.d.ts.map +1 -0
  107. package/dist/contracts/test/TestTokenBridgeMessageRecipient.js +4 -0
  108. package/dist/contracts/test/TestTokenBridgeMessageRecipient.js.map +1 -0
  109. package/dist/contracts/test/TestTokenRecipient.d.ts +151 -0
  110. package/dist/contracts/test/TestTokenRecipient.d.ts.map +1 -0
  111. package/dist/contracts/test/TestTokenRecipient.js +4 -0
  112. package/dist/contracts/test/TestTokenRecipient.js.map +1 -0
  113. package/dist/contracts/test/index.d.ts +2 -0
  114. package/dist/contracts/test/index.d.ts.map +1 -1
  115. package/dist/factories/@openzeppelin/contracts/index.d.ts +1 -0
  116. package/dist/factories/@openzeppelin/contracts/index.d.ts.map +1 -1
  117. package/dist/factories/@openzeppelin/contracts/index.js +2 -1
  118. package/dist/factories/@openzeppelin/contracts/index.js.map +1 -1
  119. package/dist/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.d.ts +36 -0
  120. package/dist/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.d.ts.map +1 -0
  121. package/dist/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.js +201 -0
  122. package/dist/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.js.map +1 -0
  123. package/dist/factories/@openzeppelin/contracts/token/ERC20/index.d.ts +2 -0
  124. package/dist/factories/@openzeppelin/contracts/token/ERC20/index.d.ts.map +1 -0
  125. package/dist/factories/@openzeppelin/contracts/token/ERC20/index.js +9 -0
  126. package/dist/factories/@openzeppelin/contracts/token/ERC20/index.js.map +1 -0
  127. package/dist/factories/@openzeppelin/contracts/token/index.d.ts +2 -0
  128. package/dist/factories/@openzeppelin/contracts/token/index.d.ts.map +1 -0
  129. package/dist/factories/@openzeppelin/contracts/token/index.js +31 -0
  130. package/dist/factories/@openzeppelin/contracts/token/index.js.map +1 -0
  131. package/dist/factories/@openzeppelin/contracts-upgradeable/index.d.ts +1 -0
  132. package/dist/factories/@openzeppelin/contracts-upgradeable/index.d.ts.map +1 -1
  133. package/dist/factories/@openzeppelin/contracts-upgradeable/index.js +2 -1
  134. package/dist/factories/@openzeppelin/contracts-upgradeable/index.js.map +1 -1
  135. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable__factory.d.ts +48 -0
  136. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable__factory.d.ts.map +1 -0
  137. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable__factory.js +324 -0
  138. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable__factory.js.map +1 -0
  139. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable__factory.d.ts +36 -0
  140. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable__factory.d.ts.map +1 -0
  141. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable__factory.js +201 -0
  142. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable__factory.js.map +1 -0
  143. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable__factory.d.ts +36 -0
  144. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable__factory.d.ts.map +1 -0
  145. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable__factory.js +240 -0
  146. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable__factory.js.map +1 -0
  147. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/index.d.ts +2 -0
  148. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/index.d.ts.map +1 -0
  149. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/index.js +9 -0
  150. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/index.js.map +1 -0
  151. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/index.d.ts +4 -0
  152. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/index.d.ts.map +1 -0
  153. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/index.js +35 -0
  154. package/dist/factories/@openzeppelin/contracts-upgradeable/token/ERC20/index.js.map +1 -0
  155. package/dist/factories/@openzeppelin/contracts-upgradeable/token/index.d.ts +2 -0
  156. package/dist/factories/@openzeppelin/contracts-upgradeable/token/index.d.ts.map +1 -0
  157. package/dist/factories/@openzeppelin/contracts-upgradeable/token/index.js +31 -0
  158. package/dist/factories/@openzeppelin/contracts-upgradeable/token/index.js.map +1 -0
  159. package/dist/factories/contracts/middleware/index.d.ts +1 -0
  160. package/dist/factories/contracts/middleware/index.d.ts.map +1 -1
  161. package/dist/factories/contracts/middleware/index.js +25 -1
  162. package/dist/factories/contracts/middleware/index.js.map +1 -1
  163. package/dist/factories/contracts/middleware/token-bridge/TokenBridgeRouter__factory.d.ts +48 -0
  164. package/dist/factories/contracts/middleware/token-bridge/TokenBridgeRouter__factory.d.ts.map +1 -0
  165. package/dist/factories/contracts/middleware/token-bridge/TokenBridgeRouter__factory.js +380 -0
  166. package/dist/factories/contracts/middleware/token-bridge/TokenBridgeRouter__factory.js.map +1 -0
  167. package/dist/factories/contracts/middleware/token-bridge/adapters/CircleBridgeAdapter__factory.d.ts +48 -0
  168. package/dist/factories/contracts/middleware/token-bridge/adapters/CircleBridgeAdapter__factory.d.ts.map +1 -0
  169. package/dist/factories/contracts/middleware/token-bridge/adapters/CircleBridgeAdapter__factory.js +584 -0
  170. package/dist/factories/contracts/middleware/token-bridge/adapters/CircleBridgeAdapter__factory.js.map +1 -0
  171. package/dist/factories/contracts/middleware/token-bridge/adapters/index.d.ts +2 -0
  172. package/dist/factories/contracts/middleware/token-bridge/adapters/index.d.ts.map +1 -0
  173. package/dist/factories/contracts/middleware/token-bridge/adapters/index.js +9 -0
  174. package/dist/factories/contracts/middleware/token-bridge/adapters/index.js.map +1 -0
  175. package/dist/factories/contracts/middleware/token-bridge/index.d.ts +4 -0
  176. package/dist/factories/contracts/middleware/token-bridge/index.d.ts.map +1 -0
  177. package/dist/factories/contracts/middleware/token-bridge/index.js +34 -0
  178. package/dist/factories/contracts/middleware/token-bridge/index.js.map +1 -0
  179. package/dist/factories/contracts/middleware/token-bridge/interfaces/ITokenBridgeAdapter__factory.d.ts +23 -0
  180. package/dist/factories/contracts/middleware/token-bridge/interfaces/ITokenBridgeAdapter__factory.d.ts.map +1 -0
  181. package/dist/factories/contracts/middleware/token-bridge/interfaces/ITokenBridgeAdapter__factory.js +91 -0
  182. package/dist/factories/contracts/middleware/token-bridge/interfaces/ITokenBridgeAdapter__factory.js.map +1 -0
  183. package/dist/factories/contracts/middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient__factory.d.ts +19 -0
  184. package/dist/factories/contracts/middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient__factory.d.ts.map +1 -0
  185. package/dist/factories/contracts/middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient__factory.js +51 -0
  186. package/dist/factories/contracts/middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient__factory.js.map +1 -0
  187. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/ICircleBridge__factory.d.ts +36 -0
  188. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/ICircleBridge__factory.d.ts.map +1 -0
  189. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/ICircleBridge__factory.js +104 -0
  190. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/ICircleBridge__factory.js.map +1 -0
  191. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/ICircleMessageTransmitter__factory.d.ts +23 -0
  192. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/ICircleMessageTransmitter__factory.d.ts.map +1 -0
  193. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/ICircleMessageTransmitter__factory.js +61 -0
  194. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/ICircleMessageTransmitter__factory.js.map +1 -0
  195. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/index.d.ts +3 -0
  196. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/index.d.ts.map +1 -0
  197. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/index.js +11 -0
  198. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/index.js.map +1 -0
  199. package/dist/factories/contracts/middleware/token-bridge/interfaces/index.d.ts +4 -0
  200. package/dist/factories/contracts/middleware/token-bridge/interfaces/index.d.ts.map +1 -0
  201. package/dist/factories/contracts/middleware/token-bridge/interfaces/index.js +35 -0
  202. package/dist/factories/contracts/middleware/token-bridge/interfaces/index.js.map +1 -0
  203. package/dist/factories/contracts/mock/MockTokenBridgeAdapter__factory.d.ts +45 -0
  204. package/dist/factories/contracts/mock/MockTokenBridgeAdapter__factory.d.ts.map +1 -0
  205. package/dist/factories/contracts/mock/MockTokenBridgeAdapter__factory.js +170 -0
  206. package/dist/factories/contracts/mock/MockTokenBridgeAdapter__factory.js.map +1 -0
  207. package/dist/factories/contracts/mock/MockToken__factory.d.ts +48 -0
  208. package/dist/factories/contracts/mock/MockToken__factory.d.ts.map +1 -0
  209. package/dist/factories/contracts/mock/MockToken__factory.js +355 -0
  210. package/dist/factories/contracts/mock/MockToken__factory.js.map +1 -0
  211. package/dist/factories/contracts/mock/index.d.ts +2 -0
  212. package/dist/factories/contracts/mock/index.d.ts.map +1 -1
  213. package/dist/factories/contracts/mock/index.js +5 -1
  214. package/dist/factories/contracts/mock/index.js.map +1 -1
  215. package/dist/factories/contracts/test/TestTokenBridgeMessageRecipient__factory.d.ts +44 -0
  216. package/dist/factories/contracts/test/TestTokenBridgeMessageRecipient__factory.d.ts.map +1 -0
  217. package/dist/factories/contracts/test/TestTokenBridgeMessageRecipient__factory.js +111 -0
  218. package/dist/factories/contracts/test/TestTokenBridgeMessageRecipient__factory.js.map +1 -0
  219. package/dist/factories/contracts/test/TestTokenRecipient__factory.d.ts +55 -0
  220. package/dist/factories/contracts/test/TestTokenRecipient__factory.d.ts.map +1 -0
  221. package/dist/factories/contracts/test/TestTokenRecipient__factory.js +232 -0
  222. package/dist/factories/contracts/test/TestTokenRecipient__factory.js.map +1 -0
  223. package/dist/factories/contracts/test/index.d.ts +2 -0
  224. package/dist/factories/contracts/test/index.d.ts.map +1 -1
  225. package/dist/factories/contracts/test/index.js +5 -1
  226. package/dist/factories/contracts/test/index.js.map +1 -1
  227. package/dist/index.d.ts +28 -0
  228. package/dist/index.d.ts.map +1 -1
  229. package/dist/index.js +30 -2
  230. package/dist/index.js.map +1 -1
  231. package/package.json +2 -2
@@ -0,0 +1,135 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.13;
3
+
4
+ import {Router} from "../../Router.sol";
5
+
6
+ import {IMessageRecipient} from "../../../interfaces/IMessageRecipient.sol";
7
+ import {ICircleBridge} from "./interfaces/circle/ICircleBridge.sol";
8
+ import {ICircleMessageTransmitter} from "./interfaces/circle/ICircleMessageTransmitter.sol";
9
+ import {ITokenBridgeAdapter} from "./interfaces/ITokenBridgeAdapter.sol";
10
+ import {ITokenBridgeMessageRecipient} from "./interfaces/ITokenBridgeMessageRecipient.sol";
11
+
12
+ import {TypeCasts} from "../../libs/TypeCasts.sol";
13
+
14
+ import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
15
+
16
+ contract TokenBridgeRouter is Router {
17
+ // Token bridge => adapter address
18
+ mapping(string => address) public tokenBridgeAdapters;
19
+
20
+ event TokenBridgeAdapterSet(string indexed bridge, address adapter);
21
+
22
+ function initialize(
23
+ address _owner,
24
+ address _abacusConnectionManager,
25
+ address _interchainGasPaymaster
26
+ ) public initializer {
27
+ // Transfer ownership of the contract to deployer
28
+ _transferOwnership(_owner);
29
+ // Set the addresses for the ACM and IGP
30
+ // Alternatively, this could be done later in an initialize method
31
+ _setAbacusConnectionManager(_abacusConnectionManager);
32
+ _setInterchainGasPaymaster(_interchainGasPaymaster);
33
+ }
34
+
35
+ function dispatchWithTokens(
36
+ uint32 _destinationDomain,
37
+ bytes32 _recipientAddress,
38
+ bytes calldata _messageBody,
39
+ address _token,
40
+ uint256 _amount,
41
+ string calldata _bridge
42
+ ) external payable {
43
+ ITokenBridgeAdapter _adapter = _getAdapter(_bridge);
44
+
45
+ // Transfer the tokens to the adapter
46
+ // TODO: use safeTransferFrom
47
+ // TODO: Are there scenarios where a transferFrom fails and it doesn't revert?
48
+ require(
49
+ IERC20(_token).transferFrom(msg.sender, address(_adapter), _amount),
50
+ "!transfer in"
51
+ );
52
+
53
+ // Reverts if the bridge was unsuccessful.
54
+ // Gets adapter-specific data that is encoded into the message
55
+ // ultimately sent via Hyperlane.
56
+ bytes memory _adapterData = _adapter.sendTokens(
57
+ _destinationDomain,
58
+ _recipientAddress,
59
+ _token,
60
+ _amount
61
+ );
62
+
63
+ // The user's message "wrapped" with metadata required by this middleware
64
+ bytes memory _messageWithMetadata = abi.encode(
65
+ TypeCasts.addressToBytes32(msg.sender),
66
+ _recipientAddress, // The "user" recipient
67
+ _amount, // The amount of the tokens sent over the bridge
68
+ _bridge, // The destination token bridge ID
69
+ _adapterData, // The adapter-specific data
70
+ _messageBody // The "user" message
71
+ );
72
+
73
+ // Dispatch the _messageWithMetadata to the destination's TokenBridgeRouter.
74
+ _dispatchWithGas(_destinationDomain, _messageWithMetadata, msg.value);
75
+ }
76
+
77
+ // Handles a message from an enrolled remote TokenBridgeRouter
78
+ function _handle(
79
+ uint32 _origin,
80
+ bytes32, // _sender, unused
81
+ bytes calldata _message
82
+ ) internal override {
83
+ // Decode the message with metadata, "unwrapping" the user's message body
84
+ (
85
+ bytes32 _originalSender,
86
+ bytes32 _userRecipientAddress,
87
+ uint256 _amount,
88
+ string memory _bridge,
89
+ bytes memory _adapterData,
90
+ bytes memory _userMessageBody
91
+ ) = abi.decode(
92
+ _message,
93
+ (bytes32, bytes32, uint256, string, bytes, bytes)
94
+ );
95
+
96
+ ITokenBridgeMessageRecipient _userRecipient = ITokenBridgeMessageRecipient(
97
+ TypeCasts.bytes32ToAddress(_userRecipientAddress)
98
+ );
99
+
100
+ // Reverts if the adapter hasn't received the bridged tokens yet
101
+ (address _token, uint256 _receivedAmount) = _getAdapter(_bridge)
102
+ .receiveTokens(
103
+ _origin,
104
+ address(_userRecipient),
105
+ _amount,
106
+ _adapterData
107
+ );
108
+
109
+ _userRecipient.handleWithTokens(
110
+ _origin,
111
+ _originalSender,
112
+ _userMessageBody,
113
+ _token,
114
+ _receivedAmount
115
+ );
116
+ }
117
+
118
+ function setTokenBridgeAdapter(string calldata _bridge, address _adapter)
119
+ external
120
+ onlyOwner
121
+ {
122
+ tokenBridgeAdapters[_bridge] = _adapter;
123
+ emit TokenBridgeAdapterSet(_bridge, _adapter);
124
+ }
125
+
126
+ function _getAdapter(string memory _bridge)
127
+ internal
128
+ view
129
+ returns (ITokenBridgeAdapter _adapter)
130
+ {
131
+ _adapter = ITokenBridgeAdapter(tokenBridgeAdapters[_bridge]);
132
+ // Require the adapter to have been set
133
+ require(address(_adapter) != address(0), "No adapter found for bridge");
134
+ }
135
+ }
@@ -0,0 +1,248 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.13;
3
+
4
+ import {Router} from "../../../Router.sol";
5
+
6
+ import {ICircleBridge} from "../interfaces/circle/ICircleBridge.sol";
7
+ import {ICircleMessageTransmitter} from "../interfaces/circle/ICircleMessageTransmitter.sol";
8
+ import {ITokenBridgeAdapter} from "../interfaces/ITokenBridgeAdapter.sol";
9
+
10
+ import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
11
+
12
+ contract CircleBridgeAdapter is ITokenBridgeAdapter, Router {
13
+ /// @notice The CircleBridge contract.
14
+ ICircleBridge public circleBridge;
15
+
16
+ /// @notice The Circle MessageTransmitter contract.
17
+ ICircleMessageTransmitter public circleMessageTransmitter;
18
+
19
+ /// @notice The TokenBridgeRouter contract.
20
+ address public tokenBridgeRouter;
21
+
22
+ /// @notice Hyperlane domain => Circle domain.
23
+ /// ATM, known Circle domains are Ethereum = 0 and Avalanche = 1.
24
+ /// Note this could result in ambiguity between the Circle domain being
25
+ /// Ethereum or unknown. TODO fix?
26
+ mapping(uint32 => uint32) public hyperlaneDomainToCircleDomain;
27
+
28
+ /// @notice Token symbol => address of token on local chain.
29
+ mapping(string => IERC20) public tokenSymbolToAddress;
30
+
31
+ /// @notice Local chain token address => token symbol.
32
+ mapping(address => string) public tokenAddressToSymbol;
33
+
34
+ /**
35
+ * @notice Emits the nonce of the Circle message when a token is bridged.
36
+ * @param nonce The nonce of the Circle message.
37
+ */
38
+ event BridgedToken(uint64 nonce);
39
+
40
+ /**
41
+ * @notice Emitted when the Hyperlane domain to Circle domain mapping is updated.
42
+ * @param hyperlaneDomain The Hyperlane domain.
43
+ * @param circleDomain The Circle domain.
44
+ */
45
+ event DomainAdded(uint32 indexed hyperlaneDomain, uint32 circleDomain);
46
+
47
+ /**
48
+ * @notice Emitted when a local token and its token symbol have been added.
49
+ */
50
+ event TokenAdded(address indexed token, string indexed symbol);
51
+
52
+ /**
53
+ * @notice Emitted when a local token and its token symbol have been removed.
54
+ */
55
+ event TokenRemoved(address indexed token, string indexed symbol);
56
+
57
+ modifier onlyTokenBridgeRouter() {
58
+ require(msg.sender == tokenBridgeRouter, "!tokenBridgeRouter");
59
+ _;
60
+ }
61
+
62
+ /**
63
+ * @param _owner The new owner.
64
+ * @param _circleBridge The CircleBridge contract.
65
+ * @param _circleMessageTransmitter The Circle MessageTransmitter contract.
66
+ * @param _tokenBridgeRouter The TokenBridgeRouter contract.
67
+ */
68
+ function initialize(
69
+ address _owner,
70
+ address _circleBridge,
71
+ address _circleMessageTransmitter,
72
+ address _tokenBridgeRouter
73
+ ) public initializer {
74
+ // Transfer ownership of the contract to deployer
75
+ _transferOwnership(_owner);
76
+
77
+ // Set the addresses for the ACM and IGP to address(0) - they aren't used.
78
+ _setAbacusConnectionManager(address(0));
79
+ _setInterchainGasPaymaster(address(0));
80
+
81
+ circleBridge = ICircleBridge(_circleBridge);
82
+ circleMessageTransmitter = ICircleMessageTransmitter(
83
+ _circleMessageTransmitter
84
+ );
85
+ tokenBridgeRouter = _tokenBridgeRouter;
86
+ }
87
+
88
+ function sendTokens(
89
+ uint32 _destinationDomain,
90
+ bytes32, // _recipientAddress, unused
91
+ address _token,
92
+ uint256 _amount
93
+ ) external onlyTokenBridgeRouter returns (bytes memory) {
94
+ string memory _tokenSymbol = tokenAddressToSymbol[_token];
95
+ require(
96
+ bytes(_tokenSymbol).length > 0,
97
+ "CircleBridgeAdapter: Unknown token"
98
+ );
99
+
100
+ uint32 _circleDomain = hyperlaneDomainToCircleDomain[
101
+ _destinationDomain
102
+ ];
103
+ bytes32 _remoteRouter = routers[_destinationDomain];
104
+ require(
105
+ _remoteRouter != bytes32(0),
106
+ "CircleBridgeAdapter: No router for domain"
107
+ );
108
+
109
+ // Approve the token to Circle. We assume that the TokenBridgeRouter
110
+ // has already transferred the token to this contract.
111
+ require(
112
+ IERC20(_token).approve(address(circleBridge), _amount),
113
+ "!approval"
114
+ );
115
+
116
+ uint64 _nonce = circleBridge.depositForBurn(
117
+ _amount,
118
+ _circleDomain,
119
+ _remoteRouter, // Mint to the remote router
120
+ _token
121
+ );
122
+
123
+ emit BridgedToken(_nonce);
124
+
125
+ return abi.encodePacked(_nonce, _tokenSymbol);
126
+ }
127
+
128
+ // Returns the token and amount sent
129
+ function receiveTokens(
130
+ uint32 _originDomain, // Hyperlane domain
131
+ address _recipient,
132
+ uint256 _amount,
133
+ bytes calldata _adapterData // The adapter data from the message
134
+ ) external onlyTokenBridgeRouter returns (address, uint256) {
135
+ // The origin Circle domain
136
+ uint32 _originCircleDomain = hyperlaneDomainToCircleDomain[
137
+ _originDomain
138
+ ];
139
+ // Get the token symbol and nonce of the transfer from the _adapterData
140
+ (uint64 _nonce, string memory _tokenSymbol) = abi.decode(
141
+ _adapterData,
142
+ (uint64, string)
143
+ );
144
+
145
+ // Require the circle message to have been processed
146
+ bytes32 _nonceId = _circleNonceId(_originCircleDomain, _nonce);
147
+ require(
148
+ circleMessageTransmitter.usedNonces(_nonceId),
149
+ "Circle message not processed yet"
150
+ );
151
+
152
+ IERC20 _token = tokenSymbolToAddress[_tokenSymbol];
153
+ require(
154
+ address(_token) != address(0),
155
+ "CircleBridgeAdapter: Unknown token"
156
+ );
157
+
158
+ // Transfer the token out to the recipient
159
+ // TODO: use safeTransfer
160
+ // Circle doesn't charge any fee, so we can safely transfer out the
161
+ // exact amount that was bridged over.
162
+ require(_token.transfer(_recipient, _amount), "!transfer out");
163
+
164
+ return (address(_token), _amount);
165
+ }
166
+
167
+ // This contract is only a Router to be aware of remote router addresses,
168
+ // and doesn't actually send/handle Hyperlane messages directly
169
+ function _handle(
170
+ uint32, // origin
171
+ bytes32, // sender
172
+ bytes calldata // message
173
+ ) internal pure override {
174
+ revert("No messages expected");
175
+ }
176
+
177
+ function addDomain(uint32 _hyperlaneDomain, uint32 _circleDomain)
178
+ external
179
+ onlyOwner
180
+ {
181
+ hyperlaneDomainToCircleDomain[_hyperlaneDomain] = _circleDomain;
182
+
183
+ emit DomainAdded(_hyperlaneDomain, _circleDomain);
184
+ }
185
+
186
+ function addToken(address _token, string calldata _tokenSymbol)
187
+ external
188
+ onlyOwner
189
+ {
190
+ require(
191
+ _token != address(0) && bytes(_tokenSymbol).length > 0,
192
+ "Cannot add default values"
193
+ );
194
+
195
+ // Require the token and token symbol to be unset.
196
+ address _existingToken = address(tokenSymbolToAddress[_tokenSymbol]);
197
+ require(_existingToken == address(0), "token symbol already has token");
198
+
199
+ string memory _existingSymbol = tokenAddressToSymbol[_token];
200
+ require(
201
+ bytes(_existingSymbol).length == 0,
202
+ "token already has token symbol"
203
+ );
204
+
205
+ tokenAddressToSymbol[_token] = _tokenSymbol;
206
+ tokenSymbolToAddress[_tokenSymbol] = IERC20(_token);
207
+
208
+ emit TokenAdded(_token, _tokenSymbol);
209
+ }
210
+
211
+ function removeToken(address _token, string calldata _tokenSymbol)
212
+ external
213
+ onlyOwner
214
+ {
215
+ // Require the provided token and token symbols match what's in storage.
216
+ address _existingToken = address(tokenSymbolToAddress[_tokenSymbol]);
217
+ require(_existingToken == _token, "Token mismatch");
218
+
219
+ string memory _existingSymbol = tokenAddressToSymbol[_token];
220
+ require(
221
+ keccak256(bytes(_existingSymbol)) == keccak256(bytes(_tokenSymbol)),
222
+ "Token symbol mismatch"
223
+ );
224
+
225
+ // Delete them from storage.
226
+ delete tokenSymbolToAddress[_tokenSymbol];
227
+ delete tokenAddressToSymbol[_token];
228
+
229
+ emit TokenRemoved(_token, _tokenSymbol);
230
+ }
231
+
232
+ /**
233
+ * @notice Gets the Circle nonce ID by hashing _originCircleDomain and _nonce.
234
+ * @param _originCircleDomain Domain of chain where the transfer originated
235
+ * @param _nonce The unique identifier for the message from source to
236
+ destination
237
+ * @return hash of source and nonce
238
+ */
239
+ function _circleNonceId(uint32 _originCircleDomain, uint64 _nonce)
240
+ internal
241
+ pure
242
+ returns (bytes32)
243
+ {
244
+ // The hash is of a uint256 nonce, not a uint64 one.
245
+ return
246
+ keccak256(abi.encodePacked(_originCircleDomain, uint256(_nonce)));
247
+ }
248
+ }
@@ -0,0 +1,18 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.13;
3
+
4
+ interface ITokenBridgeAdapter {
5
+ function sendTokens(
6
+ uint32 _destinationDomain,
7
+ bytes32 _recipientAddress,
8
+ address _token,
9
+ uint256 _amount
10
+ ) external returns (bytes memory _adapterData);
11
+
12
+ function receiveTokens(
13
+ uint32 _originDomain, // Hyperlane domain
14
+ address _recipientAddress,
15
+ uint256 _amount,
16
+ bytes calldata _adapterData // The adapter data from the message
17
+ ) external returns (address, uint256);
18
+ }
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.13;
3
+
4
+ interface ITokenBridgeMessageRecipient {
5
+ function handleWithTokens(
6
+ uint32 _origin,
7
+ bytes32 _sender,
8
+ bytes calldata _message,
9
+ address _token,
10
+ uint256 _amount
11
+ ) external;
12
+ }
@@ -0,0 +1,59 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.13;
3
+
4
+ interface ICircleBridge {
5
+ event MessageSent(bytes message);
6
+
7
+ /**
8
+ * @notice Deposits and burns tokens from sender to be minted on destination domain.
9
+ * Emits a `DepositForBurn` event.
10
+ * @dev reverts if:
11
+ * - given burnToken is not supported
12
+ * - given destinationDomain has no CircleBridge registered
13
+ * - transferFrom() reverts. For example, if sender's burnToken balance or approved allowance
14
+ * to this contract is less than `amount`.
15
+ * - burn() reverts. For example, if `amount` is 0.
16
+ * - MessageTransmitter returns false or reverts.
17
+ * @param _amount amount of tokens to burn
18
+ * @param _destinationDomain destination domain (ETH = 0, AVAX = 1)
19
+ * @param _mintRecipient address of mint recipient on destination domain
20
+ * @param _burnToken address of contract to burn deposited tokens, on local domain
21
+ * @return _nonce unique nonce reserved by message
22
+ */
23
+ function depositForBurn(
24
+ uint256 _amount,
25
+ uint32 _destinationDomain,
26
+ bytes32 _mintRecipient,
27
+ address _burnToken
28
+ ) external returns (uint64 _nonce);
29
+
30
+ /**
31
+ * @notice Deposits and burns tokens from sender to be minted on destination domain. The mint
32
+ * on the destination domain must be called by `_destinationCaller`.
33
+ * WARNING: if the `_destinationCaller` does not represent a valid address as bytes32, then it will not be possible
34
+ * to broadcast the message on the destination domain. This is an advanced feature, and the standard
35
+ * depositForBurn() should be preferred for use cases where a specific destination caller is not required.
36
+ * Emits a `DepositForBurn` event.
37
+ * @dev reverts if:
38
+ * - given destinationCaller is zero address
39
+ * - given burnToken is not supported
40
+ * - given destinationDomain has no CircleBridge registered
41
+ * - transferFrom() reverts. For example, if sender's burnToken balance or approved allowance
42
+ * to this contract is less than `amount`.
43
+ * - burn() reverts. For example, if `amount` is 0.
44
+ * - MessageTransmitter returns false or reverts.
45
+ * @param _amount amount of tokens to burn
46
+ * @param _destinationDomain destination domain
47
+ * @param _mintRecipient address of mint recipient on destination domain
48
+ * @param _burnToken address of contract to burn deposited tokens, on local domain
49
+ * @param _destinationCaller caller on the destination domain, as bytes32
50
+ * @return _nonce unique nonce reserved by message
51
+ */
52
+ function depositForBurnWithCaller(
53
+ uint256 _amount,
54
+ uint32 _destinationDomain,
55
+ bytes32 _mintRecipient,
56
+ address _burnToken,
57
+ bytes32 _destinationCaller
58
+ ) external returns (uint64 _nonce);
59
+ }
@@ -0,0 +1,38 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.13;
3
+
4
+ interface ICircleMessageTransmitter {
5
+ /**
6
+ * @notice Receive a message. Messages with a given nonce
7
+ * can only be broadcast once for a (sourceDomain, destinationDomain)
8
+ * pair. The message body of a valid message is passed to the
9
+ * specified recipient for further processing.
10
+ *
11
+ * @dev Attestation format:
12
+ * A valid attestation is the concatenated 65-byte signature(s) of exactly
13
+ * `thresholdSignature` signatures, in increasing order of attester address.
14
+ * ***If the attester addresses recovered from signatures are not in
15
+ * increasing order, signature verification will fail.***
16
+ * If incorrect number of signatures or duplicate signatures are supplied,
17
+ * signature verification will fail.
18
+ *
19
+ * Message format:
20
+ * Field Bytes Type Index
21
+ * version 4 uint32 0
22
+ * sourceDomain 4 uint32 4
23
+ * destinationDomain 4 uint32 8
24
+ * nonce 8 uint64 12
25
+ * sender 32 bytes32 20
26
+ * recipient 32 bytes32 52
27
+ * messageBody dynamic bytes 84
28
+ * @param _message Message bytes
29
+ * @param _attestation Concatenated 65-byte signature(s) of `_message`, in increasing order
30
+ * of the attester address recovered from signatures.
31
+ * @return success bool, true if successful
32
+ */
33
+ function receiveMessage(bytes memory _message, bytes calldata _attestation)
34
+ external
35
+ returns (bool success);
36
+
37
+ function usedNonces(bytes32 _nonceId) external view returns (bool);
38
+ }
@@ -0,0 +1,14 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.13;
3
+
4
+ import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";
5
+
6
+ contract MockToken is ERC20Upgradeable {
7
+ function mint(address account, uint256 amount) external {
8
+ _mint(account, amount);
9
+ }
10
+
11
+ function burn(uint256 _amount) external {
12
+ _burn(msg.sender, _amount);
13
+ }
14
+ }
@@ -0,0 +1,46 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.13;
3
+
4
+ import {ITokenBridgeAdapter} from "../middleware/token-bridge/interfaces/ITokenBridgeAdapter.sol";
5
+ import {MockToken} from "./MockToken.sol";
6
+
7
+ contract MockTokenBridgeAdapter is ITokenBridgeAdapter {
8
+ uint256 public nonce = 0;
9
+ MockToken token;
10
+
11
+ mapping(uint256 => bool) public isProcessed;
12
+
13
+ constructor(MockToken _token) {
14
+ token = _token;
15
+ }
16
+
17
+ function sendTokens(
18
+ uint32,
19
+ bytes32,
20
+ address _token,
21
+ uint256 _amount
22
+ ) external override returns (bytes memory _adapterData) {
23
+ require(_token == address(token), "cant bridge this token");
24
+ token.burn(_amount);
25
+ nonce = nonce + 1;
26
+ return abi.encode(nonce);
27
+ }
28
+
29
+ function process(uint256 _nonce) public {
30
+ isProcessed[_nonce] = true;
31
+ }
32
+
33
+ function receiveTokens(
34
+ uint32 _originDomain, // Hyperlane domain
35
+ address _recipientAddress,
36
+ uint256 _amount,
37
+ bytes calldata _adapterData // The adapter data from the message
38
+ ) external override returns (address, uint256) {
39
+ _originDomain;
40
+ uint256 _nonce = abi.decode(_adapterData, (uint256));
41
+ // Check if the transfer was processed first
42
+ require(isProcessed[_nonce], "Transfer has not been processed yet");
43
+ token.mint(_recipientAddress, _amount);
44
+ return (address(0), 0);
45
+ }
46
+ }
@@ -0,0 +1,24 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.13;
3
+
4
+ import {ITokenBridgeMessageRecipient} from "../middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient.sol";
5
+
6
+ contract TestTokenBridgeMessageRecipient is ITokenBridgeMessageRecipient {
7
+ event HandledWithTokens(
8
+ uint32 origin,
9
+ bytes32 sender,
10
+ bytes message,
11
+ address token,
12
+ uint256 amount
13
+ );
14
+
15
+ function handleWithTokens(
16
+ uint32 _origin,
17
+ bytes32 _sender,
18
+ bytes calldata _message,
19
+ address _token,
20
+ uint256 _amount
21
+ ) external {
22
+ emit HandledWithTokens(_origin, _sender, _message, _token, _amount);
23
+ }
24
+ }
@@ -0,0 +1,44 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.0;
3
+
4
+ import {ITokenBridgeMessageRecipient} from "../middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient.sol";
5
+
6
+ contract TestTokenRecipient is ITokenBridgeMessageRecipient {
7
+ bytes32 public lastSender;
8
+ bytes public lastData;
9
+ address public lastToken;
10
+ uint256 public lastAmount;
11
+
12
+ address public lastCaller;
13
+ string public lastCallMessage;
14
+
15
+ event ReceivedMessage(
16
+ uint32 indexed origin,
17
+ bytes32 indexed sender,
18
+ string message,
19
+ address token,
20
+ uint256 amount
21
+ );
22
+
23
+ event ReceivedCall(address indexed caller, uint256 amount, string message);
24
+
25
+ function handleWithTokens(
26
+ uint32 _origin,
27
+ bytes32 _sender,
28
+ bytes calldata _data,
29
+ address _token,
30
+ uint256 _amount
31
+ ) external override {
32
+ emit ReceivedMessage(_origin, _sender, string(_data), _token, _amount);
33
+ lastSender = _sender;
34
+ lastData = _data;
35
+ lastToken = _token;
36
+ lastAmount = _amount;
37
+ }
38
+
39
+ function fooBar(uint256 amount, string calldata message) external {
40
+ emit ReceivedCall(msg.sender, amount, message);
41
+ lastCaller = msg.sender;
42
+ lastCallMessage = message;
43
+ }
44
+ }
@@ -1,3 +1,5 @@
1
1
  import type * as access from "./access";
2
+ import type * as token from "./token";
2
3
  export type { access };
4
+ export type { token };
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../types/@openzeppelin/contracts/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,MAAM,UAAU,CAAC;AAExC,YAAY,EAAE,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../types/@openzeppelin/contracts/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,KAAK,KAAK,MAAM,SAAS,CAAC;AAEtC,YAAY,EAAE,MAAM,EAAE,CAAC;AAEvB,YAAY,EAAE,KAAK,EAAE,CAAC"}