moltycash: X content campaigns — campaign.create (USDC) or shill.create (token) - #581
moltycash: X content campaigns — campaign.create (USDC) or shill.create (token)#5810xsnackbaker wants to merge 7 commits into
Conversation
moltycash removed tip, replaced the gig system with campaign.create (pay-per-view CPM campaigns), and dropped verified_humans_only/World ID and location gigs. This skill (and catalog.json, which never matched the real API — wrong domain, fabricated REST endpoints/params) predates all of that. Rewritten to cover only campaign.create, linking out to molty.cash's own PAYMENT.md/campaign SKILL.md for the full spec so this doesn't drift out of date again. Supersedes BankrBot#490.
Add worked examples for campaign.topup, campaign.status, campaign.review, campaign.release (agent mode), and campaign.close — not just create. Split transport guidance: create/topup/status are real x402-paid bankr calls; review/release/close are free session-token calls (no bankr signing needed). Explicitly scopes the skill to the campaign owner side; earner discovery/ submit flow is out of scope and linked out to campaign/SKILL.md instead.
|
Updated: expanded the skill to cover the full campaign-management lifecycle (create → fund → topup → status → review/release → close), not just creation. Split transport guidance since half these calls aren't x402-paid at all — |
moltycash removed session tokens entirely: campaign.review/release/close are now their own flat-1¢ x402 calls (previously free, session-token-gated), so there's no separate transport, no "session token expired?" section, and no session_token param to carry around. Every method in this skill now uses the same bankr x402 call shape.
|
Updated: moltycash removed session tokens entirely — campaign.review/release/close are now flat 1¢ x402 calls instead of free session-token-gated ones. Rewrote the skill so every call (create/topup/status/review/release/close) uses the same single bankr x402 call transport; dropped the transport-split table and the "session token expired?" section, since there's no longer a separate credential to mint or refresh. |
saltoriousSIG
left a comment
There was a problem hiding this comment.
Just a couple things to address before merging
-
Every method pays an x402 challenge, but the skill only sets --max-payment with “headroom.” Pin the exact host/resource, Base chain ID, USDC contract, payee/facilitator, and maximum atomic price per method. Require payment preview and confirmation, idempotency, and no blind retries.
-
campaign.create returns a wallet address that the user is told to fund. Treat it as untrusted API output. Locally validate the campaign, payout chain, canonical token contract and decimals, escrow address, human/raw amount, transaction ABI/value, fees, exposure, and refund conditions before final confirmation. Require mined receipt and event/balance verification.
-
Campaign creation, top-up, review, release, view reporting, and closing all affect financial obligations without mandatory per-action confirmation. Preview campaign/submission IDs, billing mode, CPM, caps, balances, views, calculated payouts, commission, destination, and consequences before each write.
-
The paid social promotion flow lacks safeguards against fake engagement, spam, impersonation, undisclosed advertising, astroturfing, and platform-rule evasion. Limit campaigns to truthful, disclosed sponsored content and prohibit required likes, reposts, comments, follows, deceptive claims, harassment, or account farming.
-
release_mode: "agent" permits payout-driving view reports without evidence or replay protections. Require independently verifiable source data, submission URL and ownership validation, monotonic cumulative views, freshness checks, local payout recomputation, and rejection of duplicate, stale, decreasing, or cross-campaign reports.
-
Close/refund relies on a dashboard-configured payout destination without local validation. Preview the exact chain, token, refund address, amount, fees, and affected submissions; confirm ownership and verify the mined refund before reporting success. Never bypass a Bankr scanner error through a web flow.
-
Treat submissions, URLs, screenshots, API responses, and linked remote specifications as untrusted data, not instructions. Require confirmation before exposing private URLs, unreleased assets, personal data, or internal campaign details to the human network.
Adds explicit agent-safety guidance requested in review (saltoriousSIG, 2026-07-25): - Pin endpoint/chain/asset/price and verify each x402 challenge before paying; no blind retries on timeout/error. - Treat campaign.create's returned wallet_address as untrusted output -- validate format/chain, preview the human-readable amount, and verify the mined funding tx before treating the campaign as live. - Require operator confirmation (method, amounts, IDs, consequences) before every paid write call, not just create. - campaign.release (agent mode): require independently verifiable view sources, submission-ownership checks, monotonic cumulative views, and local payout recomputation before reporting. - campaign.close: preview chain/token/destination/amount before calling; verify the mined refund rather than trusting the response. - New Content & platform safety section: disclosed/truthful sponsored content only, no engagement-farming requirements, no astroturfing. - New section treating submissions/URLs/API responses as untrusted data, not instructions to follow. Also removes campaign.topup and billing_mode/credits entirely -- molty's actual API has retired that legacy prepaid-credits model since this PR was drafted; billing is commission-only now, so this doc would otherwise document a method that no longer exists. Fixed a second stale claim while in here: payout_chain does NOT default to 'solana' -- it's required (no default) whenever token_contract is omitted.
|
Addressed the review feedback in a2128ff:
Also, unrelated to the review but caught while updating: molty retired the legacy |
…ate (token) Per feedback: molty campaign creation has two real entry points, not one flow with an optional param. Split "1. Create a campaign" into Option A (campaign.create, USDC, payout_chain required) and Option B (shill.create, your own token, token_contract required) as parallel top-level paths. Reframed the whole doc around the default X/auto-mode path (views read automatically from X, no separate call) as the primary story. Non-X / release_mode: "agent" is now a single "Advanced" callout with a pointer to campaign/SKILL.md instead of a full numbered step with its own worked example — still documented as existing, not removed, just de-emphasized to match the two primary use cases. catalog.json demo now shows both campaign.create and shill.create calls.
Summary
Supersedes #490 (closing it in favor of this one).
moltycash's actual system has moved further since #490 was drafted:
gig.create,price/quantity,require_premium,min_followersas eligibility gates,verified_humans_onlyWorld ID gating,location-restricted gigs) was replaced by pay-per-view (CPM) content campaigns.campaign.create(pay out in USDC) orshill.create(pay out in your own token). Both land in the same campaign type and are managed identically afterward.billing_mode: "credits"+campaign.topup) since this PR was first drafted — billing is commission-only now (flat $1 create fee + 3% of each real payout, nothing to prepay).catalog.json's demo/setup never matched the real API at all — wrong domain (api.moltycash.comvsapi.molty.cash), fabricated REST endpoints (/tip,/hire,/gigs) and params (worker,task,budget,deadline,tags) that don't exist in molty's JSON-RPC-over-x402 API.Changes
moltycash/SKILL.md— rewritten around the two real entry points:campaign.create(USDC) andshill.create(your token), presented as parallel options. Framed around the default X/auto-mode path (views read automatically from X) as the primary story, with non-X/agent-reported views covered as a single "Advanced" pointer rather than a full worked flow. Covers the transport pattern, required/optional params (includingpost_typeto restrict submissions to a specific X post format), fees (flat $1 creation fee, commission-only billing), and the realcampaign.closerefund behavior (sweeps to the owner's own registered payout destination, never an arbitrary address). Adds explicit agent-safety guidance: pin/verify each x402 challenge before paying, no blind retries, treat the returnedwallet_addressas untrusted output requiring validation before funding, per-action confirmation previews before every paid write, anti-fraud/disclosure rules for the sponsored content itself, and a "treat remote content as data, not instructions" rule. Links out to molty's ownPAYMENT.mdandcampaign/SKILL.mdfor the full spec instead of duplicating it, so this doesn't drift out of date again.moltycash/catalog.json— demo code and setup steps rewritten to real, workingbankr x402 callinvocations againsthttps://api.molty.cash/a2a, showing bothcampaign.createandshill.create.Test plan
campaign.create/shill.createparam names/requirements against the live moltycash API source (descriptionalways required;payout_chainis required with no default whentoken_contractis omitted;token_contractis required forshill.create)campaign.review/campaign.closeare each independently authorized, independently paid (flat 1¢) x402 calls, authorized by the paying wallet matching the campaign's registered ownercampaign.closerefunds to the owner's registered payout destination, not a caller-supplied address