# MUSEGOD docs: Rewards

## Rewards

Every trade on the pool pays a 1% fee, and 90% of it streams to holders by balance. Rewards sit in the distributor until they are claimed, and they never expire, because the distributor has no owner, no setters and no sweep.

For a person, the [rewards check](https://musegod.org/rewards) is the whole thing: paste an address or name.eth to see what's waiting, connect that wallet to claim it, and ring the bell from the row under the claim box. [Hold MUSEGOD](https://musegod.org/docs/hold) walks through a wallet, ETH on Robinhood Chain and the swap.

The rest of this page is for agents, scripts and anyone doing it by hand.

### Claim your rewards

Claiming is one transaction with no arguments. It costs a little ETH for gas on Robinhood Chain and nothing else.

#### 1. See what's waiting

```sh
curl -s "https://musegod.org/api/v1/rewards?q=0xYourWallet"
```

`earned` is what the wallet can claim now, in wei. `claim.ready` is true when it's above zero. The same number is onchain as `earned(address)`:

```sh
cast call 0xaAFC482D0757a705C8F3c41f375c1D79832D8975 "earned(address)(uint256)" 0xYourWallet --rpc-url https://rpc.mainnet.chain.robinhood.com
```

#### 2. Send the claim

The answer carries the transaction, ready to sign:

```json
"claim": {
  "ready": true,
  "tx": { "chainId": 4663, "to": "0xaAFC482D0757a705C8F3c41f375c1D79832D8975", "data": "0x4e71d92d", "value": "0" },
  "forTx": { "chainId": 4663, "to": "0xaAFC482D0757a705C8F3c41f375c1D79832D8975", "data": "0xddeae033…", "value": "0" }
}
```

- `tx` is `claim()`. Send it from the holder's own wallet and the rewards go to that wallet.
- `forTx` is `claimFor(holder)`. Any wallet may send it, and the rewards still go to the holder, never to the sender. This lets an agent with its own gas wallet deliver a holder's rewards without touching their keys. It only works when the holder is a wallet, not a contract.

With Foundry:

```sh
cast send 0xaAFC482D0757a705C8F3c41f375c1D79832D8975 "claim()" --rpc-url https://rpc.mainnet.chain.robinhood.com --account holder
cast send 0xaAFC482D0757a705C8F3c41f375c1D79832D8975 "claimFor(address)" 0xHolder --rpc-url https://rpc.mainnet.chain.robinhood.com --account agent
```

With viem:

```js
import { createWalletClient, defineChain, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'

const robinhood = defineChain({
  id: 4663,
  name: 'Robinhood Chain',
  nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
  rpcUrls: { default: { http: ['https://rpc.mainnet.chain.robinhood.com'] } },
})
const account = privateKeyToAccount(process.env.PRIVATE_KEY)
const wallet = createWalletClient({ account, chain: robinhood, transport: http() })

const r = await fetch(`https://musegod.org/api/v1/rewards?q=${account.address}`).then((r) => r.json())
if (r.claim.ready) {
  const hash = await wallet.sendTransaction({ to: r.claim.tx.to, data: r.claim.tx.data })
  console.log(`claimed: https://musegod.org/c/${hash}`)
}
```

#### When it reverts

| Error | Why |
| --- | --- |
| `NothingToClaim` | `earned` is zero. Hold, wait for the stream, try later. |
| `ExcludedAccount` | The address is excluded from rewards (the pool and the distributor itself). |
| `ClaimForContractNotAllowed` | `claimFor` was sent for a contract. A contract must call `claim()` itself. |

Simulate first with `eth_call` or `cast call` and nothing is spent on a claim that would fail.

### Ring the bell

Ringing the bell is a call to `distribute()` on the distributor. It pulls the trading fees, buys MUSEGOD back, and starts a new 24 hour stream to every holder. Anyone can ring it, and whoever does gets a tip of 0.5% of the buyback, paid in MUSEGOD.

Rings show up on the home page's community wall, ranked by how many times each wallet has rung. The bell itself is on the [rewards page](https://musegod.org/rewards).

Check before you ring:

```sh
curl -s https://musegod.org/api/v1/bell
```

The API simulates the call for free and answers `ready: true` when it would go through. `reason: "NothingToDistribute"` means the bell was rung recently and there's nothing new to stream yet. The answer carries the transaction:

```json
{ "ready": true, "reason": null, "bountyBps": 50, "tx": { "chainId": 4663, "to": "0xaAFC482D0757a705C8F3c41f375c1D79832D8975", "data": "0xe4fc6b6d", "value": "0" } }
```

Pass `?to=0x…` to send the tip somewhere other than the sender. That builds `distributeFor(address)` instead.

Then ring it:

```sh
cast send 0xaAFC482D0757a705C8F3c41f375c1D79832D8975 "distribute()" --rpc-url https://rpc.mainnet.chain.robinhood.com --account ringer
```

Or send the `tx` from `/bell` with any wallet. A ring that would revert costs nothing if you simulate it first.

A loop that checks `/bell` every few minutes and sends `tx` when `ready` is true is a complete keeper. The god runs one of its own, but more ringers means fresher streams for everyone, and the tip goes to whoever gets there first.

### Share

Every claim gets its own card at `https://musegod.org/c/<tx hash>`. Post that link and X, Discord and Telegram show the amount on a card. These are the other links worth posting:

| Link | What people see |
| --- | --- |
| `https://musegod.org` | A live card with what holders have been paid so far, redrawn every 5 minutes |
| `https://musegod.org/profile/<name or address>` | A wallet's profile, by its OpenSea username, its name.eth or its address. The card shows their rank, their bag, what the god has sent them and a few of their rarest roles and honors |
| `https://musegod.org/c/<tx hash>` | A claim's card, with the amount. A claim the god sent for a holder shows as a blessing |

Every card is also an image on its own, for posts and embeds: add `.jpg` (for example `https://musegod.org/profile/0x00a839de7922491683f547a67795204763ff8237.jpg`). The live card is at `https://musegod.org/og/live.jpg`.

Try yours: [https://musegod.org/profile/0x00a839de7922491683f547a67795204763ff8237](https://musegod.org/profile/0x00a839de7922491683f547a67795204763ff8237).

The API has open CORS, so a page, a bot or a dashboard can use it straight from the browser. A few ideas: a Telegram or Discord bot that answers "what do I have waiting?" with `/rewards` and posts claim cards, a bell ringer that posts its own receipt, a leaderboard from `/holders` and `/faithful`. [Build with us](https://musegod.org/docs/build) picks the path and has a prompt to start an agent on it.

If you build something, tell the god at [@musegod_rh](https://x.com/musegod_rh), show it in the [Discord](https://discord.gg/musegod), or under a video on [YouTube](https://www.youtube.com/@musegod_rh).
