概述

LaserStream 的 gRPC 提供基于 Yellowstone 的接口,并通过历史重播、多节点故障转移和完全托管环境等功能进行增强。LaserStream 使用开源的 gRPC 协议,确保没有供应商锁定,并与现有 gRPC 实现最大兼容。 您可以直接连接 @yellowstone-grpc 或使用更高级别的 Helius LaserStream SDK 以获得更多好处(自动重连、订阅管理、错误处理等)。
性能注意:如果您在使用 LaserStream 连接时遇到任何延迟或性能问题,请参阅 故障排除部分 以获取与客户端性能和网络优化相关的常见原因和解决方案。

端点与区域

LaserStream 在全球多个区域可用。选择离您的应用程序最近的端点以获得最佳性能:

主网端点

区域位置端点
ewr纽瓦克,新泽西(靠近纽约)https://laserstream-mainnet-ewr.helius-rpc.com
pitt匹兹堡,美国(中部)https://laserstream-mainnet-pitt.helius-rpc.com
slc盐湖城,美国(西海岸)https://laserstream-mainnet-slc.helius-rpc.com
ams阿姆斯特丹,欧洲https://laserstream-mainnet-ams.helius-rpc.com
fra法兰克福,欧洲https://laserstream-mainnet-fra.helius-rpc.com
tyo东京,亚洲https://laserstream-mainnet-tyo.helius-rpc.com
sgp新加坡,亚洲https://laserstream-mainnet-sgp.helius-rpc.com

开发网端点

网络位置端点
开发网纽瓦克,新泽西(靠近纽约)https://laserstream-devnet-ewr.helius-rpc.com
网络与区域选择
  • 对于 生产应用程序,选择离您的服务器最近的主网端点以获得最佳性能。例如,如果在欧洲部署,请使用阿姆斯特丹 (ams) 或法兰克福 (fra) 端点。
  • 对于 开发和测试,使用开发网端点:https://laserstream-devnet-ewr.helius-rpc.com

快速开始

1

创建一个新项目

mkdir laserstream-grpc-demo
cd laserstream-grpc-demo
npm init -y
2

安装依赖

npm install helius-laserstream
npm install --save-dev typescript ts-node
npx tsc --init
3

获取您的 API 密钥

Helius Dashboard 生成一个密钥。此密钥将作为您对 LaserStream 的身份验证令牌。
计划要求:LaserStream devnet 需要开发者或商业计划。LaserStream mainnet 需要专业计划。确保您的 Helius 账户具有适当的计划以访问 LaserStream 功能。
4

创建订阅脚本

创建 index.ts,内容如下:
import { subscribe, CommitmentLevel, LaserstreamConfig, SubscribeRequest } from 'helius-laserstream'

async function main() {
  const subscriptionRequest: SubscribeRequest = {
    transactions: {
      client: {
        accountInclude: ['TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'],
        accountExclude: [],
        accountRequired: [],
        vote: false,
        failed: false
      }
    },
    commitment: CommitmentLevel.CONFIRMED,
    accounts: {},
    slots: {},
    transactionsStatus: {},
    blocks: {},
    blocksMeta: {},
    entry: {},
    accountsDataSlice: [],
    // Optionally, you can replay missed data by specifying a fromSlot:
    // fromSlot: '224339000'
    // Note: Currently, you can only replay data from up to 3000 slots in the past.
  };

// Replace the values below with your actual LaserStream API key and endpoint
const config: LaserstreamConfig = {
  apiKey: 'YOUR_API_KEY', // Replace with your key from https://dashboard.helius.dev/
  endpoint: 'https://laserstream-mainnet-ewr.helius-rpc.com', // Choose your closest region
}

  await subscribe(config, subscriptionRequest, async (data) => {
    
    console.log(data);

  }, async (error) => {
    console.error(error);
  });
}

main().catch(console.error);
5

替换您的 API 密钥并选择您的区域

index.ts 中,更新 config 对象,包含以下内容:
  1. 您从 Helius Dashboard 获取的实际 API 密钥
  2. 离您的服务器位置最近的 LaserStream 端点
const config: LaserstreamConfig = {
  apiKey: 'YOUR_ACTUAL_API_KEY', // Replace with your key from Helius Dashboard
  endpoint: 'https://laserstream-mainnet-fra.helius-rpc.com', // Example: Frankfurt mainnet
  // For devnet: endpoint: 'https://laserstream-devnet-ewr.helius-rpc.com'
}
网络和区域选择示例:
  • 用于生产(Mainnet)
    • 欧洲:使用 fra(法兰克福)或 ams(阿姆斯特丹)
    • 美国东部:使用 ewr(纽约)
    • 美国西部:使用 slc(盐湖城)
    • 亚洲:使用 tyo(东京)或 sgp(新加坡)
  • 用于开发(Devnet):使用 https://laserstream-devnet-ewr.helius-rpc.com
6

运行并查看结果

npx ts-node index.ts
每当一个 confirmed 代币交易涉及 TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA 时,您将在控制台中看到数据。

订阅请求

在订阅请求中,您需要包含以下通用参数:
历史重放: 您可以选择在主 SubscribeRequest 对象中包含一个 fromSlot: string 字段,以从特定槽位开始重放数据。目前,重放支持最多回溯 3000 个槽位。
const subscriptionRequest: SubscribeRequest = {
  commitment: CommitmentLevel.CONFIRMED,
  accountsDataSlice: [],
  transactions: {},
  accounts: {},
  slots: {},
  blocks: {},
  blocksMeta: {},
  entry: {},
}
接下来,您需要指定要订阅的数据的过滤器,例如账户、区块、插槽或交易。

代码示例 (LaserStream SDK)

import { subscribe, CommitmentLevel, LaserstreamConfig, SubscribeRequest } from 'helius-laserstream'

async function main() {
    const subscriptionRequest: SubscribeRequest = {
        transactions: {},
        commitment: CommitmentLevel.CONFIRMED,
        accounts: {},
        slots: {
            slot: { filterByCommitment: true },
        },
        transactionsStatus: {},
        blocks: {},
        blocksMeta: {},
        entry: {},
        accountsDataSlice: [],
    };

    const config: LaserstreamConfig = {
        apiKey: 'YOUR_API_KEY', // Replace with your key
        endpoint: 'https://laserstream-mainnet-ewr.helius-rpc.com', // Choose your closest region
    }

    await subscribe(config, subscriptionRequest, async (data) => {
        console.log(data);
    }, async (error) => {
        console.error(error);
    });
}

main().catch(console.error);

SDK 选项

我们为多种编程语言提供官方 SDK: 对于其他语言或自定义实现,您可以直接使用 Yellowstone gRPC proto 文件 来为您偏好的语言生成 gRPC 客户端。

故障排除 / 常见问题