@enclave-e3/contracts 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -2
- package/artifacts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json +135 -0
- package/artifacts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/artifacts.d.ts +27 -0
- package/artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.json +77 -0
- package/artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +126 -0
- package/artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/artifacts.d.ts +43 -0
- package/artifacts/build-info/solc-0_8_28-5150b9e6b6cf4df4986fccba97bea37a16fdfebc.json +311 -0
- package/artifacts/build-info/solc-0_8_28-5150b9e6b6cf4df4986fccba97bea37a16fdfebc.output.json +1 -0
- package/artifacts/contracts/Enclave.sol/Enclave.json +239 -147
- package/artifacts/contracts/Enclave.sol/artifacts.d.ts +6 -6
- package/artifacts/contracts/interfaces/IBondingRegistry.sol/IBondingRegistry.json +881 -0
- package/artifacts/contracts/interfaces/IBondingRegistry.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json +326 -10
- package/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/artifacts.d.ts +2 -2
- package/artifacts/contracts/interfaces/IComputeProvider.sol/IComputeProvider.json +1 -1
- package/artifacts/contracts/interfaces/IComputeProvider.sol/artifacts.d.ts +1 -1
- package/artifacts/contracts/interfaces/IDecryptionVerifier.sol/IDecryptionVerifier.json +1 -1
- package/artifacts/contracts/interfaces/IDecryptionVerifier.sol/artifacts.d.ts +1 -1
- package/artifacts/contracts/interfaces/IE3Program.sol/IE3Program.json +21 -3
- package/artifacts/contracts/interfaces/IE3Program.sol/artifacts.d.ts +2 -2
- package/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json +247 -27
- package/artifacts/contracts/interfaces/IEnclave.sol/artifacts.d.ts +2 -2
- package/artifacts/contracts/interfaces/{IRegistryFilter.sol/IRegistryFilter.json → ISlashVerifier.sol/ISlashVerifier.json} +10 -10
- package/artifacts/contracts/interfaces/ISlashVerifier.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/interfaces/ISlashingManager.sol/ISlashingManager.json +759 -0
- package/artifacts/contracts/interfaces/ISlashingManager.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/lib/ExitQueueLib.sol/ExitQueueLib.json +116 -0
- package/artifacts/contracts/lib/ExitQueueLib.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/registry/BondingRegistry.sol/BondingRegistry.json +1217 -0
- package/artifacts/contracts/registry/BondingRegistry.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/registry/CiphernodeRegistryOwnable.sol/CiphernodeRegistryOwnable.json +351 -57
- package/artifacts/contracts/registry/CiphernodeRegistryOwnable.sol/artifacts.d.ts +6 -6
- package/artifacts/contracts/slashing/SlashingManager.sol/SlashingManager.json +1107 -0
- package/artifacts/contracts/slashing/SlashingManager.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry.json +328 -12
- package/artifacts/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey.json +328 -12
- package/artifacts/contracts/test/MockCiphernodeRegistry.sol/artifacts.d.ts +8 -8
- package/artifacts/contracts/test/MockComputeProvider.sol/MockComputeProvider.json +4 -4
- package/artifacts/contracts/test/MockComputeProvider.sol/artifacts.d.ts +4 -4
- package/artifacts/contracts/test/MockDecryptionVerifier.sol/MockDecryptionVerifier.json +3 -3
- package/artifacts/contracts/test/MockDecryptionVerifier.sol/artifacts.d.ts +3 -3
- package/artifacts/contracts/test/MockE3Program.sol/MockE3Program.json +26 -32
- package/artifacts/contracts/test/MockE3Program.sol/artifacts.d.ts +4 -4
- package/artifacts/contracts/test/MockSlashingVerifier.sol/MockSlashingVerifier.json +38 -0
- package/artifacts/contracts/test/MockSlashingVerifier.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/test/MockStableToken.sol/MockUSDC.json +425 -0
- package/artifacts/contracts/test/MockStableToken.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/token/EnclaveTicketToken.sol/EnclaveTicketToken.json +1222 -0
- package/artifacts/contracts/token/EnclaveTicketToken.sol/artifacts.d.ts +27 -0
- package/artifacts/contracts/token/EnclaveToken.sol/EnclaveToken.json +1460 -0
- package/artifacts/contracts/token/EnclaveToken.sol/artifacts.d.ts +27 -0
- package/artifacts/poseidon-solidity/PoseidonT3.sol/PoseidonT3.json +3 -3
- package/artifacts/poseidon-solidity/PoseidonT3.sol/artifacts.d.ts +3 -3
- package/contracts/Enclave.sol +230 -81
- package/contracts/interfaces/IBondingRegistry.sol +446 -0
- package/contracts/interfaces/ICiphernodeRegistry.sol +153 -9
- package/contracts/interfaces/IComputeProvider.sol +12 -2
- package/contracts/interfaces/IDecryptionVerifier.sol +11 -6
- package/contracts/interfaces/IE3.sol +21 -17
- package/contracts/interfaces/IE3Program.sol +30 -17
- package/contracts/interfaces/IEnclave.sol +95 -21
- package/contracts/interfaces/ISlashVerifier.sol +23 -0
- package/contracts/interfaces/ISlashingManager.sol +426 -0
- package/contracts/lib/ExitQueueLib.sol +490 -0
- package/contracts/registry/BondingRegistry.sol +737 -0
- package/contracts/registry/CiphernodeRegistryOwnable.sol +393 -26
- package/contracts/slashing/SlashingManager.sol +367 -0
- package/contracts/test/MockCiphernodeRegistry.sol +118 -24
- package/contracts/test/MockComputeProvider.sol +2 -2
- package/contracts/test/MockE3Program.sol +17 -14
- package/contracts/test/MockSlashingVerifier.sol +19 -0
- package/contracts/test/MockStableToken.sol +28 -0
- package/contracts/token/EnclaveTicketToken.sol +243 -0
- package/contracts/token/EnclaveToken.sol +267 -0
- package/dist/hardhat.config.d.ts.map +1 -1
- package/dist/hardhat.config.js +35 -16
- package/dist/ignition/modules/{mockInputValidator.d.ts → bondingRegistry.d.ts} +1 -1
- package/dist/ignition/modules/bondingRegistry.d.ts.map +1 -0
- package/dist/ignition/modules/bondingRegistry.js +35 -0
- package/dist/ignition/modules/ciphernodeRegistry.d.ts.map +1 -1
- package/dist/ignition/modules/ciphernodeRegistry.js +12 -2
- package/dist/ignition/modules/enclave.d.ts.map +1 -1
- package/dist/ignition/modules/enclave.js +16 -7
- package/dist/ignition/modules/{naiveRegistryFilter.d.ts → enclaveTicketToken.d.ts} +1 -1
- package/dist/ignition/modules/enclaveTicketToken.d.ts.map +1 -0
- package/dist/ignition/modules/enclaveTicketToken.js +17 -0
- package/dist/ignition/modules/enclaveToken.d.ts +3 -0
- package/dist/ignition/modules/enclaveToken.d.ts.map +1 -0
- package/dist/ignition/modules/{mockInputValidator.js → enclaveToken.js} +4 -4
- package/dist/ignition/modules/mockCiphernodeRegistry.d.ts.map +1 -1
- package/dist/ignition/modules/mockCiphernodeRegistry.js +0 -1
- package/dist/ignition/modules/mockCiphernodeRegistryEmptyKey.d.ts.map +1 -1
- package/dist/ignition/modules/mockCiphernodeRegistryEmptyKey.js +0 -1
- package/dist/ignition/modules/mockComputeProvider.d.ts.map +1 -1
- package/dist/ignition/modules/mockComputeProvider.js +0 -1
- package/dist/ignition/modules/mockDecryptionVerifier.d.ts.map +1 -1
- package/dist/ignition/modules/mockDecryptionVerifier.js +0 -1
- package/dist/ignition/modules/mockE3Program.d.ts.map +1 -1
- package/dist/ignition/modules/mockE3Program.js +1 -3
- package/dist/ignition/modules/mockSlashingVerifier.d.ts +3 -0
- package/dist/ignition/modules/mockSlashingVerifier.d.ts.map +1 -0
- package/dist/ignition/modules/mockSlashingVerifier.js +10 -0
- package/dist/ignition/modules/mockStableToken.d.ts +3 -0
- package/dist/ignition/modules/mockStableToken.d.ts.map +1 -0
- package/dist/ignition/modules/mockStableToken.js +11 -0
- package/dist/ignition/modules/poseidonT3.d.ts.map +1 -1
- package/dist/ignition/modules/poseidonT3.js +0 -1
- package/dist/ignition/modules/slashingManager.d.ts +3 -0
- package/dist/ignition/modules/slashingManager.d.ts.map +1 -0
- package/dist/ignition/modules/slashingManager.js +16 -0
- package/dist/scripts/cleanIgnitionState.d.ts +12 -0
- package/dist/scripts/cleanIgnitionState.d.ts.map +1 -0
- package/dist/scripts/cleanIgnitionState.js +41 -0
- package/dist/scripts/deployAndSave/bondingRegistry.d.ts +38 -0
- package/dist/scripts/deployAndSave/bondingRegistry.d.ts.map +1 -0
- package/dist/scripts/deployAndSave/bondingRegistry.js +133 -0
- package/dist/scripts/deployAndSave/ciphernodeRegistryOwnable.d.ts +11 -1
- package/dist/scripts/deployAndSave/ciphernodeRegistryOwnable.d.ts.map +1 -1
- package/dist/scripts/deployAndSave/ciphernodeRegistryOwnable.js +76 -19
- package/dist/scripts/deployAndSave/enclave.d.ts +16 -2
- package/dist/scripts/deployAndSave/enclave.d.ts.map +1 -1
- package/dist/scripts/deployAndSave/enclave.js +89 -22
- package/dist/scripts/deployAndSave/enclaveTicketToken.d.ts +20 -0
- package/dist/scripts/deployAndSave/enclaveTicketToken.d.ts.map +1 -0
- package/dist/scripts/deployAndSave/enclaveTicketToken.js +41 -0
- package/dist/scripts/deployAndSave/enclaveToken.d.ts +18 -0
- package/dist/scripts/deployAndSave/enclaveToken.d.ts.map +1 -0
- package/dist/scripts/deployAndSave/enclaveToken.js +57 -0
- package/dist/scripts/deployAndSave/mockComputeProvider.d.ts.map +1 -1
- package/dist/scripts/deployAndSave/mockComputeProvider.js +5 -5
- package/dist/scripts/deployAndSave/mockDecryptionVerifier.d.ts.map +1 -1
- package/dist/scripts/deployAndSave/mockDecryptionVerifier.js +5 -5
- package/dist/scripts/deployAndSave/mockProgram.d.ts +1 -2
- package/dist/scripts/deployAndSave/mockProgram.d.ts.map +1 -1
- package/dist/scripts/deployAndSave/mockProgram.js +7 -19
- package/dist/scripts/deployAndSave/mockStableToken.d.ts +18 -0
- package/dist/scripts/deployAndSave/mockStableToken.d.ts.map +1 -0
- package/dist/scripts/deployAndSave/mockStableToken.js +36 -0
- package/dist/scripts/deployAndSave/poseidonT3.d.ts +11 -0
- package/dist/scripts/deployAndSave/poseidonT3.d.ts.map +1 -0
- package/dist/scripts/deployAndSave/poseidonT3.js +41 -0
- package/dist/scripts/deployAndSave/slashingManager.d.ts +19 -0
- package/dist/scripts/deployAndSave/slashingManager.d.ts.map +1 -0
- package/dist/scripts/deployAndSave/slashingManager.js +38 -0
- package/dist/scripts/deployEnclave.d.ts.map +1 -1
- package/dist/scripts/deployEnclave.js +109 -23
- package/dist/scripts/deployMocks.d.ts +0 -1
- package/dist/scripts/deployMocks.d.ts.map +1 -1
- package/dist/scripts/deployMocks.js +3 -6
- package/dist/scripts/index.d.ts +7 -2
- package/dist/scripts/index.d.ts.map +1 -1
- package/dist/scripts/index.js +7 -2
- package/dist/scripts/proxy.d.ts +22 -0
- package/dist/scripts/proxy.d.ts.map +1 -0
- package/dist/scripts/proxy.js +36 -0
- package/dist/scripts/runVerification.d.ts +2 -0
- package/dist/scripts/runVerification.d.ts.map +1 -0
- package/dist/scripts/runVerification.js +16 -0
- package/dist/scripts/upgrade/bondingRegistry.d.ts +6 -0
- package/dist/scripts/upgrade/bondingRegistry.d.ts.map +1 -0
- package/dist/scripts/upgrade/bondingRegistry.js +49 -0
- package/dist/scripts/upgrade/ciphernodeRegistryOwnable.d.ts +6 -0
- package/dist/scripts/upgrade/ciphernodeRegistryOwnable.d.ts.map +1 -0
- package/dist/scripts/upgrade/ciphernodeRegistryOwnable.js +52 -0
- package/dist/scripts/upgrade/enclave.d.ts +6 -0
- package/dist/scripts/upgrade/enclave.d.ts.map +1 -0
- package/dist/scripts/upgrade/enclave.js +49 -0
- package/dist/scripts/utils.d.ts +51 -2
- package/dist/scripts/utils.d.ts.map +1 -1
- package/dist/scripts/utils.js +67 -4
- package/dist/scripts/verify.d.ts +6 -0
- package/dist/scripts/verify.d.ts.map +1 -0
- package/dist/scripts/verify.js +142 -0
- package/dist/tasks/ciphernode.d.ts +2 -0
- package/dist/tasks/ciphernode.d.ts.map +1 -1
- package/dist/tasks/ciphernode.js +290 -19
- package/dist/tasks/enclave.d.ts.map +1 -1
- package/dist/tasks/enclave.js +76 -31
- package/dist/test/Enclave.spec.js +377 -370
- package/dist/test/Registry/BondingRegistry.spec.d.ts +2 -0
- package/dist/test/Registry/BondingRegistry.spec.d.ts.map +1 -0
- package/dist/test/Registry/BondingRegistry.spec.js +684 -0
- package/dist/test/Registry/CiphernodeRegistryOwnable.spec.d.ts.map +1 -0
- package/dist/test/Registry/CiphernodeRegistryOwnable.spec.js +374 -0
- package/dist/test/Slashing/SlashingManager.spec.d.ts +2 -0
- package/dist/test/Slashing/SlashingManager.spec.d.ts.map +1 -0
- package/dist/test/Slashing/SlashingManager.spec.js +672 -0
- package/dist/types/@openzeppelin/contracts/index.d.ts +3 -0
- package/dist/types/@openzeppelin/contracts/index.d.ts.map +1 -0
- package/dist/types/@openzeppelin/contracts/proxy/index.d.ts +3 -0
- package/dist/types/@openzeppelin/contracts/proxy/index.d.ts.map +1 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.d.ts +97 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.d.ts.map +1 -0
- package/dist/types/{contracts/registry/NaiveRegistryFilter.js → @openzeppelin/contracts/proxy/transparent/ProxyAdmin.js} +0 -4
- package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.d.ts +81 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.d.ts.map +1 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.js +12 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.d.ts +52 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.d.ts.map +1 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.js +8 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.d.ts +3 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.d.ts.map +1 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/index.d.ts +4 -0
- package/dist/types/@openzeppelin/contracts/proxy/transparent/index.d.ts.map +1 -0
- package/dist/types/@openzeppelin/index.d.ts +3 -0
- package/dist/types/@openzeppelin/index.d.ts.map +1 -0
- package/dist/types/contracts/Enclave.d.ts +126 -53
- package/dist/types/contracts/Enclave.d.ts.map +1 -1
- package/dist/types/contracts/Enclave.js +12 -0
- package/dist/types/contracts/index.d.ts +6 -0
- package/dist/types/contracts/index.d.ts.map +1 -1
- package/dist/types/contracts/interfaces/IBondingRegistry.d.ts +622 -0
- package/dist/types/contracts/interfaces/IBondingRegistry.d.ts.map +1 -0
- package/dist/types/contracts/interfaces/IBondingRegistry.js +24 -0
- package/dist/types/contracts/interfaces/ICiphernodeRegistry.d.ts +245 -15
- package/dist/types/contracts/interfaces/ICiphernodeRegistry.d.ts.map +1 -1
- package/dist/types/contracts/interfaces/ICiphernodeRegistry.js +16 -0
- package/dist/types/contracts/interfaces/IE3Program.d.ts +20 -10
- package/dist/types/contracts/interfaces/IE3Program.d.ts.map +1 -1
- package/dist/types/contracts/interfaces/IEnclave.d.ts +149 -20
- package/dist/types/contracts/interfaces/IEnclave.d.ts.map +1 -1
- package/dist/types/contracts/interfaces/IEnclave.js +12 -0
- package/dist/types/contracts/interfaces/{IRegistryFilter.d.ts → ISlashVerifier.d.ts} +16 -16
- package/dist/types/contracts/interfaces/ISlashVerifier.d.ts.map +1 -0
- package/dist/types/contracts/interfaces/ISlashVerifier.js +1 -0
- package/dist/types/contracts/interfaces/ISlashingManager.d.ts +384 -0
- package/dist/types/contracts/interfaces/ISlashingManager.d.ts.map +1 -0
- package/dist/types/contracts/interfaces/ISlashingManager.js +24 -0
- package/dist/types/contracts/interfaces/index.d.ts +3 -2
- package/dist/types/contracts/interfaces/index.d.ts.map +1 -1
- package/dist/types/contracts/lib/ExitQueueLib.d.ts +73 -0
- package/dist/types/contracts/lib/ExitQueueLib.d.ts.map +1 -0
- package/dist/types/contracts/lib/ExitQueueLib.js +12 -0
- package/dist/types/contracts/lib/index.d.ts +2 -0
- package/dist/types/contracts/lib/index.d.ts.map +1 -0
- package/dist/types/contracts/lib/index.js +1 -0
- package/dist/types/contracts/registry/BondingRegistry.d.ts +821 -0
- package/dist/types/contracts/registry/BondingRegistry.d.ts.map +1 -0
- package/dist/types/contracts/registry/BondingRegistry.js +44 -0
- package/dist/types/contracts/registry/CiphernodeRegistryOwnable.d.ts +194 -34
- package/dist/types/contracts/registry/CiphernodeRegistryOwnable.d.ts.map +1 -1
- package/dist/types/contracts/registry/CiphernodeRegistryOwnable.js +20 -0
- package/dist/types/contracts/registry/index.d.ts +1 -1
- package/dist/types/contracts/registry/index.d.ts.map +1 -1
- package/dist/types/contracts/slashing/SlashingManager.d.ts +592 -0
- package/dist/types/contracts/slashing/SlashingManager.d.ts.map +1 -0
- package/dist/types/contracts/slashing/SlashingManager.js +36 -0
- package/dist/types/contracts/slashing/index.d.ts +2 -0
- package/dist/types/contracts/slashing/index.d.ts.map +1 -0
- package/dist/types/contracts/slashing/index.js +1 -0
- package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry.d.ts +247 -17
- package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry.d.ts.map +1 -1
- package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry.js +16 -0
- package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey.d.ts +247 -17
- package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey.d.ts.map +1 -1
- package/dist/types/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey.js +16 -0
- package/dist/types/contracts/test/MockE3Program.d.ts +20 -14
- package/dist/types/contracts/test/MockE3Program.d.ts.map +1 -1
- package/dist/types/contracts/test/{MockInputValidator.d.ts → MockSlashingVerifier.d.ts} +15 -15
- package/dist/types/contracts/test/MockSlashingVerifier.d.ts.map +1 -0
- package/dist/types/contracts/test/MockSlashingVerifier.js +1 -0
- package/dist/types/contracts/test/MockStableToken.sol/MockUSDC.d.ts +227 -0
- package/dist/types/contracts/test/MockStableToken.sol/MockUSDC.d.ts.map +1 -0
- package/dist/types/contracts/test/MockStableToken.sol/MockUSDC.js +12 -0
- package/dist/types/contracts/test/MockStableToken.sol/index.d.ts +2 -0
- package/dist/types/contracts/test/MockStableToken.sol/index.d.ts.map +1 -0
- package/dist/types/contracts/test/MockStableToken.sol/index.js +1 -0
- package/dist/types/contracts/test/index.d.ts +3 -3
- package/dist/types/contracts/test/index.d.ts.map +1 -1
- package/dist/types/contracts/token/EnclaveTicketToken.d.ts +574 -0
- package/dist/types/contracts/token/EnclaveTicketToken.d.ts.map +1 -0
- package/dist/types/contracts/token/EnclaveTicketToken.js +24 -0
- package/dist/types/contracts/token/EnclaveToken.d.ts +775 -0
- package/dist/types/contracts/token/EnclaveToken.d.ts.map +1 -0
- package/dist/types/contracts/token/EnclaveToken.js +48 -0
- package/dist/types/contracts/token/index.d.ts +3 -0
- package/dist/types/contracts/token/index.d.ts.map +1 -0
- package/dist/types/contracts/token/index.js +1 -0
- package/dist/types/factories/@openzeppelin/contracts/index.d.ts +2 -0
- package/dist/types/factories/@openzeppelin/contracts/index.d.ts.map +1 -0
- package/dist/types/factories/@openzeppelin/contracts/index.js +4 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/index.d.ts +2 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/index.d.ts.map +1 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/index.js +4 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/ProxyAdmin__factory.d.ts +118 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/ProxyAdmin__factory.d.ts.map +1 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/ProxyAdmin__factory.js +157 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy__factory.d.ts +57 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy__factory.d.ts.map +1 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy__factory.js +78 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy__factory.d.ts +105 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy__factory.d.ts.map +1 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy__factory.js +141 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.d.ts +3 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.d.ts.map +1 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.js +5 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/index.d.ts +3 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/index.d.ts.map +1 -0
- package/dist/types/factories/@openzeppelin/contracts/proxy/transparent/index.js +5 -0
- package/dist/types/factories/@openzeppelin/index.d.ts +2 -0
- package/dist/types/factories/@openzeppelin/index.d.ts.map +1 -0
- package/dist/types/factories/@openzeppelin/index.js +4 -0
- package/dist/types/factories/contracts/Enclave__factory.d.ts +190 -104
- package/dist/types/factories/contracts/Enclave__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/Enclave__factory.js +241 -134
- package/dist/types/factories/contracts/index.d.ts +3 -0
- package/dist/types/factories/contracts/index.d.ts.map +1 -1
- package/dist/types/factories/contracts/index.js +3 -0
- package/dist/types/factories/contracts/interfaces/IBondingRegistry__factory.d.ts +678 -0
- package/dist/types/factories/contracts/interfaces/IBondingRegistry__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/interfaces/IBondingRegistry__factory.js +882 -0
- package/dist/types/factories/contracts/interfaces/ICiphernodeRegistry__factory.d.ts +253 -9
- package/dist/types/factories/contracts/interfaces/ICiphernodeRegistry__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/interfaces/ICiphernodeRegistry__factory.js +325 -9
- package/dist/types/factories/contracts/interfaces/IE3Program__factory.d.ts +16 -2
- package/dist/types/factories/contracts/interfaces/IE3Program__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/interfaces/IE3Program__factory.js +20 -2
- package/dist/types/factories/contracts/interfaces/IEnclave__factory.d.ts +190 -24
- package/dist/types/factories/contracts/interfaces/IEnclave__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/interfaces/IEnclave__factory.js +246 -26
- package/dist/types/factories/contracts/interfaces/ISlashVerifier__factory.d.ts +26 -0
- package/dist/types/factories/contracts/interfaces/ISlashVerifier__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/interfaces/{IRegistryFilter__factory.js → ISlashVerifier__factory.js} +7 -7
- package/dist/types/factories/contracts/interfaces/ISlashingManager__factory.d.ts +594 -0
- package/dist/types/factories/contracts/interfaces/ISlashingManager__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/interfaces/ISlashingManager__factory.js +760 -0
- package/dist/types/factories/contracts/interfaces/index.d.ts +3 -2
- package/dist/types/factories/contracts/interfaces/index.d.ts.map +1 -1
- package/dist/types/factories/contracts/interfaces/index.js +3 -2
- package/dist/types/factories/contracts/lib/ExitQueueLib__factory.d.ts +107 -0
- package/dist/types/factories/contracts/lib/ExitQueueLib__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/lib/ExitQueueLib__factory.js +138 -0
- package/dist/types/factories/contracts/lib/index.d.ts +2 -0
- package/dist/types/factories/contracts/lib/index.d.ts.map +1 -0
- package/dist/types/factories/contracts/lib/index.js +4 -0
- package/dist/types/factories/contracts/registry/BondingRegistry__factory.d.ts +958 -0
- package/dist/types/factories/contracts/registry/BondingRegistry__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/registry/BondingRegistry__factory.js +1239 -0
- package/dist/types/factories/contracts/registry/CiphernodeRegistryOwnable__factory.d.ts +272 -40
- package/dist/types/factories/contracts/registry/CiphernodeRegistryOwnable__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/registry/CiphernodeRegistryOwnable__factory.js +343 -49
- package/dist/types/factories/contracts/registry/index.d.ts +1 -1
- package/dist/types/factories/contracts/registry/index.d.ts.map +1 -1
- package/dist/types/factories/contracts/registry/index.js +1 -1
- package/dist/types/factories/contracts/slashing/SlashingManager__factory.d.ts +879 -0
- package/dist/types/factories/contracts/slashing/SlashingManager__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/slashing/SlashingManager__factory.js +1129 -0
- package/dist/types/factories/contracts/slashing/index.d.ts +2 -0
- package/dist/types/factories/contracts/slashing/index.d.ts.map +1 -0
- package/dist/types/factories/contracts/slashing/index.js +4 -0
- package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey__factory.d.ts +254 -10
- package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistryEmptyKey__factory.js +326 -10
- package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry__factory.d.ts +254 -10
- package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/test/MockCiphernodeRegistry.sol/MockCiphernodeRegistry__factory.js +326 -10
- package/dist/types/factories/contracts/test/MockComputeProvider__factory.d.ts +2 -2
- package/dist/types/factories/contracts/test/MockComputeProvider__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/test/MockComputeProvider__factory.js +2 -2
- package/dist/types/factories/contracts/test/MockDecryptionVerifier__factory.d.ts +1 -1
- package/dist/types/factories/contracts/test/MockDecryptionVerifier__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/test/MockDecryptionVerifier__factory.js +1 -1
- package/dist/types/factories/contracts/test/MockE3Program__factory.d.ts +23 -27
- package/dist/types/factories/contracts/test/MockE3Program__factory.d.ts.map +1 -1
- package/dist/types/factories/contracts/test/MockE3Program__factory.js +28 -34
- package/dist/types/factories/contracts/test/MockSlashingVerifier__factory.d.ts +43 -0
- package/dist/types/factories/contracts/test/MockSlashingVerifier__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/test/MockSlashingVerifier__factory.js +60 -0
- package/dist/types/factories/contracts/test/MockStableToken.sol/MockUSDC__factory.d.ts +338 -0
- package/dist/types/factories/contracts/test/MockStableToken.sol/MockUSDC__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/test/MockStableToken.sol/MockUSDC__factory.js +447 -0
- package/dist/types/factories/contracts/test/MockStableToken.sol/index.d.ts +2 -0
- package/dist/types/factories/contracts/test/MockStableToken.sol/index.d.ts.map +1 -0
- package/dist/types/factories/contracts/test/MockStableToken.sol/index.js +4 -0
- package/dist/types/factories/contracts/test/index.d.ts +2 -2
- package/dist/types/factories/contracts/test/index.d.ts.map +1 -1
- package/dist/types/factories/contracts/test/index.js +2 -2
- package/dist/types/factories/contracts/token/EnclaveTicketToken__factory.d.ts +894 -0
- package/dist/types/factories/contracts/token/EnclaveTicketToken__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/token/EnclaveTicketToken__factory.js +1175 -0
- package/dist/types/factories/contracts/token/EnclaveToken__factory.d.ts +1101 -0
- package/dist/types/factories/contracts/token/EnclaveToken__factory.d.ts.map +1 -0
- package/dist/types/factories/contracts/token/EnclaveToken__factory.js +1439 -0
- package/dist/types/factories/contracts/token/index.d.ts +3 -0
- package/dist/types/factories/contracts/token/index.d.ts.map +1 -0
- package/dist/types/factories/contracts/token/index.js +5 -0
- package/dist/types/factories/index.d.ts +1 -0
- package/dist/types/factories/index.d.ts.map +1 -1
- package/dist/types/factories/index.js +1 -0
- package/dist/types/factories/poseidon-solidity/PoseidonT3__factory.d.ts +1 -1
- package/dist/types/factories/poseidon-solidity/PoseidonT3__factory.d.ts.map +1 -1
- package/dist/types/factories/poseidon-solidity/PoseidonT3__factory.js +1 -1
- package/dist/types/index.d.ts +28 -12
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +13 -6
- package/package.json +30 -21
- package/LICENSE.md +0 -165
- package/artifacts/build-info/solc-0_8_27-9aea5e3f6e25811e781e96c22e8edaf1eb1a01c5.json +0 -130
- package/artifacts/build-info/solc-0_8_27-9aea5e3f6e25811e781e96c22e8edaf1eb1a01c5.output.json +0 -1
- package/artifacts/contracts/interfaces/IInputValidator.sol/IInputValidator.json +0 -38
- package/artifacts/contracts/interfaces/IInputValidator.sol/artifacts.d.ts +0 -27
- package/artifacts/contracts/interfaces/IRegistryFilter.sol/artifacts.d.ts +0 -27
- package/artifacts/contracts/registry/NaiveRegistryFilter.sol/NaiveRegistryFilter.json +0 -309
- package/artifacts/contracts/registry/NaiveRegistryFilter.sol/artifacts.d.ts +0 -27
- package/artifacts/contracts/test/MockInputValidator.sol/MockInputValidator.json +0 -43
- package/artifacts/contracts/test/MockInputValidator.sol/artifacts.d.ts +0 -27
- package/artifacts/contracts/test/MockRegistryFilter.sol/IRegistry.json +0 -37
- package/artifacts/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter.json +0 -262
- package/artifacts/contracts/test/MockRegistryFilter.sol/artifacts.d.ts +0 -43
- package/contracts/interfaces/IInputValidator.sol +0 -18
- package/contracts/interfaces/IRegistryFilter.sol +0 -13
- package/contracts/registry/NaiveRegistryFilter.sol +0 -124
- package/contracts/test/MockInputValidator.sol +0 -29
- package/contracts/test/MockRegistryFilter.sol +0 -117
- package/dist/ignition/modules/mockInputValidator.d.ts.map +0 -1
- package/dist/ignition/modules/naiveRegistryFilter.d.ts.map +0 -1
- package/dist/ignition/modules/naiveRegistryFilter.js +0 -16
- package/dist/scripts/deployAndSave/mockInputValidator.d.ts +0 -6
- package/dist/scripts/deployAndSave/mockInputValidator.d.ts.map +0 -1
- package/dist/scripts/deployAndSave/mockInputValidator.js +0 -18
- package/dist/scripts/deployAndSave/naiveRegistryFilter.d.ts +0 -11
- package/dist/scripts/deployAndSave/naiveRegistryFilter.d.ts.map +0 -1
- package/dist/scripts/deployAndSave/naiveRegistryFilter.js +0 -41
- package/dist/test/CiphernodeRegistry/CiphernodeRegistryOwnable.spec.d.ts.map +0 -1
- package/dist/test/CiphernodeRegistry/CiphernodeRegistryOwnable.spec.js +0 -279
- package/dist/test/CiphernodeRegistry/NaiveRegistryFilter.spec.d.ts +0 -2
- package/dist/test/CiphernodeRegistry/NaiveRegistryFilter.spec.d.ts.map +0 -1
- package/dist/test/CiphernodeRegistry/NaiveRegistryFilter.spec.js +0 -160
- package/dist/types/contracts/interfaces/IInputValidator.d.ts +0 -36
- package/dist/types/contracts/interfaces/IInputValidator.d.ts.map +0 -1
- package/dist/types/contracts/interfaces/IRegistryFilter.d.ts.map +0 -1
- package/dist/types/contracts/registry/NaiveRegistryFilter.d.ts +0 -187
- package/dist/types/contracts/registry/NaiveRegistryFilter.d.ts.map +0 -1
- package/dist/types/contracts/test/MockInputValidator.d.ts.map +0 -1
- package/dist/types/contracts/test/MockRegistryFilter.sol/IRegistry.d.ts +0 -38
- package/dist/types/contracts/test/MockRegistryFilter.sol/IRegistry.d.ts.map +0 -1
- package/dist/types/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter.d.ts +0 -163
- package/dist/types/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter.d.ts.map +0 -1
- package/dist/types/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter.js +0 -8
- package/dist/types/contracts/test/MockRegistryFilter.sol/index.d.ts +0 -3
- package/dist/types/contracts/test/MockRegistryFilter.sol/index.d.ts.map +0 -1
- package/dist/types/factories/contracts/interfaces/IInputValidator__factory.d.ts +0 -26
- package/dist/types/factories/contracts/interfaces/IInputValidator__factory.d.ts.map +0 -1
- package/dist/types/factories/contracts/interfaces/IInputValidator__factory.js +0 -39
- package/dist/types/factories/contracts/interfaces/IRegistryFilter__factory.d.ts +0 -26
- package/dist/types/factories/contracts/interfaces/IRegistryFilter__factory.d.ts.map +0 -1
- package/dist/types/factories/contracts/registry/NaiveRegistryFilter__factory.d.ts +0 -251
- package/dist/types/factories/contracts/registry/NaiveRegistryFilter__factory.d.ts.map +0 -1
- package/dist/types/factories/contracts/registry/NaiveRegistryFilter__factory.js +0 -331
- package/dist/types/factories/contracts/test/MockInputValidator__factory.d.ts +0 -47
- package/dist/types/factories/contracts/test/MockInputValidator__factory.d.ts.map +0 -1
- package/dist/types/factories/contracts/test/MockInputValidator__factory.js +0 -65
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/IRegistry__factory.d.ts +0 -26
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/IRegistry__factory.d.ts.map +0 -1
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/IRegistry__factory.js +0 -38
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter__factory.d.ts +0 -216
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter__factory.d.ts.map +0 -1
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/MockNaiveRegistryFilter__factory.js +0 -284
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/index.d.ts +0 -3
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/index.d.ts.map +0 -1
- package/dist/types/factories/contracts/test/MockRegistryFilter.sol/index.js +0 -5
- /package/dist/test/{CiphernodeRegistry → Registry}/CiphernodeRegistryOwnable.spec.d.ts +0 -0
- /package/dist/types/{contracts/test/MockRegistryFilter.sol → @openzeppelin/contracts}/index.js +0 -0
- /package/dist/types/{contracts/interfaces/IInputValidator.js → @openzeppelin/contracts/proxy/index.js} +0 -0
- /package/dist/types/{contracts/interfaces/IRegistryFilter.js → @openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.js} +0 -0
- /package/dist/types/{contracts/test/MockInputValidator.js → @openzeppelin/contracts/proxy/transparent/index.js} +0 -0
- /package/dist/types/{contracts/test/MockRegistryFilter.sol/IRegistry.js → @openzeppelin/index.js} +0 -0
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
// SPDX-License-Identifier: LGPL-3.0-only
|
|
2
|
+
//
|
|
3
|
+
// This file is provided WITHOUT ANY WARRANTY;
|
|
4
|
+
// without even the implied warranty of MERCHANTABILITY
|
|
5
|
+
// or FITNESS FOR A PARTICULAR PURPOSE.
|
|
6
|
+
|
|
7
|
+
pragma solidity >=0.8.27;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @title ExitQueueLib
|
|
11
|
+
* @notice Library for managing time-locked exit queues for tickets and licenses
|
|
12
|
+
* @dev Implements a queue system where assets are locked for a delay period before they can be claimed or slashed.
|
|
13
|
+
* Assets are organized into tranches based on unlock timestamps, allowing efficient batch operations.
|
|
14
|
+
*/
|
|
15
|
+
library ExitQueueLib {
|
|
16
|
+
/**
|
|
17
|
+
* @notice Represents a single tranche of assets with a specific unlock timestamp
|
|
18
|
+
* @dev Multiple assets queued at the same time are merged into the same tranche for efficiency
|
|
19
|
+
* @param unlockTimestamp The timestamp when assets in this tranche become claimable
|
|
20
|
+
* @param ticketAmount The amount of tickets in this tranche
|
|
21
|
+
* @param licenseAmount The amount of licenses in this tranche
|
|
22
|
+
*/
|
|
23
|
+
struct ExitTranche {
|
|
24
|
+
uint64 unlockTimestamp;
|
|
25
|
+
uint256 ticketAmount;
|
|
26
|
+
uint256 licenseAmount;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @notice Tracks total pending amounts for an operator across all tranches
|
|
31
|
+
* @param ticketAmount Total pending tickets waiting in the exit queue
|
|
32
|
+
* @param licenseAmount Total pending licenses waiting in the exit queue
|
|
33
|
+
*/
|
|
34
|
+
struct PendingAmounts {
|
|
35
|
+
uint256 ticketAmount;
|
|
36
|
+
uint256 licenseAmount;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @notice Main state structure for the exit queue system
|
|
41
|
+
* @dev Contains all per-operator queue data and pending totals
|
|
42
|
+
* @param operatorQueues Maps operator addresses to their arrays of exit tranches
|
|
43
|
+
* @param queueHeadIndex Maps operator addresses to the current head index (for efficient cleanup)
|
|
44
|
+
* @param pendingTotals Maps operator addresses to their total pending amounts
|
|
45
|
+
*/
|
|
46
|
+
struct ExitQueueState {
|
|
47
|
+
mapping(address operator => ExitTranche[] operatorQueues) operatorQueues;
|
|
48
|
+
mapping(address operator => uint256 queueHeadIndex) queueHeadIndex;
|
|
49
|
+
mapping(address operator => PendingAmounts operatorPendings) pendingTotals;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @notice Types of assets that can be queued for exit
|
|
54
|
+
* @dev Used internally to differentiate between ticket and license operations
|
|
55
|
+
*/
|
|
56
|
+
enum AssetType {
|
|
57
|
+
Ticket,
|
|
58
|
+
License
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @notice Emitted when assets are queued for exit
|
|
63
|
+
* @param operator The operator whose assets were queued
|
|
64
|
+
* @param ticketAmount The amount of tickets queued
|
|
65
|
+
* @param licenseAmount The amount of licenses queued
|
|
66
|
+
* @param unlockTimestamp The timestamp when these assets will become claimable
|
|
67
|
+
*/
|
|
68
|
+
event AssetsQueuedForExit(
|
|
69
|
+
address indexed operator,
|
|
70
|
+
uint256 ticketAmount,
|
|
71
|
+
uint256 licenseAmount,
|
|
72
|
+
uint64 unlockTimestamp
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @notice Emitted when assets are claimed from the exit queue
|
|
77
|
+
* @param operator The operator who claimed the assets
|
|
78
|
+
* @param ticketAmount The amount of tickets claimed
|
|
79
|
+
* @param licenseAmount The amount of licenses claimed
|
|
80
|
+
*/
|
|
81
|
+
event AssetsClaimed(
|
|
82
|
+
address indexed operator,
|
|
83
|
+
uint256 ticketAmount,
|
|
84
|
+
uint256 licenseAmount
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @notice Emitted when pending assets are slashed
|
|
89
|
+
* @param operator The operator whose assets were slashed
|
|
90
|
+
* @param ticketAmount The amount of tickets slashed
|
|
91
|
+
* @param licenseAmount The amount of licenses slashed
|
|
92
|
+
* @param includedLockedAssets Whether locked (not yet unlocked) assets were included in the slash
|
|
93
|
+
*/
|
|
94
|
+
event PendingAssetsSlashed(
|
|
95
|
+
address indexed operator,
|
|
96
|
+
uint256 ticketAmount,
|
|
97
|
+
uint256 licenseAmount,
|
|
98
|
+
bool includedLockedAssets
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
/// @notice Thrown when attempting to queue zero amount of both asset types
|
|
102
|
+
error ZeroAmountNotAllowed();
|
|
103
|
+
|
|
104
|
+
/// @notice Thrown when timestamp calculation would overflow uint64
|
|
105
|
+
error TimestampOverflow();
|
|
106
|
+
|
|
107
|
+
/// @notice Thrown when accessing an invalid queue index
|
|
108
|
+
error IndexOutOfBounds();
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* @notice Queues both tickets and licenses for exit with a time delay
|
|
112
|
+
* @dev Assets are added to the operator's queue and will be claimable after exitDelaySeconds.
|
|
113
|
+
* If a tranche with the same unlock timestamp already exists, amounts are merged into it.
|
|
114
|
+
* @param state The exit queue state storage
|
|
115
|
+
* @param operator The operator whose assets are being queued
|
|
116
|
+
* @param exitDelaySeconds The number of seconds until assets become claimable
|
|
117
|
+
* @param ticketAmount The amount of tickets to queue (can be 0)
|
|
118
|
+
* @param licenseAmount The amount of licenses to queue (can be 0)
|
|
119
|
+
*/
|
|
120
|
+
function queueAssetsForExit(
|
|
121
|
+
ExitQueueState storage state,
|
|
122
|
+
address operator,
|
|
123
|
+
uint64 exitDelaySeconds,
|
|
124
|
+
uint256 ticketAmount,
|
|
125
|
+
uint256 licenseAmount
|
|
126
|
+
) internal {
|
|
127
|
+
if (ticketAmount == 0 && licenseAmount == 0) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
uint64 currentTimestamp = uint64(block.timestamp);
|
|
132
|
+
require(
|
|
133
|
+
currentTimestamp <= (type(uint64).max - exitDelaySeconds),
|
|
134
|
+
TimestampOverflow()
|
|
135
|
+
);
|
|
136
|
+
uint64 unlockTimestamp = currentTimestamp + exitDelaySeconds;
|
|
137
|
+
|
|
138
|
+
ExitTranche[] storage operatorQueue = state.operatorQueues[operator];
|
|
139
|
+
|
|
140
|
+
uint256 len = operatorQueue.length;
|
|
141
|
+
bool merged;
|
|
142
|
+
if (len != 0) {
|
|
143
|
+
ExitTranche storage lastTranche = operatorQueue[len - 1];
|
|
144
|
+
if (lastTranche.unlockTimestamp == unlockTimestamp) {
|
|
145
|
+
if (ticketAmount != 0) lastTranche.ticketAmount += ticketAmount;
|
|
146
|
+
if (licenseAmount != 0) {
|
|
147
|
+
lastTranche.licenseAmount += licenseAmount;
|
|
148
|
+
}
|
|
149
|
+
merged = true;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (!merged) {
|
|
154
|
+
ExitTranche storage t = operatorQueue.push();
|
|
155
|
+
t.unlockTimestamp = unlockTimestamp;
|
|
156
|
+
t.ticketAmount = ticketAmount;
|
|
157
|
+
t.licenseAmount = licenseAmount;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
_updatePendingTotals(
|
|
161
|
+
state,
|
|
162
|
+
operator,
|
|
163
|
+
ticketAmount,
|
|
164
|
+
licenseAmount,
|
|
165
|
+
true
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
emit AssetsQueuedForExit(
|
|
169
|
+
operator,
|
|
170
|
+
ticketAmount,
|
|
171
|
+
licenseAmount,
|
|
172
|
+
unlockTimestamp
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* @notice Queues only tickets for exit with a time delay
|
|
178
|
+
* @dev Convenience function that calls queueAssetsForExit with licenseAmount = 0
|
|
179
|
+
* @param state The exit queue state storage
|
|
180
|
+
* @param operator The operator whose tickets are being queued
|
|
181
|
+
* @param exitDelaySeconds The number of seconds until tickets become claimable
|
|
182
|
+
* @param ticketAmount The amount of tickets to queue
|
|
183
|
+
*/
|
|
184
|
+
function queueTicketsForExit(
|
|
185
|
+
ExitQueueState storage state,
|
|
186
|
+
address operator,
|
|
187
|
+
uint64 exitDelaySeconds,
|
|
188
|
+
uint256 ticketAmount
|
|
189
|
+
) internal {
|
|
190
|
+
queueAssetsForExit(state, operator, exitDelaySeconds, ticketAmount, 0);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* @notice Queues only licenses for exit with a time delay
|
|
195
|
+
* @dev Convenience function that calls queueAssetsForExit with ticketAmount = 0
|
|
196
|
+
* @param state The exit queue state storage
|
|
197
|
+
* @param operator The operator whose licenses are being queued
|
|
198
|
+
* @param exitDelaySeconds The number of seconds until licenses become claimable
|
|
199
|
+
* @param licenseAmount The amount of licenses to queue
|
|
200
|
+
*/
|
|
201
|
+
function queueLicensesForExit(
|
|
202
|
+
ExitQueueState storage state,
|
|
203
|
+
address operator,
|
|
204
|
+
uint64 exitDelaySeconds,
|
|
205
|
+
uint256 licenseAmount
|
|
206
|
+
) internal {
|
|
207
|
+
queueAssetsForExit(state, operator, exitDelaySeconds, 0, licenseAmount);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* @notice Gets the total pending amounts for an operator across all tranches
|
|
212
|
+
* @dev Returns both locked (not yet claimable) and unlocked (claimable) amounts
|
|
213
|
+
* @param state The exit queue state storage
|
|
214
|
+
* @param operator The operator to query
|
|
215
|
+
* @return ticketAmount Total pending tickets in the exit queue
|
|
216
|
+
* @return licenseAmount Total pending licenses in the exit queue
|
|
217
|
+
*/
|
|
218
|
+
function getPendingAmounts(
|
|
219
|
+
ExitQueueState storage state,
|
|
220
|
+
address operator
|
|
221
|
+
) internal view returns (uint256 ticketAmount, uint256 licenseAmount) {
|
|
222
|
+
PendingAmounts storage pending = state.pendingTotals[operator];
|
|
223
|
+
return (pending.ticketAmount, pending.licenseAmount);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* @notice Previews the amounts that can be claimed at the current block timestamp
|
|
228
|
+
* @dev Iterates through tranches and sums up amounts where unlock timestamp has passed
|
|
229
|
+
* @param state The exit queue state storage
|
|
230
|
+
* @param operator The operator to query
|
|
231
|
+
* @return ticketAmount Total claimable tickets at current timestamp
|
|
232
|
+
* @return licenseAmount Total claimable licenses at current timestamp
|
|
233
|
+
*/
|
|
234
|
+
function previewClaimableAmounts(
|
|
235
|
+
ExitQueueState storage state,
|
|
236
|
+
address operator
|
|
237
|
+
) internal view returns (uint256 ticketAmount, uint256 licenseAmount) {
|
|
238
|
+
ExitTranche[] storage operatorQueue = state.operatorQueues[operator];
|
|
239
|
+
uint256 currentIndex = state.queueHeadIndex[operator];
|
|
240
|
+
|
|
241
|
+
for (uint256 i = currentIndex; i < operatorQueue.length; i++) {
|
|
242
|
+
ExitTranche storage tranche = operatorQueue[i];
|
|
243
|
+
|
|
244
|
+
if (block.timestamp < tranche.unlockTimestamp) {
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
ticketAmount += tranche.ticketAmount;
|
|
249
|
+
licenseAmount += tranche.licenseAmount;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* @notice Claims unlocked assets from the exit queue
|
|
255
|
+
* @dev Only processes tranches where unlock timestamp has passed. Updates pending totals
|
|
256
|
+
* and cleans up empty tranches.
|
|
257
|
+
* @param state The exit queue state storage
|
|
258
|
+
* @param operator The operator claiming assets
|
|
259
|
+
* @param maxTicketAmount Maximum tickets to claim (actual claimed may be less if queue has fewer)
|
|
260
|
+
* @param maxLicenseAmount Maximum licenses to claim (actual claimed may be less if queue has fewer)
|
|
261
|
+
* @return ticketsClaimed Actual amount of tickets claimed
|
|
262
|
+
* @return licensesClaimed Actual amount of licenses claimed
|
|
263
|
+
*/
|
|
264
|
+
function claimAssets(
|
|
265
|
+
ExitQueueState storage state,
|
|
266
|
+
address operator,
|
|
267
|
+
uint256 maxTicketAmount,
|
|
268
|
+
uint256 maxLicenseAmount
|
|
269
|
+
) internal returns (uint256 ticketsClaimed, uint256 licensesClaimed) {
|
|
270
|
+
if (maxTicketAmount > 0) {
|
|
271
|
+
ticketsClaimed = _takeAssetsFromQueue(
|
|
272
|
+
state,
|
|
273
|
+
operator,
|
|
274
|
+
maxTicketAmount,
|
|
275
|
+
AssetType.Ticket,
|
|
276
|
+
false
|
|
277
|
+
);
|
|
278
|
+
if (ticketsClaimed > 0) {
|
|
279
|
+
state.pendingTotals[operator].ticketAmount -= ticketsClaimed;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
if (maxLicenseAmount > 0) {
|
|
284
|
+
licensesClaimed = _takeAssetsFromQueue(
|
|
285
|
+
state,
|
|
286
|
+
operator,
|
|
287
|
+
maxLicenseAmount,
|
|
288
|
+
AssetType.License,
|
|
289
|
+
false
|
|
290
|
+
);
|
|
291
|
+
if (licensesClaimed > 0) {
|
|
292
|
+
state.pendingTotals[operator].licenseAmount -= licensesClaimed;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
if (ticketsClaimed > 0 || licensesClaimed > 0) {
|
|
297
|
+
_cleanupEmptyTranches(state, operator);
|
|
298
|
+
emit AssetsClaimed(operator, ticketsClaimed, licensesClaimed);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* @notice Slashes pending assets from the exit queue
|
|
304
|
+
* @dev Can optionally include locked (not yet unlocked) assets. Updates pending totals
|
|
305
|
+
* and cleans up empty tranches.
|
|
306
|
+
* @param state The exit queue state storage
|
|
307
|
+
* @param operator The operator whose assets are being slashed
|
|
308
|
+
* @param ticketAmountToSlash Maximum tickets to slash
|
|
309
|
+
* @param licenseAmountToSlash Maximum licenses to slash
|
|
310
|
+
* @param includeLockedAssets If true, slashes locked assets; if false, only slashes unlocked assets
|
|
311
|
+
* @return ticketsSlashed Actual amount of tickets slashed
|
|
312
|
+
* @return licensesSlashed Actual amount of licenses slashed
|
|
313
|
+
*/
|
|
314
|
+
function slashPendingAssets(
|
|
315
|
+
ExitQueueState storage state,
|
|
316
|
+
address operator,
|
|
317
|
+
uint256 ticketAmountToSlash,
|
|
318
|
+
uint256 licenseAmountToSlash,
|
|
319
|
+
bool includeLockedAssets
|
|
320
|
+
) internal returns (uint256 ticketsSlashed, uint256 licensesSlashed) {
|
|
321
|
+
if (ticketAmountToSlash > 0) {
|
|
322
|
+
ticketsSlashed = _takeAssetsFromQueue(
|
|
323
|
+
state,
|
|
324
|
+
operator,
|
|
325
|
+
ticketAmountToSlash,
|
|
326
|
+
AssetType.Ticket,
|
|
327
|
+
includeLockedAssets
|
|
328
|
+
);
|
|
329
|
+
if (ticketsSlashed > 0) {
|
|
330
|
+
state.pendingTotals[operator].ticketAmount -= ticketsSlashed;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
if (licenseAmountToSlash > 0) {
|
|
335
|
+
licensesSlashed = _takeAssetsFromQueue(
|
|
336
|
+
state,
|
|
337
|
+
operator,
|
|
338
|
+
licenseAmountToSlash,
|
|
339
|
+
AssetType.License,
|
|
340
|
+
includeLockedAssets
|
|
341
|
+
);
|
|
342
|
+
if (licensesSlashed > 0) {
|
|
343
|
+
state.pendingTotals[operator].licenseAmount -= licensesSlashed;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
if (ticketsSlashed > 0 || licensesSlashed > 0) {
|
|
348
|
+
_cleanupEmptyTranches(state, operator);
|
|
349
|
+
emit PendingAssetsSlashed(
|
|
350
|
+
operator,
|
|
351
|
+
ticketsSlashed,
|
|
352
|
+
licensesSlashed,
|
|
353
|
+
includeLockedAssets
|
|
354
|
+
);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* @notice Updates the pending totals for an operator
|
|
360
|
+
* @dev Internal helper to increase or decrease pending amounts. Uses bitwise OR for efficient zero check.
|
|
361
|
+
* @param state The exit queue state storage
|
|
362
|
+
* @param operator The operator whose pending totals are being updated
|
|
363
|
+
* @param ticketAmountDelta The change in ticket amount
|
|
364
|
+
* @param licenseAmountDelta The change in license amount
|
|
365
|
+
* @param isIncrease If true, increases totals; if false, decreases totals
|
|
366
|
+
*/
|
|
367
|
+
function _updatePendingTotals(
|
|
368
|
+
ExitQueueState storage state,
|
|
369
|
+
address operator,
|
|
370
|
+
uint256 ticketAmountDelta,
|
|
371
|
+
uint256 licenseAmountDelta,
|
|
372
|
+
bool isIncrease
|
|
373
|
+
) private {
|
|
374
|
+
if ((ticketAmountDelta | licenseAmountDelta) == 0) return;
|
|
375
|
+
|
|
376
|
+
PendingAmounts storage pending = state.pendingTotals[operator];
|
|
377
|
+
|
|
378
|
+
if (isIncrease) {
|
|
379
|
+
if (ticketAmountDelta != 0) {
|
|
380
|
+
pending.ticketAmount += ticketAmountDelta;
|
|
381
|
+
}
|
|
382
|
+
if (licenseAmountDelta != 0) {
|
|
383
|
+
pending.licenseAmount += licenseAmountDelta;
|
|
384
|
+
}
|
|
385
|
+
} else {
|
|
386
|
+
if (ticketAmountDelta != 0) {
|
|
387
|
+
pending.ticketAmount -= ticketAmountDelta;
|
|
388
|
+
}
|
|
389
|
+
if (licenseAmountDelta != 0) {
|
|
390
|
+
pending.licenseAmount -= licenseAmountDelta;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* @notice Cleans up empty tranches from the head of the queue
|
|
397
|
+
* @dev Advances the queue head index past all tranches with zero tickets and licenses.
|
|
398
|
+
* This prevents the queue from growing unbounded and reduces gas costs for future operations.
|
|
399
|
+
* @param state The exit queue state storage
|
|
400
|
+
* @param operator The operator whose queue is being cleaned up
|
|
401
|
+
*/
|
|
402
|
+
function _cleanupEmptyTranches(
|
|
403
|
+
ExitQueueState storage state,
|
|
404
|
+
address operator
|
|
405
|
+
) private {
|
|
406
|
+
ExitTranche[] storage operatorQueue = state.operatorQueues[operator];
|
|
407
|
+
uint256 currentIndex = state.queueHeadIndex[operator];
|
|
408
|
+
|
|
409
|
+
while (currentIndex < operatorQueue.length) {
|
|
410
|
+
ExitTranche storage tranche = operatorQueue[currentIndex];
|
|
411
|
+
if (tranche.ticketAmount == 0 && tranche.licenseAmount == 0) {
|
|
412
|
+
currentIndex++;
|
|
413
|
+
} else {
|
|
414
|
+
break;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
state.queueHeadIndex[operator] = currentIndex;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* @notice Takes assets from the queue, either for claiming or slashing
|
|
423
|
+
* @dev Iterates through tranches from head to tail, taking assets up to wantedAmount.
|
|
424
|
+
* Respects unlock timestamps unless includeLockedAssets is true.
|
|
425
|
+
* @param state The exit queue state storage
|
|
426
|
+
* @param operator The operator whose assets are being taken
|
|
427
|
+
* @param wantedAmount The maximum amount to take
|
|
428
|
+
* @param assetType Whether to take tickets or licenses
|
|
429
|
+
* @param includeLockedAssets If true, takes locked assets; if false, only takes unlocked assets
|
|
430
|
+
* @return takenAmount The actual amount taken (may be less than wantedAmount if queue has fewer assets)
|
|
431
|
+
*/
|
|
432
|
+
function _takeAssetsFromQueue(
|
|
433
|
+
ExitQueueState storage state,
|
|
434
|
+
address operator,
|
|
435
|
+
uint256 wantedAmount,
|
|
436
|
+
AssetType assetType,
|
|
437
|
+
bool includeLockedAssets
|
|
438
|
+
) private returns (uint256 takenAmount) {
|
|
439
|
+
if (wantedAmount == 0) {
|
|
440
|
+
return 0;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
ExitTranche[] storage operatorQueue = state.operatorQueues[operator];
|
|
444
|
+
uint256 currentIndex = state.queueHeadIndex[operator];
|
|
445
|
+
uint256 queueLength = operatorQueue.length;
|
|
446
|
+
uint256 remainingWanted = wantedAmount;
|
|
447
|
+
|
|
448
|
+
while (remainingWanted > 0 && currentIndex < queueLength) {
|
|
449
|
+
ExitTranche storage tranche = operatorQueue[currentIndex];
|
|
450
|
+
|
|
451
|
+
if (
|
|
452
|
+
!includeLockedAssets &&
|
|
453
|
+
block.timestamp < tranche.unlockTimestamp
|
|
454
|
+
) {
|
|
455
|
+
break;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
uint256 availableAmount;
|
|
459
|
+
if (assetType == AssetType.Ticket) {
|
|
460
|
+
availableAmount = tranche.ticketAmount;
|
|
461
|
+
} else {
|
|
462
|
+
availableAmount = tranche.licenseAmount;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
if (availableAmount == 0) {
|
|
466
|
+
currentIndex++;
|
|
467
|
+
continue;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
uint256 amountToTake = remainingWanted < availableAmount
|
|
471
|
+
? remainingWanted
|
|
472
|
+
: availableAmount;
|
|
473
|
+
|
|
474
|
+
if (assetType == AssetType.Ticket) {
|
|
475
|
+
tranche.ticketAmount -= amountToTake;
|
|
476
|
+
} else {
|
|
477
|
+
tranche.licenseAmount -= amountToTake;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
remainingWanted -= amountToTake;
|
|
481
|
+
takenAmount += amountToTake;
|
|
482
|
+
|
|
483
|
+
if (tranche.ticketAmount == 0 && tranche.licenseAmount == 0) {
|
|
484
|
+
currentIndex++;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
state.queueHeadIndex[operator] = currentIndex;
|
|
489
|
+
}
|
|
490
|
+
}
|