docs · Start
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 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 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
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):
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:
"claim": {
"ready": true,
"tx": { "chainId": 4663, "to": "0xaAFC482D0757a705C8F3c41f375c1D79832D8975", "data": "0x4e71d92d", "value": "0" },
"forTx": { "chainId": 4663, "to": "0xaAFC482D0757a705C8F3c41f375c1D79832D8975", "data": "0xddeae033…", "value": "0" }
}
txisclaim(). Send it from the holder's own wallet and the rewards go to that wallet.forTxisclaimFor(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:
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:
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.
Check before you ring:
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:
{ "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:
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.
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 picks the path and has a prompt to start an agent on it.
If you build something, tell the god at @musegod_rh, show it in the Discord, or under a video on YouTube.