@hyperlane-xyz/core 0.5.4-2 → 0.5.5

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 (482) hide show
  1. package/contracts/{HyperlaneConnectionClient.sol → AbacusConnectionClient.sol} +56 -69
  2. package/contracts/AbacusConnectionManager.sol +145 -0
  3. package/contracts/Inbox.sol +148 -0
  4. package/contracts/InterchainGasPaymaster.sol +11 -9
  5. package/contracts/Mailbox.sol +44 -179
  6. package/contracts/MerkleTreeManager.sol +32 -0
  7. package/contracts/Outbox.sol +191 -0
  8. package/contracts/Router.sol +45 -36
  9. package/contracts/libs/Message.sol +66 -107
  10. package/contracts/middleware/InterchainAccountRouter.sol +15 -6
  11. package/contracts/middleware/InterchainQueryRouter.sol +28 -9
  12. package/contracts/middleware/liquidity-layer/LiquidityLayerRouter.sol +3 -2
  13. package/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter.sol +2 -1
  14. package/contracts/middleware/liquidity-layer/adapters/PortalAdapter.sol +215 -0
  15. package/contracts/middleware/liquidity-layer/interfaces/portal/IPortalTokenBridge.sol +87 -0
  16. package/contracts/mock/MockHyperlaneEnvironment.sol +47 -10
  17. package/contracts/mock/MockInbox.sol +52 -0
  18. package/contracts/mock/MockInterchainAccountRouter.sol +18 -4
  19. package/contracts/mock/MockOutbox.sol +30 -0
  20. package/contracts/mock/MockPortalBridge.sol +89 -0
  21. package/contracts/test/TestAbacusConnectionClient.sol +23 -0
  22. package/contracts/test/TestInbox.sol +54 -0
  23. package/contracts/test/TestMailbox.sol +4 -34
  24. package/contracts/test/TestMerkle.sol +4 -9
  25. package/contracts/test/TestMessage.sol +12 -24
  26. package/contracts/test/TestMultisigValidatorManager.sol +26 -0
  27. package/contracts/test/TestOutbox.sol +46 -0
  28. package/contracts/test/TestSendReceiver.sol +15 -6
  29. package/contracts/test/TestValidatorManager.sol +21 -0
  30. package/contracts/validator-manager/InboxValidatorManager.sol +58 -0
  31. package/contracts/validator-manager/MultisigValidatorManager.sol +271 -0
  32. package/contracts/validator-manager/OutboxValidatorManager.sol +244 -0
  33. package/dist/contracts/{OwnableSpecifiesISM.d.ts → AbacusConnectionClient.d.ts} +65 -30
  34. package/dist/contracts/AbacusConnectionClient.d.ts.map +1 -0
  35. package/dist/contracts/AbacusConnectionClient.js +4 -0
  36. package/dist/contracts/AbacusConnectionClient.js.map +1 -0
  37. package/dist/contracts/AbacusConnectionManager.d.ts +213 -0
  38. package/dist/contracts/AbacusConnectionManager.d.ts.map +1 -0
  39. package/dist/contracts/AbacusConnectionManager.js +4 -0
  40. package/dist/contracts/AbacusConnectionManager.js.map +1 -0
  41. package/dist/contracts/Inbox.d.ts +207 -0
  42. package/dist/contracts/Inbox.d.ts.map +1 -0
  43. package/dist/contracts/{OwnableSpecifiesISM.js → Inbox.js} +1 -1
  44. package/dist/contracts/Inbox.js.map +1 -0
  45. package/dist/contracts/InterchainGasPaymaster.d.ts +13 -11
  46. package/dist/contracts/InterchainGasPaymaster.d.ts.map +1 -1
  47. package/dist/contracts/Mailbox.d.ts +28 -151
  48. package/dist/contracts/Mailbox.d.ts.map +1 -1
  49. package/dist/contracts/MerkleTreeManager.d.ts +53 -0
  50. package/dist/contracts/MerkleTreeManager.d.ts.map +1 -0
  51. package/dist/contracts/MerkleTreeManager.js +4 -0
  52. package/dist/contracts/MerkleTreeManager.js.map +1 -0
  53. package/dist/contracts/Outbox.d.ts +331 -0
  54. package/dist/contracts/Outbox.d.ts.map +1 -0
  55. package/dist/contracts/Outbox.js +4 -0
  56. package/dist/contracts/Outbox.js.map +1 -0
  57. package/dist/contracts/Router.d.ts +32 -81
  58. package/dist/contracts/Router.d.ts.map +1 -1
  59. package/dist/contracts/index.d.ts +7 -0
  60. package/dist/contracts/index.d.ts.map +1 -1
  61. package/dist/contracts/middleware/InterchainAccountRouter.d.ts +56 -89
  62. package/dist/contracts/middleware/InterchainAccountRouter.d.ts.map +1 -1
  63. package/dist/contracts/middleware/InterchainQueryRouter.d.ts +55 -88
  64. package/dist/contracts/middleware/InterchainQueryRouter.d.ts.map +1 -1
  65. package/dist/contracts/middleware/liquidity-layer/LiquidityLayerRouter.d.ts +37 -86
  66. package/dist/contracts/middleware/liquidity-layer/LiquidityLayerRouter.d.ts.map +1 -1
  67. package/dist/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter.d.ts +32 -81
  68. package/dist/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter.d.ts.map +1 -1
  69. package/dist/contracts/middleware/liquidity-layer/adapters/PortalAdapter.d.ts +378 -0
  70. package/dist/contracts/middleware/liquidity-layer/adapters/PortalAdapter.d.ts.map +1 -0
  71. package/dist/contracts/middleware/liquidity-layer/adapters/PortalAdapter.js +4 -0
  72. package/dist/contracts/middleware/liquidity-layer/adapters/PortalAdapter.js.map +1 -0
  73. package/dist/contracts/middleware/liquidity-layer/adapters/index.d.ts +1 -0
  74. package/dist/contracts/middleware/liquidity-layer/adapters/index.d.ts.map +1 -1
  75. package/dist/contracts/middleware/liquidity-layer/interfaces/index.d.ts +2 -0
  76. package/dist/contracts/middleware/liquidity-layer/interfaces/index.d.ts.map +1 -1
  77. package/dist/contracts/middleware/liquidity-layer/interfaces/portal/IPortalTokenBridge.d.ts +148 -0
  78. package/dist/contracts/middleware/liquidity-layer/interfaces/portal/IPortalTokenBridge.d.ts.map +1 -0
  79. package/dist/contracts/middleware/liquidity-layer/interfaces/portal/IPortalTokenBridge.js +4 -0
  80. package/dist/contracts/middleware/liquidity-layer/interfaces/portal/IPortalTokenBridge.js.map +1 -0
  81. package/dist/contracts/middleware/liquidity-layer/interfaces/portal/index.d.ts +2 -0
  82. package/dist/contracts/middleware/liquidity-layer/interfaces/portal/index.d.ts.map +1 -0
  83. package/dist/contracts/middleware/liquidity-layer/interfaces/portal/index.js +3 -0
  84. package/dist/contracts/middleware/liquidity-layer/interfaces/portal/index.js.map +1 -0
  85. package/dist/contracts/middleware/token-bridge/TokenBridgeRouter.d.ts +291 -0
  86. package/dist/contracts/middleware/token-bridge/TokenBridgeRouter.d.ts.map +1 -0
  87. package/dist/contracts/middleware/token-bridge/TokenBridgeRouter.js +4 -0
  88. package/dist/contracts/middleware/token-bridge/TokenBridgeRouter.js.map +1 -0
  89. package/dist/contracts/middleware/token-bridge/adapters/CircleBridgeAdapter.d.ts +416 -0
  90. package/dist/contracts/middleware/token-bridge/adapters/CircleBridgeAdapter.d.ts.map +1 -0
  91. package/dist/contracts/middleware/token-bridge/adapters/CircleBridgeAdapter.js +4 -0
  92. package/dist/contracts/middleware/token-bridge/adapters/CircleBridgeAdapter.js.map +1 -0
  93. package/dist/contracts/middleware/token-bridge/adapters/index.d.ts +2 -0
  94. package/dist/contracts/middleware/token-bridge/adapters/index.d.ts.map +1 -0
  95. package/dist/contracts/middleware/token-bridge/adapters/index.js +3 -0
  96. package/dist/contracts/middleware/token-bridge/adapters/index.js.map +1 -0
  97. package/dist/contracts/middleware/token-bridge/index.d.ts +6 -0
  98. package/dist/contracts/middleware/token-bridge/index.d.ts.map +1 -0
  99. package/dist/contracts/middleware/token-bridge/index.js +4 -0
  100. package/dist/contracts/middleware/token-bridge/index.js.map +1 -0
  101. package/dist/contracts/middleware/token-bridge/interfaces/ITokenBridgeAdapter.d.ts +67 -0
  102. package/dist/contracts/middleware/token-bridge/interfaces/ITokenBridgeAdapter.d.ts.map +1 -0
  103. package/dist/contracts/middleware/token-bridge/interfaces/ITokenBridgeAdapter.js +4 -0
  104. package/dist/contracts/middleware/token-bridge/interfaces/ITokenBridgeAdapter.js.map +1 -0
  105. package/dist/contracts/middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient.d.ts +51 -0
  106. package/dist/contracts/middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient.d.ts.map +1 -0
  107. package/dist/contracts/middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient.js +4 -0
  108. package/dist/contracts/middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient.js.map +1 -0
  109. package/dist/contracts/middleware/token-bridge/interfaces/circle/ICircleBridge.d.ts +78 -0
  110. package/dist/contracts/middleware/token-bridge/interfaces/circle/ICircleBridge.d.ts.map +1 -0
  111. package/dist/contracts/middleware/token-bridge/interfaces/circle/ICircleBridge.js +4 -0
  112. package/dist/contracts/middleware/token-bridge/interfaces/circle/ICircleBridge.js.map +1 -0
  113. package/dist/contracts/middleware/token-bridge/interfaces/circle/ICircleMessageTransmitter.d.ts +59 -0
  114. package/dist/contracts/middleware/token-bridge/interfaces/circle/ICircleMessageTransmitter.d.ts.map +1 -0
  115. package/dist/contracts/middleware/token-bridge/interfaces/circle/ICircleMessageTransmitter.js +4 -0
  116. package/dist/contracts/middleware/token-bridge/interfaces/circle/ICircleMessageTransmitter.js.map +1 -0
  117. package/dist/contracts/middleware/token-bridge/interfaces/circle/index.d.ts +3 -0
  118. package/dist/contracts/middleware/token-bridge/interfaces/circle/index.d.ts.map +1 -0
  119. package/dist/contracts/middleware/token-bridge/interfaces/circle/index.js +3 -0
  120. package/dist/contracts/middleware/token-bridge/interfaces/circle/index.js.map +1 -0
  121. package/dist/contracts/middleware/token-bridge/interfaces/index.d.ts +5 -0
  122. package/dist/contracts/middleware/token-bridge/interfaces/index.d.ts.map +1 -0
  123. package/dist/contracts/middleware/token-bridge/interfaces/index.js +4 -0
  124. package/dist/contracts/middleware/token-bridge/interfaces/index.js.map +1 -0
  125. package/dist/contracts/mock/MockHyperlaneEnvironment.d.ts +33 -9
  126. package/dist/contracts/mock/MockHyperlaneEnvironment.d.ts.map +1 -1
  127. package/dist/contracts/mock/MockInbox.d.ts +67 -0
  128. package/dist/contracts/mock/MockInbox.d.ts.map +1 -0
  129. package/dist/contracts/mock/MockInbox.js +4 -0
  130. package/dist/contracts/mock/MockInbox.js.map +1 -0
  131. package/dist/contracts/mock/MockInterchainAccountRouter.d.ts +24 -8
  132. package/dist/contracts/mock/MockInterchainAccountRouter.d.ts.map +1 -1
  133. package/dist/contracts/mock/MockOutbox.d.ts +51 -0
  134. package/dist/contracts/mock/MockOutbox.d.ts.map +1 -0
  135. package/dist/contracts/mock/MockOutbox.js +4 -0
  136. package/dist/contracts/mock/MockOutbox.js.map +1 -0
  137. package/dist/contracts/mock/MockPortalBridge.d.ts +164 -0
  138. package/dist/contracts/mock/MockPortalBridge.d.ts.map +1 -0
  139. package/dist/contracts/mock/MockPortalBridge.js +4 -0
  140. package/dist/contracts/mock/MockPortalBridge.js.map +1 -0
  141. package/dist/contracts/mock/index.d.ts +3 -0
  142. package/dist/contracts/mock/index.d.ts.map +1 -1
  143. package/dist/contracts/test/TestAbacusConnectionClient.d.ts +209 -0
  144. package/dist/contracts/test/TestAbacusConnectionClient.d.ts.map +1 -0
  145. package/dist/contracts/test/TestAbacusConnectionClient.js +4 -0
  146. package/dist/contracts/test/TestAbacusConnectionClient.js.map +1 -0
  147. package/dist/contracts/test/TestHyperlaneConnectionClient.d.ts +5 -5
  148. package/dist/contracts/test/TestHyperlaneConnectionClient.d.ts.map +1 -1
  149. package/dist/contracts/test/TestInbox.d.ts +263 -0
  150. package/dist/contracts/test/TestInbox.d.ts.map +1 -0
  151. package/dist/contracts/test/TestInbox.js +4 -0
  152. package/dist/contracts/test/TestInbox.js.map +1 -0
  153. package/dist/contracts/test/TestMailbox.d.ts +33 -164
  154. package/dist/contracts/test/TestMailbox.d.ts.map +1 -1
  155. package/dist/contracts/test/TestMessage.d.ts +10 -30
  156. package/dist/contracts/test/TestMessage.d.ts.map +1 -1
  157. package/dist/contracts/test/TestMultisigValidatorManager.d.ts +247 -0
  158. package/dist/contracts/test/TestMultisigValidatorManager.d.ts.map +1 -0
  159. package/dist/contracts/test/TestMultisigValidatorManager.js +4 -0
  160. package/dist/contracts/test/TestMultisigValidatorManager.js.map +1 -0
  161. package/dist/contracts/test/TestOutbox.d.ts +371 -0
  162. package/dist/contracts/test/TestOutbox.d.ts.map +1 -0
  163. package/dist/contracts/test/TestOutbox.js +4 -0
  164. package/dist/contracts/test/TestOutbox.js.map +1 -0
  165. package/dist/contracts/test/TestRouter.d.ts +32 -81
  166. package/dist/contracts/test/TestRouter.d.ts.map +1 -1
  167. package/dist/contracts/test/TestTokenBridgeMessageRecipient.d.ts +72 -0
  168. package/dist/contracts/test/TestTokenBridgeMessageRecipient.d.ts.map +1 -0
  169. package/dist/contracts/test/TestTokenBridgeMessageRecipient.js +4 -0
  170. package/dist/contracts/test/TestTokenBridgeMessageRecipient.js.map +1 -0
  171. package/dist/contracts/test/TestValidatorManager.d.ts +58 -0
  172. package/dist/contracts/test/TestValidatorManager.d.ts.map +1 -0
  173. package/dist/contracts/test/TestValidatorManager.js +4 -0
  174. package/dist/contracts/test/TestValidatorManager.js.map +1 -0
  175. package/dist/contracts/test/index.d.ts +5 -0
  176. package/dist/contracts/test/index.d.ts.map +1 -1
  177. package/dist/contracts/validator-manager/InboxValidatorManager.d.ts +263 -0
  178. package/dist/contracts/validator-manager/InboxValidatorManager.d.ts.map +1 -0
  179. package/dist/contracts/validator-manager/InboxValidatorManager.js +4 -0
  180. package/dist/contracts/validator-manager/InboxValidatorManager.js.map +1 -0
  181. package/dist/contracts/validator-manager/MultisigValidatorManager.d.ts +239 -0
  182. package/dist/contracts/validator-manager/MultisigValidatorManager.d.ts.map +1 -0
  183. package/dist/contracts/validator-manager/MultisigValidatorManager.js +4 -0
  184. package/dist/contracts/validator-manager/MultisigValidatorManager.js.map +1 -0
  185. package/dist/contracts/validator-manager/OutboxValidatorManager.d.ts +335 -0
  186. package/dist/contracts/validator-manager/OutboxValidatorManager.d.ts.map +1 -0
  187. package/dist/contracts/validator-manager/OutboxValidatorManager.js +4 -0
  188. package/dist/contracts/validator-manager/OutboxValidatorManager.js.map +1 -0
  189. package/dist/contracts/validator-manager/index.d.ts +4 -0
  190. package/dist/contracts/validator-manager/index.d.ts.map +1 -0
  191. package/dist/contracts/validator-manager/index.js +3 -0
  192. package/dist/contracts/validator-manager/index.js.map +1 -0
  193. package/dist/factories/contracts/AbacusConnectionClient__factory.d.ts +43 -0
  194. package/dist/factories/contracts/AbacusConnectionClient__factory.d.ts.map +1 -0
  195. package/dist/factories/contracts/AbacusConnectionClient__factory.js +161 -0
  196. package/dist/factories/contracts/AbacusConnectionClient__factory.js.map +1 -0
  197. package/dist/factories/contracts/AbacusConnectionManager__factory.d.ts +55 -0
  198. package/dist/factories/contracts/AbacusConnectionManager__factory.d.ts.map +1 -0
  199. package/dist/factories/contracts/AbacusConnectionManager__factory.js +276 -0
  200. package/dist/factories/contracts/AbacusConnectionManager__factory.js.map +1 -0
  201. package/dist/factories/contracts/Inbox__factory.d.ts +59 -0
  202. package/dist/factories/contracts/Inbox__factory.d.ts.map +1 -0
  203. package/dist/factories/contracts/Inbox__factory.js +278 -0
  204. package/dist/factories/contracts/Inbox__factory.js.map +1 -0
  205. package/dist/factories/contracts/InterchainGasPaymaster__factory.d.ts +1 -1
  206. package/dist/factories/contracts/InterchainGasPaymaster__factory.d.ts.map +1 -1
  207. package/dist/factories/contracts/InterchainGasPaymaster__factory.js +18 -7
  208. package/dist/factories/contracts/InterchainGasPaymaster__factory.js.map +1 -1
  209. package/dist/factories/contracts/Mailbox__factory.d.ts +13 -29
  210. package/dist/factories/contracts/Mailbox__factory.d.ts.map +1 -1
  211. package/dist/factories/contracts/Mailbox__factory.js +11 -239
  212. package/dist/factories/contracts/Mailbox__factory.js.map +1 -1
  213. package/dist/factories/contracts/MerkleTreeManager__factory.d.ts +31 -0
  214. package/dist/factories/contracts/MerkleTreeManager__factory.d.ts.map +1 -0
  215. package/dist/factories/contracts/MerkleTreeManager__factory.js +67 -0
  216. package/dist/factories/contracts/MerkleTreeManager__factory.js.map +1 -0
  217. package/dist/factories/contracts/Outbox__factory.d.ts +59 -0
  218. package/dist/factories/contracts/Outbox__factory.d.ts.map +1 -0
  219. package/dist/factories/contracts/Outbox__factory.js +415 -0
  220. package/dist/factories/contracts/Outbox__factory.js.map +1 -0
  221. package/dist/factories/contracts/Router__factory.d.ts.map +1 -1
  222. package/dist/factories/contracts/Router__factory.js +26 -83
  223. package/dist/factories/contracts/Router__factory.js.map +1 -1
  224. package/dist/factories/contracts/index.d.ts +6 -0
  225. package/dist/factories/contracts/index.d.ts.map +1 -1
  226. package/dist/factories/contracts/index.js +12 -1
  227. package/dist/factories/contracts/index.js.map +1 -1
  228. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.d.ts +1 -1
  229. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.d.ts.map +1 -1
  230. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.js +58 -86
  231. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.js.map +1 -1
  232. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.d.ts +1 -1
  233. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.d.ts.map +1 -1
  234. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.js +68 -91
  235. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.js.map +1 -1
  236. package/dist/factories/contracts/middleware/liquidity-layer/LiquidityLayerRouter__factory.d.ts +1 -1
  237. package/dist/factories/contracts/middleware/liquidity-layer/LiquidityLayerRouter__factory.d.ts.map +1 -1
  238. package/dist/factories/contracts/middleware/liquidity-layer/LiquidityLayerRouter__factory.js +31 -88
  239. package/dist/factories/contracts/middleware/liquidity-layer/LiquidityLayerRouter__factory.js.map +1 -1
  240. package/dist/factories/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter__factory.d.ts +1 -1
  241. package/dist/factories/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter__factory.d.ts.map +1 -1
  242. package/dist/factories/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter__factory.js +31 -88
  243. package/dist/factories/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter__factory.js.map +1 -1
  244. package/dist/factories/contracts/middleware/liquidity-layer/adapters/PortalAdapter__factory.d.ts +48 -0
  245. package/dist/factories/contracts/middleware/liquidity-layer/adapters/PortalAdapter__factory.d.ts.map +1 -0
  246. package/dist/factories/contracts/middleware/liquidity-layer/adapters/PortalAdapter__factory.js +540 -0
  247. package/dist/factories/contracts/middleware/liquidity-layer/adapters/PortalAdapter__factory.js.map +1 -0
  248. package/dist/factories/contracts/middleware/liquidity-layer/adapters/index.d.ts +1 -0
  249. package/dist/factories/contracts/middleware/liquidity-layer/adapters/index.d.ts.map +1 -1
  250. package/dist/factories/contracts/middleware/liquidity-layer/adapters/index.js +3 -1
  251. package/dist/factories/contracts/middleware/liquidity-layer/adapters/index.js.map +1 -1
  252. package/dist/factories/contracts/middleware/liquidity-layer/interfaces/index.d.ts +1 -0
  253. package/dist/factories/contracts/middleware/liquidity-layer/interfaces/index.d.ts.map +1 -1
  254. package/dist/factories/contracts/middleware/liquidity-layer/interfaces/index.js +2 -1
  255. package/dist/factories/contracts/middleware/liquidity-layer/interfaces/index.js.map +1 -1
  256. package/dist/factories/contracts/middleware/liquidity-layer/interfaces/portal/IPortalTokenBridge__factory.d.ts +56 -0
  257. package/dist/factories/contracts/middleware/liquidity-layer/interfaces/portal/IPortalTokenBridge__factory.d.ts.map +1 -0
  258. package/dist/factories/contracts/middleware/liquidity-layer/interfaces/portal/IPortalTokenBridge__factory.js +204 -0
  259. package/dist/factories/contracts/middleware/liquidity-layer/interfaces/portal/IPortalTokenBridge__factory.js.map +1 -0
  260. package/dist/factories/contracts/middleware/liquidity-layer/interfaces/portal/index.d.ts +2 -0
  261. package/dist/factories/contracts/middleware/liquidity-layer/interfaces/portal/index.d.ts.map +1 -0
  262. package/dist/factories/contracts/middleware/liquidity-layer/interfaces/portal/index.js +9 -0
  263. package/dist/factories/contracts/middleware/liquidity-layer/interfaces/portal/index.js.map +1 -0
  264. package/dist/factories/contracts/middleware/token-bridge/TokenBridgeRouter__factory.d.ts +48 -0
  265. package/dist/factories/contracts/middleware/token-bridge/TokenBridgeRouter__factory.d.ts.map +1 -0
  266. package/dist/factories/contracts/middleware/token-bridge/TokenBridgeRouter__factory.js +380 -0
  267. package/dist/factories/contracts/middleware/token-bridge/TokenBridgeRouter__factory.js.map +1 -0
  268. package/dist/factories/contracts/middleware/token-bridge/adapters/CircleBridgeAdapter__factory.d.ts +48 -0
  269. package/dist/factories/contracts/middleware/token-bridge/adapters/CircleBridgeAdapter__factory.d.ts.map +1 -0
  270. package/dist/factories/contracts/middleware/token-bridge/adapters/CircleBridgeAdapter__factory.js +584 -0
  271. package/dist/factories/contracts/middleware/token-bridge/adapters/CircleBridgeAdapter__factory.js.map +1 -0
  272. package/dist/factories/contracts/middleware/token-bridge/adapters/index.d.ts +2 -0
  273. package/dist/factories/contracts/middleware/token-bridge/adapters/index.d.ts.map +1 -0
  274. package/dist/factories/contracts/middleware/token-bridge/adapters/index.js +9 -0
  275. package/dist/factories/contracts/middleware/token-bridge/adapters/index.js.map +1 -0
  276. package/dist/factories/contracts/middleware/token-bridge/index.d.ts +4 -0
  277. package/dist/factories/contracts/middleware/token-bridge/index.d.ts.map +1 -0
  278. package/dist/factories/contracts/middleware/token-bridge/index.js +34 -0
  279. package/dist/factories/contracts/middleware/token-bridge/index.js.map +1 -0
  280. package/dist/factories/contracts/middleware/token-bridge/interfaces/ITokenBridgeAdapter__factory.d.ts +23 -0
  281. package/dist/factories/contracts/middleware/token-bridge/interfaces/ITokenBridgeAdapter__factory.d.ts.map +1 -0
  282. package/dist/factories/contracts/middleware/token-bridge/interfaces/ITokenBridgeAdapter__factory.js +91 -0
  283. package/dist/factories/contracts/middleware/token-bridge/interfaces/ITokenBridgeAdapter__factory.js.map +1 -0
  284. package/dist/factories/contracts/middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient__factory.d.ts +19 -0
  285. package/dist/factories/contracts/middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient__factory.d.ts.map +1 -0
  286. package/dist/factories/contracts/middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient__factory.js +51 -0
  287. package/dist/factories/contracts/middleware/token-bridge/interfaces/ITokenBridgeMessageRecipient__factory.js.map +1 -0
  288. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/ICircleBridge__factory.d.ts +36 -0
  289. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/ICircleBridge__factory.d.ts.map +1 -0
  290. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/ICircleBridge__factory.js +104 -0
  291. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/ICircleBridge__factory.js.map +1 -0
  292. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/ICircleMessageTransmitter__factory.d.ts +23 -0
  293. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/ICircleMessageTransmitter__factory.d.ts.map +1 -0
  294. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/ICircleMessageTransmitter__factory.js +61 -0
  295. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/ICircleMessageTransmitter__factory.js.map +1 -0
  296. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/index.d.ts +3 -0
  297. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/index.d.ts.map +1 -0
  298. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/index.js +11 -0
  299. package/dist/factories/contracts/middleware/token-bridge/interfaces/circle/index.js.map +1 -0
  300. package/dist/factories/contracts/middleware/token-bridge/interfaces/index.d.ts +4 -0
  301. package/dist/factories/contracts/middleware/token-bridge/interfaces/index.d.ts.map +1 -0
  302. package/dist/factories/contracts/middleware/token-bridge/interfaces/index.js +35 -0
  303. package/dist/factories/contracts/middleware/token-bridge/interfaces/index.js.map +1 -0
  304. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.d.ts +1 -1
  305. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.d.ts.map +1 -1
  306. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.js +60 -3
  307. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.js.map +1 -1
  308. package/dist/factories/contracts/mock/MockInbox__factory.d.ts +31 -0
  309. package/dist/factories/contracts/mock/MockInbox__factory.d.ts.map +1 -0
  310. package/dist/factories/contracts/mock/MockInbox__factory.js +76 -0
  311. package/dist/factories/contracts/mock/MockInbox__factory.js.map +1 -0
  312. package/dist/factories/contracts/mock/MockInterchainAccountRouter__factory.d.ts +1 -1
  313. package/dist/factories/contracts/mock/MockInterchainAccountRouter__factory.d.ts.map +1 -1
  314. package/dist/factories/contracts/mock/MockInterchainAccountRouter__factory.js +33 -4
  315. package/dist/factories/contracts/mock/MockInterchainAccountRouter__factory.js.map +1 -1
  316. package/dist/factories/contracts/mock/MockOutbox__factory.d.ts +45 -0
  317. package/dist/factories/contracts/mock/MockOutbox__factory.d.ts.map +1 -0
  318. package/dist/factories/contracts/mock/MockOutbox__factory.js +86 -0
  319. package/dist/factories/contracts/mock/MockOutbox__factory.js.map +1 -0
  320. package/dist/factories/contracts/mock/MockPortalBridge__factory.d.ts +79 -0
  321. package/dist/factories/contracts/mock/MockPortalBridge__factory.d.ts.map +1 -0
  322. package/dist/factories/contracts/mock/MockPortalBridge__factory.js +296 -0
  323. package/dist/factories/contracts/mock/MockPortalBridge__factory.js.map +1 -0
  324. package/dist/factories/contracts/mock/index.d.ts +3 -0
  325. package/dist/factories/contracts/mock/index.d.ts.map +1 -1
  326. package/dist/factories/contracts/mock/index.js +7 -1
  327. package/dist/factories/contracts/mock/index.js.map +1 -1
  328. package/dist/factories/contracts/test/TestAbacusConnectionClient__factory.d.ts +48 -0
  329. package/dist/factories/contracts/test/TestAbacusConnectionClient__factory.d.ts.map +1 -0
  330. package/dist/factories/contracts/test/TestAbacusConnectionClient__factory.js +242 -0
  331. package/dist/factories/contracts/test/TestAbacusConnectionClient__factory.js.map +1 -0
  332. package/dist/factories/contracts/test/TestHyperlaneConnectionClient__factory.d.ts +1 -1
  333. package/dist/factories/contracts/test/TestHyperlaneConnectionClient__factory.js +2 -2
  334. package/dist/factories/contracts/test/TestHyperlaneConnectionClient__factory.js.map +1 -1
  335. package/dist/factories/contracts/test/TestInbox__factory.d.ts +59 -0
  336. package/dist/factories/contracts/test/TestInbox__factory.d.ts.map +1 -0
  337. package/dist/factories/contracts/test/TestInbox__factory.js +371 -0
  338. package/dist/factories/contracts/test/TestInbox__factory.js.map +1 -0
  339. package/dist/factories/contracts/test/TestMailbox__factory.d.ts +8 -1
  340. package/dist/factories/contracts/test/TestMailbox__factory.d.ts.map +1 -1
  341. package/dist/factories/contracts/test/TestMailbox__factory.js +13 -235
  342. package/dist/factories/contracts/test/TestMailbox__factory.js.map +1 -1
  343. package/dist/factories/contracts/test/TestMerkle__factory.d.ts +1 -1
  344. package/dist/factories/contracts/test/TestMerkle__factory.js +1 -1
  345. package/dist/factories/contracts/test/TestMessage__factory.d.ts +1 -1
  346. package/dist/factories/contracts/test/TestMessage__factory.d.ts.map +1 -1
  347. package/dist/factories/contracts/test/TestMessage__factory.js +7 -40
  348. package/dist/factories/contracts/test/TestMessage__factory.js.map +1 -1
  349. package/dist/factories/contracts/test/TestMultisigValidatorManager__factory.d.ts +59 -0
  350. package/dist/factories/contracts/test/TestMultisigValidatorManager__factory.d.ts.map +1 -0
  351. package/dist/factories/contracts/test/TestMultisigValidatorManager__factory.js +349 -0
  352. package/dist/factories/contracts/test/TestMultisigValidatorManager__factory.js.map +1 -0
  353. package/dist/factories/contracts/test/TestOutbox__factory.d.ts +59 -0
  354. package/dist/factories/contracts/test/TestOutbox__factory.d.ts.map +1 -0
  355. package/dist/factories/contracts/test/TestOutbox__factory.js +483 -0
  356. package/dist/factories/contracts/test/TestOutbox__factory.js.map +1 -0
  357. package/dist/factories/contracts/test/TestQuerySender__factory.d.ts +1 -1
  358. package/dist/factories/contracts/test/TestQuerySender__factory.js +1 -1
  359. package/dist/factories/contracts/test/TestQuery__factory.d.ts +1 -1
  360. package/dist/factories/contracts/test/TestQuery__factory.js +1 -1
  361. package/dist/factories/contracts/test/TestRouter__factory.d.ts +1 -1
  362. package/dist/factories/contracts/test/TestRouter__factory.d.ts.map +1 -1
  363. package/dist/factories/contracts/test/TestRouter__factory.js +31 -88
  364. package/dist/factories/contracts/test/TestRouter__factory.js.map +1 -1
  365. package/dist/factories/contracts/test/TestSendReceiver__factory.d.ts +1 -1
  366. package/dist/factories/contracts/test/TestSendReceiver__factory.d.ts.map +1 -1
  367. package/dist/factories/contracts/test/TestSendReceiver__factory.js +2 -2
  368. package/dist/factories/contracts/test/TestSendReceiver__factory.js.map +1 -1
  369. package/dist/factories/contracts/test/TestTokenBridgeMessageRecipient__factory.d.ts +44 -0
  370. package/dist/factories/contracts/test/TestTokenBridgeMessageRecipient__factory.d.ts.map +1 -0
  371. package/dist/factories/contracts/test/TestTokenBridgeMessageRecipient__factory.js +111 -0
  372. package/dist/factories/contracts/test/TestTokenBridgeMessageRecipient__factory.js.map +1 -0
  373. package/dist/factories/contracts/test/TestValidatorManager__factory.d.ts +31 -0
  374. package/dist/factories/contracts/test/TestValidatorManager__factory.d.ts.map +1 -0
  375. package/dist/factories/contracts/test/TestValidatorManager__factory.js +79 -0
  376. package/dist/factories/contracts/test/TestValidatorManager__factory.js.map +1 -0
  377. package/dist/factories/contracts/test/index.d.ts +5 -0
  378. package/dist/factories/contracts/test/index.d.ts.map +1 -1
  379. package/dist/factories/contracts/test/index.js +11 -1
  380. package/dist/factories/contracts/test/index.js.map +1 -1
  381. package/dist/factories/contracts/validator-manager/InboxValidatorManager__factory.d.ts +59 -0
  382. package/dist/factories/contracts/validator-manager/InboxValidatorManager__factory.d.ts.map +1 -0
  383. package/dist/factories/contracts/validator-manager/InboxValidatorManager__factory.js +373 -0
  384. package/dist/factories/contracts/validator-manager/InboxValidatorManager__factory.js.map +1 -0
  385. package/dist/factories/contracts/validator-manager/MultisigValidatorManager__factory.d.ts +36 -0
  386. package/dist/factories/contracts/validator-manager/MultisigValidatorManager__factory.d.ts.map +1 -0
  387. package/dist/factories/contracts/validator-manager/MultisigValidatorManager__factory.js +286 -0
  388. package/dist/factories/contracts/validator-manager/MultisigValidatorManager__factory.js.map +1 -0
  389. package/dist/factories/contracts/validator-manager/OutboxValidatorManager__factory.d.ts +59 -0
  390. package/dist/factories/contracts/validator-manager/OutboxValidatorManager__factory.d.ts.map +1 -0
  391. package/dist/factories/contracts/validator-manager/OutboxValidatorManager__factory.js +560 -0
  392. package/dist/factories/contracts/validator-manager/OutboxValidatorManager__factory.js.map +1 -0
  393. package/dist/factories/contracts/validator-manager/index.d.ts +4 -0
  394. package/dist/factories/contracts/validator-manager/index.d.ts.map +1 -0
  395. package/dist/factories/contracts/validator-manager/index.js +13 -0
  396. package/dist/factories/contracts/validator-manager/index.js.map +1 -0
  397. package/dist/factories/interfaces/IAbacusConnectionManager__factory.d.ts +23 -0
  398. package/dist/factories/interfaces/IAbacusConnectionManager__factory.d.ts.map +1 -0
  399. package/dist/factories/interfaces/IAbacusConnectionManager__factory.js +63 -0
  400. package/dist/factories/interfaces/IAbacusConnectionManager__factory.js.map +1 -0
  401. package/dist/factories/interfaces/IInbox__factory.d.ts +29 -0
  402. package/dist/factories/interfaces/IInbox__factory.d.ts.map +1 -0
  403. package/dist/factories/interfaces/IInbox__factory.js +90 -0
  404. package/dist/factories/interfaces/IInbox__factory.js.map +1 -0
  405. package/dist/factories/interfaces/IInterchainAccountRouter__factory.d.ts.map +1 -1
  406. package/dist/factories/interfaces/IInterchainAccountRouter__factory.js +31 -2
  407. package/dist/factories/interfaces/IInterchainAccountRouter__factory.js.map +1 -1
  408. package/dist/factories/interfaces/IInterchainGasPaymaster__factory.d.ts.map +1 -1
  409. package/dist/factories/interfaces/IInterchainGasPaymaster__factory.js +8 -3
  410. package/dist/factories/interfaces/IInterchainGasPaymaster__factory.js.map +1 -1
  411. package/dist/factories/interfaces/IInterchainQueryRouter__factory.d.ts.map +1 -1
  412. package/dist/factories/interfaces/IInterchainQueryRouter__factory.js +38 -4
  413. package/dist/factories/interfaces/IInterchainQueryRouter__factory.js.map +1 -1
  414. package/dist/factories/interfaces/IMailbox__factory.d.ts +1 -5
  415. package/dist/factories/interfaces/IMailbox__factory.d.ts.map +1 -1
  416. package/dist/factories/interfaces/IMailbox__factory.js +3 -81
  417. package/dist/factories/interfaces/IMailbox__factory.js.map +1 -1
  418. package/dist/factories/interfaces/IMultisigValidatorManager__factory.d.ts +19 -0
  419. package/dist/factories/interfaces/IMultisigValidatorManager__factory.d.ts.map +1 -0
  420. package/dist/factories/interfaces/IMultisigValidatorManager__factory.js +57 -0
  421. package/dist/factories/interfaces/IMultisigValidatorManager__factory.js.map +1 -0
  422. package/dist/factories/interfaces/IOutbox__factory.d.ts +23 -0
  423. package/dist/factories/interfaces/IOutbox__factory.d.ts.map +1 -0
  424. package/dist/factories/interfaces/IOutbox__factory.js +155 -0
  425. package/dist/factories/interfaces/IOutbox__factory.js.map +1 -0
  426. package/dist/factories/interfaces/index.d.ts +4 -0
  427. package/dist/factories/interfaces/index.d.ts.map +1 -1
  428. package/dist/factories/interfaces/index.js +9 -1
  429. package/dist/factories/interfaces/index.js.map +1 -1
  430. package/dist/index.d.ts +44 -0
  431. package/dist/index.d.ts.map +1 -1
  432. package/dist/index.js +46 -2
  433. package/dist/index.js.map +1 -1
  434. package/dist/interfaces/IAbacusConnectionManager.d.ts +59 -0
  435. package/dist/interfaces/IAbacusConnectionManager.d.ts.map +1 -0
  436. package/dist/interfaces/IAbacusConnectionManager.js +4 -0
  437. package/dist/interfaces/IAbacusConnectionManager.js.map +1 -0
  438. package/dist/interfaces/IInbox.d.ts +83 -0
  439. package/dist/interfaces/IInbox.d.ts.map +1 -0
  440. package/dist/interfaces/IInbox.js +4 -0
  441. package/dist/interfaces/IInbox.js.map +1 -0
  442. package/dist/interfaces/IInterchainAccountRouter.d.ts +24 -8
  443. package/dist/interfaces/IInterchainAccountRouter.d.ts.map +1 -1
  444. package/dist/interfaces/IInterchainGasPaymaster.d.ts +7 -7
  445. package/dist/interfaces/IInterchainGasPaymaster.d.ts.map +1 -1
  446. package/dist/interfaces/IInterchainQueryRouter.d.ts +19 -3
  447. package/dist/interfaces/IInterchainQueryRouter.d.ts.map +1 -1
  448. package/dist/interfaces/IMailbox.d.ts +10 -58
  449. package/dist/interfaces/IMailbox.d.ts.map +1 -1
  450. package/dist/interfaces/IMultisigValidatorManager.d.ts +59 -0
  451. package/dist/interfaces/IMultisigValidatorManager.d.ts.map +1 -0
  452. package/dist/interfaces/IMultisigValidatorManager.js +4 -0
  453. package/dist/interfaces/IMultisigValidatorManager.js.map +1 -0
  454. package/dist/interfaces/IOutbox.d.ts +148 -0
  455. package/dist/interfaces/IOutbox.d.ts.map +1 -0
  456. package/dist/interfaces/IOutbox.js +4 -0
  457. package/dist/interfaces/IOutbox.js.map +1 -0
  458. package/dist/interfaces/index.d.ts +4 -0
  459. package/dist/interfaces/index.d.ts.map +1 -1
  460. package/interfaces/IAbacusConnectionManager.sol +12 -0
  461. package/interfaces/IInbox.sol +16 -0
  462. package/interfaces/IInterchainAccountRouter.sol +7 -1
  463. package/interfaces/IInterchainGasPaymaster.sol +5 -3
  464. package/interfaces/IInterchainQueryRouter.sol +9 -2
  465. package/interfaces/IMailbox.sol +2 -15
  466. package/interfaces/IMultisigValidatorManager.sol +11 -0
  467. package/interfaces/IOutbox.sol +27 -0
  468. package/package.json +3 -4
  469. package/contracts/isms/MultisigIsm.sol +0 -340
  470. package/contracts/libs/MultisigIsmMetadata.sol +0 -187
  471. package/contracts/mock/MockMailbox.sol +0 -79
  472. package/contracts/test/TestHyperlaneConnectionClient.sol +0 -14
  473. package/contracts/test/TestIsm.sol +0 -20
  474. package/contracts/test/TestMultisigIsm.sol +0 -23
  475. package/dist/contracts/OwnableSpecifiesISM.d.ts.map +0 -1
  476. package/dist/contracts/OwnableSpecifiesISM.js.map +0 -1
  477. package/dist/factories/contracts/OwnableSpecifiesISM__factory.d.ts +0 -55
  478. package/dist/factories/contracts/OwnableSpecifiesISM__factory.d.ts.map +0 -1
  479. package/dist/factories/contracts/OwnableSpecifiesISM__factory.js +0 -145
  480. package/dist/factories/contracts/OwnableSpecifiesISM__factory.js.map +0 -1
  481. package/interfaces/IInterchainSecurityModule.sol +0 -16
  482. package/interfaces/IMultisigIsm.sol +0 -18
