@hyperlane-xyz/core 3.8.0-beta0 → 3.8.1

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 (376) hide show
  1. package/buildArtifact.json +1 -1
  2. package/contracts/hooks/layer-zero/LayerZeroV1Hook.sol +118 -0
  3. package/contracts/hooks/layer-zero/LayerZeroV2Hook.sol +135 -0
  4. package/contracts/hooks/libs/AbstractMessageIdAuthHook.sol +4 -0
  5. package/contracts/interfaces/hooks/IPostDispatchHook.sol +2 -1
  6. package/contracts/isms/hook/AbstractMessageIdAuthorizedIsm.sol +1 -1
  7. package/contracts/isms/hook/layer-zero/LayerZeroV2Ism.sol +114 -0
  8. package/contracts/middleware/InterchainAccountRouter.sol +152 -8
  9. package/contracts/mock/MockHyperlaneEnvironment.sol +0 -3
  10. package/contracts/test/ERC20Test.sol +8 -0
  11. package/contracts/test/ERC4626/ERC4626Test.sol +13 -0
  12. package/contracts/test/TestInterchainGasPaymaster.sol +4 -0
  13. package/contracts/test/TestLayerZeroTreasury.sol +15 -0
  14. package/contracts/token/HypERC20Collateral.sol +1 -1
  15. package/contracts/token/HypERC20CollateralVaultDeposit.sol +82 -0
  16. package/dist/@layerzerolabs/index.d.ts +5 -0
  17. package/dist/@layerzerolabs/index.d.ts.map +1 -0
  18. package/dist/@layerzerolabs/index.js +3 -0
  19. package/dist/@layerzerolabs/index.js.map +1 -0
  20. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/index.d.ts +3 -0
  21. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/index.d.ts.map +1 -0
  22. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/index.js +3 -0
  23. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/index.js.map +1 -0
  24. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.d.ts +1648 -0
  25. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.d.ts.map +1 -0
  26. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.js +3 -0
  27. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.js.map +1 -0
  28. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.d.ts +694 -0
  29. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.d.ts.map +1 -0
  30. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.js +3 -0
  31. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.js.map +1 -0
  32. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.d.ts +331 -0
  33. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.d.ts.map +1 -0
  34. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.js +3 -0
  35. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.js.map +1 -0
  36. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.d.ts +220 -0
  37. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.d.ts.map +1 -0
  38. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.js +3 -0
  39. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.js.map +1 -0
  40. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.d.ts +83 -0
  41. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.d.ts.map +1 -0
  42. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.js +3 -0
  43. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.js.map +1 -0
  44. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/index.d.ts +6 -0
  45. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/index.d.ts.map +1 -0
  46. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/index.js +3 -0
  47. package/dist/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/index.js.map +1 -0
  48. package/dist/@layerzerolabs/lz-evm-protocol-v2/index.d.ts +3 -0
  49. package/dist/@layerzerolabs/lz-evm-protocol-v2/index.d.ts.map +1 -0
  50. package/dist/@layerzerolabs/lz-evm-protocol-v2/index.js +3 -0
  51. package/dist/@layerzerolabs/lz-evm-protocol-v2/index.js.map +1 -0
  52. package/dist/@layerzerolabs/lz-evm-v1-0.7/contracts/index.d.ts +3 -0
  53. package/dist/@layerzerolabs/lz-evm-v1-0.7/contracts/index.d.ts.map +1 -0
  54. package/dist/@layerzerolabs/lz-evm-v1-0.7/contracts/index.js +3 -0
  55. package/dist/@layerzerolabs/lz-evm-v1-0.7/contracts/index.js.map +1 -0
  56. package/dist/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroEndpoint.d.ts +536 -0
  57. package/dist/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroEndpoint.d.ts.map +1 -0
  58. package/dist/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroEndpoint.js +3 -0
  59. package/dist/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroEndpoint.js.map +1 -0
  60. package/dist/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUserApplicationConfig.d.ts +169 -0
  61. package/dist/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUserApplicationConfig.d.ts.map +1 -0
  62. package/dist/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUserApplicationConfig.js +3 -0
  63. package/dist/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUserApplicationConfig.js.map +1 -0
  64. package/dist/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/index.d.ts +3 -0
  65. package/dist/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/index.d.ts.map +1 -0
  66. package/dist/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/index.js +3 -0
  67. package/dist/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/index.js.map +1 -0
  68. package/dist/@layerzerolabs/lz-evm-v1-0.7/index.d.ts +3 -0
  69. package/dist/@layerzerolabs/lz-evm-v1-0.7/index.d.ts.map +1 -0
  70. package/dist/@layerzerolabs/lz-evm-v1-0.7/index.js +3 -0
  71. package/dist/@layerzerolabs/lz-evm-v1-0.7/index.js.map +1 -0
  72. package/dist/@openzeppelin/contracts/interfaces/IERC4626.d.ts +666 -0
  73. package/dist/@openzeppelin/contracts/interfaces/IERC4626.d.ts.map +1 -0
  74. package/dist/@openzeppelin/contracts/interfaces/IERC4626.js +3 -0
  75. package/dist/@openzeppelin/contracts/interfaces/IERC4626.js.map +1 -0
  76. package/dist/@openzeppelin/contracts/interfaces/index.d.ts +1 -0
  77. package/dist/@openzeppelin/contracts/interfaces/index.d.ts.map +1 -1
  78. package/dist/@openzeppelin/contracts/token/ERC20/extensions/ERC4626.d.ts +680 -0
  79. package/dist/@openzeppelin/contracts/token/ERC20/extensions/ERC4626.d.ts.map +1 -0
  80. package/dist/@openzeppelin/contracts/token/ERC20/extensions/ERC4626.js +3 -0
  81. package/dist/@openzeppelin/contracts/token/ERC20/extensions/ERC4626.js.map +1 -0
  82. package/dist/@openzeppelin/contracts/token/ERC20/extensions/index.d.ts +1 -0
  83. package/dist/@openzeppelin/contracts/token/ERC20/extensions/index.d.ts.map +1 -1
  84. package/dist/contracts/hooks/index.d.ts +2 -0
  85. package/dist/contracts/hooks/index.d.ts.map +1 -1
  86. package/dist/contracts/hooks/layer-zero/LayerZeroV1Hook.d.ts +412 -0
  87. package/dist/contracts/hooks/layer-zero/LayerZeroV1Hook.d.ts.map +1 -0
  88. package/dist/contracts/hooks/layer-zero/LayerZeroV1Hook.js +3 -0
  89. package/dist/contracts/hooks/layer-zero/LayerZeroV1Hook.js.map +1 -0
  90. package/dist/contracts/hooks/layer-zero/LayerZeroV2Hook.d.ts +469 -0
  91. package/dist/contracts/hooks/layer-zero/LayerZeroV2Hook.d.ts.map +1 -0
  92. package/dist/contracts/hooks/layer-zero/LayerZeroV2Hook.js +3 -0
  93. package/dist/contracts/hooks/layer-zero/LayerZeroV2Hook.js.map +1 -0
  94. package/dist/contracts/hooks/layer-zero/index.d.ts +3 -0
  95. package/dist/contracts/hooks/layer-zero/index.d.ts.map +1 -0
  96. package/dist/contracts/hooks/layer-zero/index.js +3 -0
  97. package/dist/contracts/hooks/layer-zero/index.js.map +1 -0
  98. package/dist/contracts/isms/hook/index.d.ts +2 -0
  99. package/dist/contracts/isms/hook/index.d.ts.map +1 -1
  100. package/dist/contracts/isms/hook/layer-zero/LayerZeroV2Ism.d.ts +280 -0
  101. package/dist/contracts/isms/hook/layer-zero/LayerZeroV2Ism.d.ts.map +1 -0
  102. package/dist/contracts/isms/hook/layer-zero/LayerZeroV2Ism.js +3 -0
  103. package/dist/contracts/isms/hook/layer-zero/LayerZeroV2Ism.js.map +1 -0
  104. package/dist/contracts/isms/hook/layer-zero/index.d.ts +2 -0
  105. package/dist/contracts/isms/hook/layer-zero/index.d.ts.map +1 -0
  106. package/dist/contracts/isms/hook/layer-zero/index.js +3 -0
  107. package/dist/contracts/isms/hook/layer-zero/index.js.map +1 -0
  108. package/dist/contracts/middleware/InterchainAccountRouter.d.ts +76 -32
  109. package/dist/contracts/middleware/InterchainAccountRouter.d.ts.map +1 -1
  110. package/dist/contracts/test/ERC20Test.d.ts +63 -1
  111. package/dist/contracts/test/ERC20Test.d.ts.map +1 -1
  112. package/dist/contracts/test/ERC4626/ERC4626Test.d.ts +680 -0
  113. package/dist/contracts/test/ERC4626/ERC4626Test.d.ts.map +1 -0
  114. package/dist/contracts/test/ERC4626/ERC4626Test.js +3 -0
  115. package/dist/contracts/test/ERC4626/ERC4626Test.js.map +1 -0
  116. package/dist/contracts/test/ERC4626/index.d.ts +2 -0
  117. package/dist/contracts/test/ERC4626/index.d.ts.map +1 -0
  118. package/dist/contracts/test/ERC4626/index.js +3 -0
  119. package/dist/contracts/test/ERC4626/index.js.map +1 -0
  120. package/dist/contracts/test/TestInterchainGasPaymaster.d.ts +16 -1
  121. package/dist/contracts/test/TestInterchainGasPaymaster.d.ts.map +1 -1
  122. package/dist/contracts/test/TestLayerZeroTreasury.sol/LayerZeroTreasuryMock.d.ts +190 -0
  123. package/dist/contracts/test/TestLayerZeroTreasury.sol/LayerZeroTreasuryMock.d.ts.map +1 -0
  124. package/dist/contracts/test/TestLayerZeroTreasury.sol/LayerZeroTreasuryMock.js +3 -0
  125. package/dist/contracts/test/TestLayerZeroTreasury.sol/LayerZeroTreasuryMock.js.map +1 -0
  126. package/dist/contracts/test/TestLayerZeroTreasury.sol/index.d.ts +2 -0
  127. package/dist/contracts/test/TestLayerZeroTreasury.sol/index.d.ts.map +1 -0
  128. package/dist/contracts/test/TestLayerZeroTreasury.sol/index.js +3 -0
  129. package/dist/contracts/test/TestLayerZeroTreasury.sol/index.js.map +1 -0
  130. package/dist/contracts/test/index.d.ts +4 -0
  131. package/dist/contracts/test/index.d.ts.map +1 -1
  132. package/dist/contracts/token/HypERC20CollateralVaultDeposit.d.ts +705 -0
  133. package/dist/contracts/token/HypERC20CollateralVaultDeposit.d.ts.map +1 -0
  134. package/dist/contracts/token/HypERC20CollateralVaultDeposit.js +3 -0
  135. package/dist/contracts/token/HypERC20CollateralVaultDeposit.js.map +1 -0
  136. package/dist/contracts/token/index.d.ts +1 -0
  137. package/dist/contracts/token/index.d.ts.map +1 -1
  138. package/dist/factories/@layerzerolabs/index.d.ts +3 -0
  139. package/dist/factories/@layerzerolabs/index.d.ts.map +1 -0
  140. package/dist/factories/@layerzerolabs/index.js +32 -0
  141. package/dist/factories/@layerzerolabs/index.js.map +1 -0
  142. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/index.d.ts +2 -0
  143. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/index.d.ts.map +1 -0
  144. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/index.js +31 -0
  145. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/index.js.map +1 -0
  146. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2__factory.d.ts +1438 -0
  147. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2__factory.d.ts.map +1 -0
  148. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2__factory.js +1853 -0
  149. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2__factory.js.map +1 -0
  150. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager__factory.d.ts +487 -0
  151. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager__factory.d.ts.map +1 -0
  152. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager__factory.js +638 -0
  153. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager__factory.js.map +1 -0
  154. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel__factory.d.ts +270 -0
  155. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel__factory.d.ts.map +1 -0
  156. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel__factory.js +353 -0
  157. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel__factory.js.map +1 -0
  158. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer__factory.d.ts +197 -0
  159. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer__factory.d.ts.map +1 -0
  160. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer__factory.js +255 -0
  161. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer__factory.js.map +1 -0
  162. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext__factory.d.ts +33 -0
  163. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext__factory.d.ts.map +1 -0
  164. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext__factory.js +51 -0
  165. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext__factory.js.map +1 -0
  166. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/index.d.ts +6 -0
  167. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/index.d.ts.map +1 -0
  168. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/index.js +17 -0
  169. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/index.js.map +1 -0
  170. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/index.d.ts +2 -0
  171. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/index.d.ts.map +1 -0
  172. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/index.js +31 -0
  173. package/dist/factories/@layerzerolabs/lz-evm-protocol-v2/index.js.map +1 -0
  174. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/contracts/index.d.ts +2 -0
  175. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/contracts/index.d.ts.map +1 -0
  176. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/contracts/index.js +31 -0
  177. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/contracts/index.js.map +1 -0
  178. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroEndpoint__factory.d.ts +343 -0
  179. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroEndpoint__factory.d.ts.map +1 -0
  180. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroEndpoint__factory.js +456 -0
  181. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroEndpoint__factory.js.map +1 -0
  182. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUserApplicationConfig__factory.d.ts +65 -0
  183. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUserApplicationConfig__factory.d.ts.map +1 -0
  184. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUserApplicationConfig__factory.js +92 -0
  185. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUserApplicationConfig__factory.js.map +1 -0
  186. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/index.d.ts +3 -0
  187. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/index.d.ts.map +1 -0
  188. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/index.js +11 -0
  189. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/index.js.map +1 -0
  190. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/index.d.ts +2 -0
  191. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/index.d.ts.map +1 -0
  192. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/index.js +31 -0
  193. package/dist/factories/@layerzerolabs/lz-evm-v1-0.7/index.js.map +1 -0
  194. package/dist/factories/@openzeppelin/contracts/interfaces/IERC4626__factory.d.ts +474 -0
  195. package/dist/factories/@openzeppelin/contracts/interfaces/IERC4626__factory.d.ts.map +1 -0
  196. package/dist/factories/@openzeppelin/contracts/interfaces/IERC4626__factory.js +632 -0
  197. package/dist/factories/@openzeppelin/contracts/interfaces/IERC4626__factory.js.map +1 -0
  198. package/dist/factories/@openzeppelin/contracts/interfaces/index.d.ts +1 -0
  199. package/dist/factories/@openzeppelin/contracts/interfaces/index.d.ts.map +1 -1
  200. package/dist/factories/@openzeppelin/contracts/interfaces/index.js +3 -1
  201. package/dist/factories/@openzeppelin/contracts/interfaces/index.js.map +1 -1
  202. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC4626__factory.d.ts +510 -0
  203. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC4626__factory.d.ts.map +1 -0
  204. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC4626__factory.js +680 -0
  205. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC4626__factory.js.map +1 -0
  206. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/index.d.ts +1 -0
  207. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/index.d.ts.map +1 -1
  208. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/index.js +3 -1
  209. package/dist/factories/@openzeppelin/contracts/token/ERC20/extensions/index.js.map +1 -1
  210. package/dist/factories/contracts/Mailbox__factory.d.ts +1 -1
  211. package/dist/factories/contracts/Mailbox__factory.js +1 -1
  212. package/dist/factories/contracts/hooks/MerkleTreeHook__factory.d.ts +1 -1
  213. package/dist/factories/contracts/hooks/MerkleTreeHook__factory.js +1 -1
  214. package/dist/factories/contracts/hooks/OPStackHook__factory.d.ts +1 -1
  215. package/dist/factories/contracts/hooks/OPStackHook__factory.d.ts.map +1 -1
  216. package/dist/factories/contracts/hooks/OPStackHook__factory.js +1 -1
  217. package/dist/factories/contracts/hooks/OPStackHook__factory.js.map +1 -1
  218. package/dist/factories/contracts/hooks/PausableHook__factory.d.ts +1 -1
  219. package/dist/factories/contracts/hooks/PausableHook__factory.js +1 -1
  220. package/dist/factories/contracts/hooks/ProtocolFee__factory.d.ts +1 -1
  221. package/dist/factories/contracts/hooks/ProtocolFee__factory.js +1 -1
  222. package/dist/factories/contracts/hooks/aggregation/ERC5164Hook__factory.d.ts +1 -1
  223. package/dist/factories/contracts/hooks/aggregation/ERC5164Hook__factory.d.ts.map +1 -1
  224. package/dist/factories/contracts/hooks/aggregation/ERC5164Hook__factory.js +1 -1
  225. package/dist/factories/contracts/hooks/aggregation/ERC5164Hook__factory.js.map +1 -1
  226. package/dist/factories/contracts/hooks/aggregation/StaticAggregationHookFactory__factory.d.ts +1 -1
  227. package/dist/factories/contracts/hooks/aggregation/StaticAggregationHookFactory__factory.js +1 -1
  228. package/dist/factories/contracts/hooks/aggregation/StaticAggregationHook__factory.d.ts +1 -1
  229. package/dist/factories/contracts/hooks/aggregation/StaticAggregationHook__factory.js +1 -1
  230. package/dist/factories/contracts/hooks/igp/InterchainGasPaymaster__factory.d.ts +1 -1
  231. package/dist/factories/contracts/hooks/igp/InterchainGasPaymaster__factory.js +1 -1
  232. package/dist/factories/contracts/hooks/index.d.ts +1 -0
  233. package/dist/factories/contracts/hooks/index.d.ts.map +1 -1
  234. package/dist/factories/contracts/hooks/index.js +2 -1
  235. package/dist/factories/contracts/hooks/index.js.map +1 -1
  236. package/dist/factories/contracts/hooks/layer-zero/LayerZeroV1Hook__factory.d.ts +289 -0
  237. package/dist/factories/contracts/hooks/layer-zero/LayerZeroV1Hook__factory.d.ts.map +1 -0
  238. package/dist/factories/contracts/hooks/layer-zero/LayerZeroV1Hook__factory.js +391 -0
  239. package/dist/factories/contracts/hooks/layer-zero/LayerZeroV1Hook__factory.js.map +1 -0
  240. package/dist/factories/contracts/hooks/layer-zero/LayerZeroV2Hook__factory.d.ts +288 -0
  241. package/dist/factories/contracts/hooks/layer-zero/LayerZeroV2Hook__factory.d.ts.map +1 -0
  242. package/dist/factories/contracts/hooks/layer-zero/LayerZeroV2Hook__factory.js +390 -0
  243. package/dist/factories/contracts/hooks/layer-zero/LayerZeroV2Hook__factory.js.map +1 -0
  244. package/dist/factories/contracts/hooks/layer-zero/index.d.ts +3 -0
  245. package/dist/factories/contracts/hooks/layer-zero/index.d.ts.map +1 -0
  246. package/dist/factories/contracts/hooks/layer-zero/index.js +11 -0
  247. package/dist/factories/contracts/hooks/layer-zero/index.js.map +1 -0
  248. package/dist/factories/contracts/hooks/routing/DestinationRecipientRoutingHook__factory.d.ts +1 -1
  249. package/dist/factories/contracts/hooks/routing/DestinationRecipientRoutingHook__factory.js +1 -1
  250. package/dist/factories/contracts/hooks/routing/DomainRoutingHook__factory.d.ts +1 -1
  251. package/dist/factories/contracts/hooks/routing/DomainRoutingHook__factory.js +1 -1
  252. package/dist/factories/contracts/hooks/routing/FallbackDomainRoutingHook__factory.d.ts +1 -1
  253. package/dist/factories/contracts/hooks/routing/FallbackDomainRoutingHook__factory.js +1 -1
  254. package/dist/factories/contracts/isms/hook/ERC5164Ism__factory.d.ts +1 -1
  255. package/dist/factories/contracts/isms/hook/ERC5164Ism__factory.js +1 -1
  256. package/dist/factories/contracts/isms/hook/OPStackIsm__factory.d.ts +1 -1
  257. package/dist/factories/contracts/isms/hook/OPStackIsm__factory.js +1 -1
  258. package/dist/factories/contracts/isms/hook/index.d.ts +1 -0
  259. package/dist/factories/contracts/isms/hook/index.d.ts.map +1 -1
  260. package/dist/factories/contracts/isms/hook/index.js +25 -1
  261. package/dist/factories/contracts/isms/hook/index.js.map +1 -1
  262. package/dist/factories/contracts/isms/hook/layer-zero/LayerZeroV2Ism__factory.d.ts +181 -0
  263. package/dist/factories/contracts/isms/hook/layer-zero/LayerZeroV2Ism__factory.d.ts.map +1 -0
  264. package/dist/factories/contracts/isms/hook/layer-zero/LayerZeroV2Ism__factory.js +251 -0
  265. package/dist/factories/contracts/isms/hook/layer-zero/LayerZeroV2Ism__factory.js.map +1 -0
  266. package/dist/factories/contracts/isms/hook/layer-zero/index.d.ts +2 -0
  267. package/dist/factories/contracts/isms/hook/layer-zero/index.d.ts.map +1 -0
  268. package/dist/factories/contracts/isms/hook/layer-zero/index.js +9 -0
  269. package/dist/factories/contracts/isms/hook/layer-zero/index.js.map +1 -0
  270. package/dist/factories/contracts/isms/multisig/ValidatorAnnounce__factory.d.ts +1 -1
  271. package/dist/factories/contracts/isms/multisig/ValidatorAnnounce__factory.js +1 -1
  272. package/dist/factories/contracts/isms/routing/DefaultFallbackRoutingIsm__factory.d.ts +1 -1
  273. package/dist/factories/contracts/isms/routing/DefaultFallbackRoutingIsm__factory.js +1 -1
  274. package/dist/factories/contracts/isms/routing/DomainRoutingIsmFactory.sol/DomainRoutingIsmFactory__factory.d.ts +1 -1
  275. package/dist/factories/contracts/isms/routing/DomainRoutingIsmFactory.sol/DomainRoutingIsmFactory__factory.js +1 -1
  276. package/dist/factories/contracts/isms/routing/InterchainAccountIsm__factory.d.ts +1 -1
  277. package/dist/factories/contracts/isms/routing/InterchainAccountIsm__factory.js +1 -1
  278. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.d.ts +113 -5
  279. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.d.ts.map +1 -1
  280. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.js +146 -5
  281. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.js.map +1 -1
  282. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.d.ts +1 -1
  283. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.js +1 -1
  284. package/dist/factories/contracts/middleware/liquidity-layer/LiquidityLayerRouter__factory.d.ts +1 -1
  285. package/dist/factories/contracts/middleware/liquidity-layer/LiquidityLayerRouter__factory.js +1 -1
  286. package/dist/factories/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter__factory.d.ts +1 -1
  287. package/dist/factories/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter__factory.js +1 -1
  288. package/dist/factories/contracts/middleware/liquidity-layer/adapters/PortalAdapter__factory.d.ts +1 -1
  289. package/dist/factories/contracts/middleware/liquidity-layer/adapters/PortalAdapter__factory.js +1 -1
  290. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.d.ts +1 -1
  291. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.d.ts.map +1 -1
  292. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.js +1 -1
  293. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.js.map +1 -1
  294. package/dist/factories/contracts/mock/MockMailbox__factory.d.ts +1 -1
  295. package/dist/factories/contracts/mock/MockMailbox__factory.js +1 -1
  296. package/dist/factories/contracts/test/ERC20Test__factory.d.ts +25 -1
  297. package/dist/factories/contracts/test/ERC20Test__factory.d.ts.map +1 -1
  298. package/dist/factories/contracts/test/ERC20Test__factory.js +32 -1
  299. package/dist/factories/contracts/test/ERC20Test__factory.js.map +1 -1
  300. package/dist/factories/contracts/test/ERC4626/ERC4626Test__factory.d.ts +539 -0
  301. package/dist/factories/contracts/test/ERC4626/ERC4626Test__factory.d.ts.map +1 -0
  302. package/dist/factories/contracts/test/ERC4626/ERC4626Test__factory.js +724 -0
  303. package/dist/factories/contracts/test/ERC4626/ERC4626Test__factory.js.map +1 -0
  304. package/dist/factories/contracts/test/ERC4626/index.d.ts +2 -0
  305. package/dist/factories/contracts/test/ERC4626/index.d.ts.map +1 -0
  306. package/dist/factories/contracts/test/ERC4626/index.js +9 -0
  307. package/dist/factories/contracts/test/ERC4626/index.js.map +1 -0
  308. package/dist/factories/contracts/test/TestGasRouter__factory.d.ts +1 -1
  309. package/dist/factories/contracts/test/TestGasRouter__factory.js +1 -1
  310. package/dist/factories/contracts/test/TestInterchainGasPaymaster__factory.d.ts +11 -1
  311. package/dist/factories/contracts/test/TestInterchainGasPaymaster__factory.d.ts.map +1 -1
  312. package/dist/factories/contracts/test/TestInterchainGasPaymaster__factory.js +14 -1
  313. package/dist/factories/contracts/test/TestInterchainGasPaymaster__factory.js.map +1 -1
  314. package/dist/factories/contracts/test/TestLayerZeroTreasury.sol/LayerZeroTreasuryMock__factory.d.ts +75 -0
  315. package/dist/factories/contracts/test/TestLayerZeroTreasury.sol/LayerZeroTreasuryMock__factory.d.ts.map +1 -0
  316. package/dist/factories/contracts/test/TestLayerZeroTreasury.sol/LayerZeroTreasuryMock__factory.js +109 -0
  317. package/dist/factories/contracts/test/TestLayerZeroTreasury.sol/LayerZeroTreasuryMock__factory.js.map +1 -0
  318. package/dist/factories/contracts/test/TestLayerZeroTreasury.sol/index.d.ts +2 -0
  319. package/dist/factories/contracts/test/TestLayerZeroTreasury.sol/index.d.ts.map +1 -0
  320. package/dist/factories/contracts/test/TestLayerZeroTreasury.sol/index.js +9 -0
  321. package/dist/factories/contracts/test/TestLayerZeroTreasury.sol/index.js.map +1 -0
  322. package/dist/factories/contracts/test/TestMailbox__factory.d.ts +1 -1
  323. package/dist/factories/contracts/test/TestMailbox__factory.js +1 -1
  324. package/dist/factories/contracts/test/TestMerkleTreeHook__factory.d.ts +1 -1
  325. package/dist/factories/contracts/test/TestMerkleTreeHook__factory.js +1 -1
  326. package/dist/factories/contracts/test/TestPostDispatchHook__factory.d.ts +1 -1
  327. package/dist/factories/contracts/test/TestPostDispatchHook__factory.js +1 -1
  328. package/dist/factories/contracts/test/TestQuerySender__factory.d.ts +1 -1
  329. package/dist/factories/contracts/test/TestQuerySender__factory.js +1 -1
  330. package/dist/factories/contracts/test/TestQuery__factory.d.ts +1 -1
  331. package/dist/factories/contracts/test/TestQuery__factory.js +1 -1
  332. package/dist/factories/contracts/test/TestRouter__factory.d.ts +1 -1
  333. package/dist/factories/contracts/test/TestRouter__factory.js +1 -1
  334. package/dist/factories/contracts/test/TestSendReceiver__factory.d.ts +1 -1
  335. package/dist/factories/contracts/test/TestSendReceiver__factory.js +1 -1
  336. package/dist/factories/contracts/test/index.d.ts +2 -0
  337. package/dist/factories/contracts/test/index.d.ts.map +1 -1
  338. package/dist/factories/contracts/test/index.js +26 -1
  339. package/dist/factories/contracts/test/index.js.map +1 -1
  340. package/dist/factories/contracts/token/HypERC20CollateralVaultDeposit__factory.d.ts +423 -0
  341. package/dist/factories/contracts/token/HypERC20CollateralVaultDeposit__factory.d.ts.map +1 -0
  342. package/dist/factories/contracts/token/HypERC20CollateralVaultDeposit__factory.js +563 -0
  343. package/dist/factories/contracts/token/HypERC20CollateralVaultDeposit__factory.js.map +1 -0
  344. package/dist/factories/contracts/token/HypERC20Collateral__factory.d.ts +1 -1
  345. package/dist/factories/contracts/token/HypERC20Collateral__factory.js +1 -1
  346. package/dist/factories/contracts/token/HypERC20__factory.d.ts +1 -1
  347. package/dist/factories/contracts/token/HypERC20__factory.js +1 -1
  348. package/dist/factories/contracts/token/HypERC721Collateral__factory.d.ts +1 -1
  349. package/dist/factories/contracts/token/HypERC721Collateral__factory.js +1 -1
  350. package/dist/factories/contracts/token/HypERC721__factory.d.ts +1 -1
  351. package/dist/factories/contracts/token/HypERC721__factory.js +1 -1
  352. package/dist/factories/contracts/token/HypNative__factory.d.ts +1 -1
  353. package/dist/factories/contracts/token/HypNative__factory.js +1 -1
  354. package/dist/factories/contracts/token/extensions/FastHypERC20Collateral__factory.d.ts +1 -1
  355. package/dist/factories/contracts/token/extensions/FastHypERC20Collateral__factory.js +1 -1
  356. package/dist/factories/contracts/token/extensions/FastHypERC20__factory.d.ts +1 -1
  357. package/dist/factories/contracts/token/extensions/FastHypERC20__factory.js +1 -1
  358. package/dist/factories/contracts/token/extensions/HypERC721URICollateral__factory.d.ts +1 -1
  359. package/dist/factories/contracts/token/extensions/HypERC721URICollateral__factory.js +1 -1
  360. package/dist/factories/contracts/token/extensions/HypERC721URIStorage__factory.d.ts +1 -1
  361. package/dist/factories/contracts/token/extensions/HypERC721URIStorage__factory.js +1 -1
  362. package/dist/factories/contracts/token/extensions/HypNativeScaled__factory.d.ts +1 -1
  363. package/dist/factories/contracts/token/extensions/HypNativeScaled__factory.js +1 -1
  364. package/dist/factories/contracts/token/index.d.ts +1 -0
  365. package/dist/factories/contracts/token/index.d.ts.map +1 -1
  366. package/dist/factories/contracts/token/index.js +3 -1
  367. package/dist/factories/contracts/token/index.js.map +1 -1
  368. package/dist/factories/index.d.ts +1 -0
  369. package/dist/factories/index.d.ts.map +1 -1
  370. package/dist/factories/index.js +2 -1
  371. package/dist/factories/index.js.map +1 -1
  372. package/dist/index.d.ts +32 -0
  373. package/dist/index.d.ts.map +1 -1
  374. package/dist/index.js +34 -4
  375. package/dist/index.js.map +1 -1
  376. package/package.json +4 -2
