Пост
Поделитесь своими знаниями.
Есть ли простой способ отслеживать транзакции публикации?
Есть ли простой способ отслеживать транзакции, связанные с публикацией? Я мог бы транслировать транзакции в потоковом режиме и искать команды для публикации, но если есть возможность фильтровать данные в узле, мне было бы удобнее.
- Sui
- SDKs and Developer Tools
Ответы
5Да, есть несколько способов отслеживанияпубликовать транзакциив Sui. Вот разбивка:
1.Трансляция событий транзакций:
*Стриминг— самый гибкий подход, так как вы можете отслеживать транзакции по мере их публикации и обработки в сети. Вы можете транслировать транзакции в потоковом режиме и фильтровать publish
команды в событиях.
- Для подписки на события транзакций можно использовать APISui JSON-RPCилиWebSocket. В частности, методы
onTransaction
oronEvent
RPC предоставят вам сведения о транзакциях в режиме реального времени.
Затем вы можете отфильтровать 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
транзакций на стороне узла отсутствует. Фильтрация должна выполняться на стороне клиента после получения событий транзакций.
###Легко отслеживайте транзакции, связанные с публикацией
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 с включенной индексацией событийи используйте этот флаг в конфигурации ноды. Это значительно повышает производительность запросов на события.
Полную документацию по этому вопросу можно найти здесь: 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. Сочетание клавиш 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
Да, есть более простые способы отслеживать транзакции публикации в сети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 для ручного отслеживания, что особенно полезно для визуального контроля.
*Периодический опрос: внедрите механизм опроса для регулярного сбора транзакций в связи с новыми публикациями.
Каждый метод можно адаптировать в зависимости от конкретного варианта использования, независимо от того, создаете ли вы автоматизированную систему или просто нуждаетесь в быстрой ручной проверке.
Знаете ответ?
Пожалуйста, войдите в систему и поделитесь им.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Заработай свою долю из 1000 Sui
Зарабатывай очки репутации и получай награды за помощь в развитии сообщества Sui.
- Как максимизировать прибыль, держа SUI: стейкинг и ликвидный стейкинг615
- Почему BCS требует точного порядка полей для десериализации, когда структуры Move содержат именованные поля?65
- «Ошибки проверки нескольких источников» в публикациях модуля Sui Move — автоматическое устранение ошибок55
- Ошибка Sui Move — невозможно обработать транзакцию Не найдено действительных газовых монет для транзакции419
- Сбой транзакции Sui: объекты, зарезервированные для другой транзакции410