@@ -2,227 +2,92 @@
2
2
  pragma solidity >=0.8.0;
3
3
 
4
4
  // ============ Internal Imports ============
5
- import {Versioned} from "./upgrade/Versioned.sol";
6
- import {MerkleLib} from "./libs/Merkle.sol";
7
- import {Message} from "./libs/Message.sol";
8
- import {TypeCasts} from "./libs/TypeCasts.sol";
9
- import {IMessageRecipient} from "../interfaces/IMessageRecipient.sol";
10
- import {IInterchainSecurityModule, ISpecifiesInterchainSecurityModule} from "../interfaces/IInterchainSecurityModule.sol";
11
5
  import {IMailbox} from "../interfaces/IMailbox.sol";
12
-
13
6
  // ============ External Imports ============
14
- import {Address} from "@openzeppelin/contracts/utils/Address.sol";
15
7
  import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
16
- import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
17
-
18
- contract Mailbox is
19
- IMailbox,
20
- OwnableUpgradeable,
21
- ReentrancyGuardUpgradeable,
22
- Versioned
23
- {
24
- // ============ Libraries ============
25
-
26
- using MerkleLib for MerkleLib.Tree;
27
- using Message for bytes;
28
- using TypeCasts for bytes32;
29
- using TypeCasts for address;
8
+ import {Address} from "@openzeppelin/contracts/utils/Address.sol";
30
9
 
31
- // ============ Constants ============
10
+ /**
11
+ * @title Mailbox
12
+ * @author Celo Labs Inc.
13
+ * @notice Shared utilities between Outbox and Inbox.
14
+ */
15
+ abstract contract Mailbox is IMailbox, OwnableUpgradeable {
16
+ // ============ Immutable Variables ============
32
17
 
33
- // Maximum bytes per message = 2 KiB (somewhat arbitrarily set to begin)
34
- uint256 public constant MAX_MESSAGE_BODY_BYTES = 2 * 2**10;
35
18
  // Domain of chain on which the contract is deployed
36
- uint32 public immutable localDomain;
19
+ uint32 public immutable override localDomain;
37
20
 
38
- // ============ Public Storage ============
21
+ // ============ Public Variables ============
39
22
 
40
- // The default ISM, used if the recipient fails to specify one.
41
- IInterchainSecurityModule public defaultIsm;
42
- // An incremental merkle tree used to store outbound message IDs.
43
- MerkleLib.Tree public tree;
44
- // Mapping of message ID to whether or not that message has been delivered.
45
- mapping(bytes32 => bool) public delivered;
23
+ // Address of the validator manager contract.
24
+ address public validatorManager;
46
25
 
47
26
  // ============ Upgrade Gap ============
48
27
 
49
28
  // gap for upgrade safety
50
- uint256[47] private __GAP;
29
+ uint256[49] private __GAP;
51
30
 
52
31
  // ============ Events ============
53
32
 
54
33
  /**
55
- * @notice Emitted when the default ISM is updated
56
- * @param module The new default ISM
34
+ * @notice Emitted when the validator manager contract is changed
35
+ * @param validatorManager The address of the new validatorManager
57
36
  */
58
- event DefaultIsmSet(address indexed module);
37
+ event ValidatorManagerSet(address validatorManager);
59
38
 
60
- /**
61
- * @notice Emitted when a new message is dispatched via Hyperlane
62
- * @param messageId The unique message identifier
63
- * @param message Raw bytes of message
64
- */
65
- event Dispatch(bytes32 indexed messageId, bytes message);
39
+ // ============ Modifiers ============
66
40
 
67
41
  /**
68
- * @notice Emitted when a Hyperlane message is delivered
69
- * @param messageId The unique message identifier
42
+ * @notice Ensures that a function is called by the validator manager contract.
70
43
  */
71
- event Process(bytes32 indexed messageId);
44
+ modifier onlyValidatorManager() {
45
+ require(msg.sender == validatorManager, "!validatorManager");
46
+ _;
47
+ }
72
48
 
73
49
  // ============ Constructor ============
74
50
 
75
- // solhint-disable-next-line no-empty-blocks
76
51
  constructor(uint32 _localDomain) {
77
52
  localDomain = _localDomain;
78
53
  }
79
54
 
80
55
  // ============ Initializer ============
81
56
 
82
- function initialize(address _defaultIsm) external initializer {
83
- __ReentrancyGuard_init();
57
+ function __Mailbox_initialize(address _validatorManager)
58
+ internal
59
+ onlyInitializing
60
+ {
61
+ // initialize owner
84
62
  __Ownable_init();
85
- _setDefaultIsm(_defaultIsm);
63
+ _setValidatorManager(_validatorManager);
86
64
  }
87
65
 
88
66
  // ============ External Functions ============
89
67
 
90
68
  /**
91
- * @notice Sets the default ISM for the Mailbox.
92
- * @param _module The new default ISM. Must be a contract.
93
- */
94
- function setDefaultIsm(address _module) external onlyOwner {
95
- _setDefaultIsm(_module);
96
- }
97
-
98
- /**
99
- * @notice Dispatches a message to the destination domain & recipient.
100
- * @param _destinationDomain Domain of destination chain
101
- * @param _recipientAddress Address of recipient on destination chain as bytes32
102
- * @param _messageBody Raw bytes content of message body
103
- * @return The message ID inserted into the Mailbox's merkle tree
69
+ * @notice Set a new validator manager contract
70
+ * @dev Mailbox(es) will initially be initialized using a trusted validator manager contract;
71
+ * we will progressively decentralize by swapping the trusted contract with a new implementation
72
+ * that implements Validator bonding & slashing, and rules for Validator selection & rotation
73
+ * @param _validatorManager the new validator manager contract
104
74
  */
105
- function dispatch(
106
- uint32 _destinationDomain,
107
- bytes32 _recipientAddress,
108
- bytes calldata _messageBody
109
- ) external override returns (bytes32) {
110
- require(_messageBody.length <= MAX_MESSAGE_BODY_BYTES, "msg too long");
111
- // Format the message into packed bytes.
112
- bytes memory _message = Message.formatMessage(
113
- VERSION,
114
- count(),
115
- localDomain,
116
- msg.sender.addressToBytes32(),
117
- _destinationDomain,
118
- _recipientAddress,
119
- _messageBody
120
- );
121
-
122
- // Insert the message ID into the merkle tree.
123
- bytes32 _id = _message.id();
124
- tree.insert(_id);
125
- emit Dispatch(_id, _message);
126
- return _id;
127
- }
128
-
129
- /**
130
- * @notice Attempts to deliver `_message` to its recipient. Verifies
131
- * `_message` via the recipient's ISM using the provided `_metadata`.
132
- * @param _metadata Metadata used by the ISM to verify `_message`.
133
- * @param _message Formatted Hyperlane message (refer to Message.sol).
134
- */
135
- function process(bytes calldata _metadata, bytes calldata _message)
136
- external
137
- override
138
- nonReentrant
139
- {
140
- // Check that the message was intended for this mailbox.
141
- require(_message.version() == VERSION, "!version");
142
- require(_message.destination() == localDomain, "!destination");
143
-
144
- // Check that the message hasn't already been delivered.
145
- bytes32 _id = _message.id();
146
- require(delivered[_id] == false, "delivered");
147
- delivered[_id] = true;
148
-
149
- // Verify the message via the ISM.
150
- IInterchainSecurityModule _ism = _recipientIsm(
151
- ISpecifiesInterchainSecurityModule(_message.recipientAddress())
152
- );
153
- require(_ism.verify(_metadata, _message), "!module");
154
-
155
- // Deliver the message to the recipient.
156
- uint32 _origin = _message.origin();
157
- IMessageRecipient(_message.recipientAddress()).handle(
158
- _origin,
159
- _message.sender(),
160
- _message.body()
161
- );
162
- emit Process(_id);
163
- }
164
-
165
- // ============ Public Functions ============
166
-
167
- /**
168
- * @notice Calculates and returns tree's current root
169
- */
170
- function root() public view returns (bytes32) {
171
- return tree.root();
172
- }
173
-
174
- /**
175
- * @notice Returns the number of inserted leaves in the tree
176
- */
177
- function count() public view returns (uint32) {
178
- // count cannot exceed 2**TREE_DEPTH, see MerkleLib.sol
179
- return uint32(tree.count);
180
- }
181
-
182
- /**
183
- * @notice Returns a checkpoint representing the current merkle tree.
184
- * @return root The root of the Outbox's merkle tree.
185
- * @return index The index of the last element in the tree.
186
- */
187
- function latestCheckpoint() public view returns (bytes32, uint32) {
188
- return (root(), count() - 1);
75
+ function setValidatorManager(address _validatorManager) external onlyOwner {
76
+ _setValidatorManager(_validatorManager);
189
77
  }
190
78
 
191
79
  // ============ Internal Functions ============
192
80
 
193
81
  /**
194
- * @notice Sets the default ISM for the Mailbox.
195
- * @param _module The new default ISM. Must be a contract.
196
- */
197
- function _setDefaultIsm(address _module) internal {
198
- require(Address.isContract(_module), "!contract");
199
- defaultIsm = IInterchainSecurityModule(_module);
200
- emit DefaultIsmSet(_module);
201
- }
202
-
203
- /**
204
- * @notice Returns the ISM to use for the recipient, defaulting to the
205
- * default ISM if none is specified.
206
- * @param _recipient The message recipient whose ISM should be returned.
207
- * @return The ISM to use for `_recipient`.
82
+ * @notice Set the validator manager
83
+ * @param _validatorManager Address of the validator manager
208
84
  */
209
- function _recipientIsm(ISpecifiesInterchainSecurityModule _recipient)
210
- internal
211
- view
212
- returns (IInterchainSecurityModule)
213
- {
214
- // Use a default interchainSecurityModule if one is not specified by the
215
- // recipient.
216
- // This is useful for backwards compatibility and for convenience as
217
- // recipients are not mandated to specify an ISM.
218
- try _recipient.interchainSecurityModule() returns (
219
- IInterchainSecurityModule _val
220
- ) {
221
- // TODO: reconsider
222
- if (address(_val) != address(0)) {
223
- return _val;
224
- }
225
- } catch {}
226
- return defaultIsm;
85
+ function _setValidatorManager(address _validatorManager) internal {
86
+ require(
87
+ Address.isContract(_validatorManager),
88
+ "!contract validatorManager"
89
+ );
90
+ validatorManager = _validatorManager;
91
+ emit ValidatorManagerSet(_validatorManager);
227
92
  }
228
93
  }
@@ -0,0 +1,32 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.0;
3
+
4
+ // ============ Internal Imports ============
5
+ import {MerkleLib} from "./libs/Merkle.sol";
6
+
7
+ /**
8
+ * @title MerkleTreeManager
9
+ * @author Celo Labs Inc.
10
+ * @notice Contains a Merkle tree instance and
11
+ * exposes view functions for the tree.
12
+ */
13
+ contract MerkleTreeManager {
14
+ // ============ Libraries ============
15
+
16
+ using MerkleLib for MerkleLib.Tree;
17
+ MerkleLib.Tree public tree;
18
+
19
+ // ============ Upgrade Gap ============
20
+
21
+ // gap for upgrade safety
22
+ uint256[49] private __GAP;
23
+
24
+ // ============ Public Functions ============
25
+
26
+ /**
27
+ * @notice Calculates and returns tree's current root
28
+ */
29
+ function root() public view returns (bytes32) {
30
+ return tree.root();
31
+ }
32
+ }
@@ -0,0 +1,191 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.0;
3
+
4
+ // ============ Internal Imports ============
5
+ import {Versioned} from "./upgrade/Versioned.sol";
6
+ import {Mailbox} from "./Mailbox.sol";
7
+ import {MerkleLib} from "./libs/Merkle.sol";
8
+ import {Message} from "./libs/Message.sol";
9
+ import {TypeCasts} from "./libs/TypeCasts.sol";
10
+ import {MerkleTreeManager} from "./MerkleTreeManager.sol";
11
+ import {IOutbox} from "../interfaces/IOutbox.sol";
12
+
13
+ /**
14
+ * @title Outbox
15
+ * @author Celo Labs Inc.
16
+ * @notice Accepts messages to be dispatched to remote chains,
17
+ * constructs a Merkle tree of the messages,
18
+ * and accepts signatures from a bonded Validator
19
+ * which notarize the Merkle tree roots.
20
+ * Accepts submissions of fraudulent signatures
21
+ * by the Validator and slashes the Validator in this case.
22
+ */
23
+ contract Outbox is IOutbox, Versioned, MerkleTreeManager, Mailbox {
24
+ // ============ Libraries ============
25
+
26
+ using MerkleLib for MerkleLib.Tree;
27
+ using TypeCasts for address;
28
+
29
+ // ============ Constants ============
30
+
31
+ // Maximum bytes per message = 2 KiB
32
+ // (somewhat arbitrarily set to begin)
33
+ uint256 public constant MAX_MESSAGE_BODY_BYTES = 2 * 2**10;
34
+
35
+ // ============ Enums ============
36
+
37
+ // States:
38
+ // 0 - UnInitialized - before initialize function is called
39
+ // note: the contract is initialized at deploy time, so it should never be in this state
40
+ // 1 - Active - as long as the contract has not become fraudulent
41
+ // 2 - Failed - after a valid fraud proof has been submitted;
42
+ // contract will no longer accept updates or new messages
43
+ enum States {
44
+ UnInitialized,
45
+ Active,
46
+ Failed
47
+ }
48
+
49
+ // ============ Public Storage Variables ============
50
+
51
+ // Cached checkpoints, mapping root => leaf index.
52
+ // Cached checkpoints must have index > 0 as the presence of such
53
+ // a checkpoint cannot be distinguished from its absence.
54
+ mapping(bytes32 => uint256) public cachedCheckpoints;
55
+ // The latest cached root
56
+ bytes32 public latestCachedRoot;
57
+ // Current state of contract
58
+ States public state;
59
+
60
+ // ============ Upgrade Gap ============
61
+
62
+ // gap for upgrade safety
63
+ uint256[47] private __GAP;
64
+
65
+ // ============ Events ============
66
+
67
+ /**
68
+ * @notice Emitted when a checkpoint is cached.
69
+ * @param root Merkle root
70
+ * @param index Leaf index
71
+ */
72
+ event CheckpointCached(bytes32 indexed root, uint256 indexed index);
73
+
74
+ /**
75
+ * @notice Emitted when a new message is dispatched via Abacus
76
+ * @param leafIndex Index of message's leaf in merkle tree
77
+ * @param message Raw bytes of message
78
+ */
79
+ event Dispatch(uint256 indexed leafIndex, bytes message);
80
+
81
+ event Fail();
82
+
83
+ // ============ Constructor ============
84
+
85
+ constructor(uint32 _localDomain) Mailbox(_localDomain) {} // solhint-disable-line no-empty-blocks
86
+
87
+ // ============ Initializer ============
88
+
89
+ function initialize(address _validatorManager) external initializer {
90
+ __Mailbox_initialize(_validatorManager);
91
+ state = States.Active;
92
+ }
93
+
94
+ // ============ Modifiers ============
95
+
96
+ /**
97
+ * @notice Ensures that contract state != FAILED when the function is called
98
+ */
99
+ modifier notFailed() {
100
+ require(state != States.Failed, "failed state");
101
+ _;
102
+ }
103
+
104
+ // ============ External Functions ============
105
+
106
+ /**
107
+ * @notice Dispatch the message it to the destination domain & recipient
108
+ * @dev Format the message, insert its hash into Merkle tree,
109
+ * and emit `Dispatch` event with message information.
110
+ * @param _destinationDomain Domain of destination chain
111
+ * @param _recipientAddress Address of recipient on destination chain as bytes32
112
+ * @param _messageBody Raw bytes content of message
113
+ * @return The leaf index of the dispatched message's hash in the Merkle tree.
114
+ */
115
+ function dispatch(
116
+ uint32 _destinationDomain,
117
+ bytes32 _recipientAddress,
118
+ bytes calldata _messageBody
119
+ ) external override notFailed returns (uint256) {
120
+ require(_messageBody.length <= MAX_MESSAGE_BODY_BYTES, "msg too long");
121
+ // The leaf has not been inserted yet at this point
122
+ uint256 _leafIndex = count();
123
+ // format the message into packed bytes
124
+ bytes memory _message = Message.formatMessage(
125
+ localDomain,
126
+ msg.sender.addressToBytes32(),
127
+ _destinationDomain,
128
+ _recipientAddress,
129
+ _messageBody
130
+ );
131
+ // insert the hashed message into the Merkle tree
132
+ bytes32 _messageHash = keccak256(
133
+ abi.encodePacked(_message, _leafIndex)
134
+ );
135
+ tree.insert(_messageHash);
136
+ emit Dispatch(_leafIndex, _message);
137
+ return _leafIndex;
138
+ }
139
+
140
+ /**
141
+ * @notice Caches the current merkle root and index.
142
+ * @dev emits CheckpointCached event
143
+ */
144
+ function cacheCheckpoint() external override notFailed {
145
+ (bytes32 _root, uint256 _index) = latestCheckpoint();
146
+ require(_index > 0, "!index");
147
+ cachedCheckpoints[_root] = _index;
148
+ latestCachedRoot = _root;
149
+ emit CheckpointCached(_root, _index);
150
+ }
151
+
152
+ /**
153
+ * @notice Set contract state to FAILED.
154
+ * @dev Called by the validator manager when fraud is proven.
155
+ */
156
+ function fail() external override onlyValidatorManager {
157
+ // set contract to FAILED
158
+ state = States.Failed;
159
+ emit Fail();
160
+ }
161
+
162
+ /**
163
+ * @notice Returns the latest entry in the checkpoint cache.
164
+ * @return root Latest cached root
165
+ * @return index Latest cached index
166
+ */
167
+ function latestCachedCheckpoint()
168
+ external
169
+ view
170
+ returns (bytes32 root, uint256 index)
171
+ {
172
+ root = latestCachedRoot;
173
+ index = cachedCheckpoints[root];
174
+ }
175
+
176
+ /**
177
+ * @notice Returns the number of inserted leaves in the tree
178
+ */
179
+ function count() public view returns (uint256) {
180
+ return tree.count;
181
+ }
182
+
183
+ /**
184
+ * @notice Returns a checkpoint representing the current merkle tree.
185
+ * @return root The root of the Outbox's merkle tree.
186
+ * @return index The index of the last element in the tree.
187
+ */
188
+ function latestCheckpoint() public view returns (bytes32, uint256) {
189
+ return (root(), count() - 1);
190
+ }
191
+ }
@@ -2,12 +2,13 @@
2
2
  pragma solidity >=0.6.11;
3
3
 
4
4
  // ============ Internal Imports ============
5
- import {HyperlaneConnectionClient} from "./HyperlaneConnectionClient.sol";
5
+ import {AbacusConnectionClient} from "./AbacusConnectionClient.sol";
6
+ import {IAbacusConnectionManager} from "../interfaces/IAbacusConnectionManager.sol";
6
7
  import {IInterchainGasPaymaster} from "../interfaces/IInterchainGasPaymaster.sol";
7
8
  import {IMessageRecipient} from "../interfaces/IMessageRecipient.sol";
8
- import {IMailbox} from "../interfaces/IMailbox.sol";
9
+ import {IOutbox} from "../interfaces/IOutbox.sol";
9
10
 
10
- abstract contract Router is HyperlaneConnectionClient, IMessageRecipient {
11
+ abstract contract Router is AbacusConnectionClient, IMessageRecipient {
11
12
  string constant NO_ROUTER_ENROLLED_REVERT_MESSAGE =
12
13
  "No router enrolled for domain. Did you specify the right domain ID?";
13
14
 
@@ -40,16 +41,19 @@ abstract contract Router is HyperlaneConnectionClient, IMessageRecipient {
40
41
  }
41
42
 
42
43
  // ======== Initializer =========
43
- function __Router_initialize(address _mailbox) internal onlyInitializing {
44
- __HyperlaneConnectionClient_initialize(_mailbox);
44
+ function __Router_initialize(address _abacusConnectionManager)
45
+ internal
46
+ onlyInitializing
47
+ {
48
+ __AbacusConnectionClient_initialize(_abacusConnectionManager);
45
49
  }
46
50
 
47
51
  function __Router_initialize(
48
- address _mailbox,
52
+ address _abacusConnectionManager,
49
53
  address _interchainGasPaymaster
50
54
  ) internal onlyInitializing {
51
- __HyperlaneConnectionClient_initialize(
52
- _mailbox,
55
+ __AbacusConnectionClient_initialize(
56
+ _abacusConnectionManager,
53
57
  _interchainGasPaymaster
54
58
  );
55
59
  }
@@ -69,21 +73,6 @@ abstract contract Router is HyperlaneConnectionClient, IMessageRecipient {
69
73
  _enrollRemoteRouter(_domain, _router);
70
74
  }
71
75
 
72
- /**
73
- * @notice Batch version of `enrollRemoteRouter`
74
- * @param _domains The domaisn of the remote Application Routers
75
- * @param _routers The addresses of the remote Application Routers
76
- */
77
- function enrollRemoteRouters(
78
- uint32[] calldata _domains,
79
- bytes32[] calldata _routers
80
- ) external virtual onlyOwner {
81
- require(_domains.length == _routers.length, "!length");
82
- for (uint256 i = 0; i < _domains.length; i += 1) {
83
- _enrollRemoteRouter(_domains[i], _routers[i]);
84
- }
85
- }
86
-
87
76
  /**
88
77
  * @notice Handles an incoming message
89
78
  * @param _origin The origin domain
@@ -94,7 +83,7 @@ abstract contract Router is HyperlaneConnectionClient, IMessageRecipient {
94
83
  uint32 _origin,
95
84
  bytes32 _sender,
96
85
  bytes calldata _message
97
- ) external virtual override onlyMailbox onlyRemoteRouter(_origin, _sender) {
86
+ ) external virtual override onlyInbox onlyRemoteRouter(_origin, _sender) {
98
87
  // TODO: callbacks on success/failure
99
88
  _handle(_origin, _sender, _message);
100
89
  }
@@ -146,40 +135,60 @@ abstract contract Router is HyperlaneConnectionClient, IMessageRecipient {
146
135
  }
147
136
 
148
137
  /**
149
- * @notice Dispatches a message to an enrolled router via the local router's Mailbox
138
+ * @notice Dispatches a message to an enrolled router via the local router's Outbox.
139
+ * @notice Does not pay interchain gas.
140
+ * @dev Reverts if there is no enrolled router for _destinationDomain.
141
+ * @param _destinationDomain The domain of the chain to which to send the message.
142
+ * @param _msg The message to dispatch.
143
+ */
144
+ function _dispatch(uint32 _destinationDomain, bytes memory _msg)
145
+ internal
146
+ returns (uint256)
147
+ {
148
+ return _dispatch(_outbox(), _destinationDomain, _msg);
149
+ }
150
+
151
+ /**
152
+ * @notice Dispatches a message to an enrolled router via the local router's Outbox
150
153
  * and pays for it to be relayed to the destination.
151
154
  * @dev Reverts if there is no enrolled router for _destinationDomain.
152
155
  * @param _destinationDomain The domain of the chain to which to send the message.
153
- * @param _messageBody Raw bytes content of message.
156
+ * @param _msg The message to dispatch.
154
157
  * @param _gasPayment The amount of native tokens to pay for the message to be relayed.
155
158
  */
156
159
  function _dispatchWithGas(
157
160
  uint32 _destinationDomain,
158
- bytes memory _messageBody,
161
+ bytes memory _msg,
159
162
  uint256 _gasPayment
160
163
  ) internal {
161
- bytes32 _messageId = _dispatch(_destinationDomain, _messageBody);
164
+ IOutbox _outbox = _outbox();
165
+ uint256 _leafIndex = _dispatch(_outbox, _destinationDomain, _msg);
162
166
  if (_gasPayment > 0) {
163
167
  interchainGasPaymaster.payGasFor{value: _gasPayment}(
164
- _messageId,
168
+ address(_outbox),
169
+ _leafIndex,
165
170
  _destinationDomain
166
171
  );
167
172
  }
168
173
  }
169
174
 
175
+ // ============ Private functions ============
176
+
170
177
  /**
171
- * @notice Dispatches a message to an enrolled router via the provided Mailbox.
178
+ * @notice Dispatches a message to an enrolled router via the provided Outbox.
172
179
  * @dev Does not pay interchain gas.
173
180
  * @dev Reverts if there is no enrolled router for _destinationDomain.
181
+ * @param _outbox The outbox contract to dispatch the message through.
174
182
  * @param _destinationDomain The domain of the chain to which to send the message.
175
- * @param _messageBody Raw bytes content of message.
183
+ * @param _msg The message to dispatch.
176
184
  */
177
- function _dispatch(uint32 _destinationDomain, bytes memory _messageBody)
178
- internal
179
- returns (bytes32)
180
- {
185
+ function _dispatch(
186
+ IOutbox _outbox,
187
+ uint32 _destinationDomain,
188
+ bytes memory _msg
189
+ ) private returns (uint256) {
181
190
  // Ensure that destination chain has an enrolled router.
182
191
  bytes32 _router = _mustHaveRemoteRouter(_destinationDomain);
183
- return mailbox.dispatch(_destinationDomain, _router, _messageBody);
192
+ return _outbox.dispatch(_destinationDomain, _router, _msg);
184
193
  }
185
194
  }