BSV区块链实时数据流技能Skill junglebus

这个技能用于通过JungleBus服务实时流式传输和订阅BSV区块链数据,支持监控交易、地址和多种协议如1Sat Ordinals、BAP、MAP等,适用于构建索引器、通知系统和实时数据分析应用。关键词:JungleBus, BSV, 区块链, 实时数据流, 订阅, 协议索引, GorillaPool。

节点运维 0 次安装 0 次浏览 更新于 3/15/2026

名称: junglebus 描述: 这个技能应在用户询问关于“JungleBus”、“交易流式传输”、“BSV订阅”、“实时区块链数据”、“GorillaPool API”或需要订阅区块链事件时使用。

JungleBus

来自GorillaPool的实时BSV区块链数据流式传输。索引所有比特币交易,并特别处理数据协议。

何时使用

  • 订阅匹配特定模式的交易
  • 流式传输实时内存池和区块数据
  • 构建索引器或通知系统
  • 监控地址或脚本模式
  • 追踪1Sat Ordinals、MAP、BAP等协议

创建订阅

逐步指南(仪表板)

  1. 访问 https://junglebus.gorillapool.io
  2. 登录或创建账户
  3. 导航:仪表板 > 订阅 > 创建新订阅
  4. 填写订阅详情:
    • ID:自动生成的唯一标识符
    • 名称:订阅的描述性名称
    • 描述:此订阅监控的内容

订阅过滤器

使用AND逻辑定义要捕获的交易(所有条件必须匹配):

过滤器 描述 示例
地址 逗号分隔的比特币地址 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
输入类型 输入脚本类型 ordlock, sigil
输出类型 输出分类 aip, bap, bitcom, map, ord, run, token_stas, pubkeyhash, nulldata
上下文 来自OP_RETURN输出的主要数据 协议特定标识符
子上下文 来自输出的次要数据 取决于输出类型
数据键 交易中的键值对 app=junglebus, type=post

注意:单个字段中的多个值使用AND逻辑——所有值必须在交易中出现。

常见订阅模式

监控1Sat Ordinals:

  • 输出类型:ord
  • 上下文:image/png, text/plain(内容类型)

监控BAP身份:

  • 输出类型:bap
  • 上下文:1BAPSuaPnfGnSBM3GLV9yhxUdYe4vGbdMT(BAP地址)

监控MAP协议:

  • 输出类型:map
  • 上下文:1PuQa7K62MiKCtssSLKy1kh56WWU7MtUR5(MAP前缀)

监控特定地址:

  • 地址:1YourAddressHere

JavaScript客户端

安装

npm install @gorillapool/js-junglebus

基本用法

import { JungleBusClient, ControlMessageStatusCode } from '@gorillapool/js-junglebus';

const client = new JungleBusClient("junglebus.gorillapool.io", {
  useSSL: true,
  onConnected(ctx) { 
    console.log("已连接", ctx); 
  },
  onConnecting(ctx) { 
    console.log("连接中", ctx); 
  },
  onDisconnected(ctx) { 
    console.log("已断开", ctx); 
  },
  onError(ctx) { 
    console.error("错误", ctx); 
  }
});

// 订阅订阅ID
const subscriptionId = "您的订阅ID";
const fromBlock = 750000;

client.Subscribe(
  subscriptionId,
  fromBlock,
  (tx) => {
    // 接收已确认交易
    console.log("交易:", tx.id, "在高度", tx.block_height);
    console.log("输出类型:", tx.output_types);
    console.log("上下文:", tx.contexts);
  },
  (status) => {
    // 状态更新
    if (status.statusCode === ControlMessageStatusCode.BLOCK_DONE) {
      console.log("区块完成:", status.block);
    } else if (status.statusCode === ControlMessageStatusCode.WAITING) {
      console.log("等待新区块...");
    } else if (status.statusCode === ControlMessageStatusCode.REORG) {
      console.log("重组触发:", status);
    }
  },
  (error) => {
    // 订阅错误
    console.error("订阅错误:", error);
  },
  (mempoolTx) => {
    // 未确认内存池交易
    console.log("内存池交易:", mempoolTx.id);
  }
);

轻量模式(低带宽)

// 最后一个参数 = true 表示轻量模式
client.Subscribe(
  subscriptionId, 
  fromBlock, 
  onTx, 
  onStatus, 
  onError, 
  onMempool, 
  true // 轻量模式 - 仅交易ID和区块高度
);

交易数据格式

完整交易对象

{
  "id": "e597af34eb78b599b7d458110a3cc602a40dedd020db684992b40926217612a4",
  "block_hash": "000000000000000006296f1e5437dd6c01b9b5471691a89a9c7d8e9f06920da5",
  "block_height": 750000,
  "block_time": 1658878267,
  "block_index": 3,
  "transaction": "0100000002...",
  "merkle_proof": "AAOkEnYhJgm0kklo2yDQ7Q2kAsY8ChFY1LeZtXjrNK+X...",
  "addresses": [
    "18FJd9tDLAC2S6PCzfnqNfUMXhZuPfsFUm",
    "1P7UWRLdL5pH2Si1GauwASYAA1LQHs2z45"
  ],
  "inputs": [],
  "outputs": [
    "76a9144f7d6a485e09770f947c0ba38d15050a5a80b6fa88ac",
    "76a914f28c3992dd6a43eccaed16f3f7fb6ac8da1bc3c288ac"
  ],
  "input_types": [],
  "output_types": ["nulldata", "pubkeyhash", "run"],
  "contexts": [
    "555aad1953bcfef8c7779d246fa03efae0412ed700b955435831814f5be3a82b_o1",
    "c2c4c971e85b499c29a8ab2148fd324fe12b550b8f4f57658a4686e011d8fd58_o1"
  ],
  "sub_contexts": [
    "2e729d39a9cd300f5100044a54204e6d8b43fe49555309361fdc3d8565323499"
  ],
  "data": []
}

