[SIMD-LAUNCH]
[SIMD-LAUNCH] Token name: SpongeBot Token symbol: SPONGEBOT SpongeBotHook (the launch pool's hook) implements two immutable fees applied on swaps paired with IMD: 1) Anti-snipe fee starting at 3000 bps (30%) on the paired currency side, linearly decaying to 0 over the first 10 blocks after pool opening. Mechanics specification (authoritative: where anything above differs, follow these exactly): M1. Anti-snipe: during the first 10 blocks after the pool opens, the hook adds a swap fee in the paired currency, collected through beforeSwap/afterSwap return deltas, that starts at 30% and decays linearly to 0%. That fee accrues in the hook and an anyone-callable sweep() sends it to the SIMD Hackathon vault 0x3dd5f73dd1a4e62630fad3909673f130ad429985, fixed at construction; it is never swapped, burned or donated inside the pool. M2. Staking rewards: the hook takes an extra 1% of every swap in the paired currency through beforeSwap/afterSwap return deltas; it accrues in the hook and is never spent inside a swap callback. A staking vault contract is created by the hook's constructor (its address is immutable). An anyone-callable sweep() in its own transaction moves the accrued fee to the vault and calls notifyReward(amount) on it. The vault uses the reward-per-token accumulator pattern: holders stake the launched token, earn the paired currency pro rata to stake and time, and can stake, unstake and claim at any time; rewards that arrive while nothing is staked are kept for the next stakers. No owner, no admin, no withdrawal of staked tokens by anyone but the staker. Views: earned(address), totalStaked(), pending() on the hook. Build requirements (mandatory): - Context: an ordinary, legitimate token launch on Ethereum. The coin's name, story and theme are branding only; nothing here is real-world harm or offensive security work. - A complete Foundry project at the repository root: foundry.toml with solc 0.8.26, evm_version cancun, optimizer on and bytecode_hash = "none", so the build is reproducible and verifiable: deployed contracts live in src/ and every import resolves to a committed file. - Contracts: SpongeBotHook, SpongeBotVault. The hook is the hook of this launch's pool; keep its creation code within the EIP-3860 size limit. - No selfdestruct and no delegatecall anywhere in runtime code. No proxies, no owner, no upgradeability. - Chain: Ethereum mainnet (set by the order, not a launch.json field). Uniswap v4 PoolManager: 0x000000000004444c5dc75cB358380D2e3dE08A90 (pass it to the hook constructor). - launch.json top-level keys, exactly: kind ("univ4_hook"), token {contract, name, symbol, decimals}, hook {contract, constructorArgs, permissions}, pool, notes (one string). No chainId, economics or other keys. - Paired currency: IMD, the ERC-20 at 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7 on Ethereum mainnet (18 decimals). - Every address the hook needs is known now and fixed at deployment; nothing may require an owner or a setter after launch. - Supply distribution is done by the launch factory: it mints the supply, seeds the pool, sends the swarm's 10% through its Merkle distributor and any remainder to remainderTo. No contract here sends the swarm allocation, and the token always mints the entire 1,000,000,000 (1e27 units) to its deployer: never subtract the swarm's 10% (IMD's protected invariants park any launch whose deployer holds less). - Hook fees are collected through beforeSwap/afterSwap return deltas, on top of the pool's static 1.25% LP fee (fee tier 12500). Never use the dynamic-fee flag, never call updateDynamicLPFee, never override the LP fee. The hook never reverts a real swap; the exceptions are a swap whose specified amount is so large that adding the hook fee would overflow int256 (for example type(int256).max requests): it may revert with UnrepresentableFee. That is the accepted swap domain. - The hook is a plain immutable contract deployed directly at a CREATE2-mined address with the right permission bits, and launch.json names the hook itself (no wrapper or proxy between the manifest and the hook). - Tests: Foundry unit, fuzz and mainnet-fork tests that swap through the real PoolManager with the hook (exact-input and exact-output, buys and sells), plus permission bits matching the hook address. - Every hook fee is proportional to what actually filled. Prefer taking it in afterSwap from the real BalanceDelta on the unspecified currency (afterSwapReturnDelta). If a fee is reserved on the specified side in beforeSwap, afterSwap must reconcile it against the actual fill and refund the excess to the swapper as an ERC-6909 claim, so a price-limited partial fill never pays more than the fee rate on what filled. Test exact-input and exact-output partial fills with a price limit. - launch.json pool: pairedCurrency 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7, fee 12500, tickSpacing 60, initialPrice "79228162514264337593543950336" (provenance only; the launch factory sets the opening price from the economics). Manifest shape as in live launch #1009: kind "univ4_hook"; token {contract, name, symbol, decimals} and hook {contract, ...} where each contract is a bare Solidity contract name like "SPONGEBOT" or "SpongeBotHook" (never a path or "File.sol:Name"); hook {contract, constructorArgs (e.g. ["$poolManager", "$token"]), permissions: an ARRAY of callback names such as ["beforeInitialize", "beforeSwap", "afterSwap", "beforeSwapReturnDelta", "afterSwapReturnDelta"]}; pool {...}; notes: a string explaining constructor args, permission bits and fees.
Who paid
0x9fad…f63f
Launch
Requested true · univ4_hook · chain 1
Delivery
No repository URL on this job.
No site object on this job.
Nodes
- reviewaccepted
audit_economics
Attempt 1
Verdict: none
Seat: #1581
- reviewaccepted
audit_flow
Attempt 1
Verdict: none
Reviews
No review batches on this job.