mcpField
H
helius

helius

github.com/raintree-technology開発70 回インストール
リポジトリ

helius について

Helius の Solana インフラを利用する開発者向けのスキルです。RPC、アセット・トランザクション API、ストリーミング、Webhook、ZK Compression を扱い、オンチェーンデータや取引処理の例を紹介します。

主な機能

  1. 01Solana RPC エンドポイント
  2. 02DAS による NFT・トークンメタデータ取得
  3. 03解析済みトランザクションデータ
  4. 04LaserStream と WebSocket のリアルタイム配信
  5. 05ブロックチェーン活動の Webhook
  6. 06ZK Compression

活用シーン

  1. 01NFT とトークン資産の照会
  2. 02アカウント変更のストリーミング
  3. 03取引やプログラムイベントの通知受信
  4. 04取引の優先手数料の見積もり

インストール

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

$npx skills add https://github.com/raintree-technology/claude-starter --skill helius

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

同梱ファイル.gitignore

詳細

Helius Solana インフラストラクチャのエキスパート

Helius は、高性能な Solana RPC、リアルタイムデータストリーミング、開発者向け API を提供しています。

使用する場面

  • Solana RPC インフラストラクチャのセットアップ
  • NFT/トークンのメタデータのクエリ(DAS API)
  • リアルタイムのブロックチェーンデータ(LaserStream、WebSockets、webhooks)
  • トランザクションの最適化と優先手数料
  • コスト削減のための ZK Compression

クイックスタート

  1. API キーを取得します:https://dashboard.helius.dev
  2. RPC URL を使用します:https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY
curl https://mainnet.helius-rpc.com/?api-key=YOUR_KEY \
  -X POST -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"getBalance","params":["YOUR_WALLET"]}'

主なサービス

RPC エンドポイント
// Mainnet
const RPC_URL = `https://mainnet.helius-rpc.com/?api-key=${API_KEY}`;

// Devnet
const DEVNET_URL = `https://devnet.helius-rpc.com/?api-key=${API_KEY}`;
デジタルアセット標準(DAS)API

NFT とトークンのメタデータをクエリします。通常の NFT と圧縮 NFT の両方に対応しています。

単一アセットの取得:

const response = await fetch(RPC_URL, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'getAsset',
    params: { id: 'ASSET_MINT_ADDRESS' }
  })
});

オーナー別のアセット取得:

const response = await fetch(RPC_URL, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'getAssetsByOwner',
    params: {
      ownerAddress: 'WALLET_ADDRESS',
      page: 1,
      limit: 100
    }
  })
});

DAS メソッド:

メソッド説明
getAsset単一アセットのメタデータ
getAssetBatchアセットの一括取得
getAssetsByOwnerウォレットのすべてのアセット
getAssetsByCreatorクリエイター別のアセット
getAssetsByGroupコレクション内のアセット
拡張トランザクション API

人が読みやすい形式で、事前に解析されたトランザクションデータを提供します。

const response = await fetch(RPC_URL, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'getTransactionsForAddress',
    params: [
      'WALLET_ADDRESS',
      {
        transactionDetails: 'full',
        sortOrder: 'desc',
        limit: 10
      }
    ]
  })
});
優先手数料 API

トランザクションを迅速に確定させるための最適な優先手数料を取得します。

const response = await fetch(RPC_URL, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'getPriorityFeeEstimate',
    params: [{
      accountKeys: ['PROGRAM_ID', 'ACCOUNT_1', 'ACCOUNT_2']
    }]
  })
});

const { priorityFeeEstimate } = await response.json();
// Returns: { low, medium, high, veryHigh } in microlamports
LaserStream(リアルタイム gRPC)

超低レイテンシのブロックチェーンストリーミングです。Yellowstone gRPC のドロップイン置き換えとして利用できます。

import { LaserStream } from '@helius-labs/laserstream';

const stream = new LaserStream({
  apiKey: 'YOUR_API_KEY',
  region: 'fra'  // fra, ams, tyo, sg, ewr, pitt, slc, lax, lon
});

// Subscribe to account changes
stream.subscribeAccount('ACCOUNT_ADDRESS', (update) => {
  console.log('Account updated:', update);
});

// Subscribe to program transactions
stream.subscribeProgram('PROGRAM_ID', (tx) => {
  console.log('Program transaction:', tx);
});

リージョン: FRA、AMS、TYO、SG、EWR、PITT、SLC、LAX、LON

Webhooks

