Sui.

Beitrag

Teile dein Wissen.

HaGiang.
Jul 27, 2025
Experten Q&A

Gibt es eine einfache Möglichkeit, Veröffentlichungstransaktionen zu verfolgen?

Gibt es eine einfache Möglichkeit, Veröffentlichungstransaktionen zu verfolgen? Ich könnte Transaktionen streamen und nach Veröffentlichungsbefehlen suchen, aber wenn es eine Option zum Filtern im Knoten gibt, wäre das vorzuziehen.

  • Sui
  • SDKs and Developer Tools
0
5
Teilen
Kommentare
.

Antworten

5
Paul.
Paul4340
Jul 31 2025, 11:56

Ja, es gibt mehrere Möglichkeiten,Transaktionen veröffentlichenin Sui zu verfolgen. Hier ist eine Aufschlüsselung:

1.Streaming-Transaktionsereignisse:

*Streamingist der flexibelste Ansatz, da Sie Transaktionen überwachen können, während sie im Netzwerk veröffentlicht und verarbeitet werden. Sie können die Transaktionen streamen und nach publishBefehlen innerhalb der Ereignisse filtern.

  • Sie können dieSui JSON-RPC APIoderWebSocketverwenden, um die Transaktionsereignisse zu abonnieren. Insbesondere würden Ihnen die onTransactionoder onEventRPC-Methoden die Transaktionsdetails in Echtzeit liefern.

Sie können dann anhand Publishdes Transaktionstyps nach Ereignissen filtern, da eine Veröffentlichungstransaktion einen bestimmten Publish-Typ-Befehl enthält, den Sie zuordnen können.

Hier ist ein Beispiel in TypeScript, bei dem das Sui SDK zum Streamen und Filtern von Veröffentlichungstransaktionen verwendet wird:

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.Filterung auf Knotenebene:

Leider bietet der Sui-Knoten derzeit keine direkte Möglichkeit, knotenseitig über den RPCFilternach bestimmten Transaktionstypen (wiepublish) zu suchen. Sie müssten diese Transaktionen auf Anwendungsebene filtern, wie oben gezeigt, indem Sie den Typ oder Befehl in den Transaktionsdaten überprüfen.

3.Endpunkt für den Transaktionsstatus:

Eine andere Option besteht darin, den getTransactionEndpunkt der JSON-RPC-API zu verwenden. publishNach der Veröffentlichung einer Transaktion können Sie diesen Endpunkt nach dem Status der Transaktion abfragen und prüfen, ob es sich um einen Typ handelt.

Fazit:

publish*Streamingist die einfachste und flexibelste Methode, publishTransaktionen in Echtzeit zu verfolgen, da Sie damit alle Arten von Transaktionen überwachen und direkt nach Ereignissen filtern können.

  • Derzeit gibt es keine integrierte Filterung für publishTransaktionen auf der Node-Seite. Die Filterung muss auf der Clientseite nach Erhalt der Transaktionsereignisse erfolgen.
6
Kommentare
.
Benjamin XDV.
Jul 29 2025, 13:49

###Verfolgen Sie einfach Veröffentlichungstransaktionen

  1. suix_queryTransactionBlocksMit Filter verwenden:
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.Stream über WebSocket(Echtzeit):

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

Ja, Sie können Veröffentlichungstransaktionen effizienter verfolgen, indem Sie dieTransaktionsfilter-APIsund Event-Abonnement-Mechanismen von Sui nutzen, allerdings mit einigen Einschränkungen, die von der Node-Setup abhängen. Der einfachste Ansatz besteht darin, MoveModulePublishedEreignisse zuabonnieren, die bei der Veröffentlichung eines Pakets ausgelöst werden. Dadurch wird vermieden, dass jede Transaktion manuell gescannt wird.

Dazu können Sie die suix_queryEventsRPC-Methode mit einem Eventfilter wie dem folgenden verwenden:

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

Oder allgemeiner gesagt, filtern Sie einfach nach dem EreignistypMoveModulePublished, ohne ein bestimmtes Paket oder Modul zu benötigen. Beachten Sie, dass nicht alle Fullnodes Ereignisse gut indizieren, sofern sie nicht als Archivknoten konfiguriert sind.

Wenn Sie einen Indexer oder Stream erstellen, können Sie Transaktionsblöcke auch mithilfe von sui_getTransactionBlockoder verfolgen sui_queryTransactionBlocksund nach der PublishTransaktionsart filtern.

--enable-event-dbFür eine skalierbarere Lösung richten Sie einenSui Fullnode mit aktivierter Eventindexierungein und verwenden Sie das Flag in Ihrer Node-Konfiguration. Dadurch wird die Leistung bei Ereignisabfragen erheblich verbessert.

Die vollständige Dokumentation dazu finden Sie hier: https://docs.sui.io/build/events und https://docs.sui.io/sui-jsonrpc.

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

###1. Direkter gRPC-Filter (am schnellsten)

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

###2. WebSocket (Echtzeit)

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-Befehlstaste -Suiscan: https://suiscan.xyz/mainnet/packages -Sui Vision: Nach dem Transaktionstyp „Veröffentlichen“ filtern

###Knotenkonfiguration (optional) Für veröffentlichungsspezifische fullnode.yamlIndizierung hinzufügen:

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

###Warum das funktioniert

  • Transaktionen veröffentlichen verwenden Sie immer 0x2::package::publish
  • Das PublishEvententhält alle Metadaten (Paket-ID, Absender, etc.)

Verwenden Sie für historische Massendaten:

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

Ja, es gibt einfachere Möglichkeiten, Veröffentlichungstransaktionen imSui-Netzwerkzu verfolgen, ohne alle Transaktionen streamen und manuell filtern zu müssen. Sie können dieSui RPC APInutzen, um Transaktionen abzufragen und zu filtern. So können Sie publishBefehle direkt verfolgen, ohne sich mit unnötigem Transaktionsrauschen auseinandersetzen zu müssen.

1.Verwenden des get_transactionsRPC-Endpunkts (mit Filtern)

Die Sui RPC API bietet einen get_transactionsEndpunkt, mit dem Sie Transaktionen anhand verschiedener Parameter filtern können, einschließlich der Art der Transaktion, an der Sie interessiert sind. UmTransaktionen veröffentlichennachzuverfolgen, können Sie nach dem MoveCallTransaktionstyp filtern und nach bestimmten Befehlen suchen, die der Veröffentlichung eines Move-Moduls entsprechen.

Beispiel: Transaktionen nach Typ filtern

Sie können eine Anfrage stellen, nachTransaktionen veröffentlichenzu filtern, indem Sie nach MoveCallTransaktionen mit bestimmten Funktionsaufrufen suchen (die sich auf die Veröffentlichung beziehen). So könnten Sie Ihre Anfrage strukturieren:

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

Dies würde Ihnen helfen, Transaktionen, die sich auf die Veröffentlichung eines Move-Moduls beziehen, gezielt abzufragen und unnötige herauszufiltern.

2.Transaktionsstreams mit Filter

Sie können Transaktionen mithilfe derSui WebSocket APIoder per Long-Polling mit dem RPC streamen, um Live-Transaktionsaktualisierungen zu erhalten. Wenn Sie dies tun, ist das Filtern nach Veröffentlichungstransaktionen auf Knotenebene möglicherweise komplizierter, aber Sie können die Transaktionen trotzdem streamen und sie auf der Clientseite filtern, indem Sie den folgenden Ansatz verwenden:

1.Streamen Sie die Transaktionenmithilfe der WebSocket-API. 2.Filterfür Transaktionen, die MoveCallFunktionen im Zusammenhang mit der Veröffentlichung oder die spezifische Adresse enthalten, die sich auf den zu veröffentlichenden Vertrag bezieht.

Hier ist ein Beispiel für eine Transaktionsstream-Abfrage (Pseudocode für einen 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);
    }
};

Dieser Ansatz ermöglicht die Verfolgung von Veröffentlichungstransaktionen in Echtzeit.

3.Sui Explorer (für visuelles Tracking)

Für nicht-programmatisches Tracking könnten Sie denSui Explorerverwenden, um Transaktionen in einer visuellen Oberfläche zu überwachen. Mit dem Sui Explorer können Sie nach bestimmten Transaktionstypen suchen, einschließlich der Veröffentlichung von Move-Modulen. Dies geschieht zwar nicht automatisch, kann aber für schnelle Überprüfungen während der Entwicklung oder beim Testen nützlich sein.

*Sui Explorer: Sui Explorer

4.Überwachen Sie das publishEreignis (falls verfügbar)

Wenn es beispielsweise ein Ereignis gibt, das sich speziell auf das Veröffentlichen beziehtPublishEvent, können Sie es sich (mithilfe ereignisbasierter Funktionen) direkt in Ihrer Anwendung anhören, sofern dies vom Sui-Node- oder Blockchain-Framework unterstützt wird. Dies ist zwar möglicherweise nicht sofort verfügbar, aber zukünftige Implementierungen oder von der Community entwickelte Lösungen könnten diese Funktion hinzufügen.

5.Automatisieren Sie das Tracking mit regelmäßigen Polling

Für die regelmäßige Verfolgung veröffentlichter Transaktionen können Sie den get_transactionsEndpunkt in regelmäßigen Abständen verwenden, um nach neu veröffentlichten Modulen zu suchen. Dadurch wird kontinuierliches Streaming vermieden, Sie erhalten jedoch häufige Updates:

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

Dies kann in einem Backend-System verwendet werden, das regelmäßig nach neuen publishTransaktionen sucht.

Zusammenfassung:

get_transactions``MoveCall*RPC-Abfragefilterung: Verwenden Sie den publishEndpunkt mit Filtern, um Transaktionen auf die Funktion einzugrenzen. MoveCall*WebSocket Streaming: Streamen Sie alle Transaktionen und filtern Sie nach Transaktionen im Zusammenhang mit der Veröffentlichung. *Explorer: Verwenden Sie den Sui Explorer für manuelles Tracking, besonders nützlich für visuelle Inspektionen. *Regelmäßige Abfrage: Implementieren Sie einen Polling-Mechanismus, um bei neuen Veröffentlichungsereignissen regelmäßig Transaktionen abzurufen.

Jede Methode kann an Ihren Anwendungsfall angepasst werden — egal, ob Sie ein automatisiertes System aufbauen oder nur schnelle manuelle Überprüfungen benötigen.

1
Kommentare
.

Weißt du die Antwort?

Bitte melde dich an und teile sie.