@@ -0,0 +1,118 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.0;
3
+
4
+ /*@@@@@@@ @@@@@@@@@
5
+ @@@@@@@@@ @@@@@@@@@
6
+ @@@@@@@@@ @@@@@@@@@
7
+ @@@@@@@@@ @@@@@@@@@
8
+ @@@@@@@@@@@@@@@@@@@@@@@@@
9
+ @@@@@ HYPERLANE @@@@@@@
10
+ @@@@@@@@@@@@@@@@@@@@@@@@@
11
+ @@@@@@@@@ @@@@@@@@@
12
+ @@@@@@@@@ @@@@@@@@@
13
+ @@@@@@@@@ @@@@@@@@@
14
+ @@@@@@@@@ @@@@@@@@*/
15
+ import {ILayerZeroEndpoint} from "@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroEndpoint.sol";
16
+ import {Message} from "../../libs/Message.sol";
17
+ import {TypeCasts} from "../../libs/TypeCasts.sol";
18
+ import {MailboxClient} from "../../client/MailboxClient.sol";
19
+ import {Indexed} from "../../libs/Indexed.sol";
20
+ import {IPostDispatchHook} from "../../interfaces/hooks/IPostDispatchHook.sol";
21
+ import {AbstractPostDispatchHook} from "../libs/AbstractPostDispatchHook.sol";
22
+ import {StandardHookMetadata} from "../libs/StandardHookMetadata.sol";
23
+
24
+ struct LayerZeroMetadata {
25
+ /// @dev the destination chain identifier
26
+ uint16 dstChainId;
27
+ /// @dev the user app address on this EVM chain. Contract address that calls Endpoint.send(). Used for LZ user app config lookup
28
+ address userApplication;
29
+ /// @dev if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address
30
+ address refundAddress;
31
+ /// @dev the custom message to send over LayerZero
32
+ bytes payload;
33
+ /// @dev the address on destination chain (in bytes). A 40 length byte with remote and local addresses concatenated.
34
+ bytes destination;
35
+ /// @dev parameters for the adapter service, e.g. send some dust native token to dstChain
36
+ bytes adapterParam;
37
+ }
38
+
39
+ contract LayerZeroV1Hook is AbstractPostDispatchHook, MailboxClient {
40
+ using StandardHookMetadata for bytes;
41
+ using Message for bytes;
42
+ using TypeCasts for bytes32;
43
+
44
+ ILayerZeroEndpoint public immutable lZEndpoint;
45
+
46
+ constructor(address _mailbox, address _lZEndpoint) MailboxClient(_mailbox) {
47
+ lZEndpoint = ILayerZeroEndpoint(_lZEndpoint);
48
+ }
49
+
50
+ // ============ External Functions ============
51
+
52
+ /// @inheritdoc IPostDispatchHook
53
+ function hookType() external pure override returns (uint8) {
54
+ return uint8(IPostDispatchHook.Types.LAYER_ZERO_V1);
55
+ }
56
+
57
+ /// @inheritdoc AbstractPostDispatchHook
58
+ function _postDispatch(
59
+ bytes calldata metadata,
60
+ bytes calldata message
61
+ ) internal virtual override {
62
+ // ensure hook only dispatches messages that are dispatched by the mailbox
63
+ bytes32 id = message.id();
64
+ require(_isLatestDispatched(id), "message not dispatched by mailbox");
65
+
66
+ bytes calldata lZMetadata = metadata.getCustomMetadata();
67
+ LayerZeroMetadata memory layerZeroMetadata = parseLzMetadata(
68
+ lZMetadata
69
+ );
70
+ lZEndpoint.send{value: msg.value}(
71
+ layerZeroMetadata.dstChainId,
72
+ layerZeroMetadata.destination,
73
+ layerZeroMetadata.payload,
74
+ payable(layerZeroMetadata.refundAddress),
75
+ address(0), // _zroPaymentAddress is hardcoded to addr(0) because zro tokens should not be directly accepted
76
+ layerZeroMetadata.adapterParam
77
+ );
78
+ }
79
+
80
+ /// @inheritdoc AbstractPostDispatchHook
81
+ function _quoteDispatch(
82
+ bytes calldata metadata,
83
+ bytes calldata
84
+ ) internal view virtual override returns (uint256 nativeFee) {
85
+ bytes calldata lZMetadata = metadata.getCustomMetadata();
86
+ LayerZeroMetadata memory layerZeroMetadata = parseLzMetadata(
87
+ lZMetadata
88
+ );
89
+ (nativeFee, ) = lZEndpoint.estimateFees(
90
+ layerZeroMetadata.dstChainId,
91
+ layerZeroMetadata.userApplication,
92
+ layerZeroMetadata.payload,
93
+ false, // _payInZRO is hardcoded to false because zro tokens should not be directly accepted
94
+ layerZeroMetadata.adapterParam
95
+ );
96
+ }
97
+
98
+ /**
99
+ * @notice Formats LayerZero metadata using default abi encoding
100
+ * @param layerZeroMetadata LayerZero specific metadata
101
+ * @return ABI encoded metadata
102
+ */
103
+ function formatLzMetadata(
104
+ LayerZeroMetadata calldata layerZeroMetadata
105
+ ) public pure returns (bytes memory) {
106
+ return abi.encode(layerZeroMetadata);
107
+ }
108
+
109
+ /**
110
+ * @notice Decodes LayerZero metadata. Should be used after formatLzMetadata()
111
+ * @param lZMetadata ABI encoded metadata
112
+ */
113
+ function parseLzMetadata(
114
+ bytes calldata lZMetadata
115
+ ) public pure returns (LayerZeroMetadata memory parsedLayerZeroMetadata) {
116
+ (parsedLayerZeroMetadata) = abi.decode(lZMetadata, (LayerZeroMetadata));
117
+ }
118
+ }
@@ -0,0 +1,135 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.0;
3
+
4
+ /*@@@@@@@ @@@@@@@@@
5
+ @@@@@@@@@ @@@@@@@@@
6
+ @@@@@@@@@ @@@@@@@@@
7
+ @@@@@@@@@ @@@@@@@@@
8
+ @@@@@@@@@@@@@@@@@@@@@@@@@
9
+ @@@@@ HYPERLANE @@@@@@@
10
+ @@@@@@@@@@@@@@@@@@@@@@@@@
11
+ @@@@@@@@@ @@@@@@@@@
12
+ @@@@@@@@@ @@@@@@@@@
13
+ @@@@@@@@@ @@@@@@@@@
14
+ @@@@@@@@@ @@@@@@@@*/
15
+ import {MessagingParams, MessagingFee, ILayerZeroEndpointV2} from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";
16
+ import {Message} from "../../libs/Message.sol";
17
+ import {TypeCasts} from "../../libs/TypeCasts.sol";
18
+ import {Indexed} from "../../libs/Indexed.sol";
19
+ import {IPostDispatchHook} from "../../interfaces/hooks/IPostDispatchHook.sol";
20
+ import {AbstractMessageIdAuthHook} from "../libs/AbstractMessageIdAuthHook.sol";
21
+ import {StandardHookMetadata} from "../libs/StandardHookMetadata.sol";
22
+
23
+ struct LayerZeroV2Metadata {
24
+ /// @dev the endpoint Id. prev dstChainId
25
+ uint32 eid;
26
+ /// @dev if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address
27
+ address refundAddress;
28
+ /// @dev parameters for the adapter service, e.g. send some dust native token to dstChain. prev adapterParam
29
+ bytes options;
30
+ }
31
+
32
+ contract LayerZeroV2Hook is AbstractMessageIdAuthHook {
33
+ using StandardHookMetadata for bytes;
34
+ using Message for bytes;
35
+ using TypeCasts for bytes32;
36
+
37
+ ILayerZeroEndpointV2 public immutable lZEndpoint;
38
+
39
+ /// @dev offset for Layer Zero metadata parsing
40
+ uint8 constant EID_OFFSET = 0;
41
+ uint8 constant REFUND_ADDRESS_OFFSET = 4;
42
+ uint8 constant OPTIONS_OFFSET = 24;
43
+
44
+ constructor(
45
+ address _mailbox,
46
+ uint32 _destinationDomain,
47
+ bytes32 _ism,
48
+ address _lZEndpoint
49
+ ) AbstractMessageIdAuthHook(_mailbox, _destinationDomain, _ism) {
50
+ lZEndpoint = ILayerZeroEndpointV2(_lZEndpoint);
51
+ }
52
+
53
+ // ============ External Functions ============
54
+
55
+ /// @inheritdoc AbstractMessageIdAuthHook
56
+ function _sendMessageId(
57
+ bytes calldata metadata,
58
+ bytes memory payload
59
+ ) internal override {
60
+ bytes calldata lZMetadata = metadata.getCustomMetadata();
61
+ (
62
+ uint32 eid,
63
+ address refundAddress,
64
+ bytes memory options
65
+ ) = parseLzMetadata(lZMetadata);
66
+
67
+ // Build and send message
68
+ MessagingParams memory msgParams = MessagingParams(
69
+ eid,
70
+ ism,
71
+ payload,
72
+ options,
73
+ false // payInLzToken
74
+ );
75
+ lZEndpoint.send{value: msg.value}(msgParams, refundAddress);
76
+ }
77
+
78
+ /// @dev payInZRO is hardcoded to false because zro tokens should not be directly accepted
79
+ function _quoteDispatch(
80
+ bytes calldata metadata,
81
+ bytes calldata message
82
+ ) internal view virtual override returns (uint256) {
83
+ bytes calldata lZMetadata = metadata.getCustomMetadata();
84
+ (uint32 eid, , bytes memory options) = parseLzMetadata(lZMetadata);
85
+
86
+ // Build and quote message
87
+ MessagingParams memory msgParams = MessagingParams(
88
+ eid,
89
+ message.recipient(),
90
+ message.body(),
91
+ options,
92
+ false // payInLzToken
93
+ );
94
+ MessagingFee memory msgFee = lZEndpoint.quote(
95
+ msgParams,
96
+ message.senderAddress()
97
+ );
98
+
99
+ return msgFee.nativeFee;
100
+ }
101
+
102
+ /**
103
+ * @notice Formats LayerZero metadata using default abi encoding
104
+ * @param layerZeroMetadata LayerZero specific metadata
105
+ * @return ABI encoded metadata
106
+ */
107
+ function formatLzMetadata(
108
+ LayerZeroV2Metadata calldata layerZeroMetadata
109
+ ) public pure returns (bytes memory) {
110
+ return
111
+ abi.encodePacked(
112
+ layerZeroMetadata.eid,
113
+ layerZeroMetadata.refundAddress,
114
+ layerZeroMetadata.options
115
+ );
116
+ }
117
+
118
+ /**
119
+ * @notice Decodes LayerZero metadata. Should be used after formatLzMetadata()
120
+ * @param lZMetadata ABI encoded metadata
121
+ */
122
+ function parseLzMetadata(
123
+ bytes calldata lZMetadata
124
+ )
125
+ public
126
+ pure
127
+ returns (uint32 eid, address refundAddress, bytes memory options)
128
+ {
129
+ eid = uint32(bytes4(lZMetadata[EID_OFFSET:REFUND_ADDRESS_OFFSET]));
130
+ refundAddress = address(
131
+ bytes20(lZMetadata[REFUND_ADDRESS_OFFSET:OPTIONS_OFFSET])
132
+ );
133
+ options = lZMetadata[OPTIONS_OFFSET:];
134
+ }
135
+ }
@@ -78,6 +78,10 @@ abstract contract AbstractMessageIdAuthHook is
78
78
  message.destination() == destinationDomain,