ブロックチェーン上のアクティビティに応じたイベント駆動型通知です。

// Create webhook via API
const webhook = await fetch('https://api.helius.xyz/v0/webhooks', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${API_KEY}`
  },
  body: JSON.stringify({
    webhookURL: 'https://your-server.com/webhook',
    transactionTypes: ['NFT_SALE', 'TOKEN_TRANSFER'],
    accountAddresses: ['ADDRESS_TO_WATCH']
  })
});

Webhook の種類:

  • アカウントの変更
  • トランザクションの確認
  • プログラムイベント
  • NFT アクティビティ
ZK Compression

オンチェーンのストレージコストを最大 98%削減します。

// Get compressed account
const response = await fetch(RPC_URL, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'getCompressedAccount',
    params: { address: 'COMPRESSED_ACCOUNT' }
  })
});

// Get compressed token balances
const balances = await fetch(RPC_URL, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'getCompressedTokenBalancesByOwner',
    params: { owner: 'WALLET_ADDRESS' }
  })
});

料金とレート制限

プラン料金クレジットレート制限DAS 制限
無料$0/mo1M10 RPS2 RPS
Developer$49/mo10M50 RPS10 RPS
Business$499/mo100M200 RPS50 RPS
Professional$999/mo200M500 RPS100 RPS

機能の提供状況:

機能無料DeveloperBusinessProfessional
共有 RPCはいはいはいはい
LaserStream(Devnet)-はいはいはい
LaserStream(Mainnet)---はい
拡張 WebSockets--はいはい

エラー処理

try {
  const response = await fetch(RPC_URL, { method: 'POST', ... });

  // Check rate limits
  const remaining = response.headers.get('X-RateLimit-Remaining');
  const reset = response.headers.get('X-RateLimit-Reset');

  if (response.status === 429) {
    // Rate limited - wait and retry
    await new Promise(r => setTimeout(r, 1000));
    return retry();
  }

  const data = await response.json();
  if (data.error) {
    console.error(`RPC Error ${data.error.code}: ${data.error.message}`);
  }

  return data.result;
} catch (err) {
  // Network error - retry with backoff
}

ベストプラクティス

推奨事項:

  • より速い応答には confirmed コミットメントを使用します
  • NFT のクエリには DAS API を使用します(生の getAccountInfo は使用しません)
  • トランザクションを送信する前にシミュレーションします
  • 動的な手数料には getPriorityFeeEstimate を使用します
  • レート制限のヘッダーを確認します

非推奨事項:

  • リアルタイムデータのポーリング(WebSockets/LaserStream を使用します)
  • 優先手数料のハードコード
  • レート制限の無視
  • トランザクションシミュレーションの省略

よくあるパターン

ウォレットのポートフォリオ
async function getWalletPortfolio(wallet) {
  // Get all assets (NFTs + tokens)
  const assets = await fetch(RPC_URL, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: 1,
      method: 'getAssetsByOwner',
      params: { ownerAddress: wallet, page: 1, limit: 1000 }
    })
  }).then(r => r.json());

  // Get SOL balance
  const balance = await fetch(RPC_URL, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: 1,
      method: 'getBalance',
      params: [wallet]
    })
  }).then(r => r.json());

  return {
    solBalance: balance.result.value / 1e9,
    assets: assets.result.items
  };
}
優先手数料付きトランザクション
async function sendWithPriorityFee(transaction, accounts) {
  // Get priority fee estimate
  const feeEstimate = await fetch(RPC_URL, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: 1,
      method: 'getPriorityFeeEstimate',
      params: [{ accountKeys: accounts }]
    })
  }).then(r => r.json());

  // Add compute budget instruction with priority fee
  const priorityFee = feeEstimate.result.priorityFeeEstimate.high;

  // Simulate first
  const simulation = await fetch(RPC_URL, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: 1,
      method: 'simulateTransaction',
      params: [transaction, { commitment: 'confirmed' }]
    })
  }).then(r => r.json());

  if (simulation.result.err) {
    throw new Error(`Simulation failed: ${JSON.stringify(simulation.result.err)}`);
  }

  // Send transaction
  return fetch(RPC_URL, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: 1,
      method: 'sendTransaction',
      params: [transaction, { skipPreflight: true }]
    })
  }).then(r => r.json());
}

リソース

ローカルドキュメントの取得
pipx install docpull
docpull https://www.helius.dev/docs -o .claude/skills/helius/docs

コメント