@hyperlane-xyz/core 0.5.0-beta0

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 (536) hide show
  1. package/README.md +14 -0
  2. package/contracts/AbacusConnectionManager.sol +168 -0
  3. package/contracts/Inbox.sol +148 -0
  4. package/contracts/InterchainGasPaymaster.sol +67 -0
  5. package/contracts/Mailbox.sol +93 -0
  6. package/contracts/MerkleTreeManager.sol +32 -0
  7. package/contracts/Outbox.sol +191 -0
  8. package/contracts/libs/Merkle.sol +208 -0
  9. package/contracts/libs/Message.sol +122 -0
  10. package/contracts/libs/TypeCasts.sol +34 -0
  11. package/contracts/mock/MockInbox.sol +49 -0
  12. package/contracts/mock/MockOutbox.sol +26 -0
  13. package/contracts/test/MysteryMath.sol +21 -0
  14. package/contracts/test/MysteryMathV1.sol +22 -0
  15. package/contracts/test/MysteryMathV2.sol +22 -0
  16. package/contracts/test/TestInbox.sol +54 -0
  17. package/contracts/test/TestMailbox.sol +12 -0
  18. package/contracts/test/TestMerkle.sol +30 -0
  19. package/contracts/test/TestMessage.sol +64 -0
  20. package/contracts/test/TestMultisigValidatorManager.sol +26 -0
  21. package/contracts/test/TestOutbox.sol +46 -0
  22. package/contracts/test/TestRecipient.sol +18 -0
  23. package/contracts/test/TestSendReceiver.sol +65 -0
  24. package/contracts/test/TestValidatorManager.sol +21 -0
  25. package/contracts/test/bad-recipient/BadRecipient1.sol +16 -0
  26. package/contracts/test/bad-recipient/BadRecipient2.sol +6 -0
  27. package/contracts/test/bad-recipient/BadRecipient3.sol +17 -0
  28. package/contracts/test/bad-recipient/BadRecipient5.sol +14 -0
  29. package/contracts/test/bad-recipient/BadRecipient6.sol +14 -0
  30. package/contracts/upgrade/UpgradeBeacon.sol +98 -0
  31. package/contracts/upgrade/UpgradeBeaconController.sol +48 -0
  32. package/contracts/upgrade/UpgradeBeaconProxy.sol +176 -0
  33. package/contracts/upgrade/Versioned.sol +10 -0
  34. package/contracts/validator-manager/InboxValidatorManager.sol +58 -0
  35. package/contracts/validator-manager/MultisigValidatorManager.sol +271 -0
  36. package/contracts/validator-manager/OutboxValidatorManager.sol +244 -0
  37. package/dist/@openzeppelin/contracts/access/Ownable.d.ts +90 -0
  38. package/dist/@openzeppelin/contracts/access/Ownable.d.ts.map +1 -0
  39. package/dist/@openzeppelin/contracts/access/Ownable.js +4 -0
  40. package/dist/@openzeppelin/contracts/access/Ownable.js.map +1 -0
  41. package/dist/@openzeppelin/contracts/access/index.d.ts +2 -0
  42. package/dist/@openzeppelin/contracts/access/index.d.ts.map +1 -0
  43. package/dist/@openzeppelin/contracts/access/index.js +3 -0
  44. package/dist/@openzeppelin/contracts/access/index.js.map +1 -0
  45. package/dist/@openzeppelin/contracts/index.d.ts +3 -0
  46. package/dist/@openzeppelin/contracts/index.d.ts.map +1 -0
  47. package/dist/@openzeppelin/contracts/index.js +4 -0
  48. package/dist/@openzeppelin/contracts/index.js.map +1 -0
  49. package/dist/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.d.ts +99 -0
  50. package/dist/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.d.ts.map +1 -0
  51. package/dist/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.js +4 -0
  52. package/dist/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.js.map +1 -0
  53. package/dist/@openzeppelin/contracts-upgradeable/access/index.d.ts +2 -0
  54. package/dist/@openzeppelin/contracts-upgradeable/access/index.d.ts.map +1 -0
  55. package/dist/@openzeppelin/contracts-upgradeable/access/index.js +3 -0
  56. package/dist/@openzeppelin/contracts-upgradeable/access/index.js.map +1 -0
  57. package/dist/@openzeppelin/contracts-upgradeable/index.d.ts +9 -0
  58. package/dist/@openzeppelin/contracts-upgradeable/index.d.ts.map +1 -0
  59. package/dist/@openzeppelin/contracts-upgradeable/index.js +4 -0
  60. package/dist/@openzeppelin/contracts-upgradeable/index.js.map +1 -0
  61. package/dist/@openzeppelin/contracts-upgradeable/proxy/index.d.ts +3 -0
  62. package/dist/@openzeppelin/contracts-upgradeable/proxy/index.d.ts.map +1 -0
  63. package/dist/@openzeppelin/contracts-upgradeable/proxy/index.js +4 -0
  64. package/dist/@openzeppelin/contracts-upgradeable/proxy/index.js.map +1 -0
  65. package/dist/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.d.ts +40 -0
  66. package/dist/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.d.ts.map +1 -0
  67. package/dist/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.js +4 -0
  68. package/dist/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.js.map +1 -0
  69. package/dist/@openzeppelin/contracts-upgradeable/proxy/utils/index.d.ts +2 -0
  70. package/dist/@openzeppelin/contracts-upgradeable/proxy/utils/index.d.ts.map +1 -0
  71. package/dist/@openzeppelin/contracts-upgradeable/proxy/utils/index.js +3 -0
  72. package/dist/@openzeppelin/contracts-upgradeable/proxy/utils/index.js.map +1 -0
  73. package/dist/@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.d.ts +40 -0
  74. package/dist/@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.d.ts.map +1 -0
  75. package/dist/@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.js +4 -0
  76. package/dist/@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.js.map +1 -0
  77. package/dist/@openzeppelin/contracts-upgradeable/security/index.d.ts +2 -0
  78. package/dist/@openzeppelin/contracts-upgradeable/security/index.d.ts.map +1 -0
  79. package/dist/@openzeppelin/contracts-upgradeable/security/index.js +3 -0
  80. package/dist/@openzeppelin/contracts-upgradeable/security/index.js.map +1 -0
  81. package/dist/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.d.ts +40 -0
  82. package/dist/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.d.ts.map +1 -0
  83. package/dist/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.js +4 -0
  84. package/dist/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.js.map +1 -0
  85. package/dist/@openzeppelin/contracts-upgradeable/utils/index.d.ts +2 -0
  86. package/dist/@openzeppelin/contracts-upgradeable/utils/index.d.ts.map +1 -0
  87. package/dist/@openzeppelin/contracts-upgradeable/utils/index.js +3 -0
  88. package/dist/@openzeppelin/contracts-upgradeable/utils/index.js.map +1 -0
  89. package/dist/@openzeppelin/index.d.ts +5 -0
  90. package/dist/@openzeppelin/index.d.ts.map +1 -0
  91. package/dist/@openzeppelin/index.js +4 -0
  92. package/dist/@openzeppelin/index.js.map +1 -0
  93. package/dist/common.d.ts +22 -0
  94. package/dist/common.d.ts.map +1 -0
  95. package/dist/common.js +4 -0
  96. package/dist/common.js.map +1 -0
  97. package/dist/contracts/AbacusConnectionManager.d.ts +221 -0
  98. package/dist/contracts/AbacusConnectionManager.d.ts.map +1 -0
  99. package/dist/contracts/AbacusConnectionManager.js +4 -0
  100. package/dist/contracts/AbacusConnectionManager.js.map +1 -0
  101. package/dist/contracts/Inbox.d.ts +207 -0
  102. package/dist/contracts/Inbox.d.ts.map +1 -0
  103. package/dist/contracts/Inbox.js +4 -0
  104. package/dist/contracts/Inbox.js.map +1 -0
  105. package/dist/contracts/InterchainGasPaymaster.d.ts +162 -0
  106. package/dist/contracts/InterchainGasPaymaster.d.ts.map +1 -0
  107. package/dist/contracts/InterchainGasPaymaster.js +4 -0
  108. package/dist/contracts/InterchainGasPaymaster.js.map +1 -0
  109. package/dist/contracts/Mailbox.d.ts +142 -0
  110. package/dist/contracts/Mailbox.d.ts.map +1 -0
  111. package/dist/contracts/Mailbox.js +4 -0
  112. package/dist/contracts/Mailbox.js.map +1 -0
  113. package/dist/contracts/MerkleTreeManager.d.ts +53 -0
  114. package/dist/contracts/MerkleTreeManager.d.ts.map +1 -0
  115. package/dist/contracts/MerkleTreeManager.js +4 -0
  116. package/dist/contracts/MerkleTreeManager.js.map +1 -0
  117. package/dist/contracts/Outbox.d.ts +331 -0
  118. package/dist/contracts/Outbox.d.ts.map +1 -0
  119. package/dist/contracts/Outbox.js +4 -0
  120. package/dist/contracts/Outbox.js.map +1 -0
  121. package/dist/contracts/index.d.ts +15 -0
  122. package/dist/contracts/index.d.ts.map +1 -0
  123. package/dist/contracts/index.js +4 -0
  124. package/dist/contracts/index.js.map +1 -0
  125. package/dist/contracts/mock/MockInbox.d.ts +67 -0
  126. package/dist/contracts/mock/MockInbox.d.ts.map +1 -0
  127. package/dist/contracts/mock/MockInbox.js +4 -0
  128. package/dist/contracts/mock/MockInbox.js.map +1 -0
  129. package/dist/contracts/mock/MockOutbox.d.ts +51 -0
  130. package/dist/contracts/mock/MockOutbox.d.ts.map +1 -0
  131. package/dist/contracts/mock/MockOutbox.js +4 -0
  132. package/dist/contracts/mock/MockOutbox.js.map +1 -0
  133. package/dist/contracts/mock/index.d.ts +3 -0
  134. package/dist/contracts/mock/index.d.ts.map +1 -0
  135. package/dist/contracts/mock/index.js +3 -0
  136. package/dist/contracts/mock/index.js.map +1 -0
  137. package/dist/contracts/test/MysteryMath.d.ts +77 -0
  138. package/dist/contracts/test/MysteryMath.d.ts.map +1 -0
  139. package/dist/contracts/test/MysteryMath.js +4 -0
  140. package/dist/contracts/test/MysteryMath.js.map +1 -0
  141. package/dist/contracts/test/MysteryMathV1.d.ts +85 -0
  142. package/dist/contracts/test/MysteryMathV1.d.ts.map +1 -0
  143. package/dist/contracts/test/MysteryMathV1.js +4 -0
  144. package/dist/contracts/test/MysteryMathV1.js.map +1 -0
  145. package/dist/contracts/test/MysteryMathV2.d.ts +85 -0
  146. package/dist/contracts/test/MysteryMathV2.d.ts.map +1 -0
  147. package/dist/contracts/test/MysteryMathV2.js +4 -0
  148. package/dist/contracts/test/MysteryMathV2.js.map +1 -0
  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 +158 -0
  154. package/dist/contracts/test/TestMailbox.d.ts.map +1 -0
  155. package/dist/contracts/test/TestMailbox.js +4 -0
  156. package/dist/contracts/test/TestMailbox.js.map +1 -0
  157. package/dist/contracts/test/TestMerkle.d.ts +87 -0
  158. package/dist/contracts/test/TestMerkle.d.ts.map +1 -0
  159. package/dist/contracts/test/TestMerkle.js +4 -0
  160. package/dist/contracts/test/TestMerkle.js.map +1 -0
  161. package/dist/contracts/test/TestMessage.d.ts +103 -0
  162. package/dist/contracts/test/TestMessage.d.ts.map +1 -0
  163. package/dist/contracts/test/TestMessage.js +4 -0
  164. package/dist/contracts/test/TestMessage.js.map +1 -0
  165. package/dist/contracts/test/TestMultisigValidatorManager.d.ts +247 -0
  166. package/dist/contracts/test/TestMultisigValidatorManager.d.ts.map +1 -0
  167. package/dist/contracts/test/TestMultisigValidatorManager.js +4 -0
  168. package/dist/contracts/test/TestMultisigValidatorManager.js.map +1 -0
  169. package/dist/contracts/test/TestOutbox.d.ts +371 -0
  170. package/dist/contracts/test/TestOutbox.d.ts.map +1 -0
  171. package/dist/contracts/test/TestOutbox.js +4 -0
  172. package/dist/contracts/test/TestOutbox.js.map +1 -0
  173. package/dist/contracts/test/TestRecipient.d.ts +67 -0
  174. package/dist/contracts/test/TestRecipient.d.ts.map +1 -0
  175. package/dist/contracts/test/TestRecipient.js +4 -0
  176. package/dist/contracts/test/TestRecipient.js.map +1 -0
  177. package/dist/contracts/test/TestSendReceiver.d.ts +78 -0
  178. package/dist/contracts/test/TestSendReceiver.d.ts.map +1 -0
  179. package/dist/contracts/test/TestSendReceiver.js +4 -0
  180. package/dist/contracts/test/TestSendReceiver.js.map +1 -0
  181. package/dist/contracts/test/TestValidatorManager.d.ts +58 -0
  182. package/dist/contracts/test/TestValidatorManager.d.ts.map +1 -0
  183. package/dist/contracts/test/TestValidatorManager.js +4 -0
  184. package/dist/contracts/test/TestValidatorManager.js.map +1 -0
  185. package/dist/contracts/test/bad-recipient/BadRecipient1.d.ts +43 -0
  186. package/dist/contracts/test/bad-recipient/BadRecipient1.d.ts.map +1 -0
  187. package/dist/contracts/test/bad-recipient/BadRecipient1.js +4 -0
  188. package/dist/contracts/test/bad-recipient/BadRecipient1.js.map +1 -0
  189. package/dist/contracts/test/bad-recipient/BadRecipient2.d.ts +43 -0
  190. package/dist/contracts/test/bad-recipient/BadRecipient2.d.ts.map +1 -0
  191. package/dist/contracts/test/bad-recipient/BadRecipient2.js +4 -0
  192. package/dist/contracts/test/bad-recipient/BadRecipient2.js.map +1 -0
  193. package/dist/contracts/test/bad-recipient/BadRecipient3.d.ts +43 -0
  194. package/dist/contracts/test/bad-recipient/BadRecipient3.d.ts.map +1 -0
  195. package/dist/contracts/test/bad-recipient/BadRecipient3.js +4 -0
  196. package/dist/contracts/test/bad-recipient/BadRecipient3.js.map +1 -0
  197. package/dist/contracts/test/bad-recipient/BadRecipient5.d.ts +43 -0
  198. package/dist/contracts/test/bad-recipient/BadRecipient5.d.ts.map +1 -0
  199. package/dist/contracts/test/bad-recipient/BadRecipient5.js +4 -0
  200. package/dist/contracts/test/bad-recipient/BadRecipient5.js.map +1 -0
  201. package/dist/contracts/test/bad-recipient/BadRecipient6.d.ts +43 -0
  202. package/dist/contracts/test/bad-recipient/BadRecipient6.d.ts.map +1 -0
  203. package/dist/contracts/test/bad-recipient/BadRecipient6.js +4 -0
  204. package/dist/contracts/test/bad-recipient/BadRecipient6.js.map +1 -0
  205. package/dist/contracts/test/bad-recipient/index.d.ts +6 -0
  206. package/dist/contracts/test/bad-recipient/index.d.ts.map +1 -0
  207. package/dist/contracts/test/bad-recipient/index.js +3 -0
  208. package/dist/contracts/test/bad-recipient/index.js.map +1 -0
  209. package/dist/contracts/test/index.d.ts +15 -0
  210. package/dist/contracts/test/index.d.ts.map +1 -0
  211. package/dist/contracts/test/index.js +4 -0
  212. package/dist/contracts/test/index.js.map +1 -0
  213. package/dist/contracts/upgrade/UpgradeBeacon.d.ts +40 -0
  214. package/dist/contracts/upgrade/UpgradeBeacon.d.ts.map +1 -0
  215. package/dist/contracts/upgrade/UpgradeBeacon.js +4 -0
  216. package/dist/contracts/upgrade/UpgradeBeacon.js.map +1 -0
  217. package/dist/contracts/upgrade/UpgradeBeaconController.d.ts +119 -0
  218. package/dist/contracts/upgrade/UpgradeBeaconController.d.ts.map +1 -0
  219. package/dist/contracts/upgrade/UpgradeBeaconController.js +4 -0
  220. package/dist/contracts/upgrade/UpgradeBeaconController.js.map +1 -0
  221. package/dist/contracts/upgrade/UpgradeBeaconProxy.d.ts +28 -0
  222. package/dist/contracts/upgrade/UpgradeBeaconProxy.d.ts.map +1 -0
  223. package/dist/contracts/upgrade/UpgradeBeaconProxy.js +4 -0
  224. package/dist/contracts/upgrade/UpgradeBeaconProxy.js.map +1 -0
  225. package/dist/contracts/upgrade/Versioned.d.ts +43 -0
  226. package/dist/contracts/upgrade/Versioned.d.ts.map +1 -0
  227. package/dist/contracts/upgrade/Versioned.js +4 -0
  228. package/dist/contracts/upgrade/Versioned.js.map +1 -0
  229. package/dist/contracts/upgrade/index.d.ts +5 -0
  230. package/dist/contracts/upgrade/index.d.ts.map +1 -0
  231. package/dist/contracts/upgrade/index.js +3 -0
  232. package/dist/contracts/upgrade/index.js.map +1 -0
  233. package/dist/contracts/validator-manager/InboxValidatorManager.d.ts +263 -0
  234. package/dist/contracts/validator-manager/InboxValidatorManager.d.ts.map +1 -0
  235. package/dist/contracts/validator-manager/InboxValidatorManager.js +4 -0
  236. package/dist/contracts/validator-manager/InboxValidatorManager.js.map +1 -0
  237. package/dist/contracts/validator-manager/MultisigValidatorManager.d.ts +239 -0
  238. package/dist/contracts/validator-manager/MultisigValidatorManager.d.ts.map +1 -0
  239. package/dist/contracts/validator-manager/MultisigValidatorManager.js +4 -0
  240. package/dist/contracts/validator-manager/MultisigValidatorManager.js.map +1 -0
  241. package/dist/contracts/validator-manager/OutboxValidatorManager.d.ts +335 -0
  242. package/dist/contracts/validator-manager/OutboxValidatorManager.d.ts.map +1 -0
  243. package/dist/contracts/validator-manager/OutboxValidatorManager.js +4 -0
  244. package/dist/contracts/validator-manager/OutboxValidatorManager.js.map +1 -0
  245. package/dist/contracts/validator-manager/index.d.ts +4 -0
  246. package/dist/contracts/validator-manager/index.d.ts.map +1 -0
  247. package/dist/contracts/validator-manager/index.js +3 -0
  248. package/dist/contracts/validator-manager/index.js.map +1 -0
  249. package/dist/factories/@openzeppelin/contracts/access/Ownable__factory.d.ts +43 -0
  250. package/dist/factories/@openzeppelin/contracts/access/Ownable__factory.d.ts.map +1 -0
  251. package/dist/factories/@openzeppelin/contracts/access/Ownable__factory.js +70 -0
  252. package/dist/factories/@openzeppelin/contracts/access/Ownable__factory.js.map +1 -0
  253. package/dist/factories/@openzeppelin/contracts/access/index.d.ts +2 -0
  254. package/dist/factories/@openzeppelin/contracts/access/index.d.ts.map +1 -0
  255. package/dist/factories/@openzeppelin/contracts/access/index.js +9 -0
  256. package/dist/factories/@openzeppelin/contracts/access/index.js.map +1 -0
  257. package/dist/factories/@openzeppelin/contracts/index.d.ts +2 -0
  258. package/dist/factories/@openzeppelin/contracts/index.d.ts.map +1 -0
  259. package/dist/factories/@openzeppelin/contracts/index.js +31 -0
  260. package/dist/factories/@openzeppelin/contracts/index.js.map +1 -0
  261. package/dist/factories/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable__factory.d.ts +43 -0
  262. package/dist/factories/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable__factory.d.ts.map +1 -0
  263. package/dist/factories/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable__factory.js +83 -0
  264. package/dist/factories/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable__factory.js.map +1 -0
  265. package/dist/factories/@openzeppelin/contracts-upgradeable/access/index.d.ts +2 -0
  266. package/dist/factories/@openzeppelin/contracts-upgradeable/access/index.d.ts.map +1 -0
  267. package/dist/factories/@openzeppelin/contracts-upgradeable/access/index.js +9 -0
  268. package/dist/factories/@openzeppelin/contracts-upgradeable/access/index.js.map +1 -0
  269. package/dist/factories/@openzeppelin/contracts-upgradeable/index.d.ts +5 -0
  270. package/dist/factories/@openzeppelin/contracts-upgradeable/index.d.ts.map +1 -0
  271. package/dist/factories/@openzeppelin/contracts-upgradeable/index.js +34 -0
  272. package/dist/factories/@openzeppelin/contracts-upgradeable/index.js.map +1 -0
  273. package/dist/factories/@openzeppelin/contracts-upgradeable/proxy/index.d.ts +2 -0
  274. package/dist/factories/@openzeppelin/contracts-upgradeable/proxy/index.d.ts.map +1 -0
  275. package/dist/factories/@openzeppelin/contracts-upgradeable/proxy/index.js +31 -0
  276. package/dist/factories/@openzeppelin/contracts-upgradeable/proxy/index.js.map +1 -0
  277. package/dist/factories/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable__factory.d.ts +19 -0
  278. package/dist/factories/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable__factory.d.ts.map +1 -0
  279. package/dist/factories/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable__factory.js +31 -0
  280. package/dist/factories/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable__factory.js.map +1 -0
  281. package/dist/factories/@openzeppelin/contracts-upgradeable/proxy/utils/index.d.ts +2 -0
  282. package/dist/factories/@openzeppelin/contracts-upgradeable/proxy/utils/index.d.ts.map +1 -0
  283. package/dist/factories/@openzeppelin/contracts-upgradeable/proxy/utils/index.js +9 -0
  284. package/dist/factories/@openzeppelin/contracts-upgradeable/proxy/utils/index.js.map +1 -0
  285. package/dist/factories/@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable__factory.d.ts +19 -0
  286. package/dist/factories/@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable__factory.d.ts.map +1 -0
  287. package/dist/factories/@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable__factory.js +31 -0
  288. package/dist/factories/@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable__factory.js.map +1 -0
  289. package/dist/factories/@openzeppelin/contracts-upgradeable/security/index.d.ts +2 -0
  290. package/dist/factories/@openzeppelin/contracts-upgradeable/security/index.d.ts.map +1 -0
  291. package/dist/factories/@openzeppelin/contracts-upgradeable/security/index.js +9 -0
  292. package/dist/factories/@openzeppelin/contracts-upgradeable/security/index.js.map +1 -0
  293. package/dist/factories/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable__factory.d.ts +19 -0
  294. package/dist/factories/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable__factory.d.ts.map +1 -0
  295. package/dist/factories/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable__factory.js +31 -0
  296. package/dist/factories/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable__factory.js.map +1 -0
  297. package/dist/factories/@openzeppelin/contracts-upgradeable/utils/index.d.ts +2 -0
  298. package/dist/factories/@openzeppelin/contracts-upgradeable/utils/index.d.ts.map +1 -0
  299. package/dist/factories/@openzeppelin/contracts-upgradeable/utils/index.js +9 -0
  300. package/dist/factories/@openzeppelin/contracts-upgradeable/utils/index.js.map +1 -0
  301. package/dist/factories/@openzeppelin/index.d.ts +3 -0
  302. package/dist/factories/@openzeppelin/index.d.ts.map +1 -0
  303. package/dist/factories/@openzeppelin/index.js +32 -0
  304. package/dist/factories/@openzeppelin/index.js.map +1 -0
  305. package/dist/factories/contracts/AbacusConnectionManager__factory.d.ts +55 -0
  306. package/dist/factories/contracts/AbacusConnectionManager__factory.d.ts.map +1 -0
  307. package/dist/factories/contracts/AbacusConnectionManager__factory.js +295 -0
  308. package/dist/factories/contracts/AbacusConnectionManager__factory.js.map +1 -0
  309. package/dist/factories/contracts/Inbox__factory.d.ts +59 -0
  310. package/dist/factories/contracts/Inbox__factory.d.ts.map +1 -0
  311. package/dist/factories/contracts/Inbox__factory.js +278 -0
  312. package/dist/factories/contracts/Inbox__factory.js.map +1 -0
  313. package/dist/factories/contracts/InterchainGasPaymaster__factory.d.ts +62 -0
  314. package/dist/factories/contracts/InterchainGasPaymaster__factory.d.ts.map +1 -0
  315. package/dist/factories/contracts/InterchainGasPaymaster__factory.js +173 -0
  316. package/dist/factories/contracts/InterchainGasPaymaster__factory.js.map +1 -0
  317. package/dist/factories/contracts/Mailbox__factory.d.ts +43 -0
  318. package/dist/factories/contracts/Mailbox__factory.d.ts.map +1 -0
  319. package/dist/factories/contracts/Mailbox__factory.js +135 -0
  320. package/dist/factories/contracts/Mailbox__factory.js.map +1 -0
  321. package/dist/factories/contracts/MerkleTreeManager__factory.d.ts +31 -0
  322. package/dist/factories/contracts/MerkleTreeManager__factory.d.ts.map +1 -0
  323. package/dist/factories/contracts/MerkleTreeManager__factory.js +67 -0
  324. package/dist/factories/contracts/MerkleTreeManager__factory.js.map +1 -0
  325. package/dist/factories/contracts/Outbox__factory.d.ts +59 -0
  326. package/dist/factories/contracts/Outbox__factory.d.ts.map +1 -0
  327. package/dist/factories/contracts/Outbox__factory.js +415 -0
  328. package/dist/factories/contracts/Outbox__factory.js.map +1 -0
  329. package/dist/factories/contracts/index.d.ts +11 -0
  330. package/dist/factories/contracts/index.d.ts.map +1 -0
  331. package/dist/factories/contracts/index.js +46 -0
  332. package/dist/factories/contracts/index.js.map +1 -0
  333. package/dist/factories/contracts/mock/MockInbox__factory.d.ts +31 -0
  334. package/dist/factories/contracts/mock/MockInbox__factory.d.ts.map +1 -0
  335. package/dist/factories/contracts/mock/MockInbox__factory.js +71 -0
  336. package/dist/factories/contracts/mock/MockInbox__factory.js.map +1 -0
  337. package/dist/factories/contracts/mock/MockOutbox__factory.d.ts +41 -0
  338. package/dist/factories/contracts/mock/MockOutbox__factory.d.ts.map +1 -0
  339. package/dist/factories/contracts/mock/MockOutbox__factory.js +75 -0
  340. package/dist/factories/contracts/mock/MockOutbox__factory.js.map +1 -0
  341. package/dist/factories/contracts/mock/index.d.ts +3 -0
  342. package/dist/factories/contracts/mock/index.d.ts.map +1 -0
  343. package/dist/factories/contracts/mock/index.js +11 -0
  344. package/dist/factories/contracts/mock/index.js.map +1 -0
  345. package/dist/factories/contracts/test/MysteryMathV1__factory.d.ts +41 -0
  346. package/dist/factories/contracts/test/MysteryMathV1__factory.d.ts.map +1 -0
  347. package/dist/factories/contracts/test/MysteryMathV1__factory.js +122 -0
  348. package/dist/factories/contracts/test/MysteryMathV1__factory.js.map +1 -0
  349. package/dist/factories/contracts/test/MysteryMathV2__factory.d.ts +41 -0
  350. package/dist/factories/contracts/test/MysteryMathV2__factory.d.ts.map +1 -0
  351. package/dist/factories/contracts/test/MysteryMathV2__factory.js +122 -0
  352. package/dist/factories/contracts/test/MysteryMathV2__factory.js.map +1 -0
  353. package/dist/factories/contracts/test/MysteryMath__factory.d.ts +23 -0
  354. package/dist/factories/contracts/test/MysteryMath__factory.d.ts.map +1 -0
  355. package/dist/factories/contracts/test/MysteryMath__factory.js +81 -0
  356. package/dist/factories/contracts/test/MysteryMath__factory.js.map +1 -0
  357. package/dist/factories/contracts/test/TestInbox__factory.d.ts +59 -0
  358. package/dist/factories/contracts/test/TestInbox__factory.d.ts.map +1 -0
  359. package/dist/factories/contracts/test/TestInbox__factory.js +371 -0
  360. package/dist/factories/contracts/test/TestInbox__factory.js.map +1 -0
  361. package/dist/factories/contracts/test/TestMailbox__factory.d.ts +66 -0
  362. package/dist/factories/contracts/test/TestMailbox__factory.d.ts.map +1 -0
  363. package/dist/factories/contracts/test/TestMailbox__factory.js +182 -0
  364. package/dist/factories/contracts/test/TestMailbox__factory.js.map +1 -0
  365. package/dist/factories/contracts/test/TestMerkle__factory.d.ts +41 -0
  366. package/dist/factories/contracts/test/TestMerkle__factory.d.ts.map +1 -0
  367. package/dist/factories/contracts/test/TestMerkle__factory.js +127 -0
  368. package/dist/factories/contracts/test/TestMerkle__factory.js.map +1 -0
  369. package/dist/factories/contracts/test/TestMessage__factory.d.ts +35 -0
  370. package/dist/factories/contracts/test/TestMessage__factory.d.ts.map +1 -0
  371. package/dist/factories/contracts/test/TestMessage__factory.js +179 -0
  372. package/dist/factories/contracts/test/TestMessage__factory.js.map +1 -0
  373. package/dist/factories/contracts/test/TestMultisigValidatorManager__factory.d.ts +59 -0
  374. package/dist/factories/contracts/test/TestMultisigValidatorManager__factory.d.ts.map +1 -0
  375. package/dist/factories/contracts/test/TestMultisigValidatorManager__factory.js +349 -0
  376. package/dist/factories/contracts/test/TestMultisigValidatorManager__factory.js.map +1 -0
  377. package/dist/factories/contracts/test/TestOutbox__factory.d.ts +59 -0
  378. package/dist/factories/contracts/test/TestOutbox__factory.d.ts.map +1 -0
  379. package/dist/factories/contracts/test/TestOutbox__factory.js +483 -0
  380. package/dist/factories/contracts/test/TestOutbox__factory.js.map +1 -0
  381. package/dist/factories/contracts/test/TestRecipient__factory.d.ts +41 -0
  382. package/dist/factories/contracts/test/TestRecipient__factory.d.ts.map +1 -0
  383. package/dist/factories/contracts/test/TestRecipient__factory.js +90 -0
  384. package/dist/factories/contracts/test/TestRecipient__factory.js.map +1 -0
  385. package/dist/factories/contracts/test/TestSendReceiver__factory.d.ts +44 -0
  386. package/dist/factories/contracts/test/TestSendReceiver__factory.d.ts.map +1 -0
  387. package/dist/factories/contracts/test/TestSendReceiver__factory.js +105 -0
  388. package/dist/factories/contracts/test/TestSendReceiver__factory.js.map +1 -0
  389. package/dist/factories/contracts/test/TestValidatorManager__factory.d.ts +31 -0
  390. package/dist/factories/contracts/test/TestValidatorManager__factory.d.ts.map +1 -0
  391. package/dist/factories/contracts/test/TestValidatorManager__factory.js +79 -0
  392. package/dist/factories/contracts/test/TestValidatorManager__factory.js.map +1 -0
  393. package/dist/factories/contracts/test/bad-recipient/BadRecipient1__factory.d.ts +31 -0
  394. package/dist/factories/contracts/test/bad-recipient/BadRecipient1__factory.d.ts.map +1 -0
  395. package/dist/factories/contracts/test/bad-recipient/BadRecipient1__factory.js +64 -0
  396. package/dist/factories/contracts/test/bad-recipient/BadRecipient1__factory.js.map +1 -0
  397. package/dist/factories/contracts/test/bad-recipient/BadRecipient2__factory.d.ts +31 -0
  398. package/dist/factories/contracts/test/bad-recipient/BadRecipient2__factory.d.ts.map +1 -0
  399. package/dist/factories/contracts/test/bad-recipient/BadRecipient2__factory.js +59 -0
  400. package/dist/factories/contracts/test/bad-recipient/BadRecipient2__factory.js.map +1 -0
  401. package/dist/factories/contracts/test/bad-recipient/BadRecipient3__factory.d.ts +31 -0
  402. package/dist/factories/contracts/test/bad-recipient/BadRecipient3__factory.d.ts.map +1 -0
  403. package/dist/factories/contracts/test/bad-recipient/BadRecipient3__factory.js +64 -0
  404. package/dist/factories/contracts/test/bad-recipient/BadRecipient3__factory.js.map +1 -0
  405. package/dist/factories/contracts/test/bad-recipient/BadRecipient5__factory.d.ts +31 -0
  406. package/dist/factories/contracts/test/bad-recipient/BadRecipient5__factory.d.ts.map +1 -0
  407. package/dist/factories/contracts/test/bad-recipient/BadRecipient5__factory.js +64 -0
  408. package/dist/factories/contracts/test/bad-recipient/BadRecipient5__factory.js.map +1 -0
  409. package/dist/factories/contracts/test/bad-recipient/BadRecipient6__factory.d.ts +31 -0
  410. package/dist/factories/contracts/test/bad-recipient/BadRecipient6__factory.d.ts.map +1 -0
  411. package/dist/factories/contracts/test/bad-recipient/BadRecipient6__factory.js +64 -0
  412. package/dist/factories/contracts/test/bad-recipient/BadRecipient6__factory.js.map +1 -0
  413. package/dist/factories/contracts/test/bad-recipient/index.d.ts +6 -0
  414. package/dist/factories/contracts/test/bad-recipient/index.d.ts.map +1 -0
  415. package/dist/factories/contracts/test/bad-recipient/index.js +17 -0
  416. package/dist/factories/contracts/test/bad-recipient/index.js.map +1 -0
  417. package/dist/factories/contracts/test/index.d.ts +14 -0
  418. package/dist/factories/contracts/test/index.d.ts.map +1 -0
  419. package/dist/factories/contracts/test/index.js +55 -0
  420. package/dist/factories/contracts/test/index.js.map +1 -0
  421. package/dist/factories/contracts/upgrade/UpgradeBeaconController__factory.d.ts +55 -0
  422. package/dist/factories/contracts/upgrade/UpgradeBeaconController__factory.d.ts.map +1 -0
  423. package/dist/factories/contracts/upgrade/UpgradeBeaconController__factory.js +130 -0
  424. package/dist/factories/contracts/upgrade/UpgradeBeaconController__factory.js.map +1 -0
  425. package/dist/factories/contracts/upgrade/UpgradeBeaconProxy__factory.d.ts +33 -0
  426. package/dist/factories/contracts/upgrade/UpgradeBeaconProxy__factory.d.ts.map +1 -0
  427. package/dist/factories/contracts/upgrade/UpgradeBeaconProxy__factory.js +65 -0
  428. package/dist/factories/contracts/upgrade/UpgradeBeaconProxy__factory.js.map +1 -0
  429. package/dist/factories/contracts/upgrade/UpgradeBeacon__factory.d.ts +48 -0
  430. package/dist/factories/contracts/upgrade/UpgradeBeacon__factory.d.ts.map +1 -0
  431. package/dist/factories/contracts/upgrade/UpgradeBeacon__factory.js +74 -0
  432. package/dist/factories/contracts/upgrade/UpgradeBeacon__factory.js.map +1 -0
  433. package/dist/factories/contracts/upgrade/Versioned__factory.d.ts +31 -0
  434. package/dist/factories/contracts/upgrade/Versioned__factory.d.ts.map +1 -0
  435. package/dist/factories/contracts/upgrade/Versioned__factory.js +54 -0
  436. package/dist/factories/contracts/upgrade/Versioned__factory.js.map +1 -0
  437. package/dist/factories/contracts/upgrade/index.d.ts +5 -0
  438. package/dist/factories/contracts/upgrade/index.d.ts.map +1 -0
  439. package/dist/factories/contracts/upgrade/index.js +15 -0
  440. package/dist/factories/contracts/upgrade/index.js.map +1 -0
  441. package/dist/factories/contracts/validator-manager/InboxValidatorManager__factory.d.ts +59 -0
  442. package/dist/factories/contracts/validator-manager/InboxValidatorManager__factory.d.ts.map +1 -0
  443. package/dist/factories/contracts/validator-manager/InboxValidatorManager__factory.js +373 -0
  444. package/dist/factories/contracts/validator-manager/InboxValidatorManager__factory.js.map +1 -0
  445. package/dist/factories/contracts/validator-manager/MultisigValidatorManager__factory.d.ts +36 -0
  446. package/dist/factories/contracts/validator-manager/MultisigValidatorManager__factory.d.ts.map +1 -0
  447. package/dist/factories/contracts/validator-manager/MultisigValidatorManager__factory.js +286 -0
  448. package/dist/factories/contracts/validator-manager/MultisigValidatorManager__factory.js.map +1 -0
  449. package/dist/factories/contracts/validator-manager/OutboxValidatorManager__factory.d.ts +59 -0
  450. package/dist/factories/contracts/validator-manager/OutboxValidatorManager__factory.d.ts.map +1 -0
  451. package/dist/factories/contracts/validator-manager/OutboxValidatorManager__factory.js +560 -0
  452. package/dist/factories/contracts/validator-manager/OutboxValidatorManager__factory.js.map +1 -0
  453. package/dist/factories/contracts/validator-manager/index.d.ts +4 -0
  454. package/dist/factories/contracts/validator-manager/index.d.ts.map +1 -0
  455. package/dist/factories/contracts/validator-manager/index.js +13 -0
  456. package/dist/factories/contracts/validator-manager/index.js.map +1 -0
  457. package/dist/factories/index.d.ts +4 -0
  458. package/dist/factories/index.d.ts.map +1 -0
  459. package/dist/factories/index.js +33 -0
  460. package/dist/factories/index.js.map +1 -0
  461. package/dist/factories/interfaces/IAbacusConnectionManager__factory.d.ts +23 -0
  462. package/dist/factories/interfaces/IAbacusConnectionManager__factory.d.ts.map +1 -0
  463. package/dist/factories/interfaces/IAbacusConnectionManager__factory.js +63 -0
  464. package/dist/factories/interfaces/IAbacusConnectionManager__factory.js.map +1 -0
  465. package/dist/factories/interfaces/IInbox__factory.d.ts +29 -0
  466. package/dist/factories/interfaces/IInbox__factory.d.ts.map +1 -0
  467. package/dist/factories/interfaces/IInbox__factory.js +90 -0
  468. package/dist/factories/interfaces/IInbox__factory.js.map +1 -0
  469. package/dist/factories/interfaces/IInterchainGasPaymaster__factory.d.ts +19 -0
  470. package/dist/factories/interfaces/IInterchainGasPaymaster__factory.d.ts.map +1 -0
  471. package/dist/factories/interfaces/IInterchainGasPaymaster__factory.js +41 -0
  472. package/dist/factories/interfaces/IInterchainGasPaymaster__factory.js.map +1 -0
  473. package/dist/factories/interfaces/IMailbox__factory.d.ts +19 -0
  474. package/dist/factories/interfaces/IMailbox__factory.d.ts.map +1 -0
  475. package/dist/factories/interfaces/IMailbox__factory.js +44 -0
  476. package/dist/factories/interfaces/IMailbox__factory.js.map +1 -0
  477. package/dist/factories/interfaces/IMessageRecipient__factory.d.ts +19 -0
  478. package/dist/factories/interfaces/IMessageRecipient__factory.d.ts.map +1 -0
  479. package/dist/factories/interfaces/IMessageRecipient__factory.js +41 -0
  480. package/dist/factories/interfaces/IMessageRecipient__factory.js.map +1 -0
  481. package/dist/factories/interfaces/IMultisigValidatorManager__factory.d.ts +19 -0
  482. package/dist/factories/interfaces/IMultisigValidatorManager__factory.d.ts.map +1 -0
  483. package/dist/factories/interfaces/IMultisigValidatorManager__factory.js +57 -0
  484. package/dist/factories/interfaces/IMultisigValidatorManager__factory.js.map +1 -0
  485. package/dist/factories/interfaces/IOutbox__factory.d.ts +23 -0
  486. package/dist/factories/interfaces/IOutbox__factory.d.ts.map +1 -0
  487. package/dist/factories/interfaces/IOutbox__factory.js +155 -0
  488. package/dist/factories/interfaces/IOutbox__factory.js.map +1 -0
  489. package/dist/factories/interfaces/index.d.ts +8 -0
  490. package/dist/factories/interfaces/index.d.ts.map +1 -0
  491. package/dist/factories/interfaces/index.js +21 -0
  492. package/dist/factories/interfaces/index.js.map +1 -0
  493. package/dist/index.d.ts +96 -0
  494. package/dist/index.d.ts.map +1 -0
  495. package/dist/index.js +117 -0
  496. package/dist/index.js.map +1 -0
  497. package/dist/interfaces/IAbacusConnectionManager.d.ts +59 -0
  498. package/dist/interfaces/IAbacusConnectionManager.d.ts.map +1 -0
  499. package/dist/interfaces/IAbacusConnectionManager.js +4 -0
  500. package/dist/interfaces/IAbacusConnectionManager.js.map +1 -0
  501. package/dist/interfaces/IInbox.d.ts +83 -0
  502. package/dist/interfaces/IInbox.d.ts.map +1 -0
  503. package/dist/interfaces/IInbox.js +4 -0
  504. package/dist/interfaces/IInbox.js.map +1 -0
  505. package/dist/interfaces/IInterchainGasPaymaster.d.ts +51 -0
  506. package/dist/interfaces/IInterchainGasPaymaster.d.ts.map +1 -0
  507. package/dist/interfaces/IInterchainGasPaymaster.js +4 -0
  508. package/dist/interfaces/IInterchainGasPaymaster.js.map +1 -0
  509. package/dist/interfaces/IMailbox.d.ts +51 -0
  510. package/dist/interfaces/IMailbox.d.ts.map +1 -0
  511. package/dist/interfaces/IMailbox.js +4 -0
  512. package/dist/interfaces/IMailbox.js.map +1 -0
  513. package/dist/interfaces/IMessageRecipient.d.ts +51 -0
  514. package/dist/interfaces/IMessageRecipient.d.ts.map +1 -0
  515. package/dist/interfaces/IMessageRecipient.js +4 -0
  516. package/dist/interfaces/IMessageRecipient.js.map +1 -0
  517. package/dist/interfaces/IMultisigValidatorManager.d.ts +59 -0
  518. package/dist/interfaces/IMultisigValidatorManager.d.ts.map +1 -0
  519. package/dist/interfaces/IMultisigValidatorManager.js +4 -0
  520. package/dist/interfaces/IMultisigValidatorManager.js.map +1 -0
  521. package/dist/interfaces/IOutbox.d.ts +148 -0
  522. package/dist/interfaces/IOutbox.d.ts.map +1 -0
  523. package/dist/interfaces/IOutbox.js +4 -0
  524. package/dist/interfaces/IOutbox.js.map +1 -0
  525. package/dist/interfaces/index.d.ts +8 -0
  526. package/dist/interfaces/index.d.ts.map +1 -0
  527. package/dist/interfaces/index.js +3 -0
  528. package/dist/interfaces/index.js.map +1 -0
  529. package/interfaces/IAbacusConnectionManager.sol +12 -0
  530. package/interfaces/IInbox.sol +16 -0
  531. package/interfaces/IInterchainGasPaymaster.sol +15 -0
  532. package/interfaces/IMailbox.sol +8 -0
  533. package/interfaces/IMessageRecipient.sol +10 -0
  534. package/interfaces/IMultisigValidatorManager.sol +11 -0
  535. package/interfaces/IOutbox.sol +27 -0
  536. package/package.json +54 -0
