Sui.

Пост

Поделитесь своими знаниями.

HaGiang.
Jul 27, 2025
Экспертные Вопросы и Ответы

Есть ли простой способ отслеживать транзакции публикации?

Есть ли простой способ отслеживать транзакции, связанные с публикацией? Я мог бы транслировать транзакции в потоковом режиме и искать команды для публикации, но если есть возможность фильтровать данные в узле, мне было бы удобнее.

  • Sui
  • SDKs and Developer Tools
0
5
Поделиться
Комментарии
.

Ответы

5
Paul.
Paul4340
Jul 31 2025, 11:56

Да, есть несколько способов отслеживанияпубликовать транзакциив Sui. Вот разбивка:

1.Трансляция событий транзакций:

*Стриминг— самый гибкий подход, так как вы можете отслеживать транзакции по мере их публикации и обработки в сети. Вы можете транслировать транзакции в потоковом режиме и фильтровать publishкоманды в событиях.

  • Для подписки на события транзакций можно использовать APISui JSON-RPCилиWebSocket. В частности, методы onTransactionor onEventRPC предоставят вам сведения о транзакциях в режиме реального времени.

Затем вы можете отфильтровать Publishсобытия, просмотрев тип транзакции, поскольку транзакция публикации будет содержать определенную Publishкоманду** type**, которую вы можете сопоставить.

Вот пример использования Sui SDK в TypeScript для потоковой передачи и фильтрации транзакций при публикации:

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 не предоставляет прямого способафильтроватьдля определенных типов транзакций (напримерpublish) на стороне узла с помощью RPC. Как показано выше, необходимо отфильтровать эти транзакции на уровне приложения, проверив тип или команду в данных транзакции.

3.Конечная точка статуса транзакции:

Другой вариант — использовать getTransactionконечную точку API JSON-RPC. publishПосле публикации транзакции вы можете запросить у этой конечной точки статус транзакции и проверить, относится ли она к типу.

Заключение:

publish*Стриминг— это самый простой и гибкий способ отслеживания publishтранзакций в режиме реального времени, поскольку он позволяет отслеживать все типы транзакций и напрямую фильтровать события.

  • На данный момент встроенная фильтрация 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]
  }'

2.Трансляция через 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

Да, вы можете более эффективно отслеживать транзакции публикации, используяAPI-интерфейсы Sui для фильтрации транзакцийи механизмы подписки на события, хотя и с некоторыми ограничениями, зависящими от настройки узла. Самый простой подход заключается в том, чтобыподписаться на MoveModulePublishedсобытия, генерируемые при публикации пакета. Это позволяет избежать сканирования каждой транзакции вручную.

Для этого вы можете использовать suix_queryEventsметод RPC с фильтром событий, например:

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

Или, в более общем плане, просто отфильтруйте по типу события, MoveModulePublishedне требуя определенного пакета или модуля. Обратите внимание, что не все события fullnodes хорошо индексируются, если они не настроены как архивные узлы.

sui_getTransactionBlockЕсли вы создаете индексатор или стрим, вы также можете отслеживать блоки транзакций с помощью sui_queryTransactionBlocksили Publishфильтровать их по типу транзакции.

--enable-event-dbДля более масштабируемого решения настройте полноузлойSui с включенной индексацией событийи используйте этот флаг в конфигурации ноды. Это значительно повышает производительность запросов на события.

Полную документацию по этому вопросу можно найти здесь: https://docs.sui.io/build/events и https://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. Сочетание клавиш Explorer -Сканирование: 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Содержит все метаданные (идентификатор пакета, отправитель и т. д.)

Для больших исторических данных используйте:

sui-tool query-tx --module package --function publish --limit 100
1
Комментарии
.
Thorfin.
Jul 31 2025, 14:18

Да, есть более простые способы отслеживать транзакции публикации в сетиSuiбез необходимости транслировать все транзакции и вручную фильтровать их. Вы можете использовать APISui RPC APIдля запросов и фильтрации транзакций, что позволяет напрямую отслеживать publishкоманды без лишнего шума при транзакциях.

1.Использование get_transactionsконечной точки RPC (с фильтрами)

API Sui RPC предоставляет get_transactionsконечную точку, позволяющую фильтровать транзакции на основе различных параметров, включая тип интересующей вас транзакции. Чтобы отслеживать транзакции**публикации, вы можете фильтровать транзакции по MoveCallтипу транзакции и искать конкретные команды, соответствующие публикации модуля Move.

Пример: фильтрация транзакций по типу

Вы можете отправить запрос на фильтрацию транзакцийпубликации, проверив MoveCallтранзакции с определенными вызовами функций (связанных с публикацией). Вот как можно структурировать запрос:

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

Это поможет вам специально запрашивать транзакции, связанные с публикацией модуля Move, отфильтровывая ненужные транзакции.

2.Потоки транзакций с фильтрами

Транзакции можно транслировать в потоковом режиме с помощьюSui WebSocket APIили путем длительного опроса с помощью RPC, чтобы получать обновления транзакций в реальном времени. В этом случае фильтрация транзакций публикации на уровне узлов может оказаться более сложной, но вы все равно можете передавать транзакции в потоковом режиме и фильтровать их на стороне клиента, используя следующий подход:

1.Транслируйте транзакциис помощью API WebSocket. 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 позволяет искать определенные типы транзакций, включая публикацию в модуле Move. Хотя это и не происходит автоматически, оно может быть полезно для быстрой проверки во время разработки или тестирования.

*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конечную точку с фильтрами, чтобы сузить количество транзакций до функции. MoveCall*WebSocket Streaming: потоковая передача всех транзакций и фильтрация транзакций, связанных с публикацией. *Explorer: используйте Sui Explorer для ручного отслеживания, что особенно полезно для визуального контроля. *Периодический опрос: внедрите механизм опроса для регулярного сбора транзакций в связи с новыми публикациями.

Каждый метод можно адаптировать в зависимости от конкретного варианта использования, независимо от того, создаете ли вы автоматизированную систему или просто нуждаетесь в быстрой ручной проверке.

1
Комментарии
.

Знаете ответ?

Пожалуйста, войдите в систему и поделитесь им.