79
79
  "AbstractMessageIdAuthHook: invalid destination domain"
80
80
  );
81
+ require(
82
+ metadata.msgValue(0) < 2 ** 255,
83
+ "AbstractMessageIdAuthHook: msgValue must be less than 2 ** 255"
84
+ );
81
85
  bytes memory payload = abi.encodeCall(
82
86
  AbstractMessageIdAuthorizedIsm.verifyMessageId,
83
87
  id
@@ -23,7 +23,8 @@ interface IPostDispatchHook {
23
23
  FALLBACK_ROUTING,
24
24
  ID_AUTH_ISM,
25
25
  PAUSABLE,
26
- PROTOCOL_FEE
26
+ PROTOCOL_FEE,
27
+ LAYER_ZERO_V1
27
28
  }
28
29
 
29
30
  /**
@@ -99,7 +99,7 @@ abstract contract AbstractMessageIdAuthorizedIsm is
99
99
  * @dev Only callable by the authorized hook.
100
100
  * @param messageId Hyperlane Id of the message.
101
101
  */
102
- function verifyMessageId(bytes32 messageId) external payable virtual {
102
+ function verifyMessageId(bytes32 messageId) public payable virtual {
103
103
  require(
104
104
  _isAuthorized(),
105
105
  "AbstractMessageIdAuthorizedIsm: sender is not the hook"
@@ -0,0 +1,114 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.0;
3
+
4
+ /*@@@@@@@ @@@@@@@@@
5
+ @@@@@@@@@ @@@@@@@@@
6
+ @@@@@@@@@ @@@@@@@@@
7
+ @@@@@@@@@ @@@@@@@@@
8
+ @@@@@@@@@@@@@@@@@@@@@@@@@
9
+ @@@@@ HYPERLANE @@@@@@@
10
+ @@@@@@@@@@@@@@@@@@@@@@@@@
11
+ @@@@@@@@@ @@@@@@@@@
12
+ @@@@@@@@@ @@@@@@@@@
13
+ @@@@@@@@@ @@@@@@@@@
14
+ @@@@@@@@@ @@@@@@@@*/
15
+
16
+ // ============ Internal Imports ============
17
+
18
+ import {IInterchainSecurityModule} from "../../../interfaces/IInterchainSecurityModule.sol";
19
+ import {Message} from "../../../libs/Message.sol";
20
+ import {TypeCasts} from "../../../libs/TypeCasts.sol";
21
+ import {AbstractMessageIdAuthorizedIsm} from "../AbstractMessageIdAuthorizedIsm.sol";
22
+
23
+ // ============ External Imports ============
24
+ import {Origin} from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";
25
+
26
+ /**
27
+ * @title LayerZeroV2Ism
28
+ * @notice Uses LayerZero V2 deliver and verify a messages Id
29
+ */
30
+ contract LayerZeroV2Ism is AbstractMessageIdAuthorizedIsm {
31
+ using Message for bytes;
32
+ using TypeCasts for bytes32;
33
+
34
+ // Layerzero endpoint address
35
+ address public immutable endpoint;
36
+
37
+ // ============ Constants ============
38
+
39
+ uint8 public constant moduleType =
40
+ uint8(IInterchainSecurityModule.Types.NULL);
41
+
42
+ // @dev the offset of msg.data where the function parameters (as bytes) begins. 4 bytes is always used when encoding the function selector
43
+ uint8 constant FUNC_SELECTOR_OFFSET = 4;
44
+
45
+ // @dev the offset of msg.data where Origin.sender begins. 32 is always used since calldata comes in 32 bytes.
46
+ uint8 constant ORIGIN_SENDER_OFFSET = FUNC_SELECTOR_OFFSET + 32;
47
+
48
+ // ============ Constructor ============
49
+ constructor(address _endpoint) {
50
+ require(
51
+ _endpoint != address(0),
52
+ "LayerZeroV2Ism: invalid authorized endpoint"
53
+ );
54
+ endpoint = _endpoint;
55
+ }
56
+
57
+ /**
58
+ * @notice Entry point for receiving msg/packet from the LayerZero endpoint.
59
+ * @param _lzMessage The payload of the received message.
60
+ * @dev Authorization verifcation is done within verifyMessageId() -> _isAuthorized()
61
+ */
62
+ function lzReceive(
63
+ Origin calldata,
64
+ bytes32,
65
+ bytes calldata _lzMessage,
66
+ address,
67
+ bytes calldata
68
+ ) external payable {
69
+ verifyMessageId(_messageId(_lzMessage));
70
+ }
71
+
72
+ // ============ Internal function ============
73
+
74
+ /**
75
+ * @notice Slices the messageId from the message delivered from LayerZeroV2Hook
76
+ * @dev message is created as abi.encodeCall(AbstractMessageIdAuthorizedIsm.verifyMessageId, id)
77
+ * @dev _message will be 36 bytes (4 bytes for function selector, and 32 bytes for messageId)
78
+ */
79
+ function _messageId(
80
+ bytes calldata _message
81
+ ) internal pure returns (bytes32) {
82
+ return bytes32(_message[FUNC_SELECTOR_OFFSET:]);
83
+ }
84
+
85
+ /**
86
+ * @notice Validates criterias to verify a message
87
+ * @dev this is called by AbstractMessageIdAuthorizedIsm.verifyMessageId
88
+ * @dev parses msg.value to get parameters from lzReceive()
89
+ */
90
+ function _isAuthorized() internal view override returns (bool) {
91
+ require(_isAuthorizedHook(), "LayerZeroV2Ism: hook is not authorized");
92
+
93
+ require(
94
+ _isAuthorizedEndPoint(),
95
+ "LayerZeroV2Ism: endpoint is not authorized"
96
+ );
97
+
98
+ return true;
99
+ }
100
+
101
+ /**
102
+ * @notice check if origin.sender is the authorized hook
103
+ */
104
+ function _isAuthorizedHook() internal view returns (bool) {
105
+ return bytes32(msg.data[ORIGIN_SENDER_OFFSET:]) == authorizedHook;
106
+ }
107
+
108
+ /**
109
+ * @notice check if LayerZero endpoint is authorized
110
+ */
111
+ function _isAuthorizedEndPoint() internal view returns (bool) {
112
+ return msg.sender == endpoint;
113
+ }
114
+ }
@@ -1,12 +1,25 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.13;
3
3
 
4
+ /*@@@@@@@ @@@@@@@@@
5
+ @@@@@@@@@ @@@@@@@@@
6
+ @@@@@@@@@ @@@@@@@@@
7
+ @@@@@@@@@ @@@@@@@@@
8
+ @@@@@@@@@@@@@@@@@@@@@@@@@
9
+ @@@@@ HYPERLANE @@@@@@@
10
+ @@@@@@@@@@@@@@@@@@@@@@@@@
11
+ @@@@@@@@@ @@@@@@@@@
12
+ @@@@@@@@@ @@@@@@@@@
13
+ @@@@@@@@@ @@@@@@@@@
14
+ @@@@@@@@@ @@@@@@@@*/
15
+
4
16
  // ============ Internal Imports ============
5
17
  import {OwnableMulticall} from "./libs/OwnableMulticall.sol";
6
18
  import {InterchainAccountMessage} from "./libs/InterchainAccountMessage.sol";
7
19
  import {CallLib} from "./libs/Call.sol";
8
20
  import {MinimalProxy} from "../libs/MinimalProxy.sol";
9
21
  import {TypeCasts} from "../libs/TypeCasts.sol";
22
+ import {StandardHookMetadata} from "../hooks/libs/StandardHookMetadata.sol";
10
23
  import {EnumerableMapExtended} from "../libs/EnumerableMapExtended.sol";
11
24
  import {Router} from "../client/Router.sol";
12
25
 
@@ -82,17 +95,17 @@ contract InterchainAccountRouter is Router {
82
95
 
83
96
  /**
84
97
  * @notice Initializes the contract with HyperlaneConnectionClient contracts
85
- * @param _interchainGasPaymaster Unused but required by HyperlaneConnectionClient
98
+ * @param _customHook used by the Router to set the hook to override with
86
99
  * @param _interchainSecurityModule The address of the local ISM contract
87
100
  * @param _owner The address with owner privileges
88
101
  */
89
102
  function initialize(
90
- address _interchainGasPaymaster,
103
+ address _customHook,
91
104
  address _interchainSecurityModule,
92
105
  address _owner
93
106
  ) external initializer {
94
107
  _MailboxClient_initialize(
95
- _interchainGasPaymaster,
108
+ _customHook,
96
109
  _interchainSecurityModule,
97
110
  _owner
98
111
  );
@@ -157,7 +170,7 @@ contract InterchainAccountRouter is Router {
157
170
  address _to,
158
171
  uint256 _value,
159
172
  bytes memory _data
160
- ) external returns (bytes32) {
173
+ ) external payable returns (bytes32) {
161
174
  bytes32 _router = routers(_destination);
162
175
  bytes32 _ism = isms[_destination];
163
176
  bytes memory _body = InterchainAccountMessage.encode(
@@ -170,6 +183,44 @@ contract InterchainAccountRouter is Router {
170
183
  return _dispatchMessage(_destination, _router, _ism, _body);
171
184
  }
172
185
 
186
+ /**
187
+ * @notice Dispatches a single remote call to be made by an owner's
188
+ * interchain account on the destination domain
189
+ * @dev Uses the default router and ISM addresses for the destination
190
+ * domain, reverting if none have been configured
191
+ * @param _destination The remote domain of the chain to make calls on
192
+ * @param _to The address of the contract to call
193
+ * @param _value The value to include in the call
194
+ * @param _data The calldata
195
+ * @param _hookMetadata The hook metadata to override with for the hook set by the owner
196
+ * @return The Hyperlane message ID
197
+ */
198
+ function callRemote(
199
+ uint32 _destination,
200
+ address _to,
201
+ uint256 _value,
202
+ bytes memory _data,
203
+ bytes memory _hookMetadata
204
+ ) external payable returns (bytes32) {
205
+ bytes32 _router = routers(_destination);
206
+ bytes32 _ism = isms[_destination];
207
+ bytes memory _body = InterchainAccountMessage.encode(
208
+ msg.sender,
209
+ _ism,
210
+ _to,
211
+ _value,
212
+ _data
213
+ );
214
+ return
215
+ _dispatchMessageWithMetadata(
216
+ _destination,
217
+ _router,
218
+ _ism,
219
+ _body,
220
+ _hookMetadata
221
+ );
222
+ }
223
+
173
224
  /**
174
225
  * @notice Dispatches a sequence of remote calls to be made by an owner's
175
226
  * interchain account on the destination domain
@@ -183,10 +234,44 @@ contract InterchainAccountRouter is Router {
183
234
  function callRemote(
184
235
  uint32 _destination,
185
236
  CallLib.Call[] calldata _calls
186
- ) external returns (bytes32) {
237
+ ) external payable returns (bytes32) {
187
238
  bytes32 _router = routers(_destination);
188
239
  bytes32 _ism = isms[_destination];
189
- return callRemoteWithOverrides(_destination, _router, _ism, _calls);
240
+ bytes memory _body = InterchainAccountMessage.encode(
241
+ msg.sender,
242
+ _ism,
243
+ _calls
244
+ );
245
+
246
+ return _dispatchMessage(_destination, _router, _ism, _body);
247
+ }
248
+
249
+ /**
250
+ * @notice Dispatches a sequence of remote calls to be made by an owner's
251
+ * interchain account on the destination domain
252
+ * @dev Uses the default router and ISM addresses for the destination
253
+ * domain, reverting if none have been configured
254
+ * @dev Recommend using CallLib.build to format the interchain calls.
255
+ * @param _destination The remote domain of the chain to make calls on
256
+ * @param _calls The sequence of calls to make
257
+ * @param _hookMetadata The hook metadata to override with for the hook set by the owner
258
+ * @return The Hyperlane message ID
259
+ */
260
+ function callRemote(
261
+ uint32 _destination,
262
+ CallLib.Call[] calldata _calls,
263
+ bytes calldata _hookMetadata
264
+ ) external payable returns (bytes32) {
265
+ bytes32 _router = routers(_destination);
266
+ bytes32 _ism = isms[_destination];
267
+ return
268
+ callRemoteWithOverrides(
269
+ _destination,
270
+ _router,
271
+ _ism,
272
+ _calls,
273
+ _hookMetadata
274
+ );
190
275
  }
191
276
 
192
277
  /**
@@ -395,7 +480,7 @@ contract InterchainAccountRouter is Router {
395
480
  bytes32 _router,
396
481
  bytes32 _ism,
397
482
  CallLib.Call[] calldata _calls
398
- ) public returns (bytes32) {
483
+ ) public payable returns (bytes32) {
399
484
  bytes memory _body = InterchainAccountMessage.encode(
400
485
  msg.sender,
401
486
  _ism,
@@ -404,6 +489,39 @@ contract InterchainAccountRouter is Router {
404
489
  return _dispatchMessage(_destination, _router, _ism, _body);
405
490
  }
406
491
 
492
+ /**
493
+ * @notice Dispatches a sequence of remote calls to be made by an owner's
494
+ * interchain account on the destination domain
495
+ * @dev Recommend using CallLib.build to format the interchain calls
496
+ * @param _destination The remote domain of the chain to make calls on
497
+ * @param _router The remote router address
498
+ * @param _ism The remote ISM address
499
+ * @param _calls The sequence of calls to make
500
+ * @param _hookMetadata The hook metadata to override with for the hook set by the owner
501
+ * @return The Hyperlane message ID
502
+ */
503
+ function callRemoteWithOverrides(
504
+ uint32 _destination,
505
+ bytes32 _router,
506
+ bytes32 _ism,
507
+ CallLib.Call[] calldata _calls,
508
+ bytes memory _hookMetadata
509
+ ) public payable returns (bytes32) {
510
+ bytes memory _body = InterchainAccountMessage.encode(
511
+ msg.sender,
512
+ _ism,
513
+ _calls
514
+ );
515
+ return
516
+ _dispatchMessageWithMetadata(
517
+ _destination,
518
+ _router,
519
+ _ism,
520
+ _body,
521
+ _hookMetadata
522
+ );
523
+ }
524
+
407
525
  // ============ Internal Functions ============
408
526
 
409
527
  /**
@@ -474,7 +592,33 @@ contract InterchainAccountRouter is Router {
474
592
  ) private returns (bytes32) {
475
593
  require(_router != bytes32(0), "no router specified for destination");
476
594
  emit RemoteCallDispatched(_destination, msg.sender, _router, _ism);
477
- return mailbox.dispatch(_destination, _router, _body);
595
+ return mailbox.dispatch{value: msg.value}(_destination, _router, _body);
596
+ }
597
+
598
+ /**
599
+ * @notice Dispatches an InterchainAccountMessage to the remote router with hook metadata
600
+ * @param _destination The remote domain
601
+ * @param _router The address of the remote InterchainAccountRouter
602
+ * @param _ism The address of the remote ISM
603
+ * @param _body The InterchainAccountMessage body
604
+ * @param _hookMetadata The hook metadata to override with for the hook set by the owner
605
+ */
606
+ function _dispatchMessageWithMetadata(
607
+ uint32 _destination,
608
+ bytes32 _router,
609
+ bytes32 _ism,
610
+ bytes memory _body,
611
+ bytes memory _hookMetadata
612
+ ) private returns (bytes32) {
613
+ require(_router != bytes32(0), "no router specified for destination");
614
+ emit RemoteCallDispatched(_destination, msg.sender, _router, _ism);
615
+ return
616
+ mailbox.dispatch{value: msg.value}(
617
+ _destination,
618
+ _router,
619
+ _body,
620
+ _hookMetadata
621
+ );
478
622
  }
479
623
 
480
624
  /**
@@ -31,9 +31,6 @@ contract MockHyperlaneEnvironment {
31
31
  originMailbox.setDefaultIsm(address(isms[originDomain]));
32
32
  destinationMailbox.setDefaultIsm(address(isms[destinationDomain]));
33
33
 
34
- igps[originDomain] = new TestInterchainGasPaymaster();
35
- igps[destinationDomain] = new TestInterchainGasPaymaster();
36
-
37
34
  originMailbox.transferOwnership(msg.sender);
38
35
  destinationMailbox.transferOwnership(msg.sender);
39
36
 
@@ -19,4 +19,12 @@ contract ERC20Test is ERC20 {
19
19
  function decimals() public view override returns (uint8) {
20
20
  return _decimals;
21
21
  }
22
+
23
+ function mint(uint256 amount) public {
24
+ _mint(msg.sender, amount);
25
+ }
26
+
27
+ function mintTo(address account, uint256 amount) public {
28
+ _mint(account, amount);
29
+ }
22
30
  }
@@ -0,0 +1,13 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity >=0.8.0;
3
+ import "@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol";
4
+ import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
5
+ import "@openzeppelin/contracts/interfaces/IERC20.sol";
6
+
7
+ contract ERC4626Test is ERC4626 {
8
+ constructor(
9
+ address _asset,
10
+ string memory _name,
11
+ string memory _symbol
12
+ ) ERC4626(IERC20(_asset)) ERC20(_name, _symbol) {}
13
+ }
@@ -17,4 +17,8 @@ contract TestInterchainGasPaymaster is InterchainGasPaymaster {
17
17
  ) public pure override returns (uint256) {
18
18
  return gasPrice * gasAmount;
19
19
  }
20
+
21
+ function getDefaultGasUsage() public pure returns (uint256) {
22
+ return DEFAULT_GAS_USAGE;
23
+ }
20
24
  }