Sui.

帖子

分享您的知识。

HaGiang.
Jul 27, 2025
专家问答

有没有简单的方法来跟踪发布交易?

有没有简单的方法来跟踪发布交易?我可以流式传输交易并寻找发布命令,但是如果可以选择在节点中进行筛选,那将是首选.

  • Sui
  • SDKs and Developer Tools
0
5
分享
评论
.

答案

5
Paul.
Paul4340
Jul 31 2025, 11:56

是的,有几种方法可以在 Sui 中跟踪发布交易. 以下是分解:

1. 直播交易活动

*Streaming是最灵活的方法,因为您可以在网络上发布和处理交易时对其进行监控. 您可以流式传输交易并筛选publish事件中的命令.

  • 你可以使用Sui JSON-RPC APIWebSocket订阅交易事件. 具体而言,onTransactiononEventRPC 方法将为您提供实时交易详情.

然后,您可以Publish通过查看交易类型来筛选事件,因为发布交易将包含Publish您可以匹配的特定类型命令.

以下是 TypeScript 中使用 Sui SDK 对发布交易进行流式传输和筛选的示例:

import { JsonRpcProvider } from '@mysten/sui.js';

const provider = new JsonRpcProvider('https://fullnode.devnet.sui.io');

async function subscribeToPublishTransactions() {
    const subscription = provider.subscribeTransaction((tx) => {
        if (tx.type === 'publish') {
            console.log('Publish Transaction Detected:', tx);
        }
    });

    // To stop streaming
    // subscription.unsubscribe();
}

subscribeToPublishTransactions();

2. 按节点级别筛选

不幸的是,到目前为止,Sui节点还没有提供通过RPC直接publish在节点端筛选特定交易类型(例如)的方法. 如上所示,您需要通过检查交易数据中的类型或命令在应用程序级别筛选这些事务.

3. 交易状态终端节点

另一种选择是使用 getTransactionJSON-RPC API 的端点. 发布交易后,您可以轮询此端点以了解该交易的状态,并检查它是否为一种publish类型.

结论:

publish*Streamingpublish实时跟踪交易的最简单、最灵活的方式,因为它允许您监控所有类型的交易并直接筛选事件.

  • 到目前为止,publish节点端还没有针对交易的内置过滤器. 收到交易事件后,必须在客户端进行过滤.
6
评论
.
Benjamin XDV.
Jul 29 2025, 13:49

###轻松跟踪发布交易

  1. suix_queryTransactionBlocks与过滤器一起使用
curl -X POST https://fullnode.mainnet.sui.io \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "method": "suix_queryTransactionBlocks",
    "params": [{
      "MoveFunction": "0x2::package::publish"
    }, null, 10]
  }'
  1. 通过 WebSocket 直播(实时):
const client = new SuiClient({ url: 'wss://fullnode.mainnet.sui.io' });
client.subscribeEvent({
  filter: { MoveEventType: '0x2::package::PublishEvent' },
  onMessage: (event) => console.log('Published:', event)
});
4
评论
.
shamueely.
Jul 27 2025, 14:10

是的,您可以利用 Sui 的交易过滤 API和事件订阅机制,以更有效的方式跟踪发布交易,但会有一些限制,具体取决于节点设置. 最直接的方法是订阅软件包MoveModulePublished发布时发出的事件. 这样可以避免手动扫描每笔交易.

为此,您可以将 suix_queryEventsRPC 方法与事件过滤器一起使用,例如:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "suix_queryEvents",
  "params": [
    {
      "MoveModule": {
        "package": "0x0000000000000000000000000000000000000002",
        "module": "package"
      }
    },
    null,
    10,
    null
  ]
}

或者更笼统地说,只需按事件类型进行筛选MoveModulePublished,无需特定的包或模块. 请注意,除非配置为存档节点,否则并非所有全节点都能很好地索引事件.

如果您正在构建索引器或流,还可以使用sui_getTransactionBlock或跟踪交易区块,sui_queryTransactionBlocks并按Publish交易类型进行筛选.

要获得更具可扩展性的解决方案,请设置一个启用了事件索引的 Sui 全节点**,并在节点配置--enable-event-db中使用该标志. 这显著提高了事件查询的性能.

你可以在这里找到这方面的完整文档:https://docs.sui.io/build/eventshttps://docs.sui.io/sui-jsonrpc.

1
评论
.
Bekky.
Bekky1762
Jul 30 2025, 12:35

###1. 直接 gRPC 过滤器(最快)

# Filter publishes only
grpcurl -plaintext -d '{
  "filter": {
    "MoveFunction": "0x2::package::publish"
  }
}' localhost:9000 sui.rpc.v2.Read/QueryTransactionBlocks

