/** * pop education update — edit a module's metadata and/or payout. * * updateModule(id, newTitle, newContentHash, newPayout) — verified against * contracts origin/main src/EducationHub.sol — is a FULL OVERWRITE of the * event-emitted metadata pair plus the stored payout, so this command reads * the current state first (payout from the chain via getModule, title + * metadata from the subgraph with an IPFS fallback — issued concurrently) * and merges only the flags the caller passed. Metadata is re-pinned ONLY * when its content actually changes — a payout-only edit keeps the current * contentHash. * * The payout is read on-chain and not from the indexed EducationModule.payout on purpose: a * full overwrite writes the read-back value, so a stale one silently reverts a concurrent * raise, and the same call is the ModuleUnknown existence gate. * * Contract gates (same verification): onlyCreator (creator hat / executor; * a decoded NotCreator revert is the authority), whenNotPaused, payout must * be 1..uint128.max, and the ANSWER HASH IS IMMUTABLE — updateModule never * touches answerHash, so changing quiz content cannot change which answer * index passes (remove + recreate to change the answer). */ import type { Argv, ArgumentsCamelCase } from 'yargs'; interface UpdateModuleArgs { org: string; module: string; payout?: number; name?: string; description?: string; link?: string; quiz?: string; answers?: string; chain?: number; rpc?: string; 'private-key'?: string; 'dry-run'?: boolean; yes?: boolean; preflight?: boolean; } export declare const updateModuleHandler: { builder: (yargs: Argv) => Argv<{ module: string; } & { payout: number | undefined; } & { name: string | undefined; } & { description: string | undefined; } & { link: string | undefined; } & { quiz: string | undefined; } & { answers: string | undefined; }>; handler: (argv: ArgumentsCamelCase) => Promise; }; export {};