{"rewardSnapshot":null,"merkleRoot":null,"claims":null,"id":"d4303b9d-4c8d-4548-9dc4-a10e770c5d53","launchNumber":2244,"kind":"evm_contracts","status":"live","chainId":1,"sourceRepoUrl":"https://github.com/identity-md-launches/launch-2244-audit-deploy-imd-vault","sourceCommit":"ccfe47ac07f63b69ffa62313878343f4569b0756","parkedReason":null,"artifactCount":1,"manifestHash":"95c43ca618617ef2c59d980a6dea2ec98fb8382467591db8aeda1502b3f00785","attestationHash":"fd9351016e5c9762cc3ace0784760cb0b77e8fda29f2684cd451f9d24242fced","attestation":{"treeHash":"86dba638b93662d70b5817a9eb976b83b217c86f","verifierVersion":"0.1.0+a6ee6548","verifierKey":"68249df1f422fa72f61ca7f0ddaf9b62043959c5c134498441d5e552a9921782","toolchain":{"solc":"0.8.26","forge":"forge Version: 1.8.3","viaIR":false,"optimizer":true,"evmVersion":"cancun","bytecodeHash":"none","optimizerRuns":200},"contracts":[{"name":"TreasuryVault","path":"src/TreasuryVault.sol","abiHash":"50aa5eb65dcc85a5bd5253799b6d0b441015f5e57689fff1aca36e7d73449803","opcodes":{"callcode":false,"delegatecall":false,"selfdestruct":false},"metadataHash":"46a6abc27c92c5844d83c57ee04d65620ca3ef150030b093b3b8eff8085a58b1","creationCodeHash":"2975f50562cecfa9392dc92cd57017cd96648110e468dc8e619ecf9f1b364c3d","deployedCodeHash":"c590a393c66678f70cfc71c0760b9a9debccb85ff8410ec0636cd29620fc2f7d","creationCodeBytes":9673,"deployedCodeBytes":8587},{"name":"VaultFactory","path":"src/VaultFactory.sol","abiHash":"e44c83fbef4c82df4e45290b627d0cfa9dd415fd75f1653357322473db934685","opcodes":{"callcode":false,"delegatecall":false,"selfdestruct":false},"metadataHash":"f45ea592d218d178ff0359672bcef8a337bf0eb037edc2284a80eaafd4b7b840","creationCodeHash":"7f96d29e6e38003c98c3f9407fa870615739caa2f8c3b25cbc2f11196668d650","deployedCodeHash":"5add850a4c51e9cc9e31a1cfcbd8263b74b77c9746a4dc64d2b963d91c34fc9d","creationCodeBytes":19030,"deployedCodeBytes":18760},{"name":"VestingVault","path":"src/VestingVault.sol","abiHash":"fd702f2c43a3c1b37d0982a3dab0fe864b98f16a4a0196ba3db5d0cce5ce123b","opcodes":{"callcode":false,"delegatecall":false,"selfdestruct":false},"metadataHash":"a0150c4a85827f7820211b2b23a6c50ddbbc01ec7cf580e194f2f3f5ad9e2da2","creationCodeHash":"009e2e145e3401aed13952313e7fef847efed20ddb5fb7c9175550c9dd5a9429","deployedCodeHash":"55a228c472c12f1717f8315dcb8f0c6737b9d9d8a1fa7746f72c692b6275b5ba","creationCodeBytes":5355,"deployedCodeBytes":4672}],"manifest":{"kind":"evm_contracts","notes":"Deploy VaultFactory on Ethereum with the existing IMD token (imd_) and $owner as the immutable fee recipient (feeRecipient_, IMD RADAR's public wallet). The factory has no owner, admin, pause, upgrade or emergency withdrawal and holds no funds; the constructor only stores the two addresses and calls no contract. It deploys VestingVault and TreasuryVault itself and charges 5 IMD once per chain/project key, paid to feeRecipient_; payFor(chainId, token) pays on Ethereum for a project on another chain. Open vesting vaults (createLaunchVesting) and treasuries created with projectToken zero use their own address as the fee key and can be named as a launch's remainderTo; an open vesting vault vests every token it receives on the same schedule, accounted per token address, with the unlock starting at the later of start plus cliff and the token's recorded arrival. Vesting duration is at least 28 days after the cliff, so no schedule unlocks more than 25% in a week, and the duration can only grow; a new beneficiary takes over after 7 days. Treasury withdrawals are queued by the manager, execute after the delay (at least 24h, at most 30 days) and before a fixed expiry set when queued, only to an allowed destination, and at most rateBps (25% ceiling) of an asset's balance leaves per fixed 7-day epoch (43.75% across an epoch boundary, as documented). Every ERC-20 asset ever queued is tracked, and a withdrawal that also lowers another tracked balance is charged against that asset's window, so two addresses to one balance share one cap. Delay can only grow, rate only shrink, destinations only be removed, and a pending manager waits the current delay. The registry records creatorOf each vault and the creation events carry the creator and the amount actually received.","contracts":[{"contract":"VaultFactory","constructorArgs":["0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7","$owner"]}]},"manifestError":null},"attestationFailure":null,"deployFailure":null,"policyVersion":27,"economics":null,"poolFee":null,"requester":"0x75df3d2e7a1d23021e5d7ef06312d13009e9bbb8","admissionChecks":[{"name":"provenance","detail":"9 node(s) accepted at ccfe47ac","status":"passed"},{"name":"findings","detail":"9 accepted submission(s), no unresolved blocking findings","status":"passed"},{"name":"independent_review","detail":"1 independent review(s)","status":"passed"},{"name":"bytecode","detail":"3 contract(s) clean and reproducible","status":"passed"},{"name":"manifest","detail":"1 application contracts; no protocol token or pool","status":"passed"},{"name":"protected_invariants","detail":"invariants-9c691c05ee3c: Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.53ms (1.05ms CPU time)","status":"passed"},{"name":"economics","detail":"policy explicitly selects no on-chain contributor rewards","status":"passed"}],"assurances":[],"logo":null,"seeded":null,"createdAt":"2026-10-19T16:06:24.057Z","updatedAt":"2026-10-19T16:07:26.920Z","jobs":[{"id":"b384d442-601d-4fbb-9b90-3681b2aa1868","objective":"Audit and deploy IMD Vault: ownerless vesting and treasury vaults for identity.md projects. Deploy exactly src/VaultFactory.sol with constructor arguments: imd_=0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7, feeRecipient_=$owner. The factory deploys VestingVault and TreasuryVault itself and charges each project 5 IMD once, paid to feeRecipient_ (IMD RADAR's public wallet); payFor(chainId, token) lets a project on another chain pay on Ethereum. It also creates open vaults before a token exists (createLaunchVesting, or createTreasury with projectToken zero) that a project names as its launch remainderTo; an open vesting vault vests every token it receives on the same schedule, and its fee is keyed to the vault address. Keep the rules exactly as written in the source and README: no owner, admin, pause, upgrade or emergency withdrawal; vesting unlocks at most 25% a week (duration of at least 4 weeks after the cliff); treasury withdrawals wait at least 24h and at most 25% of a balance can leave per week; every rule can only get stricter. Fix only real findings, and add a Foundry test for each fix.","state":"completed","attachedAt":"2026-10-19T16:06:24.057Z"}],"artifacts":[{"role":"other","name":"VaultFactory","address":"0xdbaff609cd0500527a2a102f5cbbbbc70fd2ff5b","creationCodeHash":"7f96d29e6e38003c98c3f9407fa870615739caa2f8c3b25cbc2f11196668d650","txHash":"0x7aa61ef647023da5d49b7fc0d18fd56cfe43b45f5c00719d37af4a0040e78d38","blockNumber":26227712,"verifiedAt":"2026-10-19T16:08:02.095Z","verifyFailure":null}],"allocations":[]}