Deployment Preparation
Deployment preparation produces reviewable configuration and calldata; it does not authorize a mainnet transaction.
#Required inputs
- Contract-wallet governance and proposer identities.
- Timelock delay, proposer, executor, and temporary-admin plan.
- Narrow guardian identity and role-handoff sequence.
- Fee recipients with delayed-change governance.
- A contract-enforced WeedToken binding for every genesis budget vault; an operational atomic call is not a substitute.
- Final emission start, rate, notice, and checkpoint schedule.
- Bootstrap WETH and USDG amounts, WEED allocations, and beneficiary.
- Initial v3 price, ordered ticks, fee tiers, slippage, deadlines, and NFT lock.
- A null Rewarder for every launch pool. The current parser rejects nonnull Rewarders, and previewed addPool calldata encodes the zero address until migration accounting is corrected.
#Fail-closed validation
The mainnet validator automatically rejects every configuration while the canonical source-review blocker list is nonempty. This gate has no operator override. It also rejects a missing input rather than inventing a default. The TypeScript wrapper directly reads the connected chain ID and bytecode at the supplied multisig, timelock, protocol-liquidity fee recipient, and maintenance/community fee recipient. The two fee recipients must be nonzero, distinct deployed contracts. It validates the typed confirmation, named addresses, liquidity amounts, ordered tick bounds, slippage, deadline, lock duration, emission profile, and required boolean gates.
Number-valued inputs must be safe base-10 integers. Token amounts must fit a positive uint256. The initial Q96 price must remain inside the Uniswap v3 TickMath square-root-price domain, including the lower bound and excluding the upper bound. Each tick range must stay inside the Uniswap domain and align with an independently verified spacing. Both launch pools require an explicit tick-spacing input; the validator does not infer it from a fee tier or an unverified address.
ADDRESSES_VERIFIED is an operator attestation, as are the Git, test, emission-research, and post-deployment-simulation flags. The read-only Foundry fork validator separately checks chain ID, bytecode at the configured Uniswap and token addresses, and WETH/USDG symbols and decimals. It does not verify every external interface or factory relationship; those checks remain separate release evidence.
#Reviewed sequence
- Validate external chain contracts through read-only calls.
- Build constructor arguments and deployment actions from reviewed manifests.
- Simulate locally or on a controlled testnet and record exact results.
- Verify supply, vault balances, consumers, distributors, pool uniqueness, fees, roles, and NFT lock state.
- Transfer configuration roles to the timelock and narrow guardian.
- Revoke temporary deployer roles and connect only verified addresses.
#Mainnet restriction
#Current unresolved inputs
Final roles, emission schedule, prices, ticks, bootstrap assets, slippage, deadlines, lock values, and WeedSwap addresses remain unresolved. The vault rail also lacks an independent audit. Deployment is not complete.
- Same-token Greenhouse recovery can currently include staked principal.
- EmissionController pause time can accrue after resume.
- Referral eligibility can desynchronize across WeedChef pools.
- WeedV3Vault share issuance can transfer existing idle assets or fees to later depositors.
- Greenhouse and Garden rescheduling can erase uncheckpointed prior-program rewards.
- Empty WeedChef positions can pre-arm or retain a matured harvest timer through a zero deposit or full exit and restake.
- WeedV3Vault deposits and redemptions can fail while its position is fully out of range.
- Referral bindBySig does not require invitee authorization and can permanently bind an unbound invitee.
- LiquidityBootstrapVault does not enforce pair-specific position creation or NFT locking before releasing its reserve.
- Budget vault initialization does not bind the protected asset to WEED, allowing an administrator to initialize with another matching-balance token and recover the WEED allocation; WEED is also recoverable before initialization.
- WeedChef emergency withdrawal can change pool-stake and active-allocation denominators before checkpointing elapsed emissions, over-crediting remaining users or redistributing historical pool allocation.
- WeedChef emergency withdrawal does not reset optional Rewarder stake and can leave stale reward accrual.
- WeedReferral preview can crowd out an invitee boost with commission that the referral vault later clips to zero.
- WeedChef pool reconfiguration can leave old Rewarder stake stale and omit existing stake from a replacement Rewarder.
- Rewarder schedules trust an out-of-band fundedAmount without transferring or verifying reward tokens, can strand undistributed balances, and have no recovery path.
