Full lesson
Picassol-Hackathon
Picassol is a collaborative digital canvas on the Solana blockchain, currently in the building stage for the Solana Ecosystem, allowing global users to creatively interact through a 100x100 pixel canvas.
What it does
From the project README:
Welcome to Picassol, a groundbreaking project leveraging the Solana blockchain to create a collaborative digital canvas. This initiative enables participants from across the globe to add their touch to a 100x100 pixel canvas by executing transactions on the Solana network. Each pixel change represents an individual's contribution, piecing together a mosaic of community and innovation.
- Original
- guneysol/Picassol-Hackathon
- SuperStack fork
- Blockchains/Picassol-Hackathon @
40b6e48 - Stars
- 2
- Last push (original)
- 2024-10-19
- Languages
- TypeScript, CSS, Rust, JavaScript
- Detected stack
- AnchorNext.jsweb3.js
- Categories
- Other
- Licence
- MIT
- Homepage
- https://www.picassol.art
Architecture
21 source files. By extension: .tsx ×10, .ts ×7, .js ×3, .rs ×1.
| Top-level directory | Source files |
|---|---|
frontend | 17 |
Picassol | 3 |
utils-decode | 1 |
On-chain programs: Picassol/programs/picassol
❌ Does not build as-is, checked 2026-11-02 Tested on 2026-11-02: full log results.json
Build it yourself: step-by-step guide
Every command below was run on 2026-11-02 by tests/run_fork.py against the pinned commit, and the results come from that run. The full output is in the committed log.
1. Prerequisites (versions we tested with)
- Rust:
rustc 1.99.1 (58cf8f9c3 2026-10-13) - Solana CLI (Agave):
solana-cli 1.18.17 (src:c027cfc3; feat:4215500110, client:Agave) - Anchor (via avm):
0.32.1 - Node.js:
v24.22.1 - npm:
11.21.1 - pnpm:
10.34.6 - Go:
go version go1.27.3 linux/amd64
cargo install --git https://github.com/coral-xyz/anchor avm --locked
avm install 0.32.1 && avm use 0.32.1
sh -c "$(curl -sSfL https://release.anza.xyz/stable/install)"2. Clone at the tested commit
git clone https://github.com/Blockchains/Picassol-Hackathon.git && cd Picassol-Hackathon
git checkout 40b6e480b3babeae8689452cfede52e946f6c6173. Configure
No environment file is needed.
4. Install dependencies
| Directory | Command | Result | Time |
|---|---|---|---|
frontend | npm install --no-audit --no-fund --legacy-peer-deps | ✅ pass | 6s |
utils-decode | npm install --no-audit --no-fund --legacy-peer-deps | ✅ pass | 0s |
Picassol | npx -y yarn@1 install --ignore-engines --network-timeout 600000 | ✅ pass | 3s |
Picassol | npx -y yarn@1 install --ignore-engines --network-timeout 600000 | ✅ pass | 1s |
5. Build
| Directory | Command | Result | Time |
|---|---|---|---|
Picassol | anchor@0.32.1 build | ❌ exit 1 | 67s |
frontend | npm run build | ✅ pass | 14s |
Output tail: anchor@0.32.1 build
Compiling picassol v0.1.0 (/tmp/scbuild/picassol-hackathon/Picassol/programs/picassol)
Finished release [optimized] target(s) in 1m 06s
Error: `idl-build` feature is missing. To solve, add
[features]
idl-build = ["anchor-lang/idl-build"]
in `"/tmp/scbuild/picassol-hackathon/Picassol/programs/picassol/Cargo.toml"`.7. Deploy to a local validator
solana-test-validator --reset # separate terminal
solana config set -ul && solana airdrop 100
anchor deploy --provider.cluster localnetDeploy to devnet (free)
solana config set --url devnet
solana airdrop 2 # or https://faucet.solana.com
anchor deploy --provider.cluster devnet # native: solana program deploy target/deploy/<name>.so
# point the frontend RPC env var at https://api.devnet.solana.comExtend it
- Add an integration test that runs the main flow end to end and asserts every account state change.
- Add a negative test: call each instruction with the wrong signer or account and check that it fails.
- Make the frontend read the cluster from an env var, deploy it to GitHub Pages and point it at your devnet program.
- Wire the build into CI by copying this site's verify-forks workflow.
Key code, explained
Excerpts chosen automatically where the code uses the most Solana concepts, pinned to the fork's commit.
Picassol/programs/picassol/src/lib.rs L97–120 @ 40b6e48 · MIT · original Ok(()) }} #[derive(Accounts)]#[instruction(pos_x: u8, pos_y: u8)]pub struct CreatePixel<'info> { #[account( init, payer = user, space = Pixel::LEN, seeds = [b"pixel".as_ref(), [pos_x, pos_y].as_ref()], bump )] pub pixel: Account<'info, Pixel>, #[account(mut)] pub user: Signer<'info>, pub system_program: Program<'info, System>,} #[derive(Accounts)]pub struct UpdatePixel<'info> { #[account(- Line 106
init,: Creates and pays for a new account. Space and payer must be specified. - Line 109
seeds = [b"pixel".as_ref(), [pos_x, pos_y].as_ref()],: Declares the PDA seeds. Anchor re-derives the address and rejects the account if it doesn't match. - Line 110
bump: Uses the bump seed, the extra byte that pushes the derived address off the ed25519 curve. - Line 114
pub user: Signer<'info>,: Requires this account to have signed the transaction.
How to run, build and test
These commands come from the repo's own manifests (package.json scripts, Anchor.toml, Cargo, go.mod, Makefile). Check the README for prerequisites and environment variables.
| Directory | Command | Runs |
|---|---|---|
Picassol | npm run lint | prettier */*.js "*/**/*{.js,.ts}" --check |
frontend | npm run dev | next dev |
frontend | npm run start | next start |
frontend | npm run build | next build |
Picassol | anchor build | compile programs and generate IDLs |
Picassol | anchor test | local validator + test suite |
Picassol | anchor run test | yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts |
What you could build from it
- Fork the SuperStack copy and extend it within the Other gaps listed on the idea page.
- Learn the pattern first: Program Derived Addresses (PDAs)
- Learn the pattern first: Cross-Program Invocations (CPIs)