@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
@@ -0,0 +1,176 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.0;
3
+
4
+ // ============ External Imports ============
5
+ import {Address} from "@openzeppelin/contracts/utils/Address.sol";
6
+
7
+ /**
8
+ * @title UpgradeBeaconProxy
9
+ * @notice
10
+ * Proxy contract which delegates all logic, including initialization,
11
+ * to an implementation contract.
12
+ * The implementation contract is stored within an Upgrade Beacon contract;
13
+ * the implementation contract can be changed by performing an upgrade on the Upgrade Beacon contract.
14
+ * The Upgrade Beacon contract for this Proxy is immutably specified at deployment.
15
+ * @dev This implementation combines the gas savings of keeping the UpgradeBeacon address outside of contract storage
16
+ * found in 0age's implementation:
17
+ * https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol
18
+ * With the added safety checks that the UpgradeBeacon and implementation are contracts at time of deployment
19
+ * found in OpenZeppelin's implementation:
20
+ * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol
21
+ */
22
+ contract UpgradeBeaconProxy {
23
+ // ============ Immutables ============
24
+
25
+ // Upgrade Beacon address is immutable (therefore not kept in contract storage)
26
+ address private immutable upgradeBeacon;
27
+
28
+ // ============ Constructor ============
29
+
30
+ /**
31
+ * @notice Validate that the Upgrade Beacon is a contract, then set its
32
+ * address immutably within this contract.
33
+ * Validate that the implementation is also a contract,
34
+ * Then call the initialization function defined at the implementation.
35
+ * The deployment will revert and pass along the
36
+ * revert reason if the initialization function reverts.
37
+ * @param _upgradeBeacon Address of the Upgrade Beacon to be stored immutably in the contract
38
+ * @param _initializationCalldata Calldata supplied when calling the initialization function
39
+ */
40
+ constructor(address _upgradeBeacon, bytes memory _initializationCalldata)
41
+ payable
42
+ {
43
+ // Validate the Upgrade Beacon is a contract
44
+ require(Address.isContract(_upgradeBeacon), "beacon !contract");
45
+ // set the Upgrade Beacon
46
+ upgradeBeacon = _upgradeBeacon;
47
+ // Validate the implementation is a contract
48
+ address _implementation = _getImplementation(_upgradeBeacon);
49
+ require(
50
+ Address.isContract(_implementation),
51
+ "beacon implementation !contract"
52
+ );
53
+ // Call the initialization function on the implementation
54
+ if (_initializationCalldata.length > 0) {
55
+ _initialize(_implementation, _initializationCalldata);
56
+ }
57
+ }
58
+
59
+ // ============ External Functions ============
60
+
61
+ /**
62
+ * @notice Forwards all calls with data to _fallback()
63
+ * No public functions are declared on the contract, so all calls hit fallback
64
+ */
65
+ fallback() external payable {
66
+ _fallback();
67
+ }
68
+
69
+ /**
70
+ * @notice Forwards all calls with no data to _fallback()
71
+ */
72
+ receive() external payable {
73
+ _fallback();
74
+ }
75
+
76
+ // ============ Private Functions ============
77
+
78
+ /**
79
+ * @notice Call the initialization function on the implementation
80
+ * Used at deployment to initialize the proxy
81
+ * based on the logic for initialization defined at the implementation
82
+ * @param _implementation - Contract to which the initalization is delegated
83
+ * @param _initializationCalldata - Calldata supplied when calling the initialization function
84
+ */
85
+ function _initialize(
86
+ address _implementation,
87
+ bytes memory _initializationCalldata
88
+ ) private {
89
+ // Delegatecall into the implementation, supplying initialization calldata.
90
+ (bool _ok, ) = _implementation.delegatecall(_initializationCalldata);
91
+ // Revert and include revert data if delegatecall to implementation reverts.
92
+ if (!_ok) {
93
+ assembly {
94
+ returndatacopy(0, 0, returndatasize())
95
+ revert(0, returndatasize())
96
+ }
97
+ }
98
+ }
99
+
100
+ /**
101
+ * @notice Delegates function calls to the implementation contract returned by the Upgrade Beacon
102
+ */
103
+ function _fallback() private {
104
+ _delegate(_getImplementation());
105
+ }
106
+
107
+ /**
108
+ * @notice Delegate function execution to the implementation contract
109
+ * @dev This is a low level function that doesn't return to its internal
110
+ * call site. It will return whatever is returned by the implementation to the
111
+ * external caller, reverting and returning the revert data if implementation
112
+ * reverts.
113
+ * @param _implementation - Address to which the function execution is delegated
114
+ */
115
+ function _delegate(address _implementation) private {
116
+ assembly {
117
+ // Copy msg.data. We take full control of memory in this inline assembly
118
+ // block because it will not return to Solidity code. We overwrite the
119
+ // Solidity scratch pad at memory position 0.
120
+ calldatacopy(0, 0, calldatasize())
121
+ // Delegatecall to the implementation, supplying calldata and gas.
122
+ // Out and outsize are set to zero - instead, use the return buffer.
123
+ let result := delegatecall(
124
+ gas(),
125
+ _implementation,
126
+ 0,
127
+ calldatasize(),
128
+ 0,
129
+ 0
130
+ )
131
+ // Copy the returned data from the return buffer.
132
+ returndatacopy(0, 0, returndatasize())
133
+ switch result
134
+ // Delegatecall returns 0 on error.
135
+ case 0 {
136
+ revert(0, returndatasize())
137
+ }
138
+ default {
139
+ return(0, returndatasize())
140
+ }
141
+ }
142
+ }
143
+
144
+ /**
145
+ * @notice Call the Upgrade Beacon to get the current implementation contract address
146
+ * @return _implementation Address of the current implementation.
147
+ */
148
+ function _getImplementation()
149
+ private
150
+ view
151
+ returns (address _implementation)
152
+ {
153
+ _implementation = _getImplementation(upgradeBeacon);
154
+ }
155
+
156
+ /**
157
+ * @notice Call the Upgrade Beacon to get the current implementation contract address
158
+ * @dev _upgradeBeacon is passed as a parameter so that
159
+ * we can also use this function in the constructor,
160
+ * where we can't access immutable variables.
161
+ * @param _upgradeBeacon Address of the UpgradeBeacon storing the current implementation
162
+ * @return _implementation Address of the current implementation.
163
+ */
164
+ function _getImplementation(address _upgradeBeacon)
165
+ private
166
+ view
167
+ returns (address _implementation)
168
+ {
169
+ // Get the current implementation address from the upgrade beacon.
170
+ (bool _ok, bytes memory _returnData) = _upgradeBeacon.staticcall("");
171
+ // Revert and pass along revert message if call to upgrade beacon reverts.
172
+ require(_ok, string(_returnData));
173
+ // Set the implementation to the address returned from the upgrade beacon.
174
+ _implementation = abi.decode(_returnData, (address));
175
+ }
176
+ }
@@ -0,0 +1,10 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.6.11;
3
+
4
+ /**
5
+ * @title Versioned
6
+ * @notice Version getter for contracts
7
+ **/
8
+ contract Versioned {
9
+ uint8 public constant VERSION = 0;
10
+ }
@@ -0,0 +1,58 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.0;
3
+
4
+ // ============ Internal Imports ============
5
+ import {IInbox} from "../../interfaces/IInbox.sol";
6
+ import {MultisigValidatorManager} from "./MultisigValidatorManager.sol";
7
+
8
+ /**
9
+ * @title InboxValidatorManager
10
+ * @notice Verifies checkpoints are signed by a quorum of validators and submits
11
+ * them to an Inbox.
12
+ */
13
+ contract InboxValidatorManager is MultisigValidatorManager {
14
+ // ============ Constructor ============
15
+
16
+ /**
17
+ * @dev Reverts if `_validators` has any duplicates.
18
+ * @param _remoteDomain The remote domain of the outbox chain.
19
+ * @param _validators The set of validator addresses.
20
+ * @param _threshold The quorum threshold. Must be greater than or equal
21
+ * to the length of `_validators`.
22
+ */
23
+ // solhint-disable-next-line no-empty-blocks
24
+ constructor(
25
+ uint32 _remoteDomain,
26
+ address[] memory _validators,
27
+ uint256 _threshold
28
+ ) MultisigValidatorManager(_remoteDomain, _validators, _threshold) {}
29
+
30
+ // ============ External Functions ============
31
+
32
+ /**
33
+ * @notice Verifies a signed checkpoint and submits a message for processing.
34
+ * @dev Reverts if `_signatures` is not a quorum of validator signatures.
35
+ * @dev Reverts if `_signatures` is not sorted in ascending order by the signer
36
+ * address, which is required for duplicate detection.
37
+ * @param _inbox The inbox to submit the message to.
38
+ * @param _root The merkle root of the signed checkpoint.
39
+ * @param _index The index of the signed checkpoint.
40
+ * @param _signatures Signatures over the checkpoint to be checked for a validator
41
+ * quorum. Must be sorted in ascending order by signer address.
42
+ * @param _message The message to process.
43
+ * @param _proof Merkle proof of inclusion for message's leaf
44
+ * @param _leafIndex Index of leaf in outbox's merkle tree
45
+ */
46
+ function process(
47
+ IInbox _inbox,
48
+ bytes32 _root,
49
+ uint256 _index,
50
+ bytes[] calldata _signatures,
51
+ bytes calldata _message,
52
+ bytes32[32] calldata _proof,
53
+ uint256 _leafIndex
54
+ ) external {
55
+ require(isQuorum(_root, _index, _signatures), "!quorum");
56
+ _inbox.process(_root, _index, _message, _proof, _leafIndex);
57
+ }
58
+ }
@@ -0,0 +1,271 @@
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
+ pragma solidity >=0.8.0;
3
+
4
+ import {Versioned} from "../upgrade/Versioned.sol";
5
+
6
+ // ============ External Imports ============
7
+ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
8
+ import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
9
+ import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
10
+
11
+ // ============ Internal Imports ============
12
+ import {IMultisigValidatorManager} from "../../interfaces/IMultisigValidatorManager.sol";
13
+
14
+ /**
15
+ * @title MultisigValidatorManager
16
+ * @notice Manages an ownable set of validators that ECDSA sign checkpoints to
17
+ * reach a quorum.
18
+ */
19
+ abstract contract MultisigValidatorManager is
20
+ IMultisigValidatorManager,
21
+ Ownable,
22
+ Versioned
23
+ {
24
+ // ============ Libraries ============
25
+
26
+ using EnumerableSet for EnumerableSet.AddressSet;
27
+
28
+ // ============ Immutables ============
29
+
30
+ // The domain of the validator set's outbox chain.
31
+ uint32 public immutable domain;
32
+
33
+ // The domain hash of the validator set's outbox chain.
34
+ bytes32 public immutable domainHash;
35
+
36
+ // ============ Mutable Storage ============
37
+
38
+ // The minimum threshold of validator signatures to constitute a quorum.
39
+ uint256 public threshold;
40
+
41
+ // The set of validators.
42
+ EnumerableSet.AddressSet private validatorSet;
43
+
44
+ // ============ Events ============
45
+
46
+ /**
47
+ * @notice Emitted when a validator is enrolled in the validator set.
48
+ * @param validator The address of the validator.
49
+ * @param validatorCount The new number of enrolled validators in the validator set.
50
+ */
51
+ event ValidatorEnrolled(address indexed validator, uint256 validatorCount);
52
+
53
+ /**
54
+ * @notice Emitted when a validator is unenrolled from the validator set.
55
+ * @param validator The address of the validator.
56
+ * @param validatorCount The new number of enrolled validators in the validator set.
57
+ */
58
+ event ValidatorUnenrolled(
59
+ address indexed validator,
60
+ uint256 validatorCount
61
+ );
62
+
63
+ /**
64
+ * @notice Emitted when the quorum threshold is set.
65
+ * @param threshold The new quorum threshold.
66
+ */
67
+ event ThresholdSet(uint256 threshold);
68
+
69
+ // ============ Constructor ============
70
+
71
+ /**
72
+ * @dev Reverts if `_validators` has any duplicates.
73
+ * @param _domain The domain of the outbox the validator set is for.
74
+ * @param _validators The set of validator addresses.
75
+ * @param _threshold The quorum threshold. Must be greater than or equal
76
+ * to the length of `_validators`.
77
+ */
78
+ constructor(
79
+ uint32 _domain,
80
+ address[] memory _validators,
81
+ uint256 _threshold
82
+ ) Ownable() {
83
+ // Set immutables.
84
+ domain = _domain;
85
+ domainHash = _domainHash(_domain);
86
+
87
+ // Enroll validators. Reverts if there are any duplicates.
88
+ uint256 _numValidators = _validators.length;
89
+ for (uint256 i = 0; i < _numValidators; i++) {
90
+ _enrollValidator(_validators[i]);
91
+ }
92
+
93
+ _setThreshold(_threshold);
94
+ }
95
+
96
+ // ============ External Functions ============
97
+
98
+ /**
99
+ * @notice Enrolls a validator into the validator set.
100
+ * @dev Reverts if `_validator` is already in the validator set.
101
+ * @param _validator The validator to add to the validator set.
102
+ */
103
+ function enrollValidator(address _validator) external onlyOwner {
104
+ _enrollValidator(_validator);
105
+ }
106
+
107
+ /**
108
+ * @notice Unenrolls a validator from the validator set.
109
+ * @dev Reverts if `_validator` is not in the validator set.
110
+ * @param _validator The validator to remove from the validator set.
111
+ */
112
+ function unenrollValidator(address _validator) external onlyOwner {
113
+ _unenrollValidator(_validator);
114
+ }
115
+
116
+ /**
117
+ * @notice Sets the quorum threshold.
118
+ * @param _threshold The new quorum threshold.
119
+ */
120
+ function setThreshold(uint256 _threshold) external onlyOwner {
121
+ _setThreshold(_threshold);
122
+ }
123
+
124
+ /**
125
+ * @notice Gets the addresses of the current validator set.
126
+ * @dev There are no ordering guarantees due to the semantics of EnumerableSet.AddressSet.
127
+ * @return The addresses of the validator set.
128
+ */
129
+ function validators() external view returns (address[] memory) {
130
+ uint256 _numValidators = validatorSet.length();
131
+ address[] memory _validators = new address[](_numValidators);
132
+ for (uint256 i = 0; i < _numValidators; i++) {
133
+ _validators[i] = validatorSet.at(i);
134
+ }
135
+ return _validators;
136
+ }
137
+
138
+ // ============ Public Functions ============
139
+
140
+ /**
141
+ * @notice Returns whether provided signatures over a checkpoint constitute
142
+ * a quorum of validator signatures.
143
+ * @dev Reverts if `_signatures` is not sorted in ascending order by the signer
144
+ * address, which is required for duplicate detection.
145
+ * @dev Does not revert if a signature's signer is not in the validator set.
146
+ * @param _root The merkle root of the checkpoint.
147
+ * @param _index The index of the checkpoint.
148
+ * @param _signatures Signatures over the checkpoint to be checked for a validator
149
+ * quorum. Must be sorted in ascending order by signer address.
150
+ * @return TRUE iff `_signatures` constitute a quorum of validator signatures over
151
+ * the checkpoint.
152
+ */
153
+ function isQuorum(
154
+ bytes32 _root,
155
+ uint256 _index,
156
+ bytes[] calldata _signatures
157
+ ) public view returns (bool) {
158
+ uint256 _numSignatures = _signatures.length;
159
+ // If there are fewer signatures provided than the required quorum threshold,
160
+ // this is not a quorum.
161
+ if (_numSignatures < threshold) {
162
+ return false;
163
+ }
164
+ // To identify duplicates, the signers recovered from _signatures
165
+ // must be sorted in ascending order. previousSigner is used to
166
+ // enforce ordering.
167
+ address _previousSigner = address(0);
168
+ uint256 _validatorSignatureCount = 0;
169
+ for (uint256 i = 0; i < _numSignatures; i++) {
170
+ address _signer = _recoverCheckpointSigner(
171
+ _root,
172
+ _index,
173
+ _signatures[i]
174
+ );
175
+ // Revert if the signer violates the required sort order.
176
+ require(_previousSigner < _signer, "!sorted signers");
177
+ // If the signer is a validator, increment _validatorSignatureCount.
178
+ if (isValidator(_signer)) {
179
+ _validatorSignatureCount++;
180
+ }
181
+ _previousSigner = _signer;
182
+ }
183
+ return _validatorSignatureCount >= threshold;
184
+ }
185
+
186
+ /**
187
+ * @notice Returns if `_validator` is enrolled in the validator set.
188
+ * @param _validator The address of the validator.
189
+ * @return TRUE iff `_validator` is enrolled in the validator set.
190
+ */
191
+ function isValidator(address _validator) public view returns (bool) {
192
+ return validatorSet.contains(_validator);
193
+ }
194
+
195
+ /**
196
+ * @notice Returns the number of validators enrolled in the validator set.
197
+ * @return The number of validators enrolled in the validator set.
198
+ */
199
+ function validatorCount() public view returns (uint256) {
200
+ return validatorSet.length();
201
+ }
202
+
203
+ // ============ Internal Functions ============
204
+
205
+ /**
206
+ * @notice Recovers the signer from a signature of a checkpoint.
207
+ * @param _root The checkpoint's merkle root.
208
+ * @param _index The checkpoint's index.
209
+ * @param _signature Signature on the the checkpoint.
210
+ * @return The signer of the checkpoint signature.
211
+ **/
212
+ function _recoverCheckpointSigner(
213
+ bytes32 _root,
214
+ uint256 _index,
215
+ bytes calldata _signature
216
+ ) internal view returns (address) {
217
+ bytes32 _digest = keccak256(
218
+ abi.encodePacked(domainHash, _root, _index)
219
+ );
220
+ return ECDSA.recover(ECDSA.toEthSignedMessageHash(_digest), _signature);
221
+ }
222
+
223
+ /**
224
+ * @notice Enrolls a validator into the validator set.
225
+ * @dev Reverts if `_validator` is already in the validator set.
226
+ * @param _validator The validator to add to the validator set.
227
+ */
228
+ function _enrollValidator(address _validator) internal {
229
+ require(_validator != address(0), "zero address");
230
+ require(validatorSet.add(_validator), "already enrolled");
231
+ emit ValidatorEnrolled(_validator, validatorCount());
232
+ }
233
+
234
+ /**
235
+ * @notice Unenrolls a validator from the validator set.
236
+ * @dev Reverts if the resulting validator set length is less than
237
+ * the quorum threshold.
238
+ * @dev Reverts if `_validator` is not in the validator set.
239
+ * @param _validator The validator to remove from the validator set.
240
+ */
241
+ function _unenrollValidator(address _validator) internal {
242
+ require(validatorSet.remove(_validator), "!enrolled");
243
+ uint256 _numValidators = validatorCount();
244
+ require(_numValidators >= threshold, "violates quorum threshold");
245
+ emit ValidatorUnenrolled(_validator, _numValidators);
246
+ }
247
+
248
+ /**
249
+ * @notice Sets the quorum threshold.
250
+ * @param _threshold The new quorum threshold.
251
+ */
252
+ function _setThreshold(uint256 _threshold) internal {
253
+ require(_threshold > 0 && _threshold <= validatorCount(), "!range");
254
+ threshold = _threshold;
255
+ emit ThresholdSet(_threshold);
256
+ }
257
+
258
+ /**
259
+ * @notice Hash of `_domain` concatenated with "ABACUS" and deployment version.
260
+ * @dev Domain hash is salted with deployment version to prevent validator signature replay.
261
+ * @param _domain The domain to hash.
262
+ */
263
+ function _domainHash(uint32 _domain) internal pure returns (bytes32) {
264
+ if (VERSION > 0) {
265
+ return keccak256(abi.encodePacked(_domain, "ABACUS", VERSION));
266
+ } else {
267
+ // for backwards compatibility with initial deployment (VERSION == 0)
268
+ return keccak256(abi.encodePacked(_domain, "ABACUS"));
269
+ }
270
+ }
271
+ }