帖子
分享您的知识。
有没有简单的方法来跟踪发布交易?
有没有简单的方法来跟踪发布交易?我可以流式传输交易并寻找发布命令,但是如果可以选择在节点中进行筛选,那将是首选.
- Sui
- SDKs and Developer Tools
答案
5是的,有几种方法可以在 Sui 中跟踪发布交易. 以下是分解:
1. 直播交易活动:
*Streaming是最灵活的方法,因为您可以在网络上发布和处理交易时对其进行监控. 您可以流式传输交易并筛选publish
事件中的命令.
- 你可以使用Sui JSON-RPC API 或WebSocket订阅交易事件. 具体而言,
onTransaction
或onEvent
RPC 方法将为您提供实时交易详情.
然后,您可以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. 交易状态终端节点:
另一种选择是使用 getTransaction
JSON-RPC API 的端点. 发布交易后,您可以轮询此端点以了解该交易的状态,并检查它是否为一种publish
类型.
结论:
publish
*Streaming是publish
实时跟踪交易的最简单、最灵活的方式,因为它允许您监控所有类型的交易并直接筛选事件.
- 到目前为止,
publish
节点端还没有针对交易的内置过滤器. 收到交易事件后,必须在客户端进行过滤.
###轻松跟踪发布交易
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]
}'
- 通过 WebSocket 直播(实时):
const client = new SuiClient({ url: 'wss://fullnode.mainnet.sui.io' });
client.subscribeEvent({
filter: { MoveEventType: '0x2::package::PublishEvent' },
onMessage: (event) => console.log('Published:', event)
});
是的,您可以利用 Sui 的交易过滤 API和事件订阅机制,以更有效的方式跟踪发布交易,但会有一些限制,具体取决于节点设置. 最直接的方法是订阅软件包MoveModulePublished
发布时发出的事件. 这样可以避免手动扫描每笔交易.
为此,您可以将 suix_queryEvents
RPC 方法与事件过滤器一起使用,例如:
{
"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/events 和 https://docs.sui.io/sui-jsonrpc.
###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. 资源管理器快捷键 -Suiscan:https://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
是的,有更简单的方法可以在Sui网络中跟踪发布交易,而无需流式传输所有交易并手动筛选它们. 您可以利用Sui RPC API来查询和筛选交易,这可以帮助您直接跟踪publish
命令,而无需处理不必要的交易噪音.
1. 使用 get_transactions
RPC 端点(带过滤器)
Sui RPC API 提供了一个get_transactions
端点,允许您根据各种参数(包括您感兴趣的交易类型)筛选交易. 要跟踪发布交易,您可以根据MoveCall
交易类型进行筛选,并查找与发布 Move 模块相对应的特定命令.
示例:按类型筛选交易
您可以通过检查具有MoveCall
特定函数调用的交易(与发布相关的交易)来请求筛选发布交易. 您可以通过以下方式构建查询:
GET /v1/transactions?Filter[TransactionType]=MoveCall&Filter[MoveFunctionName]=publish
这将帮助您专门查询与发布 Move 模块相关的事务,过滤掉不必要的交易.
2. 带过滤器的交易流
你可以使用Sui WebSocket API或通过使用RPC进行长轮询来直播交易,以获取实时交易更新. 如果您这样做,在节点级别筛选发布事务可能会更加复杂,但您仍然可以使用以下方法流式传输交易并在客户端对其进行过滤:
- 使用 WebSocket API 直播交易.
- 筛选包含与发布
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 Explorer:Sui 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 进行手动跟踪,对目视检查特别有用.
*定期轮询:实施轮询机制,定期为新的发布事件提取交易.
无论您是构建自动化系统还是只需要快���手动检查,都可以根据您的用例调整每种方法.
你知道答案吗?
请登录并分享。
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.