Sui.

Допис

Діліться своїми знаннями.

HaGiang.
Jul 27, 2025
Питання та відповіді експертів

Чи є простий спосіб відстежувати публікаційні транзакції?

Чи є простий спосіб відстежувати публікаційні транзакції? Я міг би передавати транзакції та шукати команди публікації, але якщо є можливість фільтрувати у вузлі, це було б кращим.

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

Відповіді

5
Paul.
Paul4340
Jul 31 2025, 11:56

Так, є кілька способів відстежуватиопублікувати транзакціїв Sui. Ось розбивка:

1.Події потокової транзакції:

*Потокове передаванняє найбільш гнучким підходом, оскільки ви можете контролювати транзакції, коли вони публікуються та обробляються в мережі. Ви можете транслювати транзакції та фільтр publishувати команди в межах подій.

  • Ви можете використовуватиSui JSON-RPC APIабоWebSocketдля підписки на події транзакції. Зокрема, onTransaction``onEventметоди або RPC нададуть вам деталі транзакції в режимі реального часу.

Потім ви можете відфільтрувати Publishподії, дивлячись на тип транзакції, оскільки транзакція публікації включатиме певну Publishкомандутип, яку ви можете зіставити.

Ось приклад у TypeScript, який використовує SDK Sui для потокового передавання та фільтрації транзакцій публікації:

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кінцеву точку JSON-RPC API. Після публікації транзакції ви можете опитати цю кінцеву точку щодо стану транзакції та перевірити, чи є це 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 fullnode із включеною індексацією подійта використовуйте прапор у конфігурації вузла. Це значно покращує продуктивність запитів на події.

Повну документацію з цього приводу ви можете знайти тут: 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. Скорочення Провідника -Шука: 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без необхідності транслювати всі транзакції та вручну фільтрувати їх. Ви можете використовуватиSui RPC APIдля запитів та фільтрування транзакцій, що може допомогти вам безпосередньо відстежувати publishкоманди, не маючи справу з непотрібним шумом транзакцій.

1.Використання кінцевої get_transactionsточки RPC (з фільтрами)

API Sui RPC надає get_transactionsкінцеву точку, яка дозволяє фільтрувати транзакції на основі різних параметрів, включаючи тип транзакції, який вас цікавить. Щоб відстежуватипублікації, ви можете відфільтрувати за ти MoveCallпом транзакції та шукати конкретні команди, які відповідають публікації модуля Перемістити.

Приклад: Фільтрування транзакцій за типом

Ви можете подати запит на фільтрацію дляопублікувати транзакції, перевіривши транзакції з пев 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. Хоча це не автоматичне, це може бути корисним для швидких перевірок під час розробки або тестування.

*Суй Провідник: Свій Провідник

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
Коментарі
.

Ви знаєте відповідь?

Будь ласка, увійдіть та поділіться нею.