eugenepyvovarov

magicblock

5
1
# Install this skill:
npx skills add eugenepyvovarov/mcpbundler-agent-skills-marketplace --skill "magicblock"

Install specific skill from multi-skill repository

# Description

Comprehensive guide for building high-performance Solana apps with MagicBlock Ephemeral Rollups. Use when you need sub-10ms latency, gasless transactions, or rollup architecture guidance.

# SKILL.md


name: magicblock
description: Comprehensive guide for building high-performance Solana apps with MagicBlock Ephemeral Rollups. Use when you need sub-10ms latency, gasless transactions, or rollup architecture guidance.


MagicBlock Ephemeral Rollups Guide

A comprehensive guide for building high-performance Solana applications with MagicBlock Ephemeral Rollups - enabling sub-10ms latency and gasless transactions.

Overview

MagicBlock Ephemeral Rollups (ER) are specialized SVM runtimes that enhance Solana with:
- Sub-10ms latency (vs ~400ms on base Solana)
- Gasless transactions for seamless UX
- Full composability with existing Solana programs
- Horizontal scaling via on-demand rollups

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      Your Application                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Base Layer (Solana)          β”‚  Ephemeral Rollup (ER)      β”‚
β”‚  - Initialize accounts        β”‚  - Execute operations       β”‚
β”‚  - Delegate accounts          β”‚  - Process at ~10-50ms      β”‚
β”‚  - Final state commits        β”‚  - Zero gas fees            β”‚
β”‚  - ~400ms finality            β”‚  - Commit state to Solana   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Core Flow

  1. Initialize - Create accounts on Solana base layer
  2. Delegate - Transfer account ownership to delegation program
  3. Execute - Run fast operations on Ephemeral Rollup
  4. Commit - Sync state back to base layer
  5. Undelegate - Return ownership to your program

Prerequisites

# Required versions
Solana: 2.3.13
Rust: 1.85.0
Anchor: 0.32.1
Node: 24.10.0

# Install Anchor (if needed)
cargo install --git https://github.com/coral-xyz/anchor anchor-cli

Quick Start

1. Add Dependencies (Cargo.toml)

[dependencies]
anchor-lang = "0.32.1"
ephemeral-rollups-sdk = { version = "0.6.5", features = ["anchor", "disable-realloc"] }

2. Program Setup (lib.rs)

use anchor_lang::prelude::*;
use ephemeral_rollups_sdk::anchor::{delegate_account, commit_accounts, ephemeral};
use ephemeral_rollups_sdk::cpi::DelegationProgram;

declare_id!("YourProgramId111111111111111111111111111111");

#[ephemeral]  // Required: enables ER support
#[program]
pub mod my_program {
    use super::*;

    pub fn initialize(ctx: Context<Initialize>) -> Result<()> {
        ctx.accounts.state.value = 0;
        Ok(())
    }

    #[delegate]  // Auto-injects delegation accounts
    pub fn delegate(ctx: Context<Delegate>) -> Result<()> {
        Ok(())
    }

    pub fn increment(ctx: Context<Update>) -> Result<()> {
        ctx.accounts.state.value += 1;
        Ok(())
    }

    #[commit]  // Auto-injects commit accounts
    pub fn undelegate(ctx: Context<Undelegate>) -> Result<()> {
        Ok(())
    }
}

3. TypeScript Client Setup

import { Connection, PublicKey } from "@solana/web3.js";
import { AnchorProvider, Program } from "@coral-xyz/anchor";
import { DELEGATION_PROGRAM_ID } from "@magicblock-labs/ephemeral-rollups-sdk";

// CRITICAL: Separate connections for each layer
const baseConnection = new Connection("https://api.devnet.solana.com");
const erConnection = new Connection("https://devnet.magicblock.app");

// Create providers
const baseProvider = new AnchorProvider(baseConnection, wallet, { commitment: "confirmed" });
const erProvider = new AnchorProvider(erConnection, wallet, {
  commitment: "confirmed",
  skipPreflight: true,  // Required for ER
});

