@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.
- package/README.md +46 -2
- package/artifacts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json +135 -0
- package/artifacts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/artifacts.d.ts +27 -0
- package/artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.json +77 -0
- package/artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +126 -0
- package/artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/artifacts.d.ts +43 -0
- package/artifacts/build-info/solc-0_8_28-5150b9e6b6cf4df4986fccba97bea37a16fdfebc.json +311 -0
- package/artifacts/build-info/solc-0_8_28-5150b9e6b6cf4df4986fccba97bea37a16fdfebc.output.json +1 -0
- package/artifacts/contracts/Enclave.sol/Enclave.json +239 -147
- package/artifacts/contracts/Enclave.sol/artifacts.d.ts +6 -6
- package/artifacts/contracts/interfaces/IBondingRegistry.sol/IBondingRegistry.json +881 -0
- package/artifacts/contracts/interfaces/IBondingRegistry.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json +326 -10
- package/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/artifacts.d.ts +2 -2
- package/artifacts/contracts/interfaces/IComputeProvider.sol/IComputeProvider.json +1 -1
- package/artifacts/contracts/interfaces/IComputeProvider.sol/artifacts.d.ts +1 -1
- package/artifacts/contracts/interfaces/IDecryptionVerifier.sol/IDecryptionVerifier.json +1 -1
- package/artifacts/contracts/interfaces/IDecryptionVerifier.sol/artifacts.d.ts +1 -1
- package/artifacts/contracts/interfaces/IE3Program.sol/IE3Program.json +21 -3
- package/artifacts/contracts/interfaces/IE3Program.sol/artifacts.d.ts +2 -2
- package/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json +247 -27
- package/artifacts/contracts/interfaces/IEnclave.sol/artifacts.d.ts +2 -2
- package/artifacts/contracts/interfaces/{IRegistryFilter.sol/IRegistryFilter.json → ISlashVerifier.sol/ISlashVerifier.json} +10 -10
- package/artifacts/contracts/interfaces/ISlashVerifier.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/interfaces/ISlashingManager.sol/ISlashingManager.json +759 -0
- package/artifacts/contracts/interfaces/ISlashingManager.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/lib/ExitQueueLib.sol/ExitQueueLib.json +116 -0
- package/artifacts/contracts/lib/ExitQueueLib.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/registry/BondingRegistry.sol/BondingRegistry.json +1217 -0
- package/artifacts/contracts/registry/BondingRegistry.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/registry/CiphernodeRegistryOwnable.sol/CiphernodeRegistryOwnable.json +351 -57
- package/artifacts/contracts/registry/CiphernodeRegistryOwnable.sol/artifacts.d.ts +6 -6
- package/artifacts/contracts/slashing/SlashingManager.sol/SlashingManager.json +1107 -0
- package/artifacts/contracts/slashing/SlashingManager.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry.json +328 -12
- package/artifacts/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey.json +328 -12
- package/artifacts/contracts/test/MockCiphernodeRegistry.sol/artifacts.d.ts +8 -8
- package/artifacts/contracts/test/MockComputeProvider.sol/MockComputeProvider.json +4 -4
- package/artifacts/contracts/test/MockComputeProvider.sol/artifacts.d.ts +4 -4
- package/artifacts/contracts/test/MockDecryptionVerifier.sol/MockDecryptionVerifier.json +3 -3
- package/artifacts/contracts/test/MockDecryptionVerifier.sol/artifacts.d.ts +3 -3
- package/artifacts/contracts/test/MockE3Program.sol/MockE3Program.json +26 -32
- package/artifacts/contracts/test/MockE3Program.sol/artifacts.d.ts +4 -4
- package/artifacts/contracts/test/MockSlashingVerifier.sol/MockSlashingVerifier.json +38 -0
- package/artifacts/contracts/test/MockSlashingVerifier.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/test/MockStableToken.sol/MockUSDC.json +425 -0
- package/artifacts/contracts/test/MockStableToken.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/token/EnclaveTicketToken.sol/EnclaveTicketToken.json +1222 -0
- package/artifacts/contracts/token/EnclaveTicketToken.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/token/EnclaveToken.sol/EnclaveToken.json +1460 -0
- package/artifacts/contracts/token/EnclaveToken.sol/artifacts.d.ts +27 -0
- package/artifacts/poseidon-solidity/PoseidonT3.sol/PoseidonT3.json +3 -3
- package/artifacts/poseidon-solidity/PoseidonT3.sol/artifacts.d.ts +3 -3
- package/contracts/Enclave.sol +230 -81
- package/contracts/interfaces/IBondingRegistry.sol +446 -0
- package/contracts/interfaces/ICiphernodeRegistry.sol +153 -9
- package/contracts/interfaces/IComputeProvider.sol +12 -2
- package/contracts/interfaces/IDecryptionVerifier.sol +11 -6
- package/contracts/interfaces/IE3.sol +21 -17
- package/contracts/interfaces/IE3Program.sol +30 -17
- package/contracts/interfaces/IEnclave.sol +95 -21
- package/contracts/interfaces/ISlashVerifier.sol +23 -0
- package/contracts/interfaces/ISlashingManager.sol +426 -0
- package/contracts/lib/ExitQueueLib.sol +490 -0
- package/contracts/registry/BondingRegistry.sol +737 -0
- package/contracts/registry/CiphernodeRegistryOwnable.sol +393 -26
- package/contracts/slashing/SlashingManager.sol +367 -0
- package/contracts/test/MockCiphernodeRegistry.sol +118 -24
- package/contracts/test/MockComputeProvider.sol +2 -2
- package/contracts/test/MockE3Program.sol +17 -14
- package/contracts/test/MockSlashingVerifier.sol +19 -0
- package/contracts/test/MockStableToken.sol +28 -0
- package/contracts/token/EnclaveTicketToken.sol +243 -0
- package/contracts/token/EnclaveToken.sol +267 -0
- package/dist/hardhat.config.d.ts.map +1 -1
- package/dist/hardhat.config.js +35 -16
- package/dist/ignition/modules/{mockInputValidator.d.ts → bondingRegistry.d.ts} +1 -1
- package/dist/ignition/modules/bondingRegistry.d.ts.map +1 -0
- package/dist/ignition/modules/bondingRegistry.js +35 -0
- package/dist/ignition/modules/ciphernodeRegistry.d.ts.map +1 -1
- package/dist/ignition/modules/ciphernodeRegistry.js +12 -2
- package/dist/ignition/modules/enclave.d.ts.map +1 -1
- package/dist/ignition/modules/enclave.js +16 -7
- package/dist/ignition/modules/{naiveRegistryFilter.d.ts → enclaveTicketToken.d.ts} +1 -1
- package/dist/ignition/modules/enclaveTicketToken.d.ts.map +1 -0
- package/dist/ignition/modules/enclaveTicketToken.js +17 -0
- package/dist/ignition/modules/enclaveToken.d.ts +3 -0
- package/dist/ignition/modules/enclaveToken.d.ts.map +1 -0
- package/dist/ignition/modules/{mockInputValidator.js → enclaveToken.js} +4 -4
- package/dist/ignition/modules/mockCiphernodeRegistry.d.ts.map +1 -1
- package/dist/ignition/modules/mockCiphernodeRegistry.js +0 -1
- package/dist/ignition/modules/mockCiphernodeRegistryEmptyKey.d.ts.map +1 -1
- package/dist/ignition/modules/mockCiphernodeRegistryEmptyKey.js +0 -1
- package/dist/ignition/modules/mockComputeProvider.d.ts.map +1 -1
- package/dist/ignition/modules/mockComputeProvider.js +0 -1
- package/dist/ignition/modules/mockDecryptionVerifier.d.ts.map +1 -1
- package/dist/ignition/modules/mockDecryptionVerifier.js +0 -1
- package/dist/ignition/modules/mockE3Program.d.ts.map +1 -1
- package/dist/ignition/modules/mockE3Program.js +1 -3
- package/dist/ignition/modules/mockSlashingVerifier.d.ts +3 -0
- package/dist/ignition/modules/mockSlashingVerifier.d.ts.map +1 -0
- package/dist/ignition/modules/mockSlashingVerifier.js +10 -0
- package/dist/ignition/modules/mockStableToken.d.ts +3 -0
- package/dist/ignition/modules/mockStableToken.d.ts.map +1 -0
- package/dist/ignition/modules/mockStableToken.js +11 -0
- package/dist/ignition/modules/poseidonT3.d.ts.map +1 -1
- package/dist/ignition/modules/poseidonT3.js +0 -1
- package/dist/ignition/modules/slashingManager.d.ts +3 -0
- package/dist/ignition/modules/slashingManager.d.ts.map +1 -0
- package/dist/ignition/modules/slashingManager.js +16 -0
- package/dist/scripts/cleanIgnitionState.d.ts +12 -0
- package/dist/scripts/cleanIgnitionState.d.ts.map +1 -0
- package/dist/scripts/cleanIgnitionState.js +41 -0
- package/dist/scripts/deployAndSave/bondingRegistry.d.ts +38 -0
- package/dist/scripts/deployAndSave/bondingRegistry.d.ts.map +1 -0
- package/dist/scripts/deployAndSave/bondingRegistry.js +133 -0
- package/dist/scripts/deployAndSave/ciphernodeRegistryOwnable.d.ts +11 -1
- package/dist/scripts/deployAndSave/ciphernodeRegistryOwnable.d.ts.map +1 -1
- package/dist/scripts/deployAndSave/ciphernodeRegistryOwnable.js +76 -19
- package/dist/scripts/deployAndSave/enclave.d.ts +16 -2
- package/dist/scripts/deployAndSave/enclave.d.ts.map +1 -1
- package/dist/scripts/deployAndSave/enclave.js +89 -22
- package/dist/scripts/deployAndSave/enclaveTicketToken.d.ts +20 -0
- package/dist/scripts/deployAndSave/enclaveTicketToken.d.ts.map +1 -0
- package/dist/scripts/deployAndSave/enclaveTicketToken.js +41 -0
- package/dist/scripts/deployAndSave/enclaveToken.d.ts +18 -0
- package/dist/scripts/deployAndSave/enclaveToken.d.ts.map +1 -0
- package/dist/scripts/deployAndSave/enclaveToken.js +57 -0
- package/dist/scripts/deployAndSave/mockComputeProvider.d.ts.map +1 -1
- package/dist/scripts/deployAndSave/mockComputeProvider.js +5 -5
- package/dist/scripts/deployAndSave/mockDecryptionVerifier.d.ts.map +1 -1
- package/dist/scripts/deployAndSave/mockDecryptionVerifier.js +5 -5
- package/dist/scripts/deployAndSave/mockProgram.d.ts +1 -2
- package/dist/scripts/deployAndSave/mockProgram.d.ts.map +1 -1
- package/dist/scripts/deployAndSave/mockProgram.js +7 -19
- package/dist/scripts/deployAndSave/mockStableToken.d.ts +18 -0
- package/dist/scripts/deployAndSave/mockStableToken.d.ts.map +1 -0
- package/dist/scripts/deployAndSave/mockStableToken.js +36 -0
- package/dist/scripts/deployAndSave/poseidonT3.d.ts +11 -0
- package/dist/scripts/deployAndSave/poseidonT3.d.ts.map +1 -0
- package/dist/scripts/deployAndSave/poseidonT3.js +41 -0
- package/dist/scripts/deployAndSave/slashingManager.d.ts +19 -0
- package/dist/scripts/deployAndSave/slashingManager.d.ts.map +1 -0
- package/dist/scripts/deployAndSave/slashingManager.js +38 -0
- package/dist/scripts/deployEnclave.d.ts.map +1 -1
- package/dist/scripts/deployEnclave.js +109 -23
- package/dist/scripts/deployMocks.d.ts +0 -1
- package/dist/scripts/deployMocks.d.ts.map +1 -1
- package/dist/scripts/deployMocks.js +3 -6
- package/dist/scripts/index.d.ts +7 -2
- package/dist/scripts/index.d.ts.map +1 -1
- package/dist/scripts/index.js +7 -2
- package/dist/scripts/proxy.d.ts +22 -0
- package/dist/scripts/proxy.d.ts.map +1 -0
- package/dist/scripts/proxy.js +36 -0
- package/dist/scripts/runVerification.d.ts +2 -0
- package/dist/scripts/runVerification.d.ts.map +1 -0
- package/dist/scripts/runVerification.js +16 -0
- package/dist/scripts/upgrade/bondingRegistry.d.ts +6 -0
- package/dist/scripts/upgrade/bondingRegistry.d.ts.map +1 -0
- package/dist/scripts/upgrade/bondingRegistry.js +49 -0
- package/dist/scripts/upgrade/ciphernodeRegistryOwnable.d.ts +6 -0
- package/dist/scripts/upgrade/ciphernodeRegistryOwnable.d.ts.map +1 -0
- package/dist/scripts/upgrade/ciphernodeRegistryOwnable.js +52 -0
- package/dist/scripts/upgrade/enclave.d.ts +6 -0
- package/dist/scripts/upgrade/enclave.d.ts.map +1 -0
- package/dist/scripts/upgrade/enclave.js +49 -0
- package/dist/scripts/utils.d.ts +51 -2
- package/dist/scripts/utils.d.ts.map +1 -1
- package/dist/scripts/utils.js +67 -4
- package/dist/scripts/verify.d.ts +6 -0
- package/dist/scripts/verify.d.ts.map +1 -0
- package/dist/scripts/verify.js +142 -0
- package/dist/tasks/ciphernode.d.ts +2 -0
- package/dist/tasks/ciphernode.d.ts.map +1 -1
- package/dist/tasks/ciphernode.js +290 -19
- package/dist/tasks/enclave.d.ts.map +1 -1
- package/dist/tasks/enclave.js +76 -31
- package/dist/test/Enclave.spec.js +377 -370
- package/dist/test/Registry/BondingRegistry.spec.d.ts +2 -0
- package/dist/test/Registry/BondingRegistry.spec.d.ts.map +1 -0
- package/dist/test/Registry/BondingRegistry.spec.js +684 -0
- package/dist/test/Registry/CiphernodeRegistryOwnable.spec.d.ts.map +1 -0
- package/dist/test/Registry/CiphernodeRegistryOwnable.spec.js +374 -0
- package/dist/test/Slashing/SlashingManager.spec.d.ts +2 -0
- package/dist/test/Slashing/SlashingManager.spec.d.ts.map +1 -0
- package/dist/test/Slashing/SlashingManager.spec.js +672 -0
- package/dist/types/@openzeppelin/contracts/index.d.ts +3 -0
- package/dist/types/@openzeppelin/contracts/index.d.ts.map +1 -0
- package/dist/types/@openzeppelin/contracts/proxy/index.d.ts +3 -0
- package/dist/types/@openzeppelin/contracts/proxy/index.d.ts.map +1 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.d.ts +97 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.d.ts.map +1 -0
- package/dist/types/{contracts/registry/NaiveRegistryFilter.js → @openzeppelin/contracts/proxy/transparent/ProxyAdmin.js} +0 -4
- package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.d.ts +81 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.d.ts.map +1 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.js +12 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.d.ts +52 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.d.ts.map +1 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.js +8 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.d.ts +3 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.d.ts.map +1 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/index.d.ts +4 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/index.d.ts.map +1 -0
- package/dist/types/@openzeppelin/index.d.ts +3 -0
- package/dist/types/@openzeppelin/index.d.ts.map +1 -0
- package/dist/types/contracts/Enclave.d.ts +126 -53
- package/dist/types/contracts/Enclave.d.ts.map +1 -1
- package/dist/types/contracts/Enclave.js +12 -0
- package/dist/types/contracts/index.d.ts +6 -0
- package/dist/types/contracts/index.d.ts.map +1 -1
- package/dist/types/contracts/interfaces/IBondingRegistry.d.ts +622 -0
- package/dist/types/contracts/interfaces/IBondingRegistry.d.ts.map +1 -0
- package/dist/types/contracts/interfaces/IBondingRegistry.js +24 -0
- package/dist/types/contracts/interfaces/ICiphernodeRegistry.d.ts +245 -15
- package/dist/types/contracts/interfaces/ICiphernodeRegistry.d.ts.map +1 -1
- package/dist/types/contracts/interfaces/ICiphernodeRegistry.js +16 -0
- package/dist/types/contracts/interfaces/IE3Program.d.ts +20 -10
- package/dist/types/contracts/interfaces/IE3Program.d.ts.map +1 -1
- package/dist/types/contracts/interfaces/IEnclave.d.ts +149 -20
- package/dist/types/contracts/interfaces/IEnclave.d.ts.map +1 -1
- package/dist/types/contracts/interfaces/IEnclave.js +12 -0
- package/dist/types/contracts/interfaces/{IRegistryFilter.d.ts → ISlashVerifier.d.ts} +16 -16
- package/dist/types/contracts/interfaces/ISlashVerifier.d.ts.map +1 -0
- package/dist/types/contracts/interfaces/ISlashVerifier.js +1 -0
- package/dist/types/contracts/interfaces/ISlashingManager.d.ts +384 -0
- package/dist/types/contracts/interfaces/ISlashingManager.d.ts.map +1 -0
- package/dist/types/contracts/interfaces/ISlashingManager.js +24 -0
- package/dist/types/contracts/interfaces/index.d.ts +3 -2
- package/dist/types/contracts/interfaces/index.d.ts.map +1 -1
- package/dist/types/contracts/lib/ExitQueueLib.d.ts +73 -0
- package/dist/types/contracts/lib/ExitQueueLib.d.ts.map +1 -0
- package/dist/types/contracts/lib/ExitQueueLib.js +12 -0
- package/dist/types/contracts/lib/index.d.ts +2 -0
- package/dist/types/contracts/lib/index.d.ts.map +1 -0
- package/dist/types/contracts/lib/index.js +1 -0
- package/dist/types/contracts/registry/BondingRegistry.d.ts +821 -0
- package/dist/types/contracts/registry/BondingRegistry.d.ts.map +1 -0
- package/dist/types/contracts/registry/BondingRegistry.js +44 -0
- package/dist/types/contracts/registry/CiphernodeRegistryOwnable.d.ts +194 -34
- package/dist/types/contracts/registry/CiphernodeRegistryOwnable.d.ts.map +1 -1
- package/dist/types/contracts/registry/CiphernodeRegistryOwnable.js +20 -0
- package/dist/types/contracts/registry/index.d.ts +1 -1
- package/dist/types/contracts/registry/index.d.ts.map +1 -1
- package/dist/types/contracts/slashing/SlashingManager.d.ts +592 -0
- package/dist/types/contracts/slashing/SlashingManager.d.ts.map +1 -0
- package/dist/types/contracts/slashing/SlashingManager.js +36 -0
- package/dist/types/contracts/slashing/index.d.ts +2 -0
- package/dist/types/contracts/slashing/index.d.ts.map +1 -0
- package/dist/types/contracts/slashing/index.js +1 -0
- package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry.d.ts +247 -17
- package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry.d.ts.map +1 -1
- package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry.js +16 -0
- package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey.d.ts +247 -17
- package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey.d.ts.map +1 -1
- package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey.js +16 -0
- package/dist/types/contracts/test/MockE3Program.d.ts +20 -14
- package/dist/types/contracts/test/MockE3Program.d.ts.map +1 -1
- package/dist/types/contracts/test/{MockInputValidator.d.ts → MockSlashingVerifier.d.ts} +15 -15
- package/dist/types/contracts/test/MockSlashingVerifier.d.ts.map +1 -0
- package/dist/types/contracts/test/MockSlashingVerifier.js +1 -0
- package/dist/types/contracts/test/MockStableToken.sol/MockUSDC.d.ts +227 -0
- package/dist/types/contracts/test/MockStableToken.sol/MockUSDC.d.ts.map +1 -0
- package/dist/types/contracts/test/MockStableToken.sol/MockUSDC.js +12 -0
- package/dist/types/contracts/test/MockStableToken.sol/index.d.ts +2 -0
- package/dist/types/contracts/test/MockStableToken.sol/index.d.ts.map +1 -0
- package/dist/types/contracts/test/MockStableToken.sol/index.js +1 -0
- package/dist/types/contracts/test/index.d.ts +3 -3
- package/dist/types/contracts/test/index.d.ts.map +1 -1
- package/dist/types/contracts/token/EnclaveTicketToken.d.ts +574 -0
- package/dist/types/contracts/token/EnclaveTicketToken.d.ts.map +1 -0
- package/dist/types/contracts/token/EnclaveTicketToken.js +24 -0
- package/dist/types/contracts/token/EnclaveToken.d.ts +775 -0
- package/dist/types/contracts/token/EnclaveToken.d.ts.map +1 -0
- package/dist/types/contracts/token/EnclaveToken.js +48 -0
- package/dist/types/contracts/token/index.d.ts +3 -0
- package/dist/types/contracts/token/index.d.ts.map +1 -0
- package/dist/types/contracts/token/index.js +1 -0
- package/dist/types/factories/@openzeppelin/contracts/index.d.ts +2 -0
- package/dist/types/factories/@openzeppelin/contracts/index.d.ts.map +1 -0
- package/dist/types/factories/@openzeppelin/contracts/index.js +4 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/index.d.ts +2 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/index.d.ts.map +1 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/index.js +4 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/ProxyAdmin__factory.d.ts +118 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/ProxyAdmin__factory.d.ts.map +1 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/ProxyAdmin__factory.js +157 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy__factory.d.ts +57 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy__factory.d.ts.map +1 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy__factory.js +78 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy__factory.d.ts +105 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy__factory.d.ts.map +1 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy__factory.js +141 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.d.ts +3 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.d.ts.map +1 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.js +5 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/index.d.ts +3 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/index.d.ts.map +1 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/index.js +5 -0
- package/dist/types/factories/@openzeppelin/index.d.ts +2 -0
- package/dist/types/factories/@openzeppelin/index.d.ts.map +1 -0
- package/dist/types/factories/@openzeppelin/index.js +4 -0
- package/dist/types/factories/contracts/Enclave__factory.d.ts +190 -104
- package/dist/types/factories/contracts/Enclave__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/Enclave__factory.js +241 -134
- package/dist/types/factories/contracts/index.d.ts +3 -0
- package/dist/types/factories/contracts/index.d.ts.map +1 -1
- package/dist/types/factories/contracts/index.js +3 -0
- package/dist/types/factories/contracts/interfaces/IBondingRegistry__factory.d.ts +678 -0
- package/dist/types/factories/contracts/interfaces/IBondingRegistry__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/interfaces/IBondingRegistry__factory.js +882 -0
- package/dist/types/factories/contracts/interfaces/ICiphernodeRegistry__factory.d.ts +253 -9
- package/dist/types/factories/contracts/interfaces/ICiphernodeRegistry__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/interfaces/ICiphernodeRegistry__factory.js +325 -9
- package/dist/types/factories/contracts/interfaces/IE3Program__factory.d.ts +16 -2
- package/dist/types/factories/contracts/interfaces/IE3Program__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/interfaces/IE3Program__factory.js +20 -2
- package/dist/types/factories/contracts/interfaces/IEnclave__factory.d.ts +190 -24
- package/dist/types/factories/contracts/interfaces/IEnclave__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/interfaces/IEnclave__factory.js +246 -26
- package/dist/types/factories/contracts/interfaces/ISlashVerifier__factory.d.ts +26 -0
- package/dist/types/factories/contracts/interfaces/ISlashVerifier__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/interfaces/{IRegistryFilter__factory.js → ISlashVerifier__factory.js} +7 -7
- package/dist/types/factories/contracts/interfaces/ISlashingManager__factory.d.ts +594 -0
- package/dist/types/factories/contracts/interfaces/ISlashingManager__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/interfaces/ISlashingManager__factory.js +760 -0
- package/dist/types/factories/contracts/interfaces/index.d.ts +3 -2
- package/dist/types/factories/contracts/interfaces/index.d.ts.map +1 -1
- package/dist/types/factories/contracts/interfaces/index.js +3 -2
- package/dist/types/factories/contracts/lib/ExitQueueLib__factory.d.ts +107 -0
- package/dist/types/factories/contracts/lib/ExitQueueLib__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/lib/ExitQueueLib__factory.js +138 -0
- package/dist/types/factories/contracts/lib/index.d.ts +2 -0
- package/dist/types/factories/contracts/lib/index.d.ts.map +1 -0
- package/dist/types/factories/contracts/lib/index.js +4 -0
- package/dist/types/factories/contracts/registry/BondingRegistry__factory.d.ts +958 -0
- package/dist/types/factories/contracts/registry/BondingRegistry__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/registry/BondingRegistry__factory.js +1239 -0
- package/dist/types/factories/contracts/registry/CiphernodeRegistryOwnable__factory.d.ts +272 -40
- package/dist/types/factories/contracts/registry/CiphernodeRegistryOwnable__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/registry/CiphernodeRegistryOwnable__factory.js +343 -49
- package/dist/types/factories/contracts/registry/index.d.ts +1 -1
- package/dist/types/factories/contracts/registry/index.d.ts.map +1 -1
- package/dist/types/factories/contracts/registry/index.js +1 -1
- package/dist/types/factories/contracts/slashing/SlashingManager__factory.d.ts +879 -0
- package/dist/types/factories/contracts/slashing/SlashingManager__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/slashing/SlashingManager__factory.js +1129 -0
- package/dist/types/factories/contracts/slashing/index.d.ts +2 -0
- package/dist/types/factories/contracts/slashing/index.d.ts.map +1 -0
- package/dist/types/factories/contracts/slashing/index.js +4 -0
- package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey__factory.d.ts +254 -10
- package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey__factory.js +326 -10
- package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry__factory.d.ts +254 -10
- package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry__factory.js +326 -10
- package/dist/types/factories/contracts/test/MockComputeProvider__factory.d.ts +2 -2
- package/dist/types/factories/contracts/test/MockComputeProvider__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/test/MockComputeProvider__factory.js +2 -2
- package/dist/types/factories/contracts/test/MockDecryptionVerifier__factory.d.ts +1 -1
- package/dist/types/factories/contracts/test/MockDecryptionVerifier__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/test/MockDecryptionVerifier__factory.js +1 -1
- package/dist/types/factories/contracts/test/MockE3Program__factory.d.ts +23 -27
- package/dist/types/factories/contracts/test/MockE3Program__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/test/MockE3Program__factory.js +28 -34
- package/dist/types/factories/contracts/test/MockSlashingVerifier__factory.d.ts +43 -0
- package/dist/types/factories/contracts/test/MockSlashingVerifier__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/test/MockSlashingVerifier__factory.js +60 -0
- package/dist/types/factories/contracts/test/MockStableToken.sol/MockUSDC__factory.d.ts +338 -0
- package/dist/types/factories/contracts/test/MockStableToken.sol/MockUSDC__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/test/MockStableToken.sol/MockUSDC__factory.js +447 -0
- package/dist/types/factories/contracts/test/MockStableToken.sol/index.d.ts +2 -0
- package/dist/types/factories/contracts/test/MockStableToken.sol/index.d.ts.map +1 -0
- package/dist/types/factories/contracts/test/MockStableToken.sol/index.js +4 -0
- package/dist/types/factories/contracts/test/index.d.ts +2 -2
- package/dist/types/factories/contracts/test/index.d.ts.map +1 -1
- package/dist/types/factories/contracts/test/index.js +2 -2
- package/dist/types/factories/contracts/token/EnclaveTicketToken__factory.d.ts +894 -0
- package/dist/types/factories/contracts/token/EnclaveTicketToken__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/token/EnclaveTicketToken__factory.js +1175 -0
- package/dist/types/factories/contracts/token/EnclaveToken__factory.d.ts +1101 -0
- package/dist/types/factories/contracts/token/EnclaveToken__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/token/EnclaveToken__factory.js +1439 -0
- package/dist/types/factories/contracts/token/index.d.ts +3 -0
- package/dist/types/factories/contracts/token/index.d.ts.map +1 -0
- package/dist/types/factories/contracts/token/index.js +5 -0
- package/dist/types/factories/index.d.ts +1 -0
- package/dist/types/factories/index.d.ts.map +1 -1
- package/dist/types/factories/index.js +1 -0
- package/dist/types/factories/poseidon-solidity/PoseidonT3__factory.d.ts +1 -1
- package/dist/types/factories/poseidon-solidity/PoseidonT3__factory.d.ts.map +1 -1
- package/dist/types/factories/poseidon-solidity/PoseidonT3__factory.js +1 -1
- package/dist/types/index.d.ts +28 -12
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +13 -6
- package/package.json +30 -21
- package/LICENSE.md +0 -165
- package/artifacts/build-info/solc-0_8_27-9aea5e3f6e25811e781e96c22e8edaf1eb1a01c5.json +0 -130
- package/artifacts/build-info/solc-0_8_27-9aea5e3f6e25811e781e96c22e8edaf1eb1a01c5.output.json +0 -1
- package/artifacts/contracts/interfaces/IInputValidator.sol/IInputValidator.json +0 -38
- package/artifacts/contracts/interfaces/IInputValidator.sol/artifacts.d.ts +0 -27
- package/artifacts/contracts/interfaces/IRegistryFilter.sol/artifacts.d.ts +0 -27
- package/artifacts/contracts/registry/NaiveRegistryFilter.sol/NaiveRegistryFilter.json +0 -309
- package/artifacts/contracts/registry/NaiveRegistryFilter.sol/artifacts.d.ts +0 -27
- package/artifacts/contracts/test/MockInputValidator.sol/MockInputValidator.json +0 -43
- package/artifacts/contracts/test/MockInputValidator.sol/artifacts.d.ts +0 -27
- package/artifacts/contracts/test/MockRegistryFilter.sol/IRegistry.json +0 -37
- package/artifacts/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter.json +0 -262
- package/artifacts/contracts/test/MockRegistryFilter.sol/artifacts.d.ts +0 -43
- package/contracts/interfaces/IInputValidator.sol +0 -18
- package/contracts/interfaces/IRegistryFilter.sol +0 -13
- package/contracts/registry/NaiveRegistryFilter.sol +0 -124
- package/contracts/test/MockInputValidator.sol +0 -29
- package/contracts/test/MockRegistryFilter.sol +0 -117
- package/dist/ignition/modules/mockInputValidator.d.ts.map +0 -1
- package/dist/ignition/modules/naiveRegistryFilter.d.ts.map +0 -1
- package/dist/ignition/modules/naiveRegistryFilter.js +0 -16
- package/dist/scripts/deployAndSave/mockInputValidator.d.ts +0 -6
- package/dist/scripts/deployAndSave/mockInputValidator.d.ts.map +0 -1
- package/dist/scripts/deployAndSave/mockInputValidator.js +0 -18
- package/dist/scripts/deployAndSave/naiveRegistryFilter.d.ts +0 -11
- package/dist/scripts/deployAndSave/naiveRegistryFilter.d.ts.map +0 -1
- package/dist/scripts/deployAndSave/naiveRegistryFilter.js +0 -41
- package/dist/test/CiphernodeRegistry/CiphernodeRegistryOwnable.spec.d.ts.map +0 -1
- package/dist/test/CiphernodeRegistry/CiphernodeRegistryOwnable.spec.js +0 -279
- package/dist/test/CiphernodeRegistry/NaiveRegistryFilter.spec.d.ts +0 -2
- package/dist/test/CiphernodeRegistry/NaiveRegistryFilter.spec.d.ts.map +0 -1
- package/dist/test/CiphernodeRegistry/NaiveRegistryFilter.spec.js +0 -160
- package/dist/types/contracts/interfaces/IInputValidator.d.ts +0 -36
- package/dist/types/contracts/interfaces/IInputValidator.d.ts.map +0 -1
- package/dist/types/contracts/interfaces/IRegistryFilter.d.ts.map +0 -1
- package/dist/types/contracts/registry/NaiveRegistryFilter.d.ts +0 -187
- package/dist/types/contracts/registry/NaiveRegistryFilter.d.ts.map +0 -1
- package/dist/types/contracts/test/MockInputValidator.d.ts.map +0 -1
- package/dist/types/contracts/test/MockRegistryFilter.sol/IRegistry.d.ts +0 -38
- package/dist/types/contracts/test/MockRegistryFilter.sol/IRegistry.d.ts.map +0 -1
- package/dist/types/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter.d.ts +0 -163
- package/dist/types/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter.d.ts.map +0 -1
- package/dist/types/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter.js +0 -8
- package/dist/types/contracts/test/MockRegistryFilter.sol/index.d.ts +0 -3
- package/dist/types/contracts/test/MockRegistryFilter.sol/index.d.ts.map +0 -1
- package/dist/types/factories/contracts/interfaces/IInputValidator__factory.d.ts +0 -26
- package/dist/types/factories/contracts/interfaces/IInputValidator__factory.d.ts.map +0 -1
- package/dist/types/factories/contracts/interfaces/IInputValidator__factory.js +0 -39
- package/dist/types/factories/contracts/interfaces/IRegistryFilter__factory.d.ts +0 -26
- package/dist/types/factories/contracts/interfaces/IRegistryFilter__factory.d.ts.map +0 -1
- package/dist/types/factories/contracts/registry/NaiveRegistryFilter__factory.d.ts +0 -251
- package/dist/types/factories/contracts/registry/NaiveRegistryFilter__factory.d.ts.map +0 -1
- package/dist/types/factories/contracts/registry/NaiveRegistryFilter__factory.js +0 -331
- package/dist/types/factories/contracts/test/MockInputValidator__factory.d.ts +0 -47
- package/dist/types/factories/contracts/test/MockInputValidator__factory.d.ts.map +0 -1
- package/dist/types/factories/contracts/test/MockInputValidator__factory.js +0 -65
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/IRegistry__factory.d.ts +0 -26
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/IRegistry__factory.d.ts.map +0 -1
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/IRegistry__factory.js +0 -38
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter__factory.d.ts +0 -216
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter__factory.d.ts.map +0 -1
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter__factory.js +0 -284
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/index.d.ts +0 -3
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/index.d.ts.map +0 -1
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/index.js +0 -5
- /package/dist/test/{CiphernodeRegistry → Registry}/CiphernodeRegistryOwnable.spec.d.ts +0 -0
- /package/dist/types/{contracts/test/MockRegistryFilter.sol → @openzeppelin/contracts}/index.js +0 -0
- /package/dist/types/{contracts/interfaces/IInputValidator.js → @openzeppelin/contracts/proxy/index.js} +0 -0
- /package/dist/types/{contracts/interfaces/IRegistryFilter.js → @openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.js} +0 -0
- /package/dist/types/{contracts/test/MockInputValidator.js → @openzeppelin/contracts/proxy/transparent/index.js} +0 -0
- /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
|
-
|
|
13
|
+
uint256,
|
|
14
14
|
uint32[2] calldata
|
|
15
15
|
) external pure returns (bool success) {
|
|
16
|
-
|
|
17
|
-
success = false;
|
|
18
|
-
} else {
|
|
19
|
-
success = true;
|
|
20
|
-
}
|
|
16
|
+
success = true;
|
|
21
17
|
}
|
|
22
18
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
93
|
+
uint256,
|
|
47
94
|
uint32[2] calldata
|
|
48
95
|
) external pure returns (bool success) {
|
|
49
|
-
|
|
50
|
-
success = false;
|
|
51
|
-
} else {
|
|
52
|
-
success = true;
|
|
53
|
-
}
|
|
96
|
+
success = true;
|
|
54
97
|
}
|
|
55
98
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
|
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,
|
|
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
|
|
8
|
+
import { IE3Program } from "../interfaces/IE3Program.sol";
|
|
9
9
|
|
|
10
10
|
contract MockE3Program is IE3Program {
|
|
11
|
-
error
|
|
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
|
-
|
|
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
|
|
25
|
+
) external returns (bytes32) {
|
|
33
26
|
require(
|
|
34
27
|
computeProviderParams.length == 32,
|
|
35
|
-
|
|
28
|
+
InvalidParams(e3ProgramParams, computeProviderParams)
|
|
36
29
|
);
|
|
37
30
|
|
|
38
31
|
require(paramsHashes[e3Id] == bytes32(0), E3AlreadyInitialized());
|
|
39
32
|
paramsHashes[e3Id] = keccak256(e3ProgramParams);
|
|
40
|
-
return
|
|
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
|
+
}
|