@enclave-e3/contracts 0.1.4 → 0.1.6

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 (467) hide show
  1. package/README.md +46 -2
  2. package/artifacts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json +135 -0
  3. package/artifacts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/artifacts.d.ts +27 -0
  4. package/artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.json +77 -0
  5. package/artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +126 -0
  6. package/artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/artifacts.d.ts +43 -0
  7. package/artifacts/build-info/solc-0_8_28-5150b9e6b6cf4df4986fccba97bea37a16fdfebc.json +311 -0
  8. package/artifacts/build-info/solc-0_8_28-5150b9e6b6cf4df4986fccba97bea37a16fdfebc.output.json +1 -0
  9. package/artifacts/contracts/Enclave.sol/Enclave.json +239 -147
  10. package/artifacts/contracts/Enclave.sol/artifacts.d.ts +6 -6
  11. package/artifacts/contracts/interfaces/IBondingRegistry.sol/IBondingRegistry.json +881 -0
  12. package/artifacts/contracts/interfaces/IBondingRegistry.sol/artifacts.d.ts +27 -0
  13. package/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json +326 -10
  14. package/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/artifacts.d.ts +2 -2
  15. package/artifacts/contracts/interfaces/IComputeProvider.sol/IComputeProvider.json +1 -1
  16. package/artifacts/contracts/interfaces/IComputeProvider.sol/artifacts.d.ts +1 -1
  17. package/artifacts/contracts/interfaces/IDecryptionVerifier.sol/IDecryptionVerifier.json +1 -1
  18. package/artifacts/contracts/interfaces/IDecryptionVerifier.sol/artifacts.d.ts +1 -1
  19. package/artifacts/contracts/interfaces/IE3Program.sol/IE3Program.json +21 -3
  20. package/artifacts/contracts/interfaces/IE3Program.sol/artifacts.d.ts +2 -2
  21. package/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json +247 -27
  22. package/artifacts/contracts/interfaces/IEnclave.sol/artifacts.d.ts +2 -2
  23. package/artifacts/contracts/interfaces/{IRegistryFilter.sol/IRegistryFilter.json → ISlashVerifier.sol/ISlashVerifier.json} +10 -10
  24. package/artifacts/contracts/interfaces/ISlashVerifier.sol/artifacts.d.ts +27 -0
  25. package/artifacts/contracts/interfaces/ISlashingManager.sol/ISlashingManager.json +759 -0
  26. package/artifacts/contracts/interfaces/ISlashingManager.sol/artifacts.d.ts +27 -0
  27. package/artifacts/contracts/lib/ExitQueueLib.sol/ExitQueueLib.json +116 -0
  28. package/artifacts/contracts/lib/ExitQueueLib.sol/artifacts.d.ts +27 -0
  29. package/artifacts/contracts/registry/BondingRegistry.sol/BondingRegistry.json +1217 -0
  30. package/artifacts/contracts/registry/BondingRegistry.sol/artifacts.d.ts +27 -0
  31. package/artifacts/contracts/registry/CiphernodeRegistryOwnable.sol/CiphernodeRegistryOwnable.json +351 -57
  32. package/artifacts/contracts/registry/CiphernodeRegistryOwnable.sol/artifacts.d.ts +6 -6
  33. package/artifacts/contracts/slashing/SlashingManager.sol/SlashingManager.json +1107 -0
  34. package/artifacts/contracts/slashing/SlashingManager.sol/artifacts.d.ts +27 -0
  35. package/artifacts/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry.json +328 -12
  36. package/artifacts/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey.json +328 -12
  37. package/artifacts/contracts/test/MockCiphernodeRegistry.sol/artifacts.d.ts +8 -8
  38. package/artifacts/contracts/test/MockComputeProvider.sol/MockComputeProvider.json +4 -4
  39. package/artifacts/contracts/test/MockComputeProvider.sol/artifacts.d.ts +4 -4
  40. package/artifacts/contracts/test/MockDecryptionVerifier.sol/MockDecryptionVerifier.json +3 -3
  41. package/artifacts/contracts/test/MockDecryptionVerifier.sol/artifacts.d.ts +3 -3
  42. package/artifacts/contracts/test/MockE3Program.sol/MockE3Program.json +26 -32
  43. package/artifacts/contracts/test/MockE3Program.sol/artifacts.d.ts +4 -4
  44. package/artifacts/contracts/test/MockSlashingVerifier.sol/MockSlashingVerifier.json +38 -0
  45. package/artifacts/contracts/test/MockSlashingVerifier.sol/artifacts.d.ts +27 -0
  46. package/artifacts/contracts/test/MockStableToken.sol/MockUSDC.json +425 -0
  47. package/artifacts/contracts/test/MockStableToken.sol/artifacts.d.ts +27 -0
  48. package/artifacts/contracts/token/EnclaveTicketToken.sol/EnclaveTicketToken.json +1222 -0
  49. package/artifacts/contracts/token/EnclaveTicketToken.sol/artifacts.d.ts +27 -0
  50. package/artifacts/contracts/token/EnclaveToken.sol/EnclaveToken.json +1460 -0
  51. package/artifacts/contracts/token/EnclaveToken.sol/artifacts.d.ts +27 -0
  52. package/artifacts/poseidon-solidity/PoseidonT3.sol/PoseidonT3.json +3 -3
  53. package/artifacts/poseidon-solidity/PoseidonT3.sol/artifacts.d.ts +3 -3
  54. package/contracts/Enclave.sol +230 -81
  55. package/contracts/interfaces/IBondingRegistry.sol +446 -0
  56. package/contracts/interfaces/ICiphernodeRegistry.sol +153 -9
  57. package/contracts/interfaces/IComputeProvider.sol +12 -2
  58. package/contracts/interfaces/IDecryptionVerifier.sol +11 -6
  59. package/contracts/interfaces/IE3.sol +21 -17
  60. package/contracts/interfaces/IE3Program.sol +30 -17
  61. package/contracts/interfaces/IEnclave.sol +95 -21
  62. package/contracts/interfaces/ISlashVerifier.sol +23 -0
  63. package/contracts/interfaces/ISlashingManager.sol +426 -0
  64. package/contracts/lib/ExitQueueLib.sol +490 -0
  65. package/contracts/registry/BondingRegistry.sol +737 -0
  66. package/contracts/registry/CiphernodeRegistryOwnable.sol +393 -26
  67. package/contracts/slashing/SlashingManager.sol +367 -0
  68. package/contracts/test/MockCiphernodeRegistry.sol +118 -24
  69. package/contracts/test/MockComputeProvider.sol +2 -2
  70. package/contracts/test/MockE3Program.sol +17 -14
  71. package/contracts/test/MockSlashingVerifier.sol +19 -0
  72. package/contracts/test/MockStableToken.sol +28 -0
  73. package/contracts/token/EnclaveTicketToken.sol +243 -0
  74. package/contracts/token/EnclaveToken.sol +267 -0
  75. package/dist/hardhat.config.d.ts.map +1 -1
  76. package/dist/hardhat.config.js +35 -16
  77. package/dist/ignition/modules/{mockInputValidator.d.ts → bondingRegistry.d.ts} +1 -1
  78. package/dist/ignition/modules/bondingRegistry.d.ts.map +1 -0
  79. package/dist/ignition/modules/bondingRegistry.js +35 -0
  80. package/dist/ignition/modules/ciphernodeRegistry.d.ts.map +1 -1
  81. package/dist/ignition/modules/ciphernodeRegistry.js +12 -2
  82. package/dist/ignition/modules/enclave.d.ts.map +1 -1
  83. package/dist/ignition/modules/enclave.js +16 -7
  84. package/dist/ignition/modules/{naiveRegistryFilter.d.ts → enclaveTicketToken.d.ts} +1 -1
  85. package/dist/ignition/modules/enclaveTicketToken.d.ts.map +1 -0
  86. package/dist/ignition/modules/enclaveTicketToken.js +17 -0
  87. package/dist/ignition/modules/enclaveToken.d.ts +3 -0
  88. package/dist/ignition/modules/enclaveToken.d.ts.map +1 -0
  89. package/dist/ignition/modules/{mockInputValidator.js → enclaveToken.js} +4 -4
  90. package/dist/ignition/modules/mockCiphernodeRegistry.d.ts.map +1 -1
  91. package/dist/ignition/modules/mockCiphernodeRegistry.js +0 -1
  92. package/dist/ignition/modules/mockCiphernodeRegistryEmptyKey.d.ts.map +1 -1
  93. package/dist/ignition/modules/mockCiphernodeRegistryEmptyKey.js +0 -1
  94. package/dist/ignition/modules/mockComputeProvider.d.ts.map +1 -1
  95. package/dist/ignition/modules/mockComputeProvider.js +0 -1
  96. package/dist/ignition/modules/mockDecryptionVerifier.d.ts.map +1 -1
  97. package/dist/ignition/modules/mockDecryptionVerifier.js +0 -1
  98. package/dist/ignition/modules/mockE3Program.d.ts.map +1 -1
  99. package/dist/ignition/modules/mockE3Program.js +1 -3
  100. package/dist/ignition/modules/mockSlashingVerifier.d.ts +3 -0
  101. package/dist/ignition/modules/mockSlashingVerifier.d.ts.map +1 -0
  102. package/dist/ignition/modules/mockSlashingVerifier.js +10 -0
  103. package/dist/ignition/modules/mockStableToken.d.ts +3 -0
  104. package/dist/ignition/modules/mockStableToken.d.ts.map +1 -0
  105. package/dist/ignition/modules/mockStableToken.js +11 -0
  106. package/dist/ignition/modules/poseidonT3.d.ts.map +1 -1
  107. package/dist/ignition/modules/poseidonT3.js +0 -1
  108. package/dist/ignition/modules/slashingManager.d.ts +3 -0
  109. package/dist/ignition/modules/slashingManager.d.ts.map +1 -0
  110. package/dist/ignition/modules/slashingManager.js +16 -0
  111. package/dist/scripts/cleanIgnitionState.d.ts +12 -0
  112. package/dist/scripts/cleanIgnitionState.d.ts.map +1 -0
  113. package/dist/scripts/cleanIgnitionState.js +41 -0
  114. package/dist/scripts/deployAndSave/bondingRegistry.d.ts +38 -0
  115. package/dist/scripts/deployAndSave/bondingRegistry.d.ts.map +1 -0
  116. package/dist/scripts/deployAndSave/bondingRegistry.js +133 -0
  117. package/dist/scripts/deployAndSave/ciphernodeRegistryOwnable.d.ts +11 -1
  118. package/dist/scripts/deployAndSave/ciphernodeRegistryOwnable.d.ts.map +1 -1
  119. package/dist/scripts/deployAndSave/ciphernodeRegistryOwnable.js +76 -19
  120. package/dist/scripts/deployAndSave/enclave.d.ts +16 -2
  121. package/dist/scripts/deployAndSave/enclave.d.ts.map +1 -1
  122. package/dist/scripts/deployAndSave/enclave.js +89 -22
  123. package/dist/scripts/deployAndSave/enclaveTicketToken.d.ts +20 -0
  124. package/dist/scripts/deployAndSave/enclaveTicketToken.d.ts.map +1 -0
  125. package/dist/scripts/deployAndSave/enclaveTicketToken.js +41 -0
  126. package/dist/scripts/deployAndSave/enclaveToken.d.ts +18 -0
  127. package/dist/scripts/deployAndSave/enclaveToken.d.ts.map +1 -0
  128. package/dist/scripts/deployAndSave/enclaveToken.js +57 -0
  129. package/dist/scripts/deployAndSave/mockComputeProvider.d.ts.map +1 -1
  130. package/dist/scripts/deployAndSave/mockComputeProvider.js +5 -5
  131. package/dist/scripts/deployAndSave/mockDecryptionVerifier.d.ts.map +1 -1
  132. package/dist/scripts/deployAndSave/mockDecryptionVerifier.js +5 -5
  133. package/dist/scripts/deployAndSave/mockProgram.d.ts +1 -2
  134. package/dist/scripts/deployAndSave/mockProgram.d.ts.map +1 -1
  135. package/dist/scripts/deployAndSave/mockProgram.js +7 -19
  136. package/dist/scripts/deployAndSave/mockStableToken.d.ts +18 -0
  137. package/dist/scripts/deployAndSave/mockStableToken.d.ts.map +1 -0
  138. package/dist/scripts/deployAndSave/mockStableToken.js +36 -0
  139. package/dist/scripts/deployAndSave/poseidonT3.d.ts +11 -0
  140. package/dist/scripts/deployAndSave/poseidonT3.d.ts.map +1 -0
  141. package/dist/scripts/deployAndSave/poseidonT3.js +41 -0
  142. package/dist/scripts/deployAndSave/slashingManager.d.ts +19 -0
  143. package/dist/scripts/deployAndSave/slashingManager.d.ts.map +1 -0
  144. package/dist/scripts/deployAndSave/slashingManager.js +38 -0
  145. package/dist/scripts/deployEnclave.d.ts.map +1 -1
  146. package/dist/scripts/deployEnclave.js +109 -23
  147. package/dist/scripts/deployMocks.d.ts +0 -1
  148. package/dist/scripts/deployMocks.d.ts.map +1 -1
  149. package/dist/scripts/deployMocks.js +3 -6
  150. package/dist/scripts/index.d.ts +7 -2
  151. package/dist/scripts/index.d.ts.map +1 -1
  152. package/dist/scripts/index.js +7 -2
  153. package/dist/scripts/proxy.d.ts +22 -0
  154. package/dist/scripts/proxy.d.ts.map +1 -0
  155. package/dist/scripts/proxy.js +36 -0
  156. package/dist/scripts/runVerification.d.ts +2 -0
  157. package/dist/scripts/runVerification.d.ts.map +1 -0
  158. package/dist/scripts/runVerification.js +16 -0
  159. package/dist/scripts/upgrade/bondingRegistry.d.ts +6 -0
  160. package/dist/scripts/upgrade/bondingRegistry.d.ts.map +1 -0
  161. package/dist/scripts/upgrade/bondingRegistry.js +49 -0
  162. package/dist/scripts/upgrade/ciphernodeRegistryOwnable.d.ts +6 -0
  163. package/dist/scripts/upgrade/ciphernodeRegistryOwnable.d.ts.map +1 -0
  164. package/dist/scripts/upgrade/ciphernodeRegistryOwnable.js +52 -0
  165. package/dist/scripts/upgrade/enclave.d.ts +6 -0
  166. package/dist/scripts/upgrade/enclave.d.ts.map +1 -0
  167. package/dist/scripts/upgrade/enclave.js +49 -0
  168. package/dist/scripts/utils.d.ts +51 -2
  169. package/dist/scripts/utils.d.ts.map +1 -1
  170. package/dist/scripts/utils.js +67 -4
  171. package/dist/scripts/verify.d.ts +6 -0
  172. package/dist/scripts/verify.d.ts.map +1 -0
  173. package/dist/scripts/verify.js +142 -0
  174. package/dist/tasks/ciphernode.d.ts +2 -0
  175. package/dist/tasks/ciphernode.d.ts.map +1 -1
  176. package/dist/tasks/ciphernode.js +290 -19
  177. package/dist/tasks/enclave.d.ts.map +1 -1
  178. package/dist/tasks/enclave.js +76 -31
  179. package/dist/test/Enclave.spec.js +377 -370
  180. package/dist/test/Registry/BondingRegistry.spec.d.ts +2 -0
  181. package/dist/test/Registry/BondingRegistry.spec.d.ts.map +1 -0
  182. package/dist/test/Registry/BondingRegistry.spec.js +684 -0
  183. package/dist/test/Registry/CiphernodeRegistryOwnable.spec.d.ts.map +1 -0
  184. package/dist/test/Registry/CiphernodeRegistryOwnable.spec.js +374 -0
  185. package/dist/test/Slashing/SlashingManager.spec.d.ts +2 -0
  186. package/dist/test/Slashing/SlashingManager.spec.d.ts.map +1 -0
  187. package/dist/test/Slashing/SlashingManager.spec.js +672 -0
  188. package/dist/types/@openzeppelin/contracts/index.d.ts +3 -0
  189. package/dist/types/@openzeppelin/contracts/index.d.ts.map +1 -0
  190. package/dist/types/@openzeppelin/contracts/proxy/index.d.ts +3 -0
  191. package/dist/types/@openzeppelin/contracts/proxy/index.d.ts.map +1 -0
  192. package/dist/types/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.d.ts +97 -0
  193. package/dist/types/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.d.ts.map +1 -0
  194. package/dist/types/{contracts/registry/NaiveRegistryFilter.js → @openzeppelin/contracts/proxy/transparent/ProxyAdmin.js} +0 -4
  195. package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.d.ts +81 -0
  196. package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.d.ts.map +1 -0
  197. package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.js +12 -0
  198. package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.d.ts +52 -0
  199. package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.d.ts.map +1 -0
  200. package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.js +8 -0
  201. package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.d.ts +3 -0
  202. package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.d.ts.map +1 -0
  203. package/dist/types/@openzeppelin/contracts/proxy/transparent/index.d.ts +4 -0
  204. package/dist/types/@openzeppelin/contracts/proxy/transparent/index.d.ts.map +1 -0
  205. package/dist/types/@openzeppelin/index.d.ts +3 -0
  206. package/dist/types/@openzeppelin/index.d.ts.map +1 -0
  207. package/dist/types/contracts/Enclave.d.ts +126 -53
  208. package/dist/types/contracts/Enclave.d.ts.map +1 -1
  209. package/dist/types/contracts/Enclave.js +12 -0
  210. package/dist/types/contracts/index.d.ts +6 -0
  211. package/dist/types/contracts/index.d.ts.map +1 -1
  212. package/dist/types/contracts/interfaces/IBondingRegistry.d.ts +622 -0
  213. package/dist/types/contracts/interfaces/IBondingRegistry.d.ts.map +1 -0
  214. package/dist/types/contracts/interfaces/IBondingRegistry.js +24 -0
  215. package/dist/types/contracts/interfaces/ICiphernodeRegistry.d.ts +245 -15
  216. package/dist/types/contracts/interfaces/ICiphernodeRegistry.d.ts.map +1 -1
  217. package/dist/types/contracts/interfaces/ICiphernodeRegistry.js +16 -0
  218. package/dist/types/contracts/interfaces/IE3Program.d.ts +20 -10
  219. package/dist/types/contracts/interfaces/IE3Program.d.ts.map +1 -1
  220. package/dist/types/contracts/interfaces/IEnclave.d.ts +149 -20
  221. package/dist/types/contracts/interfaces/IEnclave.d.ts.map +1 -1
  222. package/dist/types/contracts/interfaces/IEnclave.js +12 -0
  223. package/dist/types/contracts/interfaces/{IRegistryFilter.d.ts → ISlashVerifier.d.ts} +16 -16
  224. package/dist/types/contracts/interfaces/ISlashVerifier.d.ts.map +1 -0
  225. package/dist/types/contracts/interfaces/ISlashVerifier.js +1 -0
  226. package/dist/types/contracts/interfaces/ISlashingManager.d.ts +384 -0
  227. package/dist/types/contracts/interfaces/ISlashingManager.d.ts.map +1 -0
  228. package/dist/types/contracts/interfaces/ISlashingManager.js +24 -0
  229. package/dist/types/contracts/interfaces/index.d.ts +3 -2
  230. package/dist/types/contracts/interfaces/index.d.ts.map +1 -1
  231. package/dist/types/contracts/lib/ExitQueueLib.d.ts +73 -0
  232. package/dist/types/contracts/lib/ExitQueueLib.d.ts.map +1 -0
  233. package/dist/types/contracts/lib/ExitQueueLib.js +12 -0
  234. package/dist/types/contracts/lib/index.d.ts +2 -0
  235. package/dist/types/contracts/lib/index.d.ts.map +1 -0
  236. package/dist/types/contracts/lib/index.js +1 -0
  237. package/dist/types/contracts/registry/BondingRegistry.d.ts +821 -0
  238. package/dist/types/contracts/registry/BondingRegistry.d.ts.map +1 -0
  239. package/dist/types/contracts/registry/BondingRegistry.js +44 -0
  240. package/dist/types/contracts/registry/CiphernodeRegistryOwnable.d.ts +194 -34
  241. package/dist/types/contracts/registry/CiphernodeRegistryOwnable.d.ts.map +1 -1
  242. package/dist/types/contracts/registry/CiphernodeRegistryOwnable.js +20 -0
  243. package/dist/types/contracts/registry/index.d.ts +1 -1
  244. package/dist/types/contracts/registry/index.d.ts.map +1 -1
  245. package/dist/types/contracts/slashing/SlashingManager.d.ts +592 -0
  246. package/dist/types/contracts/slashing/SlashingManager.d.ts.map +1 -0
  247. package/dist/types/contracts/slashing/SlashingManager.js +36 -0
  248. package/dist/types/contracts/slashing/index.d.ts +2 -0
  249. package/dist/types/contracts/slashing/index.d.ts.map +1 -0
  250. package/dist/types/contracts/slashing/index.js +1 -0
  251. package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry.d.ts +247 -17
  252. package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry.d.ts.map +1 -1
  253. package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry.js +16 -0
  254. package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey.d.ts +247 -17
  255. package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey.d.ts.map +1 -1
  256. package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey.js +16 -0
  257. package/dist/types/contracts/test/MockE3Program.d.ts +20 -14
  258. package/dist/types/contracts/test/MockE3Program.d.ts.map +1 -1
  259. package/dist/types/contracts/test/{MockInputValidator.d.ts → MockSlashingVerifier.d.ts} +15 -15
  260. package/dist/types/contracts/test/MockSlashingVerifier.d.ts.map +1 -0
  261. package/dist/types/contracts/test/MockSlashingVerifier.js +1 -0
  262. package/dist/types/contracts/test/MockStableToken.sol/MockUSDC.d.ts +227 -0
  263. package/dist/types/contracts/test/MockStableToken.sol/MockUSDC.d.ts.map +1 -0
  264. package/dist/types/contracts/test/MockStableToken.sol/MockUSDC.js +12 -0
  265. package/dist/types/contracts/test/MockStableToken.sol/index.d.ts +2 -0
  266. package/dist/types/contracts/test/MockStableToken.sol/index.d.ts.map +1 -0
  267. package/dist/types/contracts/test/MockStableToken.sol/index.js +1 -0
  268. package/dist/types/contracts/test/index.d.ts +3 -3
  269. package/dist/types/contracts/test/index.d.ts.map +1 -1
  270. package/dist/types/contracts/token/EnclaveTicketToken.d.ts +574 -0
  271. package/dist/types/contracts/token/EnclaveTicketToken.d.ts.map +1 -0
  272. package/dist/types/contracts/token/EnclaveTicketToken.js +24 -0
  273. package/dist/types/contracts/token/EnclaveToken.d.ts +775 -0
  274. package/dist/types/contracts/token/EnclaveToken.d.ts.map +1 -0
  275. package/dist/types/contracts/token/EnclaveToken.js +48 -0
  276. package/dist/types/contracts/token/index.d.ts +3 -0
  277. package/dist/types/contracts/token/index.d.ts.map +1 -0
  278. package/dist/types/contracts/token/index.js +1 -0
  279. package/dist/types/factories/@openzeppelin/contracts/index.d.ts +2 -0
  280. package/dist/types/factories/@openzeppelin/contracts/index.d.ts.map +1 -0
  281. package/dist/types/factories/@openzeppelin/contracts/index.js +4 -0
  282. package/dist/types/factories/@openzeppelin/contracts/proxy/index.d.ts +2 -0
  283. package/dist/types/factories/@openzeppelin/contracts/proxy/index.d.ts.map +1 -0
  284. package/dist/types/factories/@openzeppelin/contracts/proxy/index.js +4 -0
  285. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/ProxyAdmin__factory.d.ts +118 -0
  286. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/ProxyAdmin__factory.d.ts.map +1 -0
  287. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/ProxyAdmin__factory.js +157 -0
  288. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy__factory.d.ts +57 -0
  289. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy__factory.d.ts.map +1 -0
  290. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy__factory.js +78 -0
  291. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy__factory.d.ts +105 -0
  292. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy__factory.d.ts.map +1 -0
  293. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy__factory.js +141 -0
  294. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.d.ts +3 -0
  295. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.d.ts.map +1 -0
  296. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.js +5 -0
  297. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/index.d.ts +3 -0
  298. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/index.d.ts.map +1 -0
  299. package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/index.js +5 -0
  300. package/dist/types/factories/@openzeppelin/index.d.ts +2 -0
  301. package/dist/types/factories/@openzeppelin/index.d.ts.map +1 -0
  302. package/dist/types/factories/@openzeppelin/index.js +4 -0
  303. package/dist/types/factories/contracts/Enclave__factory.d.ts +190 -104
  304. package/dist/types/factories/contracts/Enclave__factory.d.ts.map +1 -1
  305. package/dist/types/factories/contracts/Enclave__factory.js +241 -134
  306. package/dist/types/factories/contracts/index.d.ts +3 -0
  307. package/dist/types/factories/contracts/index.d.ts.map +1 -1
  308. package/dist/types/factories/contracts/index.js +3 -0
  309. package/dist/types/factories/contracts/interfaces/IBondingRegistry__factory.d.ts +678 -0
  310. package/dist/types/factories/contracts/interfaces/IBondingRegistry__factory.d.ts.map +1 -0
  311. package/dist/types/factories/contracts/interfaces/IBondingRegistry__factory.js +882 -0
  312. package/dist/types/factories/contracts/interfaces/ICiphernodeRegistry__factory.d.ts +253 -9
  313. package/dist/types/factories/contracts/interfaces/ICiphernodeRegistry__factory.d.ts.map +1 -1
  314. package/dist/types/factories/contracts/interfaces/ICiphernodeRegistry__factory.js +325 -9
  315. package/dist/types/factories/contracts/interfaces/IE3Program__factory.d.ts +16 -2
  316. package/dist/types/factories/contracts/interfaces/IE3Program__factory.d.ts.map +1 -1
  317. package/dist/types/factories/contracts/interfaces/IE3Program__factory.js +20 -2
  318. package/dist/types/factories/contracts/interfaces/IEnclave__factory.d.ts +190 -24
  319. package/dist/types/factories/contracts/interfaces/IEnclave__factory.d.ts.map +1 -1
  320. package/dist/types/factories/contracts/interfaces/IEnclave__factory.js +246 -26
  321. package/dist/types/factories/contracts/interfaces/ISlashVerifier__factory.d.ts +26 -0
  322. package/dist/types/factories/contracts/interfaces/ISlashVerifier__factory.d.ts.map +1 -0
  323. package/dist/types/factories/contracts/interfaces/{IRegistryFilter__factory.js → ISlashVerifier__factory.js} +7 -7
  324. package/dist/types/factories/contracts/interfaces/ISlashingManager__factory.d.ts +594 -0
  325. package/dist/types/factories/contracts/interfaces/ISlashingManager__factory.d.ts.map +1 -0
  326. package/dist/types/factories/contracts/interfaces/ISlashingManager__factory.js +760 -0
  327. package/dist/types/factories/contracts/interfaces/index.d.ts +3 -2
  328. package/dist/types/factories/contracts/interfaces/index.d.ts.map +1 -1
  329. package/dist/types/factories/contracts/interfaces/index.js +3 -2
  330. package/dist/types/factories/contracts/lib/ExitQueueLib__factory.d.ts +107 -0
  331. package/dist/types/factories/contracts/lib/ExitQueueLib__factory.d.ts.map +1 -0
  332. package/dist/types/factories/contracts/lib/ExitQueueLib__factory.js +138 -0
  333. package/dist/types/factories/contracts/lib/index.d.ts +2 -0
  334. package/dist/types/factories/contracts/lib/index.d.ts.map +1 -0
  335. package/dist/types/factories/contracts/lib/index.js +4 -0
  336. package/dist/types/factories/contracts/registry/BondingRegistry__factory.d.ts +958 -0
  337. package/dist/types/factories/contracts/registry/BondingRegistry__factory.d.ts.map +1 -0
  338. package/dist/types/factories/contracts/registry/BondingRegistry__factory.js +1239 -0
  339. package/dist/types/factories/contracts/registry/CiphernodeRegistryOwnable__factory.d.ts +272 -40
  340. package/dist/types/factories/contracts/registry/CiphernodeRegistryOwnable__factory.d.ts.map +1 -1
  341. package/dist/types/factories/contracts/registry/CiphernodeRegistryOwnable__factory.js +343 -49
  342. package/dist/types/factories/contracts/registry/index.d.ts +1 -1
  343. package/dist/types/factories/contracts/registry/index.d.ts.map +1 -1
  344. package/dist/types/factories/contracts/registry/index.js +1 -1
  345. package/dist/types/factories/contracts/slashing/SlashingManager__factory.d.ts +879 -0
  346. package/dist/types/factories/contracts/slashing/SlashingManager__factory.d.ts.map +1 -0
  347. package/dist/types/factories/contracts/slashing/SlashingManager__factory.js +1129 -0
  348. package/dist/types/factories/contracts/slashing/index.d.ts +2 -0
  349. package/dist/types/factories/contracts/slashing/index.d.ts.map +1 -0
  350. package/dist/types/factories/contracts/slashing/index.js +4 -0
  351. package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey__factory.d.ts +254 -10
  352. package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey__factory.d.ts.map +1 -1
  353. package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey__factory.js +326 -10
  354. package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry__factory.d.ts +254 -10
  355. package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry__factory.d.ts.map +1 -1
  356. package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry__factory.js +326 -10
  357. package/dist/types/factories/contracts/test/MockComputeProvider__factory.d.ts +2 -2
  358. package/dist/types/factories/contracts/test/MockComputeProvider__factory.d.ts.map +1 -1
  359. package/dist/types/factories/contracts/test/MockComputeProvider__factory.js +2 -2
  360. package/dist/types/factories/contracts/test/MockDecryptionVerifier__factory.d.ts +1 -1
  361. package/dist/types/factories/contracts/test/MockDecryptionVerifier__factory.d.ts.map +1 -1
  362. package/dist/types/factories/contracts/test/MockDecryptionVerifier__factory.js +1 -1
  363. package/dist/types/factories/contracts/test/MockE3Program__factory.d.ts +23 -27
  364. package/dist/types/factories/contracts/test/MockE3Program__factory.d.ts.map +1 -1
  365. package/dist/types/factories/contracts/test/MockE3Program__factory.js +28 -34
  366. package/dist/types/factories/contracts/test/MockSlashingVerifier__factory.d.ts +43 -0
  367. package/dist/types/factories/contracts/test/MockSlashingVerifier__factory.d.ts.map +1 -0
  368. package/dist/types/factories/contracts/test/MockSlashingVerifier__factory.js +60 -0
  369. package/dist/types/factories/contracts/test/MockStableToken.sol/MockUSDC__factory.d.ts +338 -0
  370. package/dist/types/factories/contracts/test/MockStableToken.sol/MockUSDC__factory.d.ts.map +1 -0
  371. package/dist/types/factories/contracts/test/MockStableToken.sol/MockUSDC__factory.js +447 -0
  372. package/dist/types/factories/contracts/test/MockStableToken.sol/index.d.ts +2 -0
  373. package/dist/types/factories/contracts/test/MockStableToken.sol/index.d.ts.map +1 -0
  374. package/dist/types/factories/contracts/test/MockStableToken.sol/index.js +4 -0
  375. package/dist/types/factories/contracts/test/index.d.ts +2 -2
  376. package/dist/types/factories/contracts/test/index.d.ts.map +1 -1
  377. package/dist/types/factories/contracts/test/index.js +2 -2
  378. package/dist/types/factories/contracts/token/EnclaveTicketToken__factory.d.ts +894 -0
  379. package/dist/types/factories/contracts/token/EnclaveTicketToken__factory.d.ts.map +1 -0
  380. package/dist/types/factories/contracts/token/EnclaveTicketToken__factory.js +1175 -0
  381. package/dist/types/factories/contracts/token/EnclaveToken__factory.d.ts +1101 -0
  382. package/dist/types/factories/contracts/token/EnclaveToken__factory.d.ts.map +1 -0
  383. package/dist/types/factories/contracts/token/EnclaveToken__factory.js +1439 -0
  384. package/dist/types/factories/contracts/token/index.d.ts +3 -0
  385. package/dist/types/factories/contracts/token/index.d.ts.map +1 -0
  386. package/dist/types/factories/contracts/token/index.js +5 -0
  387. package/dist/types/factories/index.d.ts +1 -0
  388. package/dist/types/factories/index.d.ts.map +1 -1
  389. package/dist/types/factories/index.js +1 -0
  390. package/dist/types/factories/poseidon-solidity/PoseidonT3__factory.d.ts +1 -1
  391. package/dist/types/factories/poseidon-solidity/PoseidonT3__factory.d.ts.map +1 -1
  392. package/dist/types/factories/poseidon-solidity/PoseidonT3__factory.js +1 -1
  393. package/dist/types/index.d.ts +28 -12
  394. package/dist/types/index.d.ts.map +1 -1
  395. package/dist/types/index.js +13 -6
  396. package/package.json +30 -21
  397. package/LICENSE.md +0 -165
  398. package/artifacts/build-info/solc-0_8_27-9aea5e3f6e25811e781e96c22e8edaf1eb1a01c5.json +0 -130
  399. package/artifacts/build-info/solc-0_8_27-9aea5e3f6e25811e781e96c22e8edaf1eb1a01c5.output.json +0 -1
  400. package/artifacts/contracts/interfaces/IInputValidator.sol/IInputValidator.json +0 -38
  401. package/artifacts/contracts/interfaces/IInputValidator.sol/artifacts.d.ts +0 -27
  402. package/artifacts/contracts/interfaces/IRegistryFilter.sol/artifacts.d.ts +0 -27
  403. package/artifacts/contracts/registry/NaiveRegistryFilter.sol/NaiveRegistryFilter.json +0 -309
  404. package/artifacts/contracts/registry/NaiveRegistryFilter.sol/artifacts.d.ts +0 -27
  405. package/artifacts/contracts/test/MockInputValidator.sol/MockInputValidator.json +0 -43
  406. package/artifacts/contracts/test/MockInputValidator.sol/artifacts.d.ts +0 -27
  407. package/artifacts/contracts/test/MockRegistryFilter.sol/IRegistry.json +0 -37
  408. package/artifacts/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter.json +0 -262
  409. package/artifacts/contracts/test/MockRegistryFilter.sol/artifacts.d.ts +0 -43
  410. package/contracts/interfaces/IInputValidator.sol +0 -18
  411. package/contracts/interfaces/IRegistryFilter.sol +0 -13
  412. package/contracts/registry/NaiveRegistryFilter.sol +0 -124
  413. package/contracts/test/MockInputValidator.sol +0 -29
  414. package/contracts/test/MockRegistryFilter.sol +0 -117
  415. package/dist/ignition/modules/mockInputValidator.d.ts.map +0 -1
  416. package/dist/ignition/modules/naiveRegistryFilter.d.ts.map +0 -1
  417. package/dist/ignition/modules/naiveRegistryFilter.js +0 -16
  418. package/dist/scripts/deployAndSave/mockInputValidator.d.ts +0 -6
  419. package/dist/scripts/deployAndSave/mockInputValidator.d.ts.map +0 -1
  420. package/dist/scripts/deployAndSave/mockInputValidator.js +0 -18
  421. package/dist/scripts/deployAndSave/naiveRegistryFilter.d.ts +0 -11
  422. package/dist/scripts/deployAndSave/naiveRegistryFilter.d.ts.map +0 -1
  423. package/dist/scripts/deployAndSave/naiveRegistryFilter.js +0 -41
  424. package/dist/test/CiphernodeRegistry/CiphernodeRegistryOwnable.spec.d.ts.map +0 -1
  425. package/dist/test/CiphernodeRegistry/CiphernodeRegistryOwnable.spec.js +0 -279
  426. package/dist/test/CiphernodeRegistry/NaiveRegistryFilter.spec.d.ts +0 -2
  427. package/dist/test/CiphernodeRegistry/NaiveRegistryFilter.spec.d.ts.map +0 -1
  428. package/dist/test/CiphernodeRegistry/NaiveRegistryFilter.spec.js +0 -160
  429. package/dist/types/contracts/interfaces/IInputValidator.d.ts +0 -36
  430. package/dist/types/contracts/interfaces/IInputValidator.d.ts.map +0 -1
  431. package/dist/types/contracts/interfaces/IRegistryFilter.d.ts.map +0 -1
  432. package/dist/types/contracts/registry/NaiveRegistryFilter.d.ts +0 -187
  433. package/dist/types/contracts/registry/NaiveRegistryFilter.d.ts.map +0 -1
  434. package/dist/types/contracts/test/MockInputValidator.d.ts.map +0 -1
  435. package/dist/types/contracts/test/MockRegistryFilter.sol/IRegistry.d.ts +0 -38
  436. package/dist/types/contracts/test/MockRegistryFilter.sol/IRegistry.d.ts.map +0 -1
  437. package/dist/types/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter.d.ts +0 -163
  438. package/dist/types/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter.d.ts.map +0 -1
  439. package/dist/types/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter.js +0 -8
  440. package/dist/types/contracts/test/MockRegistryFilter.sol/index.d.ts +0 -3
  441. package/dist/types/contracts/test/MockRegistryFilter.sol/index.d.ts.map +0 -1
  442. package/dist/types/factories/contracts/interfaces/IInputValidator__factory.d.ts +0 -26
  443. package/dist/types/factories/contracts/interfaces/IInputValidator__factory.d.ts.map +0 -1
  444. package/dist/types/factories/contracts/interfaces/IInputValidator__factory.js +0 -39
  445. package/dist/types/factories/contracts/interfaces/IRegistryFilter__factory.d.ts +0 -26
  446. package/dist/types/factories/contracts/interfaces/IRegistryFilter__factory.d.ts.map +0 -1
  447. package/dist/types/factories/contracts/registry/NaiveRegistryFilter__factory.d.ts +0 -251
  448. package/dist/types/factories/contracts/registry/NaiveRegistryFilter__factory.d.ts.map +0 -1
  449. package/dist/types/factories/contracts/registry/NaiveRegistryFilter__factory.js +0 -331
  450. package/dist/types/factories/contracts/test/MockInputValidator__factory.d.ts +0 -47
  451. package/dist/types/factories/contracts/test/MockInputValidator__factory.d.ts.map +0 -1
  452. package/dist/types/factories/contracts/test/MockInputValidator__factory.js +0 -65
  453. package/dist/types/factories/contracts/test/MockRegistryFilter.sol/IRegistry__factory.d.ts +0 -26
  454. package/dist/types/factories/contracts/test/MockRegistryFilter.sol/IRegistry__factory.d.ts.map +0 -1
  455. package/dist/types/factories/contracts/test/MockRegistryFilter.sol/IRegistry__factory.js +0 -38
  456. package/dist/types/factories/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter__factory.d.ts +0 -216
  457. package/dist/types/factories/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter__factory.d.ts.map +0 -1
  458. package/dist/types/factories/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter__factory.js +0 -284
  459. package/dist/types/factories/contracts/test/MockRegistryFilter.sol/index.d.ts +0 -3
  460. package/dist/types/factories/contracts/test/MockRegistryFilter.sol/index.d.ts.map +0 -1
  461. package/dist/types/factories/contracts/test/MockRegistryFilter.sol/index.js +0 -5
  462. /package/dist/test/{CiphernodeRegistry → Registry}/CiphernodeRegistryOwnable.spec.d.ts +0 -0
  463. /package/dist/types/{contracts/test/MockRegistryFilter.sol → @openzeppelin/contracts}/index.js +0 -0
  464. /package/dist/types/{contracts/interfaces/IInputValidator.js → @openzeppelin/contracts/proxy/index.js} +0 -0
  465. /package/dist/types/{contracts/interfaces/IRegistryFilter.js → @openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.js} +0 -0
  466. /package/dist/types/{contracts/test/MockInputValidator.js → @openzeppelin/contracts/proxy/transparent/index.js} +0 -0
  467. /package/dist/types/{contracts/test/MockRegistryFilter.sol/IRegistry.js → @openzeppelin/index.js} +0 -0
