Meta — DSS Bundling¶
TL;DR:
chatAndSnipedoesChat → pay 1 AFFECTION → Purchase(AFFECTION, 1e18) → receive 1 LAUin one tx. Pays for itself if chat-MAI value + 1 LAU accrued > 1 AFFECTION + gas. Easy arithmetic, usually green.
Why this matters¶
Two things in Dysnomia want to happen together but don't have to: chatting at a LAU's venue (earns MAI) and Purchasing LAU (accumulates your own Soul's token). DSS staples them into one call. The result is that every chat you send also racks up a bit of your own LAU — effectively two revenue streams per tx instead of one.
DSS is not magic: you're spending 1 AFFECTION per chat to buy 1 LAU. The economic question is whether that trade is favorable for you, given your own LAU's underlying asset and your AFFECTION supply.
The numbers¶
The chatAndSnipe flow¶
From DSS (copied verbatim from the docs' flow):
1. Call LAU.Chat(text)
2. Transfer 1 AFFECTION from caller to contract
3. Call LAU.Purchase(AFFECTION, 1e18)
4. Transfer 1 LAU back to caller
| Step | Who pays what | Who gets what |
|---|---|---|
| 1. Chat | Caller pays gas | Chat gets delivered; MAI minted to the chatter's YUE (capped 1 token, CHOA) |
| 2. Transfer 1 AFFECTION | Caller → DSS | DSS holds 1 AFFECTION |
| 3. Purchase | DSS spends 1 AFFECTION | DSS receives LAU via LAU's Purchase rate |
| 4. Transfer 1 LAU back | DSS → Caller | Caller's LAU balance +1 LAU |
The contract has setLAU, chatAndSnipe, chat, withdrawLAU. onlyOwner gates all of them — DSS is single-user by design.
Economic identity (per chat)¶
- Ingoing to you: 1 MAI (QING's underlying asset) + 1 LAU
- Outgoing from you: 1 AFFECTION + gas
You net if value(1 MAI) + value(1 LAU) > value(1 AFFECTION) + gas.
Prerequisites¶
- You must pre-approve AFFECTION to the DSS contract (
IERC20(AFFECTION).approve(dss, max)). - You must have ≥ 1 AFFECTION per call.
- You must own the DSS contract (
onlyOwner); deploy your own.
The play¶
- Deploy DSS once per LAU you want to stack. One LAU → one DSS. If you're stacking multiple LAUs, you need multiple DSS contracts (one per LAU).
- Front-load AFFECTION. Deposit enough AFFECTION to cover your planned chat volume. Approve
maxonce so you're not paying approval gas every cycle. - Run the arithmetic per call. If 1 AFFECTION > 1 LAU + 1 MAI, you're losing money chatAndSniping. Use plain
chatinstead (step 1 only). - Use
chat(notchatAndSnipe) when AFFECTION is scarce or expensive. DSS still routes the chat for you and preserves the approval chain; you just skip the snipe. - Batch withdrawals, not deposits.
withdrawLAU(amount)isonlyOwnerand pulls LAU out of the DSS contract in one tx. Let LAU accumulate for a week, then withdraw once; don't pay gas to pull 1 LAU at a time. - Chain venues only where the asset → AFFECTION rate is favorable. Your LAU's
Purchase(AFFECTION, 1e18)uses the LAU's GetMarketRate chain. See Economic: Market Rates — if the 777-floor piecewise is active, your Purchase returns wildly variable LAU amounts. Sanity-check before spraying chats. - (inferred) Pair DSS with guest-list refreshes. A
chatAndSnipecall doesn't Join — if_list[UserToken]expired andCoverCharge > 0, the Chat step reverts withPayCover. Pre-Join (cheaply during a valid window), then spray chatAndSnipes. See Venues: Guest-List Rotation.
Worked example¶
You own 1,000 AFFECTION and want to farm MAI at a QING whose asset is WPLS. Your LAU at that venue has a market rate where 1 AFFECTION Purchases ~0.5 LAU.
Plan: run 100 chatAndSnipe calls over a week.
- Outgoing: 100 AFFECTION + gas_100
- Incoming: 100 MAI (≤ 100 WPLS worth, capped 1 per chat) + 50 LAU
Was it worth it?
- 50 LAU is bankable (each LAU is backed by its own Soul's asset basket — see Power: Yuan Composition).
- 100 MAI → 100 WPLS equivalent minted to your YUE.
- Cost: 100 AFFECTION + gas. If AFFECTION is ~0.2 WPLS, that's 20 WPLS-equivalent spent.
Net positive: +80 WPLS-equivalent MAI + 50 LAU intangibles, minus gas. Green.
Failure mode: your LAU's rate has drifted so 1 AFFECTION = 0.001 LAU. Now 100 AFFECTION buys 0.1 LAU — economically rounds to nothing. Stay on chat, not chatAndSnipe, until rates recover.
Gotchas¶
- Chat reverts ⇒ whole tx reverts. If
_listexpired or cover unpaid or QING is Forbidden, chatAndSnipe reverts the whole thing and you still pay gas for the attempt. chatAndSnipedoesn't Join. Cover-charge refreshes are your problem. The DSS contract has no Join path.- One AFFECTION per call regardless of rate. The
1e18hardcode in step 3 means you always spend exactly 1 AFFECTION, even if the rate gives you 0.0001 LAU. - DSS is
onlyOwner. You can't share a DSS contract with co-players. Each player deploys their own. - AFFECTION approval is to the DSS, not the LAU. If you
approve(LAU, max)you've done nothing for DSS. Approve the DSS address specifically. - No re-entrancy but also no slippage protection. If LAU's rate drops mid-call your Purchase executes at the new rate with no floor. See Economic: Market Rates.
- (inferred) Chat MAI cap still applies. Bundling doesn't exempt the 1-token chat MAI ceiling — each chatAndSnipe still earns up to 1 MAI. Don't expect DSS to boost chat rewards.
setLAUexists. You can repoint the DSS to a different LAU if your strategy changes. But AFFECTION approval transfers with you — confirm the new LAU's Purchase path accepts AFFECTION.
Where it cross-connects¶
- Venues: Chat Mining — why the MAI side of the bundle matters.
- Venues: Guest-List Rotation — the Join you still have to do.
- Economic: Market Rates — the Purchase step's pricing.
- Power: Yuan Composition — where the LAU you accumulate lives in your Yuan calculation.
- Meta: Multi-Owner Stacking — why DSS isn't multi-owner and what that implies.
- Cheat Sheet: Caps & Limits — the 1-MAI cap you're bundling alongside.