Your pod has a webledger (Part 5). It accepts deposits (Part 3). State is anchored to Bitcoin (Part 6). The next step is obvious: your pod can issue its own token.
Start JSS with a token name and enable multi-chain:
jss start --pay --pay-cost 1 --pay-token PODS --pay-rate 10 --pay-chains "tbtc3,tbtc4"
--pay-token PODS names the token. --pay-rate 10 sets the exchange rate: 10 sats buys 1 PODS token. The first time, the pod mints the token genesis on Bitcoin — a real on-chain transaction that anchors the token's existence.
You have sats in your balance from earlier. Convert them to tokens:
curl -X POST http://localhost:4443/pay/.buy \
-H "Authorization: Nostr $NIP98_TOKEN" \
-H "Content-Type: application/json" \
-d '{"amount": 5, "currency": "tbtc4"}'
{
"bought": 5,
"ticker": "PODS",
"cost": 50,
"rate": 10,
"balance": 416537,
"unit": "tbtc4"
}
Five PODS tokens. Cost 50 tbtc4 sats (5 × 10 sat rate). The response includes a Bitcoin transaction ID and a full MRC20 state proof — the token transfer is anchored to Bitcoin via blocktrails.
Tokens on the pod are useful, but they're pod-local. To make them portable — transferable to other pods, verifiable by anyone — withdraw them as an MRC20 proof:
curl -X POST http://localhost:4443/pay/.withdraw \
-H "Authorization: Nostr $NIP98_TOKEN" \
-H "Content-Type: application/json" \
-d '{"all": true}'
{
"withdrawn": 5,
"token": "PODS",
"state": {
"to": "did:nostr:5e7617...45af",
"amount": 5,
"ticker": "PODS"
},
"prevState": { ... },
"anchor": {
"pubkey": "...",
"stateStrings": ["..."]
}
}
That response is a portable token. The state and prevState form a blocktrail chain. The anchor ties it to Bitcoin. Anyone can verify this proof without trusting your pod.
| Action | Endpoint | What Happens |
|---|---|---|
| Deposit sats | POST /pay/.deposit | TXO verified on chain → sat balance credited |
| Buy tokens | POST /pay/.buy | Sats deducted → tokens minted at pod rate |
| Use tokens | Read paid resources | PaymentCondition deducts from balance |
| Withdraw | POST /pay/.withdraw | Tokens burned → MRC20 proof issued |
| Deposit tokens | POST /pay/.deposit | MRC20 proof verified → tokens credited |
The MRC20 proof is the bridge. It carries tokens between pods. Deposit it on another pod and the tokens are credited there — verified via the blocktrail anchor, not via trust.
Every pod can issue its own token. Every token is anchored to Bitcoin. Every transfer is a state chain advance. The pod operator sets the name, the rate, and the rules. No permission needed. No listing on an exchange. Just --pay-token and a name.
Part 8: Multi-Currency. Your pod speaks multiple chains. Deposit testnet3, testnet4, or mainnet sats. Each currency tracked separately. Trade between them peer-to-peer.