@@ -6,7 +6,7 @@
6
6
  pragma solidity >=0.8.27;
7
7
 
8
8
  import { ICiphernodeRegistry } from "../interfaces/ICiphernodeRegistry.sol";
9
- import { IRegistryFilter } from "../interfaces/IRegistryFilter.sol";
9
+ import { IBondingRegistry } from "../interfaces/IBondingRegistry.sol";
10
10
  import {
11
11
  OwnableUpgradeable
12
12
  } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
@@ -15,60 +15,189 @@ import {
15
15
  LeanIMTData
16
16
  } from "@zk-kit/lean-imt.sol/InternalLeanIMT.sol";
17
17
 
18
+ /**
19
+ * @title CiphernodeRegistryOwnable
20
+ * @notice Ownable implementation of the ciphernode registry with IMT-based membership tracking
21
+ * @dev Manages ciphernode registration, committee selection, and integrates with bonding registry
22
+ */
18
23
  contract CiphernodeRegistryOwnable is ICiphernodeRegistry, OwnableUpgradeable {
19
24
  using InternalLeanIMT for LeanIMTData;
20
25
 
26
+ ////////////////////////////////////////////////////////////
27
+ // //
28
+ // Events //
29
+ // //
30
+ ////////////////////////////////////////////////////////////
31
+
32
+ /// @notice Emitted when the bonding registry address is set
33
+ /// @param bondingRegistry Address of the bonding registry contract
34
+ event BondingRegistrySet(address indexed bondingRegistry);
35
+
21
36
  ////////////////////////////////////////////////////////////
22
37
  // //
23
38
  // Storage Variables //
24
39
  // //
25
40
  ////////////////////////////////////////////////////////////
26
41
 
42
+ /// @notice Address of the Enclave contract authorized to request committees
27
43
  address public enclave;
44
+
45
+ /// @notice Address of the bonding registry for checking node eligibility
46
+ address public bondingRegistry;
47
+
48
+ /// @notice Current number of registered ciphernodes
28
49
  uint256 public numCiphernodes;
50
+
51
+ /// @notice Submission Window for an E3 Sortition.
52
+ /// @dev The submission window is the time period during which the ciphernodes can submit
53
+ /// their tickets to be a part of the committee.
54
+ uint256 public sortitionSubmissionWindow;
55
+
56
+ /// @notice Incremental Merkle Tree (IMT) containing all registered ciphernodes
29
57
  LeanIMTData public ciphernodes;
30
58
 
31
- mapping(uint256 e3Id => IRegistryFilter filter) public registryFilters;
59
+ /// @notice Maps E3 ID to the IMT root at the time of committee request
32
60
  mapping(uint256 e3Id => uint256 root) public roots;
61
+
62
+ /// @notice Maps E3 ID to the hash of the committee's public key
33
63
  mapping(uint256 e3Id => bytes32 publicKeyHash) public publicKeyHashes;
34
64
 
65
+ /// @notice Maps E3 ID to its committee data
66
+ mapping(uint256 e3Id => Committee committee) internal committees;
67
+
35
68
  ////////////////////////////////////////////////////////////
36
69
  // //
37
70
  // Errors //
38
71
  // //
39
72
  ////////////////////////////////////////////////////////////
40
73
 
74
+ /// @notice Committee has already been requested for this E3
41
75
  error CommitteeAlreadyRequested();
76
+
77
+ /// @notice Committee has already been published for this E3
42
78
  error CommitteeAlreadyPublished();
43
- error OnlyFilter();
79
+
80
+ /// @notice Committee has not been published yet for this E3
44
81
  error CommitteeNotPublished();
82
+
83
+ /// @notice Committee has not been requested yet for this E3
84
+ error CommitteeNotRequested();
85
+
86
+ /// @notice Committee Not Initialized or Finalized
87
+ error CommitteeNotInitializedOrFinalized();
88
+
89
+ /// @notice Submission Window has been closed for this E3
90
+ error SubmissionWindowClosed();
91
+
92
+ /// @notice Submission deadline has been reached for this E3
93
+ error SubmissionDeadlineReached();
94
+
95
+ /// @notice Committee has already been finalized for this E3
96
+ error CommitteeAlreadyFinalized();
97
+
98
+ /// @notice Committee has not been finalized yet for this E3
99
+ error CommitteeNotFinalized();
100
+
101
+ /// @notice Node has already submitted a ticket for this E3
102
+ error NodeAlreadySubmitted();
103
+
104
+ /// @notice Node has not submitted a ticket for this E3
105
+ error NodeNotSubmitted();
106
+
107
+ /// @notice Node is not eligible for this E3
108
+ error NodeNotEligible();
109
+
110
+ /// @notice Ciphernode is not enabled in the registry
111
+ /// @param node Address of the ciphernode
45
112
  error CiphernodeNotEnabled(address node);
113
+
114
+ /// @notice Caller is not the Enclave contract
46
115
  error OnlyEnclave();
47
116
 
117
+ /// @notice Caller is not the bonding registry
118
+ error OnlyBondingRegistry();
119
+
120
+ /// @notice Caller is neither owner nor bonding registry
121
+ error NotOwnerOrBondingRegistry();
122
+
123
+ /// @notice Node is not bonded
124
+ /// @param node Address of the node
125
+ error NodeNotBonded(address node);
126
+
127
+ /// @notice Address cannot be zero
128
+ error ZeroAddress();
129
+
130
+ /// @notice Bonding registry has not been set
131
+ error BondingRegistryNotSet();
132
+
133
+ /// @notice Invalid ticket number
134
+ error InvalidTicketNumber();
135
+
136
+ /// @notice Submission window not closed yet
137
+ error SubmissionWindowNotClosed();
138
+
139
+ /// @notice Threshold not met for this E3
140
+ error ThresholdNotMet();
141
+
142
+ /// @notice Caller is not authorized
143
+ error Unauthorized();
144
+
48
145
  ////////////////////////////////////////////////////////////
49
146
  // //
50
147
  // Modifiers //
51
148
  // //
52
149
  ////////////////////////////////////////////////////////////
53
150
 
151
+ /// @dev Restricts function access to only the Enclave contract
54
152
  modifier onlyEnclave() {
55
153
  require(msg.sender == enclave, OnlyEnclave());
56
154
  _;
57
155
  }
58
156
 
157
+ /// @dev Restricts function access to only the bonding registry
158
+ modifier onlyBondingRegistry() {
159
+ require(msg.sender == bondingRegistry, OnlyBondingRegistry());
160
+ _;
161
+ }
162
+
163
+ /// @dev Restricts function access to owner or bonding registry
164
+ modifier onlyOwnerOrBondingVault() {
165
+ require(
166
+ msg.sender == owner() || msg.sender == bondingRegistry,
167
+ NotOwnerOrBondingRegistry()
168
+ );
169
+ _;
170
+ }
171
+
59
172
  ////////////////////////////////////////////////////////////
60
173
  // //
61
174
  // Initialization //
62
175
  // //
63
176
  ////////////////////////////////////////////////////////////
64
177
 
65
- constructor(address _owner, address _enclave) {
66
- initialize(_owner, _enclave);
178
+ /// @notice Constructor that disables initializers.
179
+ /// @dev Prevents the implementation contract from being initialized. Initialization is performed
180
+ /// via the initialize() function when deployed behind a proxy.
181
+ constructor() {
182
+ _disableInitializers();
67
183
  }
68
184
 
69
- function initialize(address _owner, address _enclave) public initializer {
185
+ /// @notice Initializes the registry contract
186
+ /// @dev Can only be called once due to initializer modifier
187
+ /// @param _owner Address that will own the contract
188
+ /// @param _enclave Address of the Enclave contract
189
+ /// @param _submissionWindow The submission window for the E3 sortition in seconds
190
+ function initialize(
191
+ address _owner,
192
+ address _enclave,
193
+ uint256 _submissionWindow
194
+ ) public initializer {
195
+ require(_owner != address(0), ZeroAddress());
196
+ require(_enclave != address(0), ZeroAddress());
197
+
70
198
  __Ownable_init(msg.sender);
71
199
  setEnclave(_enclave);
200
+ setSortitionSubmissionWindow(_submissionWindow);
72
201
  if (_owner != owner()) transferOwnership(_owner);
73
202
  }
74
203
 
@@ -78,36 +207,64 @@ contract CiphernodeRegistryOwnable is ICiphernodeRegistry, OwnableUpgradeable {
78
207
  // //
79
208
  ////////////////////////////////////////////////////////////
80
209
 
210
+ /// @inheritdoc ICiphernodeRegistry
81
211
  function requestCommittee(
82
212
  uint256 e3Id,
83
- address filter,
213
+ uint256 seed,
84
214
  uint32[2] calldata threshold
85
215
  ) external onlyEnclave returns (bool success) {
86
- require(
87
- registryFilters[e3Id] == IRegistryFilter(address(0)),
88
- CommitteeAlreadyRequested()
89
- );
90
- registryFilters[e3Id] = IRegistryFilter(filter);
216
+ Committee storage c = committees[e3Id];
217
+ require(!c.initialized, CommitteeAlreadyRequested());
218
+
219
+ c.initialized = true;
220
+ c.finalized = false;
221
+ c.seed = seed;
222
+ c.requestBlock = block.number;
223
+ c.submissionDeadline = block.timestamp + sortitionSubmissionWindow;
224
+ c.threshold = threshold;
91
225
  roots[e3Id] = root();
92
226
 
93
- IRegistryFilter(filter).requestCommittee(e3Id, threshold);
94
- emit CommitteeRequested(e3Id, filter, threshold);
227
+ emit CommitteeRequested(
228
+ e3Id,
229
+ seed,
230
+ threshold,
231
+ c.requestBlock,
232
+ c.submissionDeadline
233
+ );
95
234
  success = true;
96
235
  }
97
236
 
237
+ /// @notice Publishes a committee for an E3 computation
238
+ /// @dev Only callable by owner. Verifies committee is finalized and matches provided nodes.
239
+ /// @param e3Id ID of the E3 computation
240
+ /// @param nodes Array of ciphernode addresses selected for the committee
241
+ /// @param publicKey Aggregated public key of the committee
98
242
  function publishCommittee(
99
243
  uint256 e3Id,
100
- bytes calldata,
244
+ address[] calldata nodes,
101
245
  bytes calldata publicKey
102
- ) external {
103
- // only to be published by the filter
104
- require(address(registryFilters[e3Id]) == msg.sender, OnlyFilter());
246
+ ) external onlyOwner {
247
+ Committee storage c = committees[e3Id];
248
+
249
+ require(c.initialized, CommitteeNotRequested());
250
+ require(c.finalized, CommitteeNotFinalized());
251
+ require(c.publicKey == bytes32(0), CommitteeAlreadyPublished());
252
+ require(nodes.length == c.committee.length, "Node count mismatch");
105
253
 
106
- publicKeyHashes[e3Id] = keccak256(publicKey);
107
- emit CommitteePublished(e3Id, publicKey);
254
+ // TODO: Currently we trust the owner to publish the correct committee.
255
+ // TODO: Need a Proof that the public key is generated from the committee
256
+ bytes32 publicKeyHash = keccak256(publicKey);
257
+ c.publicKey = publicKeyHash;
258
+ publicKeyHashes[e3Id] = publicKeyHash;
259
+ emit CommitteePublished(e3Id, nodes, publicKey);
108
260
  }
109
261
 
110
- function addCiphernode(address node) external onlyOwner {
262
+ /// @inheritdoc ICiphernodeRegistry
263
+ function addCiphernode(address node) external onlyOwnerOrBondingVault {
264
+ if (isEnabled(node)) {
265
+ return;
266
+ }
267
+
111
268
  uint160 ciphernode = uint160(node);
112
269
  ciphernodes._insert(ciphernode);
113
270
  numCiphernodes++;
@@ -119,10 +276,13 @@ contract CiphernodeRegistryOwnable is ICiphernodeRegistry, OwnableUpgradeable {
119
276
  );
120
277
  }
121
278
 
279
+ /// @inheritdoc ICiphernodeRegistry
122
280
  function removeCiphernode(
123
281
  address node,
124
282
  uint256[] calldata siblingNodes
125
- ) external onlyOwner {
283
+ ) external onlyOwnerOrBondingVault {
284
+ require(isEnabled(node), CiphernodeNotEnabled(node));
285
+
126
286
  uint160 ciphernode = uint160(node);
127
287
  uint256 index = ciphernodes._indexOf(ciphernode);
128
288
  ciphernodes._remove(ciphernode, siblingNodes);
@@ -130,23 +290,115 @@ contract CiphernodeRegistryOwnable is ICiphernodeRegistry, OwnableUpgradeable {
130
290
  emit CiphernodeRemoved(node, index, numCiphernodes, ciphernodes.size);
131
291
  }
132
292
 
293
+ ////////////////////////////////////////////////////////////
294
+ // //
295
+ // Sortition Functions //
296
+ // //
297
+ ////////////////////////////////////////////////////////////
298
+
299
+ /// @notice Submit a ticket for sortition
300
+ /// @dev Validates ticket against node's balance at request block and inserts into top-N
301
+ /// @param e3Id ID of the E3 computation
302
+ /// @param ticketNumber The ticket number to submit (1 to available tickets at snapshot)
303
+ function submitTicket(uint256 e3Id, uint256 ticketNumber) external {
304
+ Committee storage c = committees[e3Id];
305
+ require(c.initialized, CommitteeNotRequested());
306
+ require(!c.finalized, CommitteeAlreadyFinalized());
307
+ require(
308
+ block.timestamp <= c.submissionDeadline,
309
+ SubmissionDeadlineReached()
310
+ );
311
+ require(!c.submitted[msg.sender], NodeAlreadySubmitted());
312
+ require(isCiphernodeEligible(msg.sender), NodeNotEligible());
313
+
314
+ // Validate node eligibility and ticket number
315
+ _validateNodeEligibility(msg.sender, ticketNumber, e3Id);
316
+
317
+ // Compute score
318
+ uint256 score = _computeTicketScore(
319
+ msg.sender,
320
+ ticketNumber,
321
+ e3Id,
322
+ c.seed
323
+ );
324
+
325
+ // Store submission
326
+ c.submitted[msg.sender] = true;
327
+
328
+ // Insert into top-N (ascending score)
329
+ _insertTopN(c, msg.sender, score);
330
+
331
+ emit TicketSubmitted(e3Id, msg.sender, ticketNumber, score);
332
+ }
333
+
334
+ /// @notice Finalize the committee after submission window closes
335
+ /// @dev Can be called by anyone after the deadline. Reverts if not enough nodes submitted.
336
+ /// @param e3Id ID of the E3 computation
337
+ function finalizeCommittee(uint256 e3Id) external {
338
+ Committee storage c = committees[e3Id];
339
+ require(c.initialized, CommitteeNotRequested());
340
+ require(!c.finalized, CommitteeAlreadyFinalized());
341
+ require(
342
+ block.timestamp >= c.submissionDeadline,
343
+ SubmissionWindowNotClosed()
344
+ );
345
+ // TODO: Handle what happens if the threshold is not met.
346
+ require(c.topNodes.length >= c.threshold[0], ThresholdNotMet());
347
+
348
+ c.finalized = true;
349
+ c.committee = c.topNodes;
350
+
351
+ emit CommitteeFinalized(e3Id, c.topNodes);
352
+ }
353
+
354
+ /// @notice Check if submission window is still open for an E3
355
+ /// @param e3Id ID of the E3 computation
356
+ /// @return Whether the submission window is open
357
+ function isOpen(uint256 e3Id) public view returns (bool) {
358
+ Committee storage c = committees[e3Id];
359
+ if (!c.initialized || c.finalized) return false;
360
+ return block.timestamp <= c.submissionDeadline;
361
+ }
362
+
133
363
  ////////////////////////////////////////////////////////////
134
364
  // //
135
365
  // Set Functions //
136
366
  // //
137
367
  ////////////////////////////////////////////////////////////
138
368
 
369
+ /// @notice Sets the Enclave contract address
370
+ /// @dev Only callable by owner
371
+ /// @param _enclave Address of the Enclave contract
139
372
  function setEnclave(address _enclave) public onlyOwner {
373
+ require(_enclave != address(0), ZeroAddress());
140
374
  enclave = _enclave;
141
375
  emit EnclaveSet(_enclave);
142
376
  }
143
377
 
378
+ /// @notice Sets the bonding registry contract address
379
+ /// @dev Only callable by owner
380
+ /// @param _bondingRegistry Address of the bonding registry contract
381
+ function setBondingRegistry(address _bondingRegistry) public onlyOwner {
382
+ require(_bondingRegistry != address(0), ZeroAddress());
383
+ bondingRegistry = _bondingRegistry;
384
+ emit BondingRegistrySet(_bondingRegistry);
385
+ }
386
+
387
+ /// @inheritdoc ICiphernodeRegistry
388
+ function setSortitionSubmissionWindow(
389
+ uint256 _sortitionSubmissionWindow
390
+ ) public onlyOwner {
391
+ sortitionSubmissionWindow = _sortitionSubmissionWindow;
392
+ emit SortitionSubmissionWindowSet(_sortitionSubmissionWindow);
393
+ }
394
+
144
395
  ////////////////////////////////////////////////////////////
145
396
  // //
146
397
  // Get Functions //
147
398
  // //
148
399
  ////////////////////////////////////////////////////////////
149
400
 
401
+ /// @inheritdoc ICiphernodeRegistry
150
402
  function committeePublicKey(
151
403
  uint256 e3Id
152
404
  ) external view returns (bytes32 publicKeyHash) {
@@ -154,27 +406,142 @@ contract CiphernodeRegistryOwnable is ICiphernodeRegistry, OwnableUpgradeable {
154
406
  require(publicKeyHash != bytes32(0), CommitteeNotPublished());
155
407
  }
156
408
 
157
- function isCiphernodeEligible(address node) external view returns (bool) {
158
- return isEnabled(node);
409
+ /// @inheritdoc ICiphernodeRegistry
410
+ function isCiphernodeEligible(address node) public view returns (bool) {
411
+ if (!isEnabled(node)) return false;
412
+
413
+ require(bondingRegistry != address(0), BondingRegistryNotSet());
414
+ return IBondingRegistry(bondingRegistry).isActive(node);
159
415
  }
160
416
 
417
+ /// @inheritdoc ICiphernodeRegistry
161
418
  function isEnabled(address node) public view returns (bool) {
162
419
  return ciphernodes._has(uint160(node));
163
420
  }
164
421
 
422
+ /// @notice Returns the current root of the ciphernode IMT
423
+ /// @return Current IMT root
165
424
  function root() public view returns (uint256) {
166
425
  return (ciphernodes._root());
167
426
  }
168
427
 
428
+ /// @notice Returns the IMT root at the time a committee was requested
429
+ /// @param e3Id ID of the E3
430
+ /// @return IMT root at time of committee request
169
431
  function rootAt(uint256 e3Id) public view returns (uint256) {
170
432
  return roots[e3Id];
171
433
  }
172
434
 
173
- function getFilter(uint256 e3Id) public view returns (IRegistryFilter) {
174
- return registryFilters[e3Id];
435
+ /// @inheritdoc ICiphernodeRegistry
436
+ function getCommitteeNodes(
437
+ uint256 e3Id
438
+ ) public view returns (address[] memory nodes) {
439
+ Committee storage c = committees[e3Id];
440
+ require(c.publicKey != bytes32(0), CommitteeNotPublished());
441
+ nodes = c.committee;
175
442
  }
176
443
 
444
+ /// @notice Returns the current size of the ciphernode IMT
445
+ /// @return Size of the IMT
177
446
  function treeSize() public view returns (uint256) {
178
447
  return ciphernodes.size;
179
448
  }
449
+
450
+ /// @notice Returns the address of the bonding registry
451
+ /// @return Address of the bonding registry contract
452
+ function getBondingRegistry() external view returns (address) {
453
+ return bondingRegistry;
454
+ }
455
+
456
+ ////////////////////////////////////////////////////////////
457
+ // //
458
+ // Internal Functions //
459
+ // //
460
+ ////////////////////////////////////////////////////////////
461
+
462
+ /// @notice Computes ticket score as keccak256(node || ticketNumber || e3Id || seed)
463
+ /// @param node Address of the ciphernode
464
+ /// @param ticketNumber The ticket number
465
+ /// @param e3Id ID of the E3 computation
466
+ /// @param seed Random seed for the E3
467
+ /// @return score The computed score
468
+ function _computeTicketScore(
469
+ address node,
470
+ uint256 ticketNumber,
471
+ uint256 e3Id,
472
+ uint256 seed
473
+ ) internal pure returns (uint256) {
474
+ bytes32 hash = keccak256(
475
+ abi.encodePacked(node, ticketNumber, e3Id, seed)
476
+ );
477
+ return uint256(hash);
478
+ }
479
+
480
+ /// @notice Validates that a node is eligible to submit a ticket
481
+ /// @dev Uses snapshot of ticket balance at E3 request block for deterministic validation
482
+ /// @param node Address of the ciphernode
483
+ /// @param ticketNumber The ticket number being submitted
484
+ /// @param e3Id ID of the E3 computation
485
+ function _validateNodeEligibility(
486
+ address node,
487
+ uint256 ticketNumber,
488
+ uint256 e3Id
489
+ ) internal view {
490
+ require(ticketNumber > 0, InvalidTicketNumber());
491
+ require(bondingRegistry != address(0), BondingRegistryNotSet());
492
+
493
+ Committee storage c = committees[e3Id];
494
+
495
+ // @todo Ensure we check everywhere that we use the block before the request block
496
+ // to ensure cases where everything is done in the same block are handled correctly.
497
+ uint256 ticketBalance = IBondingRegistry(bondingRegistry)
498
+ .getTicketBalanceAtBlock(node, c.requestBlock - 1);
499
+ uint256 ticketPrice = IBondingRegistry(bondingRegistry).ticketPrice();
500
+
501
+ require(ticketPrice > 0, InvalidTicketNumber());
502
+ uint256 availableTickets = ticketBalance / ticketPrice;
503
+
504
+ require(availableTickets > 0, NodeNotEligible());
505
+ require(ticketNumber <= availableTickets, InvalidTicketNumber());
506
+ }
507
+
508
+ /// @notice Inserts a node into the top-N list - Smallest scores
509
+ /// @dev If the node is not in the top-N, it is added to the top-N.
510
+ /// @param c Committee storage reference
511
+ /// @param node Address of the node
512
+ /// @param score Score of the node
513
+ /// @return entered Whether the node was inserted into the top-N
514
+ function _insertTopN(
515
+ Committee storage c,
516
+ address node,
517
+ uint256 score
518
+ ) internal returns (bool entered) {
519
+ address[] storage top = c.topNodes;
520
+ uint256 cap = c.threshold[1];
521
+
522
+ if (top.length < cap) {
523
+ top.push(node);
524
+ c.scoreOf[node] = score;
525
+ return true;
526
+ }
527
+
528
+ uint256 worstIdx = 0;
529
+ uint256 worstScore = c.scoreOf[top[0]];
530
+ unchecked {
531
+ for (uint256 i = 1; i < top.length; ++i) {
532
+ uint256 s = c.scoreOf[top[i]];
533
+ if (s > worstScore) {
534
+ worstScore = s;
535
+ worstIdx = i;
536
+ }
537
+ }
538
+ }
539
+
540
+ if (score >= worstScore) return false;
541
+
542
+ top[worstIdx] = node;
543
+ c.scoreOf[node] = score;
544
+
545
+ return true;
546
+ }
180
547
  }