字段描述

字段 类型 描述
id 字符串 交易ID(txid)
block_hash 字符串 交易被挖掘的区块哈希
block_height 数字 区块高度
block_time 数字 Unix时间戳
block_index 数字 交易在区块中的位置
transaction 字符串 完整的十六进制交易
merkle_proof 字符串 TSC兼容的二进制默克尔证明
addresses 字符串数组 交易中找到的所有地址
outputs 字符串数组 输出脚本(限制为1024字符)
output_types 字符串数组 分类(aip、bap、map、ord等)
contexts 字符串数组 来自OP_RETURN输出的主要数据
sub_contexts 字符串数组 来自输出的次要数据
data 字符串数组 其他键值对属性

支持的协议

JungleBus自动识别和索引这些协议:

协议 输出类型 上下文 描述
1Sat输出 1sat 1聪输出
1Sat Ordinals ord 内容类型 带有内容类型的铭文
AIP aip 协议数据 比特币认证协议
B协议 b 协议数据 B://文件存储
BAP bap 1BAPSuaPnfGnSBM3GLV9yhxUdYe4vGbdMT BAP身份
Bitcom bitcom 协议数据 Bitcom协议
Boost boost 协议数据 Boost POW
MAP map 1PuQa7K62MiKCtssSLKy1kh56WWU7MtUR5 MAP协议
Run run 协议数据 Run代币
STAS token_stas 协议数据 STAS代币

REST API端点

获取交易

curl https://junglebus.gorillapool.io/v1/transaction/get/{txid}

返回带解析数据的完整交易。

获取地址历史

curl https://junglebus.gorillapool.io/v1/address/get/{address}

返回:

[
  {
    "id": "8859250950ecbb7025731c1206e277e344a6db5f285274b7a1d2817980ab8e64",
    "address": "13qRymPwRxAr7oRdAoFdo5Wp8815sstHE5",
    "transaction_id": "eb197a43a7c4ed230a7125d7e7bf5990cd60be8ff0f59b8fffdfd91d52dfce82",
    "block_hash": "0000000000000000002be95240df5e4215e6878259dce8b9df08650641fdd40a",
    "block_index": 50545
  }
]

获取区块头

curl https://junglebus.gorillapool.io/v1/block_header/get/{block_hash}

返回:

{
  "hash": "000000000000000006296f1e5437dd6c01b9b5471691a89a9c7d8e9f06920da5",
  "coin": 1,
  "height": 750000,
  "time": 1658878267,
  "nonce": 4188280238,
  "version": 671080448,
  "merkleroot": "e88b40ac9367eb11dd918416b668e67f09bf24550eac93de7f2d68a0ca0c6eae",
  "bits": "180f4e90",
  "synced": 8971
}

控制消息状态代码

import { ControlMessageStatusCode } from '@gorillapool/js-junglebus';

// 可用代码:
ControlMessageStatusCode.BLOCK_DONE    // 区块处理完成
ControlMessageStatusCode.WAITING       // 等待新区块
ControlMessageStatusCode.REORG         // 区块链重组
ControlMessageStatusCode.ERROR         // 发生错误

Go客户端

go get github.com/GorillaPool/go-junglebus
package main

import (
    "github.com/GorillaPool/go-junglebus"
)

func main() {
    client, _ := junglebus.New(
        junglebus.WithHTTP("https://junglebus.gorillapool.io"),
    )

    client.Subscribe("subscription-id", 750000, func(tx *junglebus.Transaction) {
        fmt.Printf("TX: %s at height %d
", tx.Id, tx.BlockHeight)
        fmt.Printf("Types: %v
", tx.OutputTypes)
    })
}

JungleBus vs WhatsOnChain

特性 JungleBus WhatsOnChain
实时流式传输 ✅ 是 ❌ 否
交易历史 ✅ 是 ✅ 是
地址余额 ❌ 否 ✅ 是
UTXOs ❌ 否 ✅ 是
价格数据 ❌ 否 ✅ 是
解析交易数据 ✅ 是 ⚠️ 有限
协议索引 ✅ 是 ❌ 否

使用JungleBus用于:流式传输、协议监控、实时索引 使用WhatsOnChain用于:余额、UTXOs、价格数据

仪表板工作流程

junglebus.gorillapool.io
    ↓
仪表板 → 订阅 → 创建新订阅
    ↓
配置过滤器:
  - 地址(可选)
  - 输入类型(可选)
  - 输出类型(协议过滤必需)
  - 上下文(特定协议必需)
  - 子上下文(可选)
  - 数据键(可选)
    ↓
保存订阅
    ↓
复制订阅ID
    ↓
在代码中使用

链接