###2. WebSocket(实时)

const client = new SuiClient({ url: 'wss://fullnode.mainnet.sui.io' });
const unsubscribe = client.subscribeEvent({
  filter: { MoveEventType: '0x2::package::PublishEvent' },
  onMessage: (event) => console.log('New publish:', event)
});

###3. 资源管理器快捷键 -Suiscanhttps://suiscan.xyz/mainnet/packages -Sui Vision:按 “发布” 交易类型筛选

###节点配置(可选) 添加到,fullnode.yaml用于发布特定索引:

event-handlers:
  - event-type: publish
    sink:
      type: webhook
      url: "your-webhook-url"

###为什么这行得通 -发布交易始终使用 0x2::package::publish -PublishEvent包含所有元数据(包裹 ID、发件人等)

对于批量历史数据,请使用:

sui-tool query-tx --module package --function publish --limit 100
1
评论
.
Thorfin.
Jul 31 2025, 14:18

是的,有更简单的方法可以在Sui网络中跟踪发布交易,而无需流式传输所有交易并手动筛选它们. 您可以利用Sui RPC API来查询和筛选交易,这可以帮助您直接跟踪publish命令,而无需处理不必要的交易噪音.

1. 使用 get_transactionsRPC 端点(带过滤器)

Sui RPC API 提供了一个get_transactions端点,允许您根据各种参数(包括您感兴趣的交易类型)筛选交易. 要跟踪发布交易,您可以根据MoveCall交易类型进行筛选,并查找与发布 Move 模块相对应的特定命令.

示例:按类型筛选交易

您可以通过检查具有MoveCall特定函数调用的交易(与发布相关的交易)来请求筛选发布交易. 您可以通过以下方式构建查询:

GET /v1/transactions?Filter[TransactionType]=MoveCall&Filter[MoveFunctionName]=publish

这将帮助您专门查询与发布 Move 模块相关的事务,过滤掉不必要的交易.

2. 带过滤器的交易流

你可以使用Sui WebSocket API或通过使用RPC进行长轮询来直播交易,以获取实时交易更新. 如果您这样做,在节点级别筛选发布事务可能会更加复杂,但您仍然可以使用以下方法流式传输交易并在客户端对其进行过滤:

  1. 使用 WebSocket API 直播交易.
  2. 筛选包含与发布MoveCall相关的功能或与正在发布的合约相关的特定地址的交易.

以下是交易流查询的示例(WebSocket 的伪代码):

const socket = new WebSocket("ws://localhost:5001");

socket.onmessage = function(event) {
    const txData = JSON.parse(event.data);
    if (txData.type === "MoveCall" && txData.function === "publish") {
        console.log("Publish Transaction Detected:", txData);
    }
};

这种方法允许实时跟踪发布交易.

3. Sui Explorer(用于视觉跟踪)

对于非编程跟踪,您可以使用Sui Explorer在可视界面中监控交易. Sui Explorer 允许您搜索特定类型的交易,包括移动模块发布. 虽然这不是自动的,但它可用于在开发或测试期间进行快速检查.

*Sui ExplorerSui Explorer

4. 监控publish事件(如果��)

如果有专门与发布相关的事件,例如PublishEvent,如果Sui节点或区块链框架支持,则可以在应用程序中直接监听该事件(使用基于事件的功能). 尽管这可能不是开箱即用的,但未来的实现或社区构建的解决方案可能会添加此功能.

5. 通过定期轮询自动追踪

要定期跟踪已发布的交易,您可以get_transactions定期使用终端节点搜索新发布的模块. 这样可以避免持续流式传输,但可以频繁地进行更新:

use reqwest::blocking::get;
use serde_json::Value;

fn fetch_transactions() -> Result<Value, reqwest::Error> {
    let url = "http://localhost:5001/v1/transactions?Filter[TransactionType]=MoveCall&Filter[MoveFunctionName]=publish";
    let response = get(url)?;
    let json: Value = response.json()?;
    Ok(json)
}

这可以在定期检查新publish交易的后端系统中使用.

摘要:

get_transactions``MoveCall*RPC 查询筛选:使用publish带过滤器的终端节点将事务范围缩小到使用该函数. *WebSocket 流式传输:流式传输所有交易并筛选与发布相关的MoveCall交易. *Explorer:使用 Sui Explorer 进行手动跟踪,对目视检查特别有用. *定期轮询:实施轮询机制,定期为新的发布事件提取交易.

无论您是构建自动化系统还是只需要快���手动检查,都可以根据您的用例调整每种方法.

1
评论
.

你知道答案吗?

请登录并分享。