Sui.

Publicación

Comparte tu conocimiento.

HaGiang.
Jul 27, 2025
P&R expertos

¿Existe una forma sencilla de realizar un seguimiento de las transacciones de publicación?

¿Hay alguna forma sencilla de realizar un seguimiento de las transacciones de publicación? Podría transmitir las transacciones y buscar comandos de publicación, pero si hay una opción para filtrar en el nodo, sería preferible.

  • Sui
  • SDKs and Developer Tools
0
5
Cuota
Comentarios
.

Respuestas

5
Paul.
Paul4340
Jul 31 2025, 11:56

Sí, hay un par de formas de rastrear lastransacciones de publicaciónen Sui. Este es un desglose:

1.Eventos de transacciones en transmisión:

*La transmisiónes el enfoque más flexible, ya que puede supervisar las transacciones a medida que se publican y procesan en la red. Puede transmitir las transacciones y filtrar los publishcomandos de los eventos.

  • Puedes usar laSui JSON-RPCo laWebSocketpara suscribirte a los eventos de la transacción. En concreto, los métodos RPC onTransactiono los métodos onEventRPC le proporcionarían los detalles de la transacción en tiempo real.

A continuación, puedes filtrar los Publisheventos teniendo en cuenta el tipo de transacción, ya que una transacción de publicación incluirá un Publishcomando específico de** tipo**con el que podrás hacer coincidir.

Este es un ejemplo de TypeScript en el que se usa el SDK de Sui para transmitir y filtrar las transacciones de publicación:

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.Filtrado a nivel de nodo:

Lamentablemente, por ahora, el nodo Sui no ofrece una forma directa defiltrarpara tipos de transacciones específicos (por ejemplopublish) en el lado del nodo a través del RPC. Deberás filtrar estas transacciones a nivel de aplicación, como se muestra arriba, inspeccionando el tipo o el comando en los datos de la transacción.

3.Punto final del estado de la transacción:

Otra opción es usar el getTransactionpunto final de la API JSON-RPC. publishTras publicar una transacción, puedes sondear este punto final para ver el estado de la transacción y comprobar si se trata de un tipo.

Conclusión:

publish*La transmisiónes la forma más fácil y flexible de rastrear publishlas transacciones en tiempo real, ya que te permite monitorear todo tipo de transacciones y filtrar los eventos directamente.

  • Por el momento, no hay ningún filtro integrado para publishlas transacciones en el lado del nodo. El filtrado debe realizarse en el lado del cliente después de recibir los eventos de la transacción.
6
Comentarios
.
Benjamin XDV.
Jul 29 2025, 13:49

###Realice un seguimiento de las transacciones de publicación fácilmente 1.Usar suix_queryTransactionBlockscon filtro:

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.Transmisión a través de WebSocket(en tiempo real):

const client = new SuiClient({ url: 'wss://fullnode.mainnet.sui.io' });
client.subscribeEvent({
  filter: { MoveEventType: '0x2::package::PublishEvent' },
  onMessage: (event) => console.log('Published:', event)
});
4
Comentarios
.
shamueely.
Jul 27 2025, 14:10

Sí, puedes realizar un seguimiento de las transacciones de publicación de una manera más eficiente aprovechando lasAPI de filtrado de transaccionesy los mecanismos de suscripción a eventos de Sui, aunque con algunas limitaciones según la configuración del nodo. El enfoque más sencillo essuscribirse a los MoveModulePublishedeventosque se emiten cuando se publica un paquete. Esto evita escanear cada transacción manualmente.

Para ello, puede utilizar el suix_queryEventsmétodo RPC con un filtro de eventos como:

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

O, de forma más general, basta con filtrar por tipo de evento MoveModulePublishedsin necesidad de un paquete o módulo específico. Tenga en cuenta que no todos los nodos completos indexan bien los eventos a menos que estén configurados como nodos de archivo.

Si estás creando un indexador o una transmisión, también puedes rastrear los bloques de transacciones usando sui_getTransactionBlocko sui_queryTransactionBlocksy filtrarlos por tipo de Publishtransacción.

--enable-event-dbPara obtener una solución más escalable, configura un nodo completoSui con la indexación de eventos habilitaday usa la marca en la configuración de tu nodo. Esto mejora significativamente el rendimiento de las consultas de eventos.

Puede encontrar la documentación completa sobre esto aquí: https://docs.sui.io/build/events y https://docs.sui.io/sui-jsonrpc.

1
Comentarios
.
Bekky.
Bekky1762
Jul 30 2025, 12:35

1. Filtro gRPC directo (el más rápido)**

# Filter publishes only
grpcurl -plaintext -d '{
  "filter": {
    "MoveFunction": "0x2::package::publish"
  }
}' localhost:9000 sui.rpc.v2.Read/QueryTransactionBlocks