package/README.md ADDED
@@ -0,0 +1,14 @@
1
+ ## Hyperlane Solidity
2
+
3
+ On-chain implementations of Hyperlane in Solidity.
4
+
5
+ ### Setup
6
+
7
+ - `npm install --dev`
8
+ - `brew install jq`   OR   `sudo apt-get install jq`
9
+ - `npm install -g solhint`, check it is installed using `solhint --version`
10
+
11
+ ### Build
12
+
13
+ - `npm run compile`
14
+ - `npm run test`
@@ -0,0 +1,168 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.0;
3
+
4
+ // ============ Internal Imports ============
5
+ import {IOutbox} from "../interfaces/IOutbox.sol";
6
+ import {IInbox} from "../interfaces/IInbox.sol";
7
+ import {IAbacusConnectionManager} from "../interfaces/IAbacusConnectionManager.sol";
8
+ import {IMultisigValidatorManager} from "../interfaces/IMultisigValidatorManager.sol";
9
+
10
+ // ============ External Imports ============
11
+ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
12
+ import {Address} from "@openzeppelin/contracts/utils/Address.sol";
13
+ import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
14
+
15
+ /**
16
+ * @title AbacusConnectionManager
17
+ * @author Celo Labs Inc.
18
+ * @notice Manages a registry of local Inbox contracts for remote Outbox
19
+ * domains.
20
+ */
21
+ contract AbacusConnectionManager is IAbacusConnectionManager, Ownable {
22
+ using EnumerableSet for EnumerableSet.AddressSet;
23
+ using EnumerableSet for EnumerableSet.Bytes32Set;
24
+
25
+ // ============ Public Storage ============
26
+
27
+ // Outbox contract
28
+ IOutbox public override outbox;
29
+ // local Inbox address => remote Outbox domain
30
+ mapping(address => uint32) public inboxToDomain;
31
+ // remote Outbox domain => local Inbox addresses
32
+ mapping(uint32 => EnumerableSet.AddressSet) internal domainToInboxes;
33
+ // complete history of enrolled inbox domain hashes, even if unenrolled
34
+ EnumerableSet.Bytes32Set domainHashes;
35
+
36
+ // ============ Events ============
37
+
38
+ /**
39
+ * @notice Emitted when a new Outbox is set.
40
+ * @param outbox the address of the Outbox
41
+ */
42
+ event OutboxSet(address indexed outbox);
43
+
44
+ /**
45
+ * @notice Emitted when a new Inbox is enrolled / added
46
+ * @param domain the remote domain of the Outbox contract for the Inbox
47
+ * @param inbox the address of the Inbox
48
+ */
49
+ event InboxEnrolled(uint32 indexed domain, address inbox);
50
+
51
+ /**
52
+ * @notice Emitted when a new Inbox is un-enrolled / removed
53
+ * @param domain the remote domain of the Outbox contract for the Inbox
54
+ * @param inbox the address of the Inbox
55
+ */
56
+ event InboxUnenrolled(uint32 indexed domain, address inbox);
57
+
58
+ // ============ Constructor ============
59
+
60
+ // solhint-disable-next-line no-empty-blocks
61
+ constructor() Ownable() {}
62
+
63
+ // ============ External Functions ============
64
+
65
+ /**
66
+ * @notice Sets the address of the local Outbox contract.
67
+ * @param _outbox The address of the new local Outbox contract.
68
+ */
69
+ function setOutbox(address _outbox) external onlyOwner {
70
+ require(Address.isContract(_outbox), "outbox !contract");
71
+ outbox = IOutbox(_outbox);
72
+ emit OutboxSet(_outbox);
73
+ }
74
+
75
+ /**
76
+ * @notice Allow Owner to enroll Inbox contract
77
+ * @param _domain the remote domain of the Outbox contract for the Inbox
78
+ * @param _inbox the address of the Inbox
79
+ */
80
+ function enrollInbox(uint32 _domain, address _inbox) external onlyOwner {
81
+ require(Address.isContract(_inbox), "inbox !contract");
82
+ require(!isInbox(_inbox), "already inbox");
83
+
84
+ // prevent enrolling an inbox that matches any previously enrolled domain hash
85
+ bytes32 domainHash = getDomainHash(_inbox);
86
+ require(
87
+ !domainHashes.contains(domainHash),
88
+ "domain hash previously enrolled"
89
+ );
90
+ domainHashes.add(domainHash);
91
+
92
+ // add inbox and domain to two-way mapping
93
+ inboxToDomain[_inbox] = _domain;
94
+ require(domainToInboxes[_domain].add(_inbox), "already enrolled");
95
+ emit InboxEnrolled(_domain, _inbox);
96
+ }
97
+
98
+ /**
99
+ * @notice Allow Owner to un-enroll Inbox contract
100
+ * @param _inbox the address of the Inbox
101
+ */
102
+ function unenrollInbox(address _inbox) external onlyOwner {
103
+ _unenrollInbox(_inbox);
104
+ }
105
+
106
+ /**
107
+ * @notice Query local domain from Outbox
108
+ * @return local domain
109
+ */
110
+ function localDomain() external view override returns (uint32) {
111
+ return outbox.localDomain();
112
+ }
113
+
114
+ /**
115
+ * @notice Returns the Inbox addresses for a given remote domain
116
+ * @return inboxes An array of addresses of the Inboxes
117
+ */
118
+ function getInboxes(uint32 remoteDomain)
119
+ external
120
+ view
121
+ returns (address[] memory)
122
+ {
123
+ EnumerableSet.AddressSet storage _inboxes = domainToInboxes[
124
+ remoteDomain
125
+ ];
126
+ uint256 length = _inboxes.length();
127
+ address[] memory ret = new address[](length);
128
+ for (uint256 i = 0; i < length; i += 1) {
129
+ ret[i] = _inboxes.at(i);
130
+ }
131
+ return ret;
132
+ }
133
+
134
+ // ============ Public Functions ============
135
+
136
+ /**
137
+ * @notice Check whether _inbox is enrolled
138
+ * @param _inbox the inbox to check for enrollment
139
+ * @return TRUE iff _inbox is enrolled
140
+ */
141
+ function isInbox(address _inbox) public view override returns (bool) {
142
+ return inboxToDomain[_inbox] != 0;
143
+ }
144
+
145
+ /**
146
+ * @notice Check whether _inbox is enrolled
147
+ * @param _inbox the inbox to check for enrollment
148
+ * @return TRUE iff _inbox is enrolled
149
+ */
150
+ function getDomainHash(address _inbox) public view returns (bytes32) {
151
+ IInbox inbox = IInbox(_inbox);
152
+ address vm = inbox.validatorManager();
153
+ return IMultisigValidatorManager(vm).domainHash();
154
+ }
155
+
156
+ // ============ Internal Functions ============
157
+
158
+ /**
159
+ * @notice Remove the inbox from the two-way mappings
160
+ * @param _inbox inbox to un-enroll
161
+ */
162
+ function _unenrollInbox(address _inbox) internal {
163
+ uint32 _currentDomain = inboxToDomain[_inbox];
164
+ require(domainToInboxes[_currentDomain].remove(_inbox), "not enrolled");
165
+ inboxToDomain[_inbox] = 0;
166
+ emit InboxUnenrolled(_currentDomain, _inbox);
167
+ }
168
+ }
@@ -0,0 +1,148 @@
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 {IMessageRecipient} from "../interfaces/IMessageRecipient.sol";
11
+ import {IInbox} from "../interfaces/IInbox.sol";
12
+
13
+ // ============ External Imports ============
14
+ import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
15
+
16
+ /**
17
+ * @title Inbox
18
+ * @author Celo Labs Inc.
19
+ * @notice Track root updates on Outbox, prove and dispatch messages to end
20
+ * recipients.
21
+ */
22
+ contract Inbox is IInbox, ReentrancyGuardUpgradeable, Versioned, Mailbox {
23
+ // ============ Libraries ============
24
+
25
+ using MerkleLib for MerkleLib.Tree;
26
+ using Message for bytes;
27
+ using TypeCasts for bytes32;
28
+
29
+ // ============ Enums ============
30
+
31
+ // Status of Message:
32
+ // 0 - None - message has not been processed
33
+ // 1 - Processed - message has been dispatched to recipient
34
+ enum MessageStatus {
35
+ None,
36
+ Processed
37
+ }
38
+
39
+ // ============ Public Storage ============
40
+
41
+ // Domain of outbox chain
42
+ uint32 public override remoteDomain;
43
+ // Mapping of message leaves to MessageStatus
44
+ mapping(bytes32 => MessageStatus) public messages;
45
+
46
+ // ============ Upgrade Gap ============
47
+
48
+ // gap for upgrade safety
49
+ uint256[48] private __GAP;
50
+
51
+ // ============ Events ============
52
+
53
+ /**
54
+ * @notice Emitted when message is processed
55
+ * @dev This event allows watchers to observe the merkle proof they need
56
+ * to prove fraud on the Outbox.
57
+ * @param messageHash Hash of message that was processed.
58
+ */
59
+ event Process(bytes32 indexed messageHash);
60
+
61
+ // ============ Constructor ============
62
+
63
+ // solhint-disable-next-line no-empty-blocks
64
+ constructor(uint32 _localDomain) Mailbox(_localDomain) {}
65
+
66
+ // ============ Initializer ============
67
+
68
+ function initialize(uint32 _remoteDomain, address _validatorManager)
69
+ external
70
+ initializer
71
+ {
72
+ __ReentrancyGuard_init();
73
+ __Mailbox_initialize(_validatorManager);
74
+ remoteDomain = _remoteDomain;
75
+ }
76
+
77
+ // ============ External Functions ============
78
+
79
+ /**
80
+ * @notice Attempts to process the provided formatted `message`. Performs
81
+ * verification against root of the proof
82
+ * @dev Called by the validator manager, which is responsible for verifying a
83
+ * quorum of validator signatures on the checkpoint.
84
+ * @dev Reverts if verification of the message fails.
85
+ * @param _root The merkle root of the checkpoint used to prove message inclusion.
86
+ * @param _index The index of the checkpoint used to prove message inclusion.
87
+ * @param _message Formatted message (refer to Mailbox.sol Message library)
88
+ * @param _proof Merkle proof of inclusion for message's leaf
89
+ * @param _leafIndex Index of leaf in outbox's merkle tree
90
+ */
91
+ function process(
92
+ bytes32 _root,
93
+ uint256 _index,
94
+ bytes calldata _message,
95
+ bytes32[32] calldata _proof,
96
+ uint256 _leafIndex
97
+ ) external override nonReentrant onlyValidatorManager {
98
+ require(_index >= _leafIndex, "!index");
99
+ bytes32 _messageHash = _message.leaf(_leafIndex);
100
+ // ensure that message has not been processed
101
+ require(
102
+ messages[_messageHash] == MessageStatus.None,
103
+ "!MessageStatus.None"
104
+ );
105
+ // calculate the expected root based on the proof
106
+ bytes32 _calculatedRoot = MerkleLib.branchRoot(
107
+ _messageHash,
108
+ _proof,
109
+ _leafIndex
110
+ );
111
+ // verify the merkle proof
112
+ require(_calculatedRoot == _root, "!proof");
113
+ _process(_message, _messageHash);
114
+ }
115
+
116
+ // ============ Internal Functions ============
117
+
118
+ /**
119
+ * @notice Marks a message as processed and calls handle on the recipient
120
+ * @dev Internal function that can be called by contracts like TestInbox
121
+ * @param _message Formatted message (refer to Mailbox.sol Message library)
122
+ * @param _messageHash keccak256 hash of the message
123
+ */
124
+ function _process(bytes calldata _message, bytes32 _messageHash) internal {
125
+ (
126
+ uint32 origin,
127
+ bytes32 sender,
128
+ uint32 destination,
129
+ bytes32 recipient,
130
+ bytes calldata body
131
+ ) = _message.destructure();
132
+
133
+ // ensure message came from the correct domain
134
+ require(origin == remoteDomain, "!origin");
135
+ // ensure message was meant for this domain
136
+ require(destination == localDomain, "!destination");
137
+
138
+ // update message status as processed
139
+ messages[_messageHash] = MessageStatus.Processed;
140
+
141
+ IMessageRecipient(recipient.bytes32ToAddress()).handle(
142
+ origin,
143
+ sender,
144
+ body
145
+ );
146
+ emit Process(_messageHash);
147
+ }
148
+ }
@@ -0,0 +1,67 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.0;
3
+
4
+ // ============ Internal Imports ============
5
+ import {IInterchainGasPaymaster} from "../interfaces/IInterchainGasPaymaster.sol";
6
+ // ============ External Imports ============
7
+ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
8
+
9
+ /**
10
+ * @title InterchainGasPaymaster
11
+ * @notice Manages payments on a source chain to cover gas costs of relaying
12
+ * messages to destination chains.
13
+ */
14
+ contract InterchainGasPaymaster is IInterchainGasPaymaster, OwnableUpgradeable {
15
+ // ============ Events ============
16
+
17
+ /**
18
+ * @notice Emitted when a payment is made for a message's gas costs.
19
+ * @param outbox The address of the Outbox contract.
20
+ * @param leafIndex The index of the message in the Outbox merkle tree.
21
+ * @param amount The amount of native tokens paid.
22
+ */
23
+ event GasPayment(address indexed outbox, uint256 leafIndex, uint256 amount);
24
+
25
+ // ============ Constructor ============
26
+
27
+ // solhint-disable-next-line no-empty-blocks
28
+ constructor() {
29
+ initialize(); // allows contract to be used without proxying
30
+ }
31
+
32
+ // ============ External Functions ============
33
+
34
+ function initialize() public initializer {
35
+ __Ownable_init();
36
+ }
37
+
38
+ /**
39
+ * @notice Deposits msg.value as a payment for the relaying of a message
40
+ * to its destination chain.
41
+ * @param _outbox The address of the Outbox contract.
42
+ * @param _leafIndex The index of the message in the Outbox merkle tree.
43
+ * @param _destinationDomain The domain of the message's destination chain.
44
+ */
45
+ function payGasFor(
46
+ address _outbox,
47
+ uint256 _leafIndex,
48
+ uint32 _destinationDomain
49
+ ) external payable override {
50
+ // Silence compiler warning. The NatSpec @param requires the parameter to be named.
51
+ // While not used at the moment, future versions of the paymaster may conditionally
52
+ // forward payments depending on the destination domain.
53
+ _destinationDomain;
54
+
55
+ emit GasPayment(_outbox, _leafIndex, msg.value);
56
+ }
57
+
58
+ /**
59
+ * @notice Transfers the entire native token balance to the owner of the contract.
60
+ * @dev The owner must be able to receive native tokens.
61
+ */
62
+ function claim() external {
63
+ // Transfer the entire balance to owner.
64
+ (bool success, ) = owner().call{value: address(this).balance}("");
65
+ require(success, "!transfer");
66
+ }
67
+ }
@@ -0,0 +1,93 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.0;
3
+
4
+ // ============ Internal Imports ============
5
+ import {IMailbox} from "../interfaces/IMailbox.sol";
6
+ // ============ External Imports ============
7
+ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
8
+ import {Address} from "@openzeppelin/contracts/utils/Address.sol";
9
+
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 ============
17
+
18
+ // Domain of chain on which the contract is deployed
19
+ uint32 public immutable override localDomain;
20
+
21
+ // ============ Public Variables ============
22
+
23
+ // Address of the validator manager contract.
24
+ address public validatorManager;
25
+
26
+ // ============ Upgrade Gap ============
27
+
28
+ // gap for upgrade safety
29
+ uint256[49] private __GAP;
30
+
31
+ // ============ Events ============
32
+
33
+ /**
34
+ * @notice Emitted when the validator manager contract is changed
35
+ * @param validatorManager The address of the new validatorManager
36
+ */
37
+ event ValidatorManagerSet(address validatorManager);
38
+
39
+ // ============ Modifiers ============
40
+
41
+ /**
42
+ * @notice Ensures that a function is called by the validator manager contract.
43
+ */
44
+ modifier onlyValidatorManager() {
45
+ require(msg.sender == validatorManager, "!validatorManager");
46
+ _;
47
+ }
48
+
49
+ // ============ Constructor ============
50
+
51
+ constructor(uint32 _localDomain) {
52
+ localDomain = _localDomain;
53
+ }
54
+
55
+ // ============ Initializer ============
56
+
57
+ function __Mailbox_initialize(address _validatorManager)
58
+ internal
59
+ onlyInitializing
60
+ {
61
+ // initialize owner
62
+ __Ownable_init();
63
+ _setValidatorManager(_validatorManager);
64
+ }
65
+
66
+ // ============ External Functions ============
67
+
68
+ /**
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
74
+ */
75
+ function setValidatorManager(address _validatorManager) external onlyOwner {
76
+ _setValidatorManager(_validatorManager);
77
+ }
78
+
79
+ // ============ Internal Functions ============
80
+
81
+ /**
82
+ * @notice Set the validator manager
83
+ * @param _validatorManager Address of the validator manager
84
+ */
85
+ function _setValidatorManager(address _validatorManager) internal {
86
+ require(
87
+ Address.isContract(_validatorManager),
88
+ "!contract validatorManager"
89
+ );
90
+ validatorManager = _validatorManager;
91
+ emit ValidatorManagerSet(_validatorManager);
92
+ }
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
+ }