Допис
Діліться своїми знаннями.
Чи є простий спосіб відстежувати публікаційні транзакції?
Чи є простий спосіб відстежувати публікаційні транзакції? Я міг би передавати транзакції та шукати команди публікації, але якщо є можливість фільтрувати у вузлі, це було б кращим.
- Sui
- SDKs and Developer Tools
Відповіді
5Так, є кілька способів відстежуватиопублікувати транзакціїв 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
транзакцій на стороні вузла. Фільтрація повинна проводитися на стороні клієнта після отримання подій транзакції.
###Легко відстежуйте транзакції публікації
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)
});
Так, ви можете відстежувати транзакції публікації більш ефективно, використовуючи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. Прямий фільтр 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
Так, існують простіші способи відстежувати публікаційні транзакції вмережі 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 для ручного відстеження, особливо корисно для візуального огляду.
*Періодичне опитування: Впровадити механізм опитування для регулярного отримання транзакцій для нових подій публікації.
Кожен метод можна адаптувати залежно від вашого випадку використання - незалежно від того, створюєте ви автоматизовану систему чи просто потребуєте швидких ручних перевірок.
Ви знаєте відповідь?
Будь ласка, увійдіть та поділіться нею.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Зароби свою частку з 1000 Sui
Заробляй бали репутації та отримуй винагороди за допомогу в розвитку спільноти Sui.
- Як максимізувати прибуток від SUI: Sui Staking проти Liquid Staking615
- Чому BCS вимагає точного порядку полів для десеріалізації, коли структури Move мають названі поля?65
- Помилки перевірки кількох джерел» у публікаціях модуля Sui Move - автоматичне вирішення помилок55
- Помилка Sui Move - Неможливо обробити транзакцію Не знайдено дійсних газових монет для транзакції419
- Невдала операція Sui: об'єкти, зарезервовані для іншої транзакції410