2. WebSocket (en tiempo real)**

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. Atajo de Explorador**

-Suizo: https://suiscan.xyz/mainnet/packages -Sui Vision: filtra por tipo de transacción «Publicar»

###Configuración de nodos (opcional) Añádalo a para una indexación específica fullnode.yamlpara cada publicación:

event-handlers:
  - event-type: publish
    sink:
      type: webhook
      url: "your-webhook-url"

###Por qué funciona

  • Publica transacciones y usa siempre 0x2::package::publish
  • PublishEventContiene todos los metadatos (ID del paquete, remitente, etc.)

Para obtener datos históricos masivos, utilice:

sui-tool query-tx --module package --function publish --limit 100
1
Comentarios
.
Thorfin.
Jul 31 2025, 14:18

Sí, hay formas más sencillas de rastrear las transacciones publicadas en lared Suisin tener que transmitir todas las transacciones y filtrarlas manualmente. Puedes aprovechar laAPI RPC de Suipara consultar y filtrar las transacciones, lo que puede ayudarte a rastrear directamente los publishcomandos sin tener que lidiar con el ruido innecesario de las transacciones.

1.Uso de get_transactionsRPC Endpoint (con filtros)

La API Sui RPC proporciona un get_transactionspunto final que te permite filtrar las transacciones en función de varios parámetros, incluido el tipo de transacción que te interesa. Para realizar un seguimiento de lastransacciones de publicación, puedes filtrarlas según el MoveCalltipo de transacción y buscar los comandos específicos que corresponden a la publicación de un módulo Move.

Ejemplo: filtrar transacciones por tipo

Puedes solicitar que se filtren lastransacciones de publicacióncomprobando si hay MoveCalltransacciones con llamadas a funciones específicas (aquellas relacionadas con la publicación). Puedes estructurar tu consulta de la siguiente manera:

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

Esto le ayudaría a consultar específicamente las transacciones relacionadas con la publicación de un módulo Move, filtrando las innecesarias.

2.Flujos de transacciones con filtros

Puedes hacer streaming de las transacciones con laAPI WebSocket de Suio mediante un sondeo prolongado con la RPC para recibir actualizaciones de las transacciones en tiempo real. Si lo haces, filtrar las transacciones de publicación a nivel de nodo puede resultar más complicado, pero puedes seguir transmitiendo las transacciones y filtrarlas desde el lado del cliente siguiendo el siguiente método:

1.Transmite las transaccionesmediante la API WebSocket. 2.Filtropara las transacciones que contienen MoveCallfunciones relacionadas con la publicación o la dirección específica relacionada con el contrato que se está publicando.

Este es un ejemplo de una consulta de flujo de transacciones (pseudocódigo para un 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);
    }
};

Este enfoque permite el seguimiento en tiempo real de las transacciones de publicación.

3.Sui Explorer (para seguimiento visual)

Para el seguimiento no programático, puedes usar elSui Explorerpara monitorear las transacciones en una interfaz visual. Sui Explorer te permite buscar tipos específicos de transacciones, incluida la publicación del módulo Move. Si bien esto no es automático, puede resultar útil para realizar comprobaciones rápidas durante el desarrollo o las pruebas.

*Sui Explorer: Sui Explorer

4.Supervise el publishevento (si está disponible)

Si hay un evento relacionado específicamente con la publicaciónPublishEvent, puedes escucharlo directamente (mediante la funcionalidad basada en eventos) en tu aplicación, si lo admite el nodo Sui o el marco de cadena de bloques. Si bien es posible que no esté disponible de forma predeterminada, en futuras implementaciones o soluciones creadas por la comunidad se podría añadir esta función.

5.Automatice el seguimiento con encuestas períodicas

Para realizar un seguimiento periódico de las transacciones publicadas, puede utilizar el get_transactionspunto final a intervalos regulares para buscar los módulos recién publicados. Esto evita la transmisión continua, pero ofrece actualizaciones frecuentes:

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)
}

Esto se puede usar en un sistema de backend que comprueba periódicamente si hay nuevas publishtransacciones.

Resumen:

get_transactions``MoveCall*Filtrado de consultas RPC: utilice el publishpunto final con filtros para reducir las transacciones a las que se realizan con la función. MoveCall*WebSocket Streaming: Transmite todas las transacciones y filtra las transacciones relacionadas con la publicación. *Explorer: utilice el Sui Explorer para realizar el seguimiento manual, lo que resulta especialmente útil para la inspección visual. *Encuestas períodicas: Implemente un mecanismo de sondeo para buscar las transacciones con regularidad para los nuevos eventos de publicación.

Cada método se puede adaptar en función de su caso de uso, ya sea que esté creando un sistema automatizado o simplemente necesite comprobaciones manuales rápidas.

1
Comentarios
.

Sabes la respuesta?

Inicie sesión y compártalo.