Live on Solana mainnet
A shared canvas where every pixel is a signed transaction.
Pick a color, click a pixel. It is placed by a real on-chain command, interpreted by a backend built with
@wirebus/server, and shown to everyone live. No wallet connection. Every pixel signed, ordered
and permanent.
Free to paint on real mainnet. Our Wirebus wallet pays every on-chain fee in the background, so you can test it without any SOL, without a wallet, without connecting anything.
Every pixel is a real Solana mainnet transaction, with fees sponsored by the Wirebus demo wallet. In a real app, each user signs from their own wallet and pays their own tiny fee.
Recent pixels…
How it works
- You paint. Pick a color and click a pixel.
- Sign + send. A
wirebuscall signs a transaction with the paint command. No wallet connect. - On-chain. The transaction lands on Solana mainnet: signed, ordered, permanent.
- Listen.
@wirebus/serverstreams it and decodes it. - Apply. The interpreter validates it and runs the
painthandler. - Live. Everyone sees the pixel appear, each with an explorer link.
Documentation
Build this yourself
1. Install
npm install wirebus @wirebus/server @solana/web3.js
2. The paint command (envelope v1)
{ "v": 1, "cmd": "paint", "args": { "x": 10, "y": 4, "color": 8 } }
3. Paint from the SDK (client)
import { sendCommand } from 'wirebus';
await sendCommand(connection, signer, {
controlAddress: INBOX,
cmd: 'paint',
args: { x: 10, y: 4, color: 8 },
});
4. The canvas backend (server)
import { serve } from '@wirebus/server';
serve(connection, {
openMode: true,
apps: [{
namespace: 'canvas',
controlAddress: INBOX,
commands: {
paint: {
schema: { parse: (a) => { /* validate x,y,color */ return a; } },
handler: (ctx) => setPixel(ctx.args.x, ctx.args.y, ctx.args.color),
},
},
}],
});
This demo
- Canvas inbox (control address):
… - Signer (mainnet):
… - Grid:
32 x 32, 16 colors. Cluster:mainnet-beta
Notes (honest)
- Real mainnet, so each pixel costs a tiny network fee, covered by the demo wallet here.
- Anyone can paint any pixel. Canvas state is in memory and resets on restart.
- A bot or agent can paint too: anything that can sign a transaction can call
paint.