
Mystic Finance Liquid Staking Security Review — May 2026
Review of the Plume liquid-staking minter and myPLUME price feed, including withdrawal batching and validator allocation.
Kann Audits / Security Review
Mystic FinanceReview of the optimized 0x deployment script and its contract-verification constructor arguments.
Executive summary
Review of the optimized 0x deployment script and its contract-verification constructor arguments.
This page reflects only the scope and review context disclosed in the published report. Fields the report does not provide are omitted rather than inferred; the PDF remains the source of record for issue detail and limitations.
Security is contextual. This report does not guarantee that the protocol is free from vulnerabilities. It applies to the review context documented in the report.
Scope & record
deployment/scripts/deploy-optimized.jsFindings overview
The counts below are transcribed from the published report. Status and issue detail remain subject to that report’s exact terminology.
Published findings
Findings below are reproduced from the complete Kann Audits security review. View the full PDF for complete scope, methodology, assumptions, and audit context.
L-01
In the deployment script, the ‘ZeroExOptimized‘ contract is deployed using the bootstrapper address obtained from ‘fullMigration.getBootstrapper()‘. const zeroExOptimized = await deployContract(ZeroExOptimizedFactory, [await fullMigration.getBootstrapper()]); console.log("ZeroExOptimized deployed to:", zeroExOptimized.address); However, during the verification step, the script incorrectly uses the ‘FullMigration‘ contract address as the constructor argument. await verifyContract(hre, deploymentResults.contracts.ZeroExOptimized, [ deploymentResults.contracts.FullMigration]); This mismatch causes verification failures because the constructor arguments provided to the verification function do not match those used during deployment.
Root cause The verification logic does not account for the actual constructor parameter used when deploying ‘ZeroExOptimized‘. Instead of using the bootstrapper address returned by ‘fullMigration.getBootstrapper()‘, it mistakenly uses ‘fullMigration.address‘, resulting in incorrect verification data.
Pass bootstrapper as the constructor argument during verification. const bootstrapper = await fullMigration.getBootstrapper(); deploymentResults.bootstrapper = bootstrapper; await verifyContract(hre, deploymentResults.contracts.ZeroExOptimized, [ deploymentResults.bootstrapper])
Methodology
Kann Audits reports describe independent researcher review followed by collaborative analysis of findings and attack paths. The standard review foundation includes:
Audit team
The public report does not list individual researcher names.
Final assessment
The single low-severity finding was marked fixed.
The assessment applies only to the review context and limitations documented in the published report. Missing details are not inferred, and later changes require separate analysis.
Start a conversation
Share the system, fixed scope, and target date. Build enough time into the plan for review, remediation, and verification.