@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
@@ -0,0 +1,367 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ //
3
+ // This file is provided WITHOUT ANY WARRANTY;
4
+ // without even the implied warranty of MERCHANTABILITY
5
+ // or FITNESS FOR A PARTICULAR PURPOSE.
6
+
7
+ pragma solidity >=0.8.27;
8
+
9
+ import {
10
+ AccessControl
11
+ } from "@openzeppelin/contracts/access/AccessControl.sol";
12
+ import { ISlashingManager } from "../interfaces/ISlashingManager.sol";
13
+ import { IBondingRegistry } from "../interfaces/IBondingRegistry.sol";
14
+ import { ISlashVerifier } from "../interfaces/ISlashVerifier.sol";
15
+
16
+ /**
17
+ * @title SlashingManager
18
+ * @notice Implementation of slashing management with proposal, appeal, and execution workflows
19
+ * @dev Role-based access control for slashers, verifiers, and governance with configurable slash policies
20
+ */
21
+ contract SlashingManager is ISlashingManager, AccessControl {
22
+ // ======================
23
+ // Constants & Roles
24
+ // ======================
25
+
26
+ /// @notice Role identifier for accounts authorized to propose and execute slashes
27
+ bytes32 public constant SLASHER_ROLE = keccak256("SLASHER_ROLE");
28
+
29
+ /// @notice Role identifier for accounts authorized to verify cryptographic proofs in slash proposals
30
+ bytes32 public constant VERIFIER_ROLE = keccak256("VERIFIER_ROLE");
31
+
32
+ /// @notice Role identifier for governance accounts that can configure policies, resolve appeals, and manage bans
33
+ bytes32 public constant GOVERNANCE_ROLE = keccak256("GOVERNANCE_ROLE");
34
+
35
+ // ======================
36
+ // Storage
37
+ // ======================
38
+
39
+ /// @notice Reference to the bonding registry contract where slash penalties are executed
40
+ /// @dev Used to call slashTicketBalance() and slashLicenseBond() when executing slashes
41
+ IBondingRegistry public bondingRegistry;
42
+
43
+ /// @notice Mapping from slash reason hash to its configured policy
44
+ /// @dev Stores penalty amounts, proof requirements, and appeal settings for each slash type
45
+ mapping(bytes32 reason => SlashPolicy policy) public slashPolicies;
46
+
47
+ /// @notice Internal storage for all slash proposals indexed by proposal ID
48
+ /// @dev Sequentially indexed starting from 0, accessed via getSlashProposal()
49
+ mapping(uint256 proposalId => SlashProposal proposal) internal _proposals;
50
+
51
+ /// @notice Counter for total number of slash proposals ever created
52
+ /// @dev Also serves as the next proposal ID to be assigned
53
+ uint256 public totalProposals;
54
+
55
+ /// @notice Mapping tracking which nodes are currently banned from the network
56
+ /// @dev Set to true when a node is banned (either via executeSlash or banNode), false when unbanned
57
+ mapping(address node => bool banned) public banned;
58
+
59
+ // ======================
60
+ // Modifiers
61
+ // ======================
62
+
63
+ /// @notice Restricts function access to accounts with SLASHER_ROLE
64
+ /// @dev Reverts with Unauthorized() if caller lacks the role
65
+ modifier onlySlasher() {
66
+ if (!hasRole(SLASHER_ROLE, msg.sender)) revert Unauthorized();
67
+ _;
68
+ }
69
+
70
+ /// @notice Restricts function access to accounts with VERIFIER_ROLE
71
+ /// @dev Reverts with Unauthorized() if caller lacks the role
72
+ modifier onlyVerifier() {
73
+ if (!hasRole(VERIFIER_ROLE, msg.sender)) revert Unauthorized();
74
+ _;
75
+ }
76
+
77
+ /// @notice Restricts function access to accounts with GOVERNANCE_ROLE
78
+ /// @dev Reverts with Unauthorized() if caller lacks the role
79
+ modifier onlyGovernance() {
80
+ if (!hasRole(GOVERNANCE_ROLE, msg.sender)) revert Unauthorized();
81
+ _;
82
+ }
83
+
84
+ // ======================
85
+ // Constructor
86
+ // ======================
87
+
88
+ /**
89
+ * @notice Initializes the SlashingManager contract with admin and bonding registry
90
+ * @dev Sets up initial role assignments and bonding registry reference
91
+ * @param admin Address to receive DEFAULT_ADMIN_ROLE and GOVERNANCE_ROLE
92
+ * @param _bondingRegistry Address of the bonding registry contract for executing slashes
93
+ * Requirements:
94
+ * - admin must not be zero address
95
+ * - _bondingRegistry must not be zero address
96
+ */
97
+ constructor(address admin, address _bondingRegistry) {
98
+ require(admin != address(0), ZeroAddress());
99
+ require(_bondingRegistry != address(0), ZeroAddress());
100
+
101
+ bondingRegistry = IBondingRegistry(_bondingRegistry);
102
+
103
+ _grantRole(DEFAULT_ADMIN_ROLE, admin);
104
+ _grantRole(GOVERNANCE_ROLE, admin);
105
+ }
106
+
107
+ // ======================
108
+ // View Functions
109
+ // ======================
110
+
111
+ /// @inheritdoc ISlashingManager
112
+ function getSlashPolicy(
113
+ bytes32 reason
114
+ ) external view returns (SlashPolicy memory) {
115
+ return slashPolicies[reason];
116
+ }
117
+
118
+ /// @inheritdoc ISlashingManager
119
+ function getSlashProposal(
120
+ uint256 proposalId
121
+ ) external view returns (SlashProposal memory) {
122
+ require(proposalId < totalProposals, InvalidProposal());
123
+ return _proposals[proposalId];
124
+ }
125
+
126
+ /// @inheritdoc ISlashingManager
127
+ function isBanned(address node) external view returns (bool) {
128
+ return banned[node];
129
+ }
130
+
131
+ // ======================
132
+ // Admin Functions
133
+ // ======================
134
+
135
+ /// @inheritdoc ISlashingManager
136
+ function setSlashPolicy(
137
+ bytes32 reason,
138
+ SlashPolicy calldata policy
139
+ ) external onlyRole(GOVERNANCE_ROLE) {
140
+ require(reason != bytes32(0), InvalidPolicy());
141
+ require(policy.enabled, InvalidPolicy());
142
+ require(
143
+ policy.ticketPenalty > 0 || policy.licensePenalty > 0,
144
+ InvalidPolicy()
145
+ );
146
+
147
+ if (policy.requiresProof) {
148
+ require(policy.proofVerifier != address(0), VerifierNotSet());
149
+ // TODO: Should we allow appeal window for proof required?
150
+ require(policy.appealWindow == 0, InvalidPolicy());
151
+ } else {
152
+ require(policy.appealWindow > 0, InvalidPolicy());
153
+ }
154
+
155
+ slashPolicies[reason] = policy;
156
+ emit SlashPolicyUpdated(reason, policy);
157
+ }
158
+
159
+ /// @inheritdoc ISlashingManager
160
+ function setBondingRegistry(
161
+ address newBondingRegistry
162
+ ) external onlyRole(DEFAULT_ADMIN_ROLE) {
163
+ require(newBondingRegistry != address(0), ZeroAddress());
164
+ bondingRegistry = IBondingRegistry(newBondingRegistry);
165
+ }
166
+
167
+ /// @inheritdoc ISlashingManager
168
+ function addSlasher(address slasher) external onlyRole(DEFAULT_ADMIN_ROLE) {
169
+ require(slasher != address(0), ZeroAddress());
170
+ _grantRole(SLASHER_ROLE, slasher);
171
+ }
172
+
173
+ /// @inheritdoc ISlashingManager
174
+ function removeSlasher(
175
+ address slasher
176
+ ) external onlyRole(DEFAULT_ADMIN_ROLE) {
177
+ _revokeRole(SLASHER_ROLE, slasher);
178
+ }
179
+
180
+ /// @inheritdoc ISlashingManager
181
+ function addVerifier(
182
+ address verifier
183
+ ) external onlyRole(DEFAULT_ADMIN_ROLE) {
184
+ require(verifier != address(0), ZeroAddress());
185
+ _grantRole(VERIFIER_ROLE, verifier);
186
+ }
187
+
188
+ /// @inheritdoc ISlashingManager
189
+ function removeVerifier(
190
+ address verifier
191
+ ) external onlyRole(DEFAULT_ADMIN_ROLE) {
192
+ _revokeRole(VERIFIER_ROLE, verifier);
193
+ }
194
+
195
+ // ======================
196
+ // Slashing Functions
197
+ // ======================
198
+
199
+ /// @inheritdoc ISlashingManager
200
+ function proposeSlash(
201
+ address operator,
202
+ bytes32 reason,
203
+ bytes calldata proof
204
+ )
205
+ external
206
+ // TODO: Do we need an onlySlasher modifier?
207
+ // Can anyone propose a slash?
208
+ onlySlasher
209
+ returns (uint256 proposalId)
210
+ {
211
+ require(operator != address(0), ZeroAddress());
212
+
213
+ SlashPolicy memory policy = slashPolicies[reason];
214
+ require(policy.enabled, SlashReasonDisabled());
215
+
216
+ proposalId = totalProposals;
217
+ totalProposals = proposalId + 1;
218
+
219
+ uint256 executableAt = block.timestamp + policy.appealWindow;
220
+ SlashProposal storage p = _proposals[proposalId];
221
+
222
+ p.operator = operator;
223
+ p.reason = reason;
224
+ p.ticketAmount = policy.ticketPenalty;
225
+ p.licenseAmount = policy.licensePenalty;
226
+ p.proposedAt = block.timestamp;
227
+ p.executableAt = executableAt;
228
+ p.proposer = msg.sender;
229
+ p.proofHash = keccak256(proof);
230
+
231
+ if (policy.requiresProof) {
232
+ require(proof.length != 0, ProofRequired());
233
+ bool ok = ISlashVerifier(policy.proofVerifier).verify(
234
+ proposalId,
235
+ proof
236
+ );
237
+ require(ok, InvalidProof());
238
+ p.proofVerified = true;
239
+ }
240
+
241
+ emit SlashProposed(
242
+ proposalId,
243
+ operator,
244
+ reason,
245
+ policy.ticketPenalty,
246
+ policy.licensePenalty,
247
+ executableAt,
248
+ msg.sender
249
+ );
250
+ }
251
+
252
+ /// @inheritdoc ISlashingManager
253
+ function executeSlash(uint256 proposalId) external {
254
+ require(proposalId < totalProposals, InvalidProposal());
255
+ SlashProposal storage p = _proposals[proposalId];
256
+
257
+ // Has already been executed?
258
+ require(!p.executed, AlreadyExecuted());
259
+ p.executed = true;
260
+
261
+ SlashPolicy memory policy = slashPolicies[p.reason];
262
+
263
+ if (policy.requiresProof) {
264
+ // Appeal window is 0 by policy validation, so we dont check for appeal gating
265
+ require(p.proofVerified, InvalidProof());
266
+ } else {
267
+ // Evidence mode with appeals
268
+ require(block.timestamp >= p.executableAt, AppealWindowActive());
269
+ if (p.appealed) {
270
+ require(p.resolved, AppealPending());
271
+ require(!p.appealUpheld, AppealUpheld()); // approved = appeal upheld => cancel slash, return?
272
+ }
273
+ }
274
+
275
+ if (p.ticketAmount > 0) {
276
+ bondingRegistry.slashTicketBalance(
277
+ p.operator,
278
+ p.ticketAmount,
279
+ p.reason
280
+ );
281
+ }
282
+
283
+ if (p.licenseAmount > 0) {
284
+ bondingRegistry.slashLicenseBond(
285
+ p.operator,
286
+ p.licenseAmount,
287
+ p.reason
288
+ );
289
+ }
290
+
291
+ if (policy.banNode) {
292
+ banned[p.operator] = true;
293
+ emit NodeBanUpdated(p.operator, true, p.reason, msg.sender);
294
+ }
295
+
296
+ emit SlashExecuted(
297
+ proposalId,
298
+ p.operator,
299
+ p.reason,
300
+ p.ticketAmount,
301
+ p.licenseAmount,
302
+ p.executed
303
+ );
304
+ }
305
+
306
+ // ======================
307
+ // Appeal Functions
308
+ // ======================
309
+
310
+ /// @inheritdoc ISlashingManager
311
+ function fileAppeal(uint256 proposalId, string calldata evidence) external {
312
+ require(proposalId < totalProposals, InvalidProposal());
313
+ // TODO: Should we reject the appeal if the proposal has a cryptographic proof?
314
+ SlashProposal storage p = _proposals[proposalId];
315
+
316
+ // Only the accused can appeal
317
+ require(msg.sender == p.operator, Unauthorized());
318
+ // Only in the window
319
+ require(block.timestamp < p.executableAt, AppealWindowExpired());
320
+ // Only once
321
+ require(!p.appealed, AlreadyAppealed());
322
+
323
+ p.appealed = true;
324
+
325
+ emit AppealFiled(proposalId, p.operator, p.reason, evidence);
326
+ }
327
+
328
+ /// @inheritdoc ISlashingManager
329
+ function resolveAppeal(
330
+ uint256 proposalId,
331
+ bool appealUpheld,
332
+ string calldata resolution
333
+ ) external onlyGovernance {
334
+ require(proposalId < totalProposals, InvalidProposal());
335
+ SlashProposal storage p = _proposals[proposalId];
336
+
337
+ require(p.appealed, InvalidProposal());
338
+ require(!p.resolved, AlreadyResolved());
339
+
340
+ p.resolved = true;
341
+ p.appealUpheld = appealUpheld; // true => cancel slash, false => slash stands
342
+
343
+ emit AppealResolved(
344
+ proposalId,
345
+ p.operator,
346
+ appealUpheld,
347
+ msg.sender,
348
+ resolution
349
+ );
350
+ }
351
+
352
+ // ======================
353
+ // Ban Management
354
+ // ======================
355
+
356
+ /// @inheritdoc ISlashingManager
357
+ function updateBanStatus(
358
+ address node,
359
+ bool status,
360
+ bytes32 reason
361
+ ) external onlyGovernance {
362
+ require(node != address(0), ZeroAddress());
363
+
364
+ banned[node] = status;
365
+ emit NodeBanUpdated(node, status, reason, msg.sender);
366
+ }
367
+ }
@@ -10,22 +10,15 @@ import { ICiphernodeRegistry } from "../interfaces/ICiphernodeRegistry.sol";
10
10
  contract MockCiphernodeRegistry is ICiphernodeRegistry {
11
11
  function requestCommittee(
12
12
  uint256,
13
- address filter,
13
+ uint256,
14
14
  uint32[2] calldata
15
15
  ) external pure returns (bool success) {
16
- if (filter == address(2)) {
17
- success = false;
18
- } else {
19
- success = true;
20
- }
16
+ success = true;
21
17
  }
22
18
 
23
- // solhint-disable no-empty-blocks
24
- function publishCommittee(
25
- uint256,
26
- bytes calldata,
27
- bytes calldata
28
- ) external {} // solhint-disable-line no-empty-blocks
19
+ function isEnabled(address) external pure returns (bool) {
20
+ return true;
21
+ }
29
22
 
30
23
  function committeePublicKey(uint256 e3Id) external pure returns (bytes32) {
31
24
  if (e3Id == type(uint256).max) {
@@ -38,27 +31,74 @@ contract MockCiphernodeRegistry is ICiphernodeRegistry {
38
31
  function isCiphernodeEligible(address) external pure returns (bool) {
39
32
  return false;
40
33
  }
34
+
35
+ // solhint-disable-next-line no-empty-blocks
36
+ function addCiphernode(address) external pure {}
37
+
38
+ // solhint-disable-next-line no-empty-blocks
39
+ function removeCiphernode(address, uint256[] calldata) external pure {}
40
+
41
+ function publishCommittee(
42
+ uint256,
43
+ address[] calldata,
44
+ bytes calldata
45
+ ) external pure {} // solhint-disable-line no-empty-blocks
46
+
47
+ function getCommitteeNodes(
48
+ uint256
49
+ ) external pure returns (address[] memory) {
50
+ address[] memory nodes = new address[](0);
51
+ return nodes;
52
+ }
53
+
54
+ function root() external pure returns (uint256) {
55
+ return 0;
56
+ }
57
+
58
+ function rootAt(uint256) external pure returns (uint256) {
59
+ return 0;
60
+ }
61
+
62
+ function treeSize() external pure returns (uint256) {
63
+ return 0;
64
+ }
65
+
66
+ function getBondingRegistry() external pure returns (address) {
67
+ return address(0);
68
+ }
69
+
70
+ // solhint-disable-next-line no-empty-blocks
71
+ function setEnclave(address) external pure {}
72
+
73
+ // solhint-disable-next-line no-empty-blocks
74
+ function setBondingRegistry(address) external pure {}
75
+
76
+ // solhint-disable-next-line no-empty-blocks
77
+ function submitTicket(uint256, uint256) external pure {}
78
+
79
+ // solhint-disable-next-line no-empty-blocks
80
+ function finalizeCommittee(uint256) external pure {}
81
+
82
+ // solhint-disable-next-line no-empty-blocks
83
+ function setSortitionSubmissionWindow(uint256) external pure {}
84
+
85
+ function isOpen(uint256) external pure returns (bool) {
86
+ return false;
87
+ }
41
88
  }
42
89
 
43
90
  contract MockCiphernodeRegistryEmptyKey is ICiphernodeRegistry {
44
91
  function requestCommittee(
45
92
  uint256,
46
- address filter,
93
+ uint256,
47
94
  uint32[2] calldata
48
95
  ) external pure returns (bool success) {
49
- if (filter == address(2)) {
50
- success = false;
51
- } else {
52
- success = true;
53
- }
96
+ success = true;
54
97
  }
55
98
 
56
- // solhint-disable no-empty-blocks
57
- function publishCommittee(
58
- uint256,
59
- bytes calldata,
60
- bytes calldata
61
- ) external {} // solhint-disable-line no-empty-blocks
99
+ function isEnabled(address) external pure returns (bool) {
100
+ return true;
101
+ }
62
102
 
63
103
  function committeePublicKey(uint256) external pure returns (bytes32) {
64
104
  return bytes32(0);
@@ -67,4 +107,58 @@ contract MockCiphernodeRegistryEmptyKey is ICiphernodeRegistry {
67
107
  function isCiphernodeEligible(address) external pure returns (bool) {
68
108
  return false;
69
109
  }
110
+
111
+ // solhint-disable-next-line no-empty-blocks
112
+ function addCiphernode(address) external pure {}
113
+
114
+ // solhint-disable-next-line no-empty-blocks
115
+ function removeCiphernode(address, uint256[] calldata) external pure {}
116
+
117
+ function publishCommittee(
118
+ uint256,
119
+ address[] calldata,
120
+ bytes calldata
121
+ ) external pure {} // solhint-disable-line no-empty-blocks
122
+
123
+ function getCommitteeNodes(
124
+ uint256
125
+ ) external pure returns (address[] memory) {
126
+ address[] memory nodes = new address[](0);
127
+ return nodes;
128
+ }
129
+
130
+ function root() external pure returns (uint256) {
131
+ return 0;
132
+ }
133
+
134
+ function rootAt(uint256) external pure returns (uint256) {
135
+ return 0;
136
+ }
137
+
138
+ function treeSize() external pure returns (uint256) {
139
+ return 0;
140
+ }
141
+
142
+ function getBondingRegistry() external pure returns (address) {
143
+ return address(0);
144
+ }
145
+
146
+ // solhint-disable-next-line no-empty-blocks
147
+ function setEnclave(address) external pure {}
148
+
149
+ // solhint-disable-next-line no-empty-blocks
150
+ function setBondingRegistry(address) external pure {}
151
+
152
+ // solhint-disable-next-line no-empty-blocks
153
+ function setSortitionSubmissionWindow(uint256) external pure {}
154
+
155
+ // solhint-disable-next-line no-empty-blocks
156
+ function submitTicket(uint256, uint256) external pure {}
157
+
158
+ // solhint-disable-next-line no-empty-blocks
159
+ function finalizeCommittee(uint256) external pure {}
160
+
161
+ function isOpen(uint256) external pure returns (bool) {
162
+ return false;
163
+ }
70
164
  }
@@ -11,14 +11,14 @@ import {
11
11
  } from "../interfaces/IComputeProvider.sol";
12
12
 
13
13
  contract MockComputeProvider is IComputeProvider {
14
- error invalidParams();
14
+ error InvalidParams();
15
15
 
16
16
  function validate(
17
17
  uint256,
18
18
  uint256,
19
19
  bytes memory params
20
20
  ) external pure returns (IDecryptionVerifier decryptionVerifier) {
21
- require(params.length == 32, invalidParams());
21
+ require(params.length == 32, InvalidParams());
22
22
  // solhint-disable no-inline-assembly
23
23
  assembly {
24
24
  decryptionVerifier := mload(add(params, 32))
@@ -5,39 +5,42 @@
5
5
  // or FITNESS FOR A PARTICULAR PURPOSE.
6
6
  pragma solidity >=0.8.27;
7
7
 
8
- import { IE3Program, IInputValidator } from "../interfaces/IE3Program.sol";
8
+ import { IE3Program } from "../interfaces/IE3Program.sol";
9
9
 
10
10
  contract MockE3Program is IE3Program {
11
- error invalidParams(bytes e3ProgramParams, bytes computeProviderParams);
12
- error InvalidInputValidator();
11
+ error InvalidParams(bytes e3ProgramParams, bytes computeProviderParams);
13
12
  error E3AlreadyInitialized();
13
+
14
14
  bytes32 public constant ENCRYPTION_SCHEME_ID = keccak256("fhe.rs:BFV");
15
15
 
16
- IInputValidator public inputValidator;
17
16
  mapping(uint256 e3Id => bytes32 paramsHash) public paramsHashes;
18
17
 
19
- constructor(IInputValidator _inputValidator) {
20
- if (address(_inputValidator) == address(0)) {
21
- revert InvalidInputValidator();
22
- }
23
-
24
- inputValidator = _inputValidator;
25
- }
18
+ error InvalidInput();
26
19
 
27
20
  function validate(
28
21
  uint256 e3Id,
29
22
  uint256,
30
23
  bytes calldata e3ProgramParams,
31
24
  bytes calldata computeProviderParams
32
- ) external returns (bytes32, IInputValidator) {
25
+ ) external returns (bytes32) {
33
26
  require(
34
27
  computeProviderParams.length == 32,
35
- invalidParams(e3ProgramParams, computeProviderParams)
28
+ InvalidParams(e3ProgramParams, computeProviderParams)
36
29
  );
37
30
 
38
31
  require(paramsHashes[e3Id] == bytes32(0), E3AlreadyInitialized());
39
32
  paramsHashes[e3Id] = keccak256(e3ProgramParams);
40
- return (ENCRYPTION_SCHEME_ID, inputValidator);
33
+ return ENCRYPTION_SCHEME_ID;
34
+ }
35
+
36
+ function validateInput(
37
+ uint256,
38
+ address sender,
39
+ bytes memory data
40
+ ) external pure {
41
+ if (data.length == 3 || sender == address(0)) {
42
+ revert InvalidInput();
43
+ }
41
44
  }
42
45
 
43
46
  function verify(
@@ -0,0 +1,19 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ //
3
+ // This file is provided WITHOUT ANY WARRANTY;
4
+ // without even the implied warranty of MERCHANTABILITY
5
+ // or FITNESS FOR A PARTICULAR PURPOSE.
6
+ pragma solidity >=0.8.27;
7
+
8
+ import { ISlashVerifier } from "../interfaces/ISlashVerifier.sol";
9
+
10
+ contract MockSlashingVerifier is ISlashVerifier {
11
+ function verify(
12
+ uint256,
13
+ bytes memory data
14
+ ) external pure returns (bool success) {
15
+ data;
16
+
17
+ if (data.length > 0) success = true;
18
+ }
19
+ }
@@ -0,0 +1,28 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ //
3
+ // This file is provided WITHOUT ANY WARRANTY;
4
+ // without even the implied warranty of MERCHANTABILITY
5
+ // or FITNESS FOR A PARTICULAR PURPOSE.
6
+ pragma solidity >=0.8.27;
7
+
8
+ import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
9
+ import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
10
+
11
+ contract MockUSDC is ERC20, Ownable {
12
+ uint8 private _decimals;
13
+
14
+ constructor(
15
+ uint256 initialSupply
16
+ ) ERC20("USD Coin", "USDC") Ownable(msg.sender) {
17
+ _decimals = 6;
18
+ _mint(msg.sender, initialSupply * 10 ** _decimals);
19
+ }
20
+
21
+ function decimals() public view override returns (uint8) {
22
+ return _decimals;
23
+ }
24
+
25
+ function mint(address to, uint256 amount) external {
26
+ _mint(to, amount);
27
+ }
28
+ }