// Check delegation status
async function isDelegated(pubkey: PublicKey): Promise<boolean> {
  const info = await baseConnection.getAccountInfo(pubkey);
  return info?.owner.equals(DELEGATION_PROGRAM_ID) ?? false;
}

Key Concepts

Delegation

Delegation transfers PDA ownership to the delegation program, allowing the Ephemeral Validator to process transactions.

#[derive(Accounts)]
pub struct Delegate<'info> {
    #[account(mut)]
    pub payer: Signer<'info>,
    /// CHECK: Will be delegated
    #[account(mut, del)]  // 'del' marks for delegation
    pub state: AccountInfo<'info>,
    pub delegation_program: Program<'info, DelegationProgram>,
}

Commit

Commits update PDA state from ER to base layer without undelegating.

use ephemeral_rollups_sdk::anchor::commit_accounts;

pub fn commit(ctx: Context<Commit>) -> Result<()> {
    commit_accounts(
        &ctx.accounts.payer,
        vec![&ctx.accounts.state.to_account_info()],
        &ctx.accounts.magic_context,
        &ctx.accounts.magic_program,
    )?;
    Ok(())
}

Undelegation

Returns PDA ownership to your program while committing final state.

#[commit]  // Handles commit + undelegate
pub fn undelegate(ctx: Context<Undelegate>) -> Result<()> {
    Ok(())
}

ER Validators (Devnet)

Region Validator Identity
Asia MAS1Dt9qreoRMQ14YQuhg8UTZMMzDdKhmkZMECCzk57
EU MEUGGrYPxKk17hCr7wpT6s8dtNokZj5U2L57vjYMS8e
US MUS3hc9TCw4cGC12vHNoYcCGzJG1txjgQLZWVoeNHNd
TEE FnE6VJT5QNZdedZPnCoLsARgBwoE6DeJNjBs2H1gySXA

Magic Router (auto-selects best): https://devnet-router.magicblock.app

Critical Rules

DO:

  • Maintain separate connections for base layer and ER
  • Use skipPreflight: true for all ER transactions
  • Verify delegation status before sending to ER
  • Use AccountInfo for delegated accounts in Rust
  • Match PDA seeds exactly between Rust and TypeScript

DON'T:

  • Send delegated account operations to base layer
  • Mix base layer and ER operations in single transaction
  • Assume account ownership without checking
  • Skip commitment verification before base layer reads

Products

Product Description
Ephemeral Rollup (ER) High-performance, gasless transactions
Private ER (PER) Privacy-preserving computation with Intel TDX
VRF Verifiable random function for on-chain randomness
BOLT Framework ECS architecture for fully on-chain games

Resources

  • Documentation: https://docs.magicblock.gg
  • GitHub: https://github.com/magicblock-labs
  • Examples: https://github.com/magicblock-labs/magicblock-engine-examples
  • Starter Kits: https://github.com/magicblock-labs/starter-kits
  • BOLT Book: https://book.boltengine.gg
  • Discord: Join for testnet access

Skill Structure

magicblock/
β”œβ”€β”€ SKILL.md                          # This file
β”œβ”€β”€ resources/
β”‚   β”œβ”€β”€ api-reference.md              # Complete API reference
β”‚   └── program-ids.md                # All program IDs and constants
β”œβ”€β”€ examples/
β”‚   β”œβ”€β”€ anchor-counter/README.md      # Basic counter with delegation
β”‚   β”œβ”€β”€ delegation-flow/README.md     # Full delegation lifecycle
β”‚   β”œβ”€β”€ vrf-randomness/README.md      # VRF integration
β”‚   └── crank-automation/README.md    # Scheduled tasks
β”œβ”€β”€ templates/
β”‚   β”œβ”€β”€ program-template.rs           # Rust program starter
β”‚   └── client-template.ts            # TypeScript client starter
└── docs/
    β”œβ”€β”€ advanced-patterns.md          # Complex patterns
    └── troubleshooting.md            # Common issues

# Supported AI Coding Agents

This skill is compatible with the SKILL.md standard and works with all major AI coding agents:

Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.