mcpField
M
magicblock

magicblock

github.com/sendaifun開発130168 回インストール13 週間前に更新
リポジトリ

magicblock について

magicblock は、MagicBlock Ephemeral Rollups を使った Solana アプリ開発ガイドです。Solana 開発者向けに、アカウントの委任や実行、状態のコミットと、Rust、Anchor、TypeScript の設定例を説明します。

主な機能

  1. 01Ephemeral Rollups の構成とフロー
  2. 02アカウント委任、コミット、委任解除
  3. 03Rust、Anchor、TypeScript の例
  4. 04バリデーターと Magic Router の設定
  5. 05VRF、プライバシー、プラグインの解説

活用シーン

  1. 01Solana プログラムへの Ephemeral Rollups 対応追加
  2. 02アカウント委任と状態同期の実装
  3. 03オンチェーンゲームの乱数機能開発
  4. 04TEE によるプライバシー計算の検討

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sendaifun/skills --skill magicblock

インストール後、Claude Code で/magicblockを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

docs/
advanced-patterns.md
troubleshooting.md
examples/anchor-counter/
README.md
examples/crank-automation/
README.md
examples/delegation-flow/
README.md
examples/vrf-randomness/
README.md
resources/
api-reference.md
program-ids.md
templates/
client-template.ts
program-template.rs

詳細

MagicBlock Ephemeral Rollups ガイド

MagicBlock Ephemeral Rollups を使って高性能な Solana アプリケーションを構築するための包括的なガイドです。サブ 10 ミリ秒のレイテンシとガス代無料のトランザクションを実現します。

概要

MagicBlock Ephemeral Rollups(ER)は、Solana を強化するための専用 SVM ランタイムです。次の機能を提供します。

  • サブ 10 ミリ秒のレイテンシ(ベース Solana の約 400 ミリ秒に対して)
  • ガス代無料のトランザクションによるシームレスな UX
  • 既存の Solana プログラムとの完全なコンポーザビリティ
  • オンデマンドのロールアップによる水平スケーリング

アーキテクチャ

┌─────────────────────────────────────────────────────────────┐
│                      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   │
└─────────────────────────────────────────────────────────────┘
基本的なフロー
  1. 初期化 - Solana ベースレイヤーにアカウントを作成します
  2. 委任 - アカウントの所有権を委任プログラムに移します
  3. 実行 - Ephemeral Rollup 上で高速な処理を実行します
  4. コミット - 状態をベースレイヤーに同期します
  5. 委任解除 - 所有権をプログラムに戻します

前提条件

# 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

クイックスタート

1. 依存関係の追加(Cargo.toml)
[dependencies]
anchor-lang = "0.32.1"
ephemeral-rollups-sdk = { version = "0.6.5", features = ["anchor", "disable-realloc"] }
2. プログラムのセットアップ(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 クライアントのセットアップ
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;
}

重要な概念

委任

委任によって PDA の所有権を委任プログラムに移し、Ephemeral Validator がトランザクションを処理できるようにします。

#[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>,
}
コミット

コミットでは、委任解除をせずに ER からベースレイヤーへ PDA の状態を更新します。

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(())
}
委任解除

最終状態をコミットしながら、PDA の所有権をプログラムに戻します。

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

ER バリデーター(Devnet)

リージョンバリデーター ID
アジアMAS1Dt9qreoRMQ14YQuhg8UTZMMzDdKhmkZMECCzk57
EUMEUGGrYPxKk17hCr7wpT6s8dtNokZj5U2L57vjYMS8e
米国MUS3hc9TCw4cGC12vHNoYcCGzJG1txjgQLZWVoeNHNd
TEEFnE6VJT5QNZdedZPnCoLsARgBwoE6DeJNjBs2H1gySXA

Magic Router(最適なものを自動選択):https://devnet-router.magicblock.app

重要なルール

実施すること:
  • ベースレイヤーと ER には別々の接続を維持します
  • すべての ER トランザクションで skipPreflight: true を使用します
  • ER に送信する前に委任状態を確認します
  • Rust では委任されたアカウントに AccountInfo を使用します
  • Rust と TypeScript で PDA シードを正確に一致させます
実施しないこと:
  • 委任されたアカウントの操作をベースレイヤーに送信しないでください
  • 1 つのトランザクション内でベースレイヤーと ER の操作を混在させないでください
  • 確認せずにアカウントの所有権を決めつけないでください
  • ベースレイヤーで読み取る前にコミットメントの検証を省略しないでください

製品

製品説明
Ephemeral Rollup(ER)高性能でガス代無料のトランザクション
Private ER(PER)Intel TDX によるプライバシー保護計算
VRFオンチェーンのランダム性を実現する検証可能なランダム関数
BOLT Framework完全なオンチェーンゲーム向け ECS アーキテクチャ
Solana Plugins機能を強化するアプリ固有の拡張機能

Solana Plugins(新機能)

Solana Plugins は、Solana 上で実現できることを広げるために dApp に追加できるモジュール式の機能です。必要なものを必要なときに組み込める、カスタムツールキットのようなものです。

利用可能なプラグイン
プラグイン説明ユースケース
検証可能なランダム性(VRF)公平性を証明できるオンチェーンのランダム性ゲーム、宝くじ、NFT ドロップ
リアルタイム価格フィードミリ秒単位の市場データDEX、トレーディングボット、DeFi
AI オラクルスマートコントラクトから AI モデルを直接呼び出しますダイナミック NFT、AI エージェント
VRF プラグインの使用
import { requestRandomness, getRandomnessResult } from "@magicblock-labs/vrf-sdk";

// Request randomness
const requestTx = await requestRandomness({
  payer: wallet.publicKey,
  seed: Buffer.from("my_game_seed"),
});

// Get result after confirmation
const result = await getRandomnessResult(requestId);
console.log("Random value:", result.randomness);
Intel TDX によるプライバシー

MagicBlock は、Intel TDX のトラステッド実行環境(TEE)で動作する Ephemeral Rollups を通じて、Solana プログラムのあらゆる状態アカウントにプライバシー機能を提供します。これにより、次のことが可能になります。

  • 状態を公開せずにプライベートな計算を実行
  • 検証可能な実行保証
  • 結果の選択的な開示

リソース

スキルの構成

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

コメント