@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
|
@@ -7,19 +7,23 @@ import { LeanIMT } from "@zk-kit/lean-imt";
|
|
|
7
7
|
import { expect } from "chai";
|
|
8
8
|
import { network } from "hardhat";
|
|
9
9
|
import { poseidon2 } from "poseidon-lite";
|
|
10
|
+
import BondingRegistryModule from "../ignition/modules/bondingRegistry";
|
|
11
|
+
import CiphernodeRegistryModule from "../ignition/modules/ciphernodeRegistry";
|
|
10
12
|
import EnclaveModule from "../ignition/modules/enclave";
|
|
11
|
-
import
|
|
13
|
+
import EnclaveTicketTokenModule from "../ignition/modules/enclaveTicketToken";
|
|
14
|
+
import EnclaveTokenModule from "../ignition/modules/enclaveToken";
|
|
12
15
|
import MockCiphernodeRegistryEmptyKeyModule from "../ignition/modules/mockCiphernodeRegistryEmptyKey";
|
|
13
16
|
import mockComputeProviderModule from "../ignition/modules/mockComputeProvider";
|
|
14
17
|
import MockDecryptionVerifierModule from "../ignition/modules/mockDecryptionVerifier";
|
|
15
18
|
import MockE3ProgramModule from "../ignition/modules/mockE3Program";
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import { CiphernodeRegistryOwnable__factory as CiphernodeRegistryOwnableFactory, Enclave__factory as EnclaveFactory,
|
|
19
|
+
import MockStableTokenModule from "../ignition/modules/mockStableToken";
|
|
20
|
+
import SlashingManagerModule from "../ignition/modules/slashingManager";
|
|
21
|
+
import { BondingRegistry__factory as BondingRegistryFactory, CiphernodeRegistryOwnable__factory as CiphernodeRegistryOwnableFactory, Enclave__factory as EnclaveFactory, MockUSDC__factory as MockUSDCFactory, } from "../types";
|
|
19
22
|
const { ethers, ignition, networkHelpers } = await network.connect();
|
|
20
23
|
const { loadFixture, time, mine } = networkHelpers;
|
|
21
24
|
describe("Enclave", function () {
|
|
22
25
|
const THIRTY_DAYS_IN_SECONDS = 60 * 60 * 24 * 30;
|
|
26
|
+
const SORTITION_SUBMISSION_WINDOW = 10;
|
|
23
27
|
const addressOne = "0x0000000000000000000000000000000000000001";
|
|
24
28
|
const AddressTwo = "0x0000000000000000000000000000000000000002";
|
|
25
29
|
const encryptionSchemeId = "0x2c2a814a0495f913a3a312fc4771e37552bc14f8a2d4075a08122d356f0849c6";
|
|
@@ -34,9 +38,89 @@ describe("Enclave", function () {
|
|
|
34
38
|
const proof = "0x1337";
|
|
35
39
|
// Hash function used to compute the tree nodes.
|
|
36
40
|
const hash = (a, b) => poseidon2([a, b]);
|
|
41
|
+
const setupAndPublishCommittee = async (registry, e3Id, nodes, publicKey, operator1, operator2) => {
|
|
42
|
+
await registry.connect(operator1).submitTicket(e3Id, 1);
|
|
43
|
+
await registry.connect(operator2).submitTicket(e3Id, 1);
|
|
44
|
+
await time.increase(SORTITION_SUBMISSION_WINDOW + 1);
|
|
45
|
+
await registry.finalizeCommittee(e3Id);
|
|
46
|
+
await registry.publishCommittee(e3Id, nodes, publicKey);
|
|
47
|
+
};
|
|
48
|
+
// Helper function to approve USDC and make request
|
|
49
|
+
const makeRequest = async (enclave, usdcToken, requestParams, signer) => {
|
|
50
|
+
const fee = await enclave.getE3Quote(requestParams);
|
|
51
|
+
const tokenContract = signer ? usdcToken.connect(signer) : usdcToken;
|
|
52
|
+
const enclaveContract = signer ? enclave.connect(signer) : enclave;
|
|
53
|
+
await tokenContract.approve(await enclave.getAddress(), fee);
|
|
54
|
+
return enclaveContract.request(requestParams);
|
|
55
|
+
};
|
|
56
|
+
async function setupOperatorForSortition(operator, bondingRegistry, licenseToken, usdcToken, ticketToken, registry) {
|
|
57
|
+
const operatorAddress = await operator.getAddress();
|
|
58
|
+
await licenseToken.mintAllocation(operatorAddress, ethers.parseEther("10000"), "Test allocation");
|
|
59
|
+
await usdcToken.mint(operatorAddress, ethers.parseUnits("100000", 6));
|
|
60
|
+
await licenseToken
|
|
61
|
+
.connect(operator)
|
|
62
|
+
.approve(await bondingRegistry.getAddress(), ethers.parseEther("2000"));
|
|
63
|
+
await bondingRegistry
|
|
64
|
+
.connect(operator)
|
|
65
|
+
.bondLicense(ethers.parseEther("1000"));
|
|
66
|
+
await bondingRegistry.connect(operator).registerOperator();
|
|
67
|
+
const ticketAmount = ethers.parseUnits("100", 6);
|
|
68
|
+
await usdcToken
|
|
69
|
+
.connect(operator)
|
|
70
|
+
.approve(await ticketToken.getAddress(), ticketAmount);
|
|
71
|
+
await bondingRegistry.connect(operator).addTicketBalance(ticketAmount);
|
|
72
|
+
await registry.addCiphernode(operatorAddress);
|
|
73
|
+
}
|
|
37
74
|
const setup = async () => {
|
|
38
|
-
const [owner, notTheOwner] = await ethers.getSigners();
|
|
75
|
+
const [owner, notTheOwner, operator1, operator2] = await ethers.getSigners();
|
|
39
76
|
const ownerAddress = await owner.getAddress();
|
|
77
|
+
const usdcContract = await ignition.deploy(MockStableTokenModule, {
|
|
78
|
+
parameters: {
|
|
79
|
+
MockUSDC: {
|
|
80
|
+
initialSupply: 1000000,
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
const usdcToken = MockUSDCFactory.connect(await usdcContract.mockUSDC.getAddress(), owner);
|
|
85
|
+
const enclTokenContract = await ignition.deploy(EnclaveTokenModule, {
|
|
86
|
+
parameters: {
|
|
87
|
+
EnclaveToken: {
|
|
88
|
+
owner: ownerAddress,
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
const ticketTokenContract = await ignition.deploy(EnclaveTicketTokenModule, {
|
|
93
|
+
parameters: {
|
|
94
|
+
EnclaveTicketToken: {
|
|
95
|
+
baseToken: await usdcToken.getAddress(),
|
|
96
|
+
registry: addressOne,
|
|
97
|
+
owner: ownerAddress,
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
const slashingManagerContract = await ignition.deploy(SlashingManagerModule, {
|
|
102
|
+
parameters: {
|
|
103
|
+
SlashingManager: {
|
|
104
|
+
admin: ownerAddress,
|
|
105
|
+
bondingRegistry: addressOne,
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
const bondingRegistryContract = await ignition.deploy(BondingRegistryModule, {
|
|
110
|
+
parameters: {
|
|
111
|
+
BondingRegistry: {
|
|
112
|
+
owner: ownerAddress,
|
|
113
|
+
ticketToken: await ticketTokenContract.enclaveTicketToken.getAddress(),
|
|
114
|
+
licenseToken: await enclTokenContract.enclaveToken.getAddress(),
|
|
115
|
+
registry: addressOne,
|
|
116
|
+
slashedFundsTreasury: ownerAddress,
|
|
117
|
+
ticketPrice: ethers.parseUnits("10", 6),
|
|
118
|
+
licenseRequiredBond: ethers.parseEther("1000"),
|
|
119
|
+
minTicketBalance: 5,
|
|
120
|
+
exitDelay: 7 * 24 * 60 * 60,
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
});
|
|
40
124
|
const enclaveContract = await ignition.deploy(EnclaveModule, {
|
|
41
125
|
parameters: {
|
|
42
126
|
Enclave: {
|
|
@@ -44,63 +128,80 @@ describe("Enclave", function () {
|
|
|
44
128
|
owner: ownerAddress,
|
|
45
129
|
maxDuration: THIRTY_DAYS_IN_SECONDS,
|
|
46
130
|
registry: addressOne,
|
|
131
|
+
bondingRegistry: await bondingRegistryContract.bondingRegistry.getAddress(),
|
|
132
|
+
feeToken: await usdcToken.getAddress(),
|
|
47
133
|
},
|
|
48
134
|
},
|
|
49
135
|
});
|
|
50
136
|
const enclaveAddress = await enclaveContract.enclave.getAddress();
|
|
51
|
-
const ciphernodeRegistry = await ignition.deploy(
|
|
52
|
-
const ciphernodeRegistryAddress = await ciphernodeRegistry.mockCiphernodeRegistry.getAddress();
|
|
53
|
-
const naiveRegistryFilter = await ignition.deploy(NaiveRegistryFilterModule, {
|
|
137
|
+
const ciphernodeRegistry = await ignition.deploy(CiphernodeRegistryModule, {
|
|
54
138
|
parameters: {
|
|
55
|
-
|
|
56
|
-
|
|
139
|
+
CiphernodeRegistry: {
|
|
140
|
+
enclaveAddress: enclaveAddress,
|
|
57
141
|
owner: ownerAddress,
|
|
142
|
+
submissionWindow: SORTITION_SUBMISSION_WINDOW,
|
|
58
143
|
},
|
|
59
144
|
},
|
|
60
145
|
});
|
|
61
|
-
const
|
|
146
|
+
const ciphernodeRegistryAddress = await ciphernodeRegistry.cipherNodeRegistry.getAddress();
|
|
62
147
|
const enclave = EnclaveFactory.connect(enclaveAddress, owner);
|
|
63
148
|
const ciphernodeRegistryContract = CiphernodeRegistryOwnableFactory.connect(ciphernodeRegistryAddress, owner);
|
|
64
|
-
const
|
|
149
|
+
const bondingRegistry = BondingRegistryFactory.connect(await bondingRegistryContract.bondingRegistry.getAddress(), owner);
|
|
65
150
|
const registryAddress = await enclave.ciphernodeRegistry();
|
|
66
151
|
if (registryAddress !== ciphernodeRegistryAddress) {
|
|
67
152
|
await enclave.setCiphernodeRegistry(ciphernodeRegistryAddress);
|
|
68
153
|
}
|
|
154
|
+
await ciphernodeRegistryContract.setBondingRegistry(await bondingRegistry.getAddress());
|
|
155
|
+
await ticketTokenContract.enclaveTicketToken.setRegistry(await bondingRegistry.getAddress());
|
|
156
|
+
await bondingRegistry.setRegistry(ciphernodeRegistryAddress);
|
|
157
|
+
await bondingRegistry.setSlashingManager(await slashingManagerContract.slashingManager.getAddress());
|
|
158
|
+
await slashingManagerContract.slashingManager.setBondingRegistry(await bondingRegistry.getAddress());
|
|
159
|
+
await bondingRegistry.setRewardDistributor(enclaveAddress);
|
|
160
|
+
const tree = new LeanIMT(hash);
|
|
161
|
+
const licenseToken = enclTokenContract.enclaveToken;
|
|
162
|
+
const ticketToken = ticketTokenContract.enclaveTicketToken;
|
|
163
|
+
await licenseToken.setTransferRestriction(false);
|
|
164
|
+
await setupOperatorForSortition(operator1, bondingRegistry, licenseToken, usdcToken, ticketToken, ciphernodeRegistryContract);
|
|
165
|
+
tree.insert(BigInt(await operator1.getAddress()));
|
|
166
|
+
await setupOperatorForSortition(operator2, bondingRegistry, licenseToken, usdcToken, ticketToken, ciphernodeRegistryContract);
|
|
167
|
+
tree.insert(BigInt(await operator2.getAddress()));
|
|
168
|
+
await mine(1);
|
|
69
169
|
const mockComputeProvider = await ignition.deploy(mockComputeProviderModule);
|
|
70
170
|
const decryptionVerifier = await ignition.deploy(MockDecryptionVerifierModule);
|
|
71
|
-
const
|
|
72
|
-
const e3Program = await ignition.deploy(MockE3ProgramModule, {
|
|
73
|
-
parameters: {
|
|
74
|
-
MockE3Program: {
|
|
75
|
-
mockInputValidator: await inputValidator.mockInputValidator.getAddress(),
|
|
76
|
-
},
|
|
77
|
-
},
|
|
78
|
-
});
|
|
171
|
+
const e3Program = await ignition.deploy(MockE3ProgramModule);
|
|
79
172
|
await enclave.enableE3Program(await e3Program.mockE3Program.getAddress());
|
|
80
173
|
await enclave.setE3ProgramsParams([encodedE3ProgramParams]);
|
|
81
174
|
await enclave.setDecryptionVerifier(encryptionSchemeId, await decryptionVerifier.mockDecryptionVerifier.getAddress());
|
|
82
175
|
const request = {
|
|
83
|
-
filter: await naiveRegistryFilterContract.getAddress(),
|
|
84
176
|
threshold: [2, 2],
|
|
85
|
-
|
|
177
|
+
startWindow: [await time.latest(), (await time.latest()) + 100],
|
|
86
178
|
duration: time.duration.days(30),
|
|
87
179
|
e3Program: await e3Program.mockE3Program.getAddress(),
|
|
88
180
|
e3ProgramParams: encodedE3ProgramParams,
|
|
89
181
|
computeProviderParams: abiCoder.encode(["address"], [await decryptionVerifier.mockDecryptionVerifier.getAddress()]),
|
|
182
|
+
customParams: abiCoder.encode(["address"], ["0x1234567890123456789012345678901234567890"]),
|
|
90
183
|
};
|
|
184
|
+
await usdcToken.mint(ownerAddress, ethers.parseUnits("1000000", 6));
|
|
185
|
+
await usdcToken.mint(await notTheOwner.getAddress(), ethers.parseUnits("1000000", 6));
|
|
91
186
|
return {
|
|
92
187
|
enclave,
|
|
93
188
|
ciphernodeRegistryContract,
|
|
94
|
-
|
|
189
|
+
bondingRegistry: bondingRegistry,
|
|
190
|
+
ticketToken: ticketTokenContract.enclaveTicketToken,
|
|
191
|
+
licenseToken: licenseToken,
|
|
192
|
+
usdcToken,
|
|
193
|
+
slashingManager: slashingManagerContract.slashingManager,
|
|
194
|
+
tree,
|
|
95
195
|
mocks: {
|
|
96
196
|
decryptionVerifier: decryptionVerifier.mockDecryptionVerifier,
|
|
97
|
-
inputValidator: inputValidator.mockInputValidator,
|
|
98
197
|
e3Program: e3Program.mockE3Program,
|
|
99
198
|
mockComputeProvider: mockComputeProvider.mockComputeProvider,
|
|
100
199
|
},
|
|
101
200
|
request,
|
|
102
201
|
owner,
|
|
103
202
|
notTheOwner,
|
|
203
|
+
operator1,
|
|
204
|
+
operator2,
|
|
104
205
|
};
|
|
105
206
|
};
|
|
106
207
|
describe("constructor / initialize()", function () {
|
|
@@ -224,22 +325,21 @@ describe("Enclave", function () {
|
|
|
224
325
|
.withArgs(1);
|
|
225
326
|
});
|
|
226
327
|
it("returns correct E3 details", async function () {
|
|
227
|
-
const { enclave, request,
|
|
228
|
-
await enclave
|
|
229
|
-
filter: await naiveRegistryFilterContract.getAddress(),
|
|
328
|
+
const { enclave, request, usdcToken } = await loadFixture(setup);
|
|
329
|
+
await makeRequest(enclave, usdcToken, {
|
|
230
330
|
threshold: request.threshold,
|
|
231
|
-
startWindow: request.
|
|
331
|
+
startWindow: request.startWindow,
|
|
232
332
|
duration: request.duration,
|
|
233
333
|
e3Program: request.e3Program,
|
|
234
334
|
e3ProgramParams: request.e3ProgramParams,
|
|
235
335
|
computeProviderParams: request.computeProviderParams,
|
|
236
|
-
|
|
336
|
+
customParams: request.customParams,
|
|
337
|
+
});
|
|
237
338
|
const e3 = await enclave.getE3(0);
|
|
238
339
|
expect(e3.threshold).to.deep.equal(request.threshold);
|
|
239
340
|
expect(e3.expiration).to.equal(0n);
|
|
240
341
|
expect(e3.e3Program).to.equal(request.e3Program);
|
|
241
342
|
expect(e3.e3ProgramParams).to.equal(request.e3ProgramParams);
|
|
242
|
-
expect(e3.inputValidator).to.equal(await mocks.inputValidator.getAddress());
|
|
243
343
|
expect(e3.decryptionVerifier).to.equal(abiCoder.decode(["address"], request.computeProviderParams)[0]);
|
|
244
344
|
expect(e3.committeePublicKey).to.equal(ethers.ZeroHash);
|
|
245
345
|
expect(e3.ciphertextOutput).to.equal(ethers.ZeroHash);
|
|
@@ -382,145 +482,150 @@ describe("Enclave", function () {
|
|
|
382
482
|
});
|
|
383
483
|
});
|
|
384
484
|
describe("request()", function () {
|
|
385
|
-
it("reverts if
|
|
386
|
-
const { enclave, request } = await loadFixture(setup);
|
|
485
|
+
it("reverts if USDC allowance is insufficient", async function () {
|
|
486
|
+
const { enclave, request, usdcToken } = await loadFixture(setup);
|
|
387
487
|
await expect(enclave.request({
|
|
388
|
-
filter: request.filter,
|
|
389
488
|
threshold: request.threshold,
|
|
390
|
-
startWindow: request.
|
|
489
|
+
startWindow: request.startWindow,
|
|
391
490
|
duration: request.duration,
|
|
392
491
|
e3Program: request.e3Program,
|
|
393
492
|
e3ProgramParams: request.e3ProgramParams,
|
|
394
493
|
computeProviderParams: request.computeProviderParams,
|
|
395
|
-
|
|
494
|
+
customParams: request.customParams,
|
|
495
|
+
})).to.be.revertedWithCustomError(usdcToken, "ERC20InsufficientAllowance");
|
|
396
496
|
});
|
|
397
497
|
it("reverts if threshold is 0", async function () {
|
|
398
|
-
const { enclave, request } = await loadFixture(setup);
|
|
498
|
+
const { enclave, request, usdcToken } = await loadFixture(setup);
|
|
499
|
+
const fee = await enclave.getE3Quote({
|
|
500
|
+
threshold: [0, 2],
|
|
501
|
+
startWindow: request.startWindow,
|
|
502
|
+
duration: request.duration,
|
|
503
|
+
e3Program: request.e3Program,
|
|
504
|
+
e3ProgramParams: request.e3ProgramParams,
|
|
505
|
+
computeProviderParams: request.computeProviderParams,
|
|
506
|
+
customParams: request.customParams,
|
|
507
|
+
});
|
|
508
|
+
await usdcToken.approve(await enclave.getAddress(), fee);
|
|
399
509
|
await expect(enclave.request({
|
|
400
|
-
filter: request.filter,
|
|
401
510
|
threshold: [0, 2],
|
|
402
|
-
startWindow: request.
|
|
511
|
+
startWindow: request.startWindow,
|
|
403
512
|
duration: request.duration,
|
|
404
513
|
e3Program: request.e3Program,
|
|
405
514
|
e3ProgramParams: request.e3ProgramParams,
|
|
406
515
|
computeProviderParams: request.computeProviderParams,
|
|
407
|
-
|
|
516
|
+
customParams: request.customParams,
|
|
517
|
+
}))
|
|
518
|
+
.to.be.revertedWithCustomError(enclave, "InvalidThreshold")
|
|
519
|
+
.withArgs([0, 2]);
|
|
408
520
|
});
|
|
409
521
|
it("reverts if threshold is greater than number", async function () {
|
|
410
|
-
const { enclave, request } = await loadFixture(setup);
|
|
411
|
-
await expect(enclave
|
|
412
|
-
filter: request.filter,
|
|
522
|
+
const { enclave, request, usdcToken } = await loadFixture(setup);
|
|
523
|
+
await expect(makeRequest(enclave, usdcToken, {
|
|
413
524
|
threshold: [3, 2],
|
|
414
|
-
startWindow: request.
|
|
525
|
+
startWindow: request.startWindow,
|
|
415
526
|
duration: request.duration,
|
|
416
527
|
e3Program: request.e3Program,
|
|
417
528
|
e3ProgramParams: request.e3ProgramParams,
|
|
418
529
|
computeProviderParams: request.computeProviderParams,
|
|
419
|
-
|
|
530
|
+
customParams: request.customParams,
|
|
531
|
+
}))
|
|
532
|
+
.to.be.revertedWithCustomError(enclave, "InvalidThreshold")
|
|
533
|
+
.withArgs([3, 2]);
|
|
420
534
|
});
|
|
421
535
|
it("reverts if duration is 0", async function () {
|
|
422
|
-
const { enclave, request } = await loadFixture(setup);
|
|
423
|
-
await expect(enclave
|
|
424
|
-
filter: request.filter,
|
|
536
|
+
const { enclave, request, usdcToken } = await loadFixture(setup);
|
|
537
|
+
await expect(makeRequest(enclave, usdcToken, {
|
|
425
538
|
threshold: request.threshold,
|
|
426
|
-
startWindow: request.
|
|
539
|
+
startWindow: request.startWindow,
|
|
427
540
|
duration: 0,
|
|
428
541
|
e3Program: request.e3Program,
|
|
429
542
|
e3ProgramParams: request.e3ProgramParams,
|
|
430
543
|
computeProviderParams: request.computeProviderParams,
|
|
431
|
-
|
|
544
|
+
customParams: request.customParams,
|
|
545
|
+
}))
|
|
546
|
+
.to.be.revertedWithCustomError(enclave, "InvalidDuration")
|
|
547
|
+
.withArgs(0);
|
|
432
548
|
});
|
|
433
549
|
it("reverts if duration is greater than maxDuration", async function () {
|
|
434
|
-
const { enclave, request } = await loadFixture(setup);
|
|
435
|
-
await expect(enclave
|
|
436
|
-
filter: request.filter,
|
|
550
|
+
const { enclave, request, usdcToken } = await loadFixture(setup);
|
|
551
|
+
await expect(makeRequest(enclave, usdcToken, {
|
|
437
552
|
threshold: request.threshold,
|
|
438
|
-
startWindow: request.
|
|
553
|
+
startWindow: request.startWindow,
|
|
439
554
|
duration: time.duration.days(31),
|
|
440
555
|
e3Program: request.e3Program,
|
|
441
556
|
e3ProgramParams: request.e3ProgramParams,
|
|
442
557
|
computeProviderParams: request.computeProviderParams,
|
|
443
|
-
|
|
558
|
+
customParams: request.customParams,
|
|
559
|
+
}))
|
|
560
|
+
.to.be.revertedWithCustomError(enclave, "InvalidDuration")
|
|
561
|
+
.withArgs(time.duration.days(31));
|
|
444
562
|
});
|
|
445
563
|
it("reverts if E3 Program is not enabled", async function () {
|
|
446
|
-
const { enclave, request } = await loadFixture(setup);
|
|
447
|
-
await expect(enclave
|
|
448
|
-
filter: request.filter,
|
|
564
|
+
const { enclave, request, usdcToken } = await loadFixture(setup);
|
|
565
|
+
await expect(makeRequest(enclave, usdcToken, {
|
|
449
566
|
threshold: request.threshold,
|
|
450
|
-
startWindow: request.
|
|
567
|
+
startWindow: request.startWindow,
|
|
451
568
|
duration: request.duration,
|
|
452
569
|
e3Program: ethers.ZeroAddress,
|
|
453
570
|
e3ProgramParams: request.e3ProgramParams,
|
|
454
571
|
computeProviderParams: request.computeProviderParams,
|
|
455
|
-
|
|
572
|
+
customParams: request.customParams,
|
|
573
|
+
}))
|
|
456
574
|
.to.be.revertedWithCustomError(enclave, "E3ProgramNotAllowed")
|
|
457
575
|
.withArgs(ethers.ZeroAddress);
|
|
458
576
|
});
|
|
459
577
|
it("reverts if given encryption scheme is not enabled", async function () {
|
|
460
|
-
const { enclave, request } = await loadFixture(setup);
|
|
578
|
+
const { enclave, request, usdcToken } = await loadFixture(setup);
|
|
461
579
|
await enclave.disableEncryptionScheme(encryptionSchemeId);
|
|
462
|
-
await expect(enclave
|
|
463
|
-
filter: request.filter,
|
|
580
|
+
await expect(makeRequest(enclave, usdcToken, {
|
|
464
581
|
threshold: request.threshold,
|
|
465
|
-
startWindow: request.
|
|
582
|
+
startWindow: request.startWindow,
|
|
466
583
|
duration: request.duration,
|
|
467
584
|
e3Program: request.e3Program,
|
|
468
585
|
e3ProgramParams: request.e3ProgramParams,
|
|
469
586
|
computeProviderParams: request.computeProviderParams,
|
|
470
|
-
|
|
587
|
+
customParams: request.customParams,
|
|
588
|
+
}))
|
|
471
589
|
.to.be.revertedWithCustomError(enclave, "InvalidEncryptionScheme")
|
|
472
590
|
.withArgs(encryptionSchemeId);
|
|
473
591
|
});
|
|
474
|
-
it("reverts if committee selection fails", async function () {
|
|
475
|
-
const { enclave, request } = await loadFixture(setup);
|
|
476
|
-
await expect(enclave.request({
|
|
477
|
-
filter: AddressTwo,
|
|
478
|
-
threshold: request.threshold,
|
|
479
|
-
startWindow: request.startTime,
|
|
480
|
-
duration: request.duration,
|
|
481
|
-
e3Program: request.e3Program,
|
|
482
|
-
e3ProgramParams: request.e3ProgramParams,
|
|
483
|
-
computeProviderParams: request.computeProviderParams,
|
|
484
|
-
}, { value: 10 })).to.be.revertedWithCustomError(enclave, "CommitteeSelectionFailed");
|
|
485
|
-
});
|
|
486
592
|
it("instantiates a new E3", async function () {
|
|
487
|
-
const { enclave, request,
|
|
488
|
-
await enclave
|
|
489
|
-
filter: request.filter,
|
|
593
|
+
const { enclave, request, usdcToken } = await loadFixture(setup);
|
|
594
|
+
await makeRequest(enclave, usdcToken, {
|
|
490
595
|
threshold: request.threshold,
|
|
491
|
-
startWindow: request.
|
|
596
|
+
startWindow: request.startWindow,
|
|
492
597
|
duration: request.duration,
|
|
493
598
|
e3Program: request.e3Program,
|
|
494
599
|
e3ProgramParams: request.e3ProgramParams,
|
|
495
600
|
computeProviderParams: request.computeProviderParams,
|
|
496
|
-
|
|
601
|
+
customParams: request.customParams,
|
|
602
|
+
});
|
|
497
603
|
const e3 = await enclave.getE3(0);
|
|
498
604
|
const block = await ethers.provider.getBlock("latest").catch((e) => e);
|
|
499
605
|
expect(e3.threshold).to.deep.equal(request.threshold);
|
|
500
606
|
expect(e3.expiration).to.equal(0n);
|
|
501
607
|
expect(e3.e3Program).to.equal(request.e3Program);
|
|
502
608
|
expect(e3.requestBlock).to.equal(block.number);
|
|
503
|
-
expect(e3.inputValidator).to.equal(await mocks.inputValidator.getAddress());
|
|
504
609
|
expect(e3.decryptionVerifier).to.equal(abiCoder.decode(["address"], request.computeProviderParams)[0]);
|
|
505
610
|
expect(e3.committeePublicKey).to.equal(ethers.ZeroHash);
|
|
506
611
|
expect(e3.ciphertextOutput).to.equal(ethers.ZeroHash);
|
|
507
612
|
expect(e3.plaintextOutput).to.equal("0x");
|
|
508
613
|
});
|
|
509
614
|
it("emits E3Requested event", async function () {
|
|
510
|
-
const { enclave, request } = await loadFixture(setup);
|
|
511
|
-
const tx = await enclave
|
|
512
|
-
filter: request.filter,
|
|
615
|
+
const { enclave, request, usdcToken } = await loadFixture(setup);
|
|
616
|
+
const tx = await makeRequest(enclave, usdcToken, {
|
|
513
617
|
threshold: request.threshold,
|
|
514
|
-
startWindow: request.
|
|
618
|
+
startWindow: request.startWindow,
|
|
515
619
|
duration: request.duration,
|
|
516
620
|
e3Program: request.e3Program,
|
|
517
621
|
e3ProgramParams: request.e3ProgramParams,
|
|
518
622
|
computeProviderParams: request.computeProviderParams,
|
|
519
|
-
|
|
623
|
+
customParams: request.customParams,
|
|
624
|
+
});
|
|
520
625
|
const e3 = await enclave.getE3(0);
|
|
521
626
|
await expect(tx)
|
|
522
627
|
.to.emit(enclave, "E3Requested")
|
|
523
|
-
.withArgs(0, e3, request.
|
|
628
|
+
.withArgs(0, e3, request.e3Program);
|
|
524
629
|
});
|
|
525
630
|
});
|
|
526
631
|
describe("activate()", function () {
|
|
@@ -531,155 +636,144 @@ describe("Enclave", function () {
|
|
|
531
636
|
.withArgs(0);
|
|
532
637
|
});
|
|
533
638
|
it("reverts if E3 has already been activated", async function () {
|
|
534
|
-
const { enclave, request } = await loadFixture(setup);
|
|
535
|
-
await enclave
|
|
536
|
-
filter: request.filter,
|
|
639
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
640
|
+
await makeRequest(enclave, usdcToken, {
|
|
537
641
|
threshold: request.threshold,
|
|
538
|
-
startWindow: request.
|
|
642
|
+
startWindow: request.startWindow,
|
|
539
643
|
duration: request.duration,
|
|
540
644
|
e3Program: request.e3Program,
|
|
541
645
|
e3ProgramParams: request.e3ProgramParams,
|
|
542
646
|
computeProviderParams: request.computeProviderParams,
|
|
543
|
-
|
|
647
|
+
customParams: request.customParams,
|
|
648
|
+
});
|
|
649
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, 0, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
544
650
|
await expect(enclave.getE3(0)).to.not.be.revert(ethers);
|
|
545
|
-
await expect(enclave.activate(0,
|
|
546
|
-
await expect(enclave.activate(0,
|
|
651
|
+
await expect(enclave.activate(0, data)).to.not.be.revert(ethers);
|
|
652
|
+
await expect(enclave.activate(0, data))
|
|
547
653
|
.to.be.revertedWithCustomError(enclave, "E3AlreadyActivated")
|
|
548
654
|
.withArgs(0);
|
|
549
655
|
});
|
|
550
656
|
it("reverts if E3 is not yet ready to start", async function () {
|
|
551
|
-
const { enclave, request } = await loadFixture(setup);
|
|
657
|
+
const { enclave, request, usdcToken } = await loadFixture(setup);
|
|
552
658
|
const startTime = [
|
|
553
659
|
(await time.latest()) + 1000,
|
|
554
660
|
(await time.latest()) + 2000,
|
|
555
661
|
];
|
|
556
|
-
await enclave
|
|
557
|
-
filter: request.filter,
|
|
662
|
+
await makeRequest(enclave, usdcToken, {
|
|
558
663
|
threshold: request.threshold,
|
|
559
664
|
startWindow: startTime,
|
|
560
665
|
duration: request.duration,
|
|
561
666
|
e3Program: request.e3Program,
|
|
562
667
|
e3ProgramParams: request.e3ProgramParams,
|
|
563
668
|
computeProviderParams: request.computeProviderParams,
|
|
564
|
-
|
|
669
|
+
customParams: request.customParams,
|
|
670
|
+
});
|
|
565
671
|
await expect(enclave.activate(0, ethers.ZeroHash)).to.be.revertedWithCustomError(enclave, "E3NotReady");
|
|
566
672
|
});
|
|
567
673
|
it("reverts if E3 start has expired", async function () {
|
|
568
|
-
const { enclave, request } = await loadFixture(setup);
|
|
569
|
-
const
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
filter: request.filter,
|
|
575
|
-
threshold: request.threshold,
|
|
674
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
675
|
+
const e3Id = 0;
|
|
676
|
+
const currentTime = await time.latest();
|
|
677
|
+
const startTime = [currentTime + 10, currentTime + 100];
|
|
678
|
+
await makeRequest(enclave, usdcToken, {
|
|
679
|
+
...request,
|
|
576
680
|
startWindow: startTime,
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
e3ProgramParams: request.e3ProgramParams,
|
|
580
|
-
computeProviderParams: request.computeProviderParams,
|
|
581
|
-
}, { value: 10 });
|
|
681
|
+
});
|
|
682
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, e3Id, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
582
683
|
await mine(2, { interval: 2000 });
|
|
583
|
-
await expect(enclave.activate(
|
|
684
|
+
await expect(enclave.activate(e3Id, data)).to.be.revertedWithCustomError(enclave, "E3Expired");
|
|
584
685
|
});
|
|
585
686
|
it("reverts if ciphernodeRegistry does not return a public key", async function () {
|
|
586
|
-
const { enclave, request } = await loadFixture(setup);
|
|
687
|
+
const { enclave, request, usdcToken } = await loadFixture(setup);
|
|
587
688
|
const startTime = [
|
|
588
689
|
(await time.latest()) + 1000,
|
|
589
690
|
(await time.latest()) + 2000,
|
|
590
691
|
];
|
|
591
|
-
await enclave
|
|
592
|
-
filter: request.filter,
|
|
692
|
+
await makeRequest(enclave, usdcToken, {
|
|
593
693
|
threshold: request.threshold,
|
|
594
694
|
startWindow: startTime,
|
|
595
695
|
duration: request.duration,
|
|
596
696
|
e3Program: request.e3Program,
|
|
597
697
|
e3ProgramParams: request.e3ProgramParams,
|
|
598
698
|
computeProviderParams: request.computeProviderParams,
|
|
599
|
-
|
|
699
|
+
customParams: request.customParams,
|
|
700
|
+
});
|
|
600
701
|
await expect(enclave.activate(0, ethers.ZeroHash)).to.be.revertedWithCustomError(enclave, "E3NotReady");
|
|
601
702
|
});
|
|
602
703
|
it("reverts if E3 start has expired", async function () {
|
|
603
|
-
const { enclave, request } = await loadFixture(setup);
|
|
604
|
-
const
|
|
605
|
-
await
|
|
606
|
-
|
|
607
|
-
|
|
704
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
705
|
+
const e3Id = 0;
|
|
706
|
+
const currentTime = await time.latest();
|
|
707
|
+
const startTime = [currentTime + 5, currentTime + 50];
|
|
708
|
+
await makeRequest(enclave, usdcToken, {
|
|
709
|
+
...request,
|
|
608
710
|
startWindow: startTime,
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
}, { value: 10 });
|
|
614
|
-
await mine(1, { interval: 1000 });
|
|
615
|
-
await expect(enclave.activate(0, ethers.ZeroHash)).to.be.revertedWithCustomError(enclave, "E3Expired");
|
|
711
|
+
});
|
|
712
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, e3Id, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
713
|
+
await time.increaseTo(currentTime + request.duration + 100);
|
|
714
|
+
await expect(enclave.activate(e3Id, data)).to.be.revertedWithCustomError(enclave, "E3Expired");
|
|
616
715
|
});
|
|
617
716
|
it("reverts if ciphernodeRegistry does not return a public key", async function () {
|
|
618
|
-
const { enclave, request,
|
|
619
|
-
await enclave
|
|
620
|
-
filter: request.filter,
|
|
621
|
-
threshold: request.threshold,
|
|
622
|
-
startWindow: request.startTime,
|
|
623
|
-
duration: request.duration,
|
|
624
|
-
e3Program: request.e3Program,
|
|
625
|
-
e3ProgramParams: request.e3ProgramParams,
|
|
626
|
-
computeProviderParams: request.computeProviderParams,
|
|
627
|
-
}, { value: 10 });
|
|
717
|
+
const { enclave, request, ciphernodeRegistryContract, usdcToken, operator1, operator2, } = await loadFixture(setup);
|
|
718
|
+
await makeRequest(enclave, usdcToken, request);
|
|
628
719
|
const prevRegistry = await enclave.ciphernodeRegistry();
|
|
629
720
|
const reg = await ignition.deploy(MockCiphernodeRegistryEmptyKeyModule);
|
|
630
721
|
const nextRegistry = await reg.mockCiphernodeRegistryEmptyKey.getAddress();
|
|
631
722
|
await enclave.setCiphernodeRegistry(nextRegistry);
|
|
632
|
-
await naiveRegistryFilterContract.setRegistry(nextRegistry);
|
|
633
723
|
await expect(enclave.activate(0, ethers.ZeroHash)).to.be.revertedWithCustomError(enclave, "CommitteeSelectionFailed");
|
|
634
724
|
await enclave.setCiphernodeRegistry(prevRegistry);
|
|
635
|
-
await
|
|
725
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, 0, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
726
|
+
await expect(enclave.activate(0, data)).not.to.be.revert(ethers);
|
|
636
727
|
});
|
|
637
728
|
it("sets committeePublicKey correctly", async () => {
|
|
638
|
-
const { enclave, request, ciphernodeRegistryContract } = await loadFixture(setup);
|
|
639
|
-
await enclave
|
|
640
|
-
filter: request.filter,
|
|
729
|
+
const { enclave, request, ciphernodeRegistryContract, usdcToken, operator1, operator2, } = await loadFixture(setup);
|
|
730
|
+
await makeRequest(enclave, usdcToken, {
|
|
641
731
|
threshold: request.threshold,
|
|
642
|
-
startWindow: request.
|
|
732
|
+
startWindow: request.startWindow,
|
|
643
733
|
duration: request.duration,
|
|
644
734
|
e3Program: request.e3Program,
|
|
645
735
|
e3ProgramParams: request.e3ProgramParams,
|
|
646
736
|
computeProviderParams: request.computeProviderParams,
|
|
647
|
-
|
|
737
|
+
customParams: request.customParams,
|
|
738
|
+
});
|
|
648
739
|
const e3Id = 0;
|
|
740
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, e3Id, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
649
741
|
const publicKey = await ciphernodeRegistryContract.committeePublicKey(e3Id);
|
|
650
742
|
let e3 = await enclave.getE3(e3Id);
|
|
651
|
-
expect(e3.committeePublicKey).to.not.equal(
|
|
652
|
-
await enclave.activate(e3Id,
|
|
743
|
+
expect(e3.committeePublicKey).to.not.equal(publicKey);
|
|
744
|
+
await enclave.activate(e3Id, data);
|
|
653
745
|
e3 = await enclave.getE3(e3Id);
|
|
654
746
|
expect(e3.committeePublicKey).to.equal(publicKey);
|
|
655
747
|
});
|
|
656
748
|
it("returns true if E3 is activated successfully", async () => {
|
|
657
|
-
const { enclave, request } = await loadFixture(setup);
|
|
658
|
-
await enclave
|
|
659
|
-
filter: request.filter,
|
|
749
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
750
|
+
await makeRequest(enclave, usdcToken, {
|
|
660
751
|
threshold: request.threshold,
|
|
661
|
-
startWindow: request.
|
|
752
|
+
startWindow: request.startWindow,
|
|
662
753
|
duration: request.duration,
|
|
663
754
|
e3Program: request.e3Program,
|
|
664
755
|
e3ProgramParams: request.e3ProgramParams,
|
|
665
756
|
computeProviderParams: request.computeProviderParams,
|
|
666
|
-
|
|
757
|
+
customParams: request.customParams,
|
|
758
|
+
});
|
|
667
759
|
const e3Id = 0;
|
|
668
|
-
|
|
760
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, e3Id, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
761
|
+
expect(await enclave.activate.staticCall(e3Id, data)).to.be.equal(true);
|
|
669
762
|
});
|
|
670
763
|
it("emits E3Activated event", async () => {
|
|
671
|
-
const { enclave, request } = await loadFixture(setup);
|
|
672
|
-
await enclave
|
|
673
|
-
filter: request.filter,
|
|
764
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
765
|
+
await makeRequest(enclave, usdcToken, {
|
|
674
766
|
threshold: request.threshold,
|
|
675
|
-
startWindow: request.
|
|
767
|
+
startWindow: request.startWindow,
|
|
676
768
|
duration: request.duration,
|
|
677
769
|
e3Program: request.e3Program,
|
|
678
770
|
e3ProgramParams: request.e3ProgramParams,
|
|
679
771
|
computeProviderParams: request.computeProviderParams,
|
|
680
|
-
|
|
772
|
+
customParams: request.customParams,
|
|
773
|
+
});
|
|
681
774
|
const e3Id = 0;
|
|
682
|
-
await
|
|
775
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, e3Id, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
776
|
+
await expect(enclave.activate(e3Id, data)).to.emit(enclave, "E3Activated");
|
|
683
777
|
});
|
|
684
778
|
});
|
|
685
779
|
describe("publishInput()", function () {
|
|
@@ -690,138 +784,98 @@ describe("Enclave", function () {
|
|
|
690
784
|
.withArgs(0);
|
|
691
785
|
});
|
|
692
786
|
it("reverts if E3 has not been activated", async function () {
|
|
693
|
-
const { enclave, request } = await loadFixture(setup);
|
|
694
|
-
await enclave
|
|
695
|
-
filter: request.filter,
|
|
787
|
+
const { enclave, request, usdcToken } = await loadFixture(setup);
|
|
788
|
+
await makeRequest(enclave, usdcToken, {
|
|
696
789
|
threshold: request.threshold,
|
|
697
|
-
startWindow: request.
|
|
790
|
+
startWindow: request.startWindow,
|
|
698
791
|
duration: request.duration,
|
|
699
792
|
e3Program: request.e3Program,
|
|
700
793
|
e3ProgramParams: request.e3ProgramParams,
|
|
701
794
|
computeProviderParams: request.computeProviderParams,
|
|
702
|
-
|
|
795
|
+
customParams: request.customParams,
|
|
796
|
+
});
|
|
703
797
|
const inputData = abiCoder.encode(["bytes32"], [ethers.ZeroHash]);
|
|
704
798
|
await expect(enclave.getE3(0)).to.not.be.revert(ethers);
|
|
705
799
|
await expect(enclave.publishInput(0, inputData))
|
|
706
800
|
.to.be.revertedWithCustomError(enclave, "E3NotActivated")
|
|
707
801
|
.withArgs(0);
|
|
708
|
-
await enclave.activate(0, ethers.ZeroHash);
|
|
709
802
|
});
|
|
710
803
|
it("reverts if input is not valid", async function () {
|
|
711
|
-
const { enclave, request } = await loadFixture(setup);
|
|
712
|
-
await enclave
|
|
713
|
-
filter: request.filter,
|
|
804
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
805
|
+
await makeRequest(enclave, usdcToken, {
|
|
714
806
|
threshold: request.threshold,
|
|
715
|
-
startWindow: request.
|
|
807
|
+
startWindow: request.startWindow,
|
|
716
808
|
duration: request.duration,
|
|
717
809
|
e3Program: request.e3Program,
|
|
718
810
|
e3ProgramParams: request.e3ProgramParams,
|
|
719
811
|
computeProviderParams: request.computeProviderParams,
|
|
720
|
-
|
|
721
|
-
|
|
812
|
+
customParams: request.customParams,
|
|
813
|
+
});
|
|
814
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, 0, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
815
|
+
await enclave.activate(0, data);
|
|
722
816
|
await expect(enclave.publishInput(0, "0xaabbcc")).to.be.revertedWithCustomError(enclave, "InvalidInput");
|
|
723
817
|
});
|
|
724
818
|
it("reverts if outside of input window", async function () {
|
|
725
|
-
const { enclave, request } = await loadFixture(setup);
|
|
726
|
-
await enclave
|
|
727
|
-
filter: request.filter,
|
|
819
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
820
|
+
await makeRequest(enclave, usdcToken, {
|
|
728
821
|
threshold: request.threshold,
|
|
729
|
-
startWindow: request.
|
|
822
|
+
startWindow: request.startWindow,
|
|
730
823
|
duration: request.duration,
|
|
731
824
|
e3Program: request.e3Program,
|
|
732
825
|
e3ProgramParams: request.e3ProgramParams,
|
|
733
826
|
computeProviderParams: request.computeProviderParams,
|
|
734
|
-
|
|
735
|
-
|
|
827
|
+
customParams: request.customParams,
|
|
828
|
+
});
|
|
829
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, 0, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
830
|
+
await enclave.activate(0, data);
|
|
736
831
|
await mine(2, { interval: request.duration });
|
|
737
832
|
await expect(enclave.publishInput(0, ethers.ZeroHash)).to.be.revertedWithCustomError(enclave, "InputDeadlinePassed");
|
|
738
833
|
});
|
|
739
834
|
it("it allows publishing input to different requests", async function () {
|
|
740
835
|
const fixtureSetup = () => setup();
|
|
741
|
-
const { enclave, request } = await loadFixture(fixtureSetup);
|
|
836
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(fixtureSetup);
|
|
742
837
|
const inputData = "0x12345678";
|
|
743
|
-
await enclave
|
|
744
|
-
filter: request.filter,
|
|
838
|
+
await makeRequest(enclave, usdcToken, {
|
|
745
839
|
threshold: request.threshold,
|
|
746
|
-
startWindow: request.
|
|
840
|
+
startWindow: request.startWindow,
|
|
747
841
|
duration: request.duration,
|
|
748
842
|
e3Program: request.e3Program,
|
|
749
843
|
e3ProgramParams: request.e3ProgramParams,
|
|
750
844
|
computeProviderParams: request.computeProviderParams,
|
|
751
|
-
|
|
752
|
-
|
|
845
|
+
customParams: request.customParams,
|
|
846
|
+
});
|
|
847
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, 0, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
848
|
+
await enclave.activate(0, data);
|
|
753
849
|
await enclave.publishInput(0, inputData);
|
|
754
|
-
|
|
755
|
-
await enclave.request({
|
|
756
|
-
filter: request.filter,
|
|
850
|
+
await makeRequest(enclave, usdcToken, {
|
|
757
851
|
threshold: request.threshold,
|
|
758
|
-
startWindow: request.
|
|
852
|
+
startWindow: request.startWindow,
|
|
759
853
|
duration: request.duration,
|
|
760
854
|
e3Program: request.e3Program,
|
|
761
855
|
e3ProgramParams: request.e3ProgramParams,
|
|
762
856
|
computeProviderParams: request.computeProviderParams,
|
|
763
|
-
|
|
764
|
-
|
|
857
|
+
customParams: request.customParams,
|
|
858
|
+
});
|
|
859
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, 1, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
860
|
+
await enclave.activate(1, data);
|
|
765
861
|
await enclave.publishInput(1, inputData);
|
|
766
862
|
});
|
|
767
863
|
it("returns true if input is published successfully", async function () {
|
|
768
|
-
const { enclave, request } = await loadFixture(setup);
|
|
864
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
769
865
|
const inputData = "0x12345678";
|
|
770
|
-
await enclave
|
|
771
|
-
filter: request.filter,
|
|
866
|
+
await makeRequest(enclave, usdcToken, {
|
|
772
867
|
threshold: request.threshold,
|
|
773
|
-
startWindow: request.
|
|
868
|
+
startWindow: request.startWindow,
|
|
774
869
|
duration: request.duration,
|
|
775
870
|
e3Program: request.e3Program,
|
|
776
871
|
e3ProgramParams: request.e3ProgramParams,
|
|
777
872
|
computeProviderParams: request.computeProviderParams,
|
|
778
|
-
|
|
779
|
-
|
|
873
|
+
customParams: request.customParams,
|
|
874
|
+
});
|
|
875
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, 0, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
876
|
+
await enclave.activate(0, data);
|
|
780
877
|
expect(await enclave.publishInput.staticCall(0, inputData)).to.equal(true);
|
|
781
878
|
});
|
|
782
|
-
it("adds inputHash to merkle tree", async function () {
|
|
783
|
-
const { enclave, request } = await loadFixture(setup);
|
|
784
|
-
const inputData = abiCoder.encode(["bytes"], ["0xaabbccddeeff"]);
|
|
785
|
-
// To create an instance of a LeanIMT, you must provide the hash function.
|
|
786
|
-
const tree = new LeanIMT(hash);
|
|
787
|
-
await enclave.request({
|
|
788
|
-
filter: request.filter,
|
|
789
|
-
threshold: request.threshold,
|
|
790
|
-
startWindow: request.startTime,
|
|
791
|
-
duration: request.duration,
|
|
792
|
-
e3Program: request.e3Program,
|
|
793
|
-
e3ProgramParams: request.e3ProgramParams,
|
|
794
|
-
computeProviderParams: request.computeProviderParams,
|
|
795
|
-
}, { value: 10 });
|
|
796
|
-
const e3Id = 0;
|
|
797
|
-
await enclave.activate(e3Id, ethers.ZeroHash);
|
|
798
|
-
tree.insert(hash(BigInt(ethers.keccak256(inputData)), BigInt(0)));
|
|
799
|
-
await enclave.publishInput(e3Id, inputData);
|
|
800
|
-
expect(await enclave.getInputRoot(e3Id)).to.equal(tree.root);
|
|
801
|
-
const secondInputData = abiCoder.encode(["bytes"], ["0x112233445566"]);
|
|
802
|
-
tree.insert(hash(BigInt(ethers.keccak256(secondInputData)), BigInt(1)));
|
|
803
|
-
await enclave.publishInput(e3Id, secondInputData);
|
|
804
|
-
expect(await enclave.getInputRoot(e3Id)).to.equal(tree.root);
|
|
805
|
-
});
|
|
806
|
-
it("emits InputPublished event", async function () {
|
|
807
|
-
const { enclave, request } = await loadFixture(setup);
|
|
808
|
-
await enclave.request({
|
|
809
|
-
filter: request.filter,
|
|
810
|
-
threshold: request.threshold,
|
|
811
|
-
startWindow: request.startTime,
|
|
812
|
-
duration: request.duration,
|
|
813
|
-
e3Program: request.e3Program,
|
|
814
|
-
e3ProgramParams: request.e3ProgramParams,
|
|
815
|
-
computeProviderParams: request.computeProviderParams,
|
|
816
|
-
}, { value: 10 });
|
|
817
|
-
const e3Id = 0;
|
|
818
|
-
const inputData = abiCoder.encode(["bytes"], ["0xaabbccddeeff"]);
|
|
819
|
-
await enclave.activate(e3Id, ethers.ZeroHash);
|
|
820
|
-
const expectedHash = hash(BigInt(ethers.keccak256(inputData)), BigInt(0));
|
|
821
|
-
await expect(enclave.publishInput(e3Id, inputData))
|
|
822
|
-
.to.emit(enclave, "InputPublished")
|
|
823
|
-
.withArgs(e3Id, inputData, expectedHash, 0);
|
|
824
|
-
});
|
|
825
879
|
});
|
|
826
880
|
describe("publishCiphertextOutput()", function () {
|
|
827
881
|
it("reverts if E3 does not exist", async function () {
|
|
@@ -831,54 +885,47 @@ describe("Enclave", function () {
|
|
|
831
885
|
.withArgs(0);
|
|
832
886
|
});
|
|
833
887
|
it("reverts if E3 has not been activated", async function () {
|
|
834
|
-
const { enclave, request } = await loadFixture(setup);
|
|
888
|
+
const { enclave, request, usdcToken } = await loadFixture(setup);
|
|
835
889
|
const e3Id = 0;
|
|
836
|
-
await enclave
|
|
837
|
-
filter: request.filter,
|
|
890
|
+
await makeRequest(enclave, usdcToken, {
|
|
838
891
|
threshold: request.threshold,
|
|
839
|
-
startWindow: request.
|
|
892
|
+
startWindow: request.startWindow,
|
|
840
893
|
duration: request.duration,
|
|
841
894
|
e3Program: request.e3Program,
|
|
842
895
|
e3ProgramParams: request.e3ProgramParams,
|
|
843
896
|
computeProviderParams: request.computeProviderParams,
|
|
844
|
-
|
|
897
|
+
customParams: request.customParams,
|
|
898
|
+
});
|
|
845
899
|
await expect(enclave.publishCiphertextOutput(e3Id, "0x", "0x"))
|
|
846
900
|
.to.be.revertedWithCustomError(enclave, "E3NotActivated")
|
|
847
901
|
.withArgs(e3Id);
|
|
848
902
|
});
|
|
849
903
|
it("reverts if input deadline has not passed", async function () {
|
|
850
|
-
const { enclave, request } = await loadFixture(setup);
|
|
851
|
-
const
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
startWindow: [
|
|
855
|
-
|
|
856
|
-
e3Program: request.e3Program,
|
|
857
|
-
e3ProgramParams: request.e3ProgramParams,
|
|
858
|
-
computeProviderParams: request.computeProviderParams,
|
|
859
|
-
}, { value: 10 });
|
|
860
|
-
const block = await tx.getBlock();
|
|
861
|
-
const timestamp = block ? block.timestamp : await time.latest();
|
|
862
|
-
const expectedExpiration = timestamp + request.duration + 1;
|
|
904
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
905
|
+
const currentTime = await time.latest();
|
|
906
|
+
await makeRequest(enclave, usdcToken, {
|
|
907
|
+
...request,
|
|
908
|
+
startWindow: [currentTime, currentTime + 100],
|
|
909
|
+
});
|
|
863
910
|
const e3Id = 0;
|
|
864
|
-
await
|
|
865
|
-
await
|
|
866
|
-
|
|
867
|
-
.withArgs(e3Id, expectedExpiration);
|
|
911
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, e3Id, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
912
|
+
await enclave.activate(e3Id, data);
|
|
913
|
+
await expect(enclave.publishCiphertextOutput(e3Id, "0x", "0x")).to.be.revertedWithCustomError(enclave, "InputDeadlineNotPassed");
|
|
868
914
|
});
|
|
869
915
|
it("reverts if output has already been published", async function () {
|
|
870
|
-
const { enclave, request } = await loadFixture(setup);
|
|
916
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
871
917
|
const e3Id = 0;
|
|
872
|
-
await enclave
|
|
873
|
-
filter: request.filter,
|
|
918
|
+
await makeRequest(enclave, usdcToken, {
|
|
874
919
|
threshold: request.threshold,
|
|
875
920
|
startWindow: [await time.latest(), (await time.latest()) + 100],
|
|
876
921
|
duration: request.duration,
|
|
877
922
|
e3Program: request.e3Program,
|
|
878
923
|
e3ProgramParams: request.e3ProgramParams,
|
|
879
924
|
computeProviderParams: request.computeProviderParams,
|
|
880
|
-
|
|
881
|
-
|
|
925
|
+
customParams: request.customParams,
|
|
926
|
+
});
|
|
927
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, e3Id, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
928
|
+
await enclave.activate(e3Id, data);
|
|
882
929
|
await mine(2, { interval: request.duration });
|
|
883
930
|
expect(await enclave.publishCiphertextOutput(e3Id, data, proof));
|
|
884
931
|
await expect(enclave.publishCiphertextOutput(e3Id, data, proof))
|
|
@@ -886,68 +933,57 @@ describe("Enclave", function () {
|
|
|
886
933
|
.withArgs(e3Id);
|
|
887
934
|
});
|
|
888
935
|
it("reverts if output is not valid", async function () {
|
|
889
|
-
const { enclave, request } = await loadFixture(setup);
|
|
936
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
890
937
|
const e3Id = 0;
|
|
891
|
-
await enclave
|
|
892
|
-
filter: request.filter,
|
|
938
|
+
await makeRequest(enclave, usdcToken, {
|
|
893
939
|
threshold: request.threshold,
|
|
894
940
|
startWindow: [await time.latest(), (await time.latest()) + 100],
|
|
895
941
|
duration: request.duration,
|
|
896
942
|
e3Program: request.e3Program,
|
|
897
943
|
e3ProgramParams: request.e3ProgramParams,
|
|
898
944
|
computeProviderParams: request.computeProviderParams,
|
|
899
|
-
|
|
900
|
-
|
|
945
|
+
customParams: request.customParams,
|
|
946
|
+
});
|
|
947
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, e3Id, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
948
|
+
await enclave.activate(e3Id, data);
|
|
901
949
|
await mine(2, { interval: request.duration });
|
|
902
950
|
await expect(enclave.publishCiphertextOutput(e3Id, "0x", "0x")).to.be.revertedWithCustomError(enclave, "InvalidOutput");
|
|
903
951
|
});
|
|
904
952
|
it("sets ciphertextOutput correctly", async function () {
|
|
905
|
-
const { enclave, request } = await loadFixture(setup);
|
|
953
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
906
954
|
const e3Id = 0;
|
|
907
|
-
await enclave
|
|
908
|
-
|
|
909
|
-
threshold: request.threshold,
|
|
955
|
+
await makeRequest(enclave, usdcToken, {
|
|
956
|
+
...request,
|
|
910
957
|
startWindow: [await time.latest(), (await time.latest()) + 100],
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
computeProviderParams: request.computeProviderParams,
|
|
915
|
-
}, { value: 10 });
|
|
916
|
-
await enclave.activate(e3Id, ethers.ZeroHash);
|
|
958
|
+
});
|
|
959
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, e3Id, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
960
|
+
await enclave.activate(e3Id, data);
|
|
917
961
|
await mine(2, { interval: request.duration });
|
|
918
962
|
expect(await enclave.publishCiphertextOutput(e3Id, data, proof));
|
|
919
963
|
const e3 = await enclave.getE3(e3Id);
|
|
920
964
|
expect(e3.ciphertextOutput).to.equal(dataHash);
|
|
921
965
|
});
|
|
922
966
|
it("returns true if output is published successfully", async function () {
|
|
923
|
-
const { enclave, request } = await loadFixture(setup);
|
|
967
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
924
968
|
const e3Id = 0;
|
|
925
|
-
await enclave
|
|
926
|
-
|
|
927
|
-
threshold: request.threshold,
|
|
969
|
+
await makeRequest(enclave, usdcToken, {
|
|
970
|
+
...request,
|
|
928
971
|
startWindow: [await time.latest(), (await time.latest()) + 100],
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
computeProviderParams: request.computeProviderParams,
|
|
933
|
-
}, { value: 10 });
|
|
934
|
-
await enclave.activate(e3Id, ethers.ZeroHash);
|
|
972
|
+
});
|
|
973
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, e3Id, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
974
|
+
await enclave.activate(e3Id, data);
|
|
935
975
|
await mine(2, { interval: request.duration });
|
|
936
976
|
expect(await enclave.publishCiphertextOutput.staticCall(e3Id, data, proof)).to.equal(true);
|
|
937
977
|
});
|
|
938
978
|
it("emits CiphertextOutputPublished event", async function () {
|
|
939
|
-
const { enclave, request } = await loadFixture(setup);
|
|
979
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
940
980
|
const e3Id = 0;
|
|
941
|
-
await enclave
|
|
942
|
-
|
|
943
|
-
threshold: request.threshold,
|
|
981
|
+
await makeRequest(enclave, usdcToken, {
|
|
982
|
+
...request,
|
|
944
983
|
startWindow: [await time.latest(), (await time.latest()) + 100],
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
computeProviderParams: request.computeProviderParams,
|
|
949
|
-
}, { value: 10 });
|
|
950
|
-
await enclave.activate(e3Id, ethers.ZeroHash);
|
|
984
|
+
});
|
|
985
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, e3Id, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
986
|
+
await enclave.activate(e3Id, data);
|
|
951
987
|
await mine(2, { interval: request.duration });
|
|
952
988
|
await expect(enclave.publishCiphertextOutput(e3Id, data, proof))
|
|
953
989
|
.to.emit(enclave, "CiphertextOutputPublished")
|
|
@@ -963,51 +999,38 @@ describe("Enclave", function () {
|
|
|
963
999
|
.withArgs(e3Id);
|
|
964
1000
|
});
|
|
965
1001
|
it("reverts if E3 has not been activated", async function () {
|
|
966
|
-
const { enclave, request } = await loadFixture(setup);
|
|
1002
|
+
const { enclave, request, usdcToken } = await loadFixture(setup);
|
|
967
1003
|
const e3Id = 0;
|
|
968
|
-
await enclave
|
|
969
|
-
|
|
970
|
-
threshold: request.threshold,
|
|
1004
|
+
await makeRequest(enclave, usdcToken, {
|
|
1005
|
+
...request,
|
|
971
1006
|
startWindow: [await time.latest(), (await time.latest()) + 100],
|
|
972
|
-
|
|
973
|
-
e3Program: request.e3Program,
|
|
974
|
-
e3ProgramParams: request.e3ProgramParams,
|
|
975
|
-
computeProviderParams: request.computeProviderParams,
|
|
976
|
-
}, { value: 10 });
|
|
1007
|
+
});
|
|
977
1008
|
await expect(enclave.publishPlaintextOutput(e3Id, data, "0x"))
|
|
978
1009
|
.to.be.revertedWithCustomError(enclave, "E3NotActivated")
|
|
979
1010
|
.withArgs(e3Id);
|
|
980
1011
|
});
|
|
981
1012
|
it("reverts if ciphertextOutput has not been published", async function () {
|
|
982
|
-
const { enclave, request } = await loadFixture(setup);
|
|
1013
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
983
1014
|
const e3Id = 0;
|
|
984
|
-
await enclave
|
|
985
|
-
|
|
986
|
-
threshold: request.threshold,
|
|
1015
|
+
await makeRequest(enclave, usdcToken, {
|
|
1016
|
+
...request,
|
|
987
1017
|
startWindow: [await time.latest(), (await time.latest()) + 100],
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
computeProviderParams: request.computeProviderParams,
|
|
992
|
-
}, { value: 10 });
|
|
993
|
-
await enclave.activate(e3Id, ethers.ZeroHash);
|
|
1018
|
+
});
|
|
1019
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, e3Id, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
1020
|
+
await enclave.activate(e3Id, data);
|
|
994
1021
|
await expect(enclave.publishPlaintextOutput(e3Id, data, "0x"))
|
|
995
1022
|
.to.be.revertedWithCustomError(enclave, "CiphertextOutputNotPublished")
|
|
996
1023
|
.withArgs(e3Id);
|
|
997
1024
|
});
|
|
998
1025
|
it("reverts if plaintextOutput has already been published", async function () {
|
|
999
|
-
const { enclave, request } = await loadFixture(setup);
|
|
1026
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
1000
1027
|
const e3Id = 0;
|
|
1001
|
-
await enclave
|
|
1002
|
-
|
|
1003
|
-
threshold: request.threshold,
|
|
1028
|
+
await makeRequest(enclave, usdcToken, {
|
|
1029
|
+
...request,
|
|
1004
1030
|
startWindow: [await time.latest(), (await time.latest()) + 100],
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
computeProviderParams: request.computeProviderParams,
|
|
1009
|
-
}, { value: 10 });
|
|
1010
|
-
await enclave.activate(e3Id, ethers.ZeroHash);
|
|
1031
|
+
});
|
|
1032
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, e3Id, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
1033
|
+
await enclave.activate(e3Id, data);
|
|
1011
1034
|
await mine(2, { interval: request.duration });
|
|
1012
1035
|
await enclave.publishCiphertextOutput(e3Id, data, proof);
|
|
1013
1036
|
await enclave.publishPlaintextOutput(e3Id, data, proof);
|
|
@@ -1016,18 +1039,14 @@ describe("Enclave", function () {
|
|
|
1016
1039
|
.withArgs(e3Id);
|
|
1017
1040
|
});
|
|
1018
1041
|
it("reverts if output is not valid", async function () {
|
|
1019
|
-
const { enclave, request } = await loadFixture(setup);
|
|
1042
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
1020
1043
|
const e3Id = 0;
|
|
1021
|
-
await enclave
|
|
1022
|
-
|
|
1023
|
-
threshold: request.threshold,
|
|
1044
|
+
await makeRequest(enclave, usdcToken, {
|
|
1045
|
+
...request,
|
|
1024
1046
|
startWindow: [await time.latest(), (await time.latest()) + 100],
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
computeProviderParams: request.computeProviderParams,
|
|
1029
|
-
}, { value: 10 });
|
|
1030
|
-
await enclave.activate(e3Id, ethers.ZeroHash);
|
|
1047
|
+
});
|
|
1048
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, e3Id, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
1049
|
+
await enclave.activate(e3Id, data);
|
|
1031
1050
|
await mine(2, { interval: request.duration });
|
|
1032
1051
|
await enclave.publishCiphertextOutput(e3Id, data, proof);
|
|
1033
1052
|
await expect(enclave.publishPlaintextOutput(e3Id, data, "0x"))
|
|
@@ -1035,18 +1054,14 @@ describe("Enclave", function () {
|
|
|
1035
1054
|
.withArgs(data);
|
|
1036
1055
|
});
|
|
1037
1056
|
it("sets plaintextOutput correctly", async function () {
|
|
1038
|
-
const { enclave, request } = await loadFixture(setup);
|
|
1057
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
1039
1058
|
const e3Id = 0;
|
|
1040
|
-
await enclave
|
|
1041
|
-
|
|
1042
|
-
threshold: request.threshold,
|
|
1059
|
+
await makeRequest(enclave, usdcToken, {
|
|
1060
|
+
...request,
|
|
1043
1061
|
startWindow: [await time.latest(), (await time.latest()) + 100],
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
computeProviderParams: request.computeProviderParams,
|
|
1048
|
-
}, { value: 10 });
|
|
1049
|
-
await enclave.activate(e3Id, ethers.ZeroHash);
|
|
1062
|
+
});
|
|
1063
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, e3Id, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
1064
|
+
await enclave.activate(e3Id, data);
|
|
1050
1065
|
await mine(2, { interval: request.duration });
|
|
1051
1066
|
await enclave.publishCiphertextOutput(e3Id, data, proof);
|
|
1052
1067
|
expect(await enclave.publishPlaintextOutput(e3Id, data, proof));
|
|
@@ -1054,35 +1069,27 @@ describe("Enclave", function () {
|
|
|
1054
1069
|
expect(e3.plaintextOutput).to.equal(data);
|
|
1055
1070
|
});
|
|
1056
1071
|
it("returns true if output is published successfully", async function () {
|
|
1057
|
-
const { enclave, request } = await loadFixture(setup);
|
|
1072
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
1058
1073
|
const e3Id = 0;
|
|
1059
|
-
await enclave
|
|
1060
|
-
|
|
1061
|
-
threshold: request.threshold,
|
|
1074
|
+
await makeRequest(enclave, usdcToken, {
|
|
1075
|
+
...request,
|
|
1062
1076
|
startWindow: [await time.latest(), (await time.latest()) + 100],
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
computeProviderParams: request.computeProviderParams,
|
|
1067
|
-
}, { value: 10 });
|
|
1068
|
-
await enclave.activate(e3Id, ethers.ZeroHash);
|
|
1077
|
+
});
|
|
1078
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, e3Id, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
1079
|
+
await enclave.activate(e3Id, data);
|
|
1069
1080
|
await mine(2, { interval: request.duration });
|
|
1070
1081
|
await enclave.publishCiphertextOutput(e3Id, data, proof);
|
|
1071
1082
|
expect(await enclave.publishPlaintextOutput.staticCall(e3Id, data, proof)).to.equal(true);
|
|
1072
1083
|
});
|
|
1073
1084
|
it("emits PlaintextOutputPublished event", async function () {
|
|
1074
|
-
const { enclave, request } = await loadFixture(setup);
|
|
1085
|
+
const { enclave, request, usdcToken, ciphernodeRegistryContract, operator1, operator2, } = await loadFixture(setup);
|
|
1075
1086
|
const e3Id = 0;
|
|
1076
|
-
await enclave
|
|
1077
|
-
|
|
1078
|
-
threshold: request.threshold,
|
|
1087
|
+
await makeRequest(enclave, usdcToken, {
|
|
1088
|
+
...request,
|
|
1079
1089
|
startWindow: [await time.latest(), (await time.latest()) + 100],
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
computeProviderParams: request.computeProviderParams,
|
|
1084
|
-
}, { value: 10 });
|
|
1085
|
-
await enclave.activate(e3Id, ethers.ZeroHash);
|
|
1090
|
+
});
|
|
1091
|
+
await setupAndPublishCommittee(ciphernodeRegistryContract, e3Id, [await operator1.getAddress(), await operator2.getAddress()], data, operator1, operator2);
|
|
1092
|
+
await enclave.activate(e3Id, data);
|
|
1086
1093
|
await mine(2, { interval: request.duration });
|
|
1087
1094
|
await enclave.publishCiphertextOutput(e3Id, data, proof);
|
|
1088
1095
|
await expect(await enclave.publishPlaintextOutput(e3Id, data, proof))
|