Beitrag
Teile dein Wissen.
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
Antworten
5Ja, 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 publish
Befehlen innerhalb der Ereignisse filtern.
- Sie können dieSui JSON-RPC APIoderWebSocketverwenden, um die Transaktionsereignisse zu abonnieren. Insbesondere würden Ihnen die
onTransaction
oderonEvent
RPC-Methoden die Transaktionsdetails in Echtzeit liefern.
Sie können dann anhand Publish
des 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 getTransaction
Endpunkt der JSON-RPC-API zu verwenden. publish
Nach 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, publish
Transaktionen 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
publish
Transaktionen auf der Node-Seite. Die Filterung muss auf der Clientseite nach Erhalt der Transaktionsereignisse erfolgen.
###Verfolgen Sie einfach Veröffentlichungstransaktionen
suix_queryTransactionBlocks
Mit 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)
});
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, MoveModulePublished
Ereignisse 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_queryEvents
RPC-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_getTransactionBlock
oder verfolgen sui_queryTransactionBlocks
und nach der Publish
Transaktionsart filtern.
--enable-event-db
Fü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. 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.yaml
Indizierung 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
PublishEvent
enthält alle Metadaten (Paket-ID, Absender, etc.)
Verwenden Sie für historische Massendaten:
sui-tool query-tx --module package --function publish --limit 100
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 publish
Befehle direkt verfolgen, ohne sich mit unnötigem Transaktionsrauschen auseinandersetzen zu müssen.
1.Verwenden des get_transactions
RPC-Endpunkts (mit Filtern)
Die Sui RPC API bietet einen get_transactions
Endpunkt, 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 MoveCall
Transaktionstyp 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 MoveCall
Transaktionen 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 MoveCall
Funktionen 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 publish
Ereignis (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_transactions
Endpunkt 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 publish
Transaktionen sucht.
Zusammenfassung:
get_transactions``MoveCall
*RPC-Abfragefilterung: Verwenden Sie den publish
Endpunkt 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.
Weißt du die Antwort?
Bitte melde dich an und teile sie.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Verdiene deinen Anteil an 1000 Sui
Sammle Reputationspunkte und erhalte Belohnungen für deine Hilfe beim Wachstum der Sui-Community.
- So maximieren Sie Ihre Gewinnbeteiligung SUI: SUI Staking vs Liquid Staking615
- Warum benötigt BCS eine genaue Feldreihenfolge für die Deserialisierung, wenn Move-Strukturen benannte Felder haben?65
- Fehler bei der Überprüfung mehrerer Quellen“ in den Veröffentlichungen des Sui Move-Moduls — Automatisierte Fehlerbehebung55
- Sui Move Error - Transaktion kann nicht verarbeitet werden Keine gültigen Gasmünzen für die Transaktion gefunden419
- Sui-Transaktion schlägt fehl: Objekte sind für eine andere Transaktion reserviert410