zetrix_ws_submit_transaction
Submit blockchain transactions via WebSocket to receive real-time status updates for monitoring and verification.
Instructions
Submit transaction via WebSocket and get real-time status updates
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| transaction | Yes | Transaction object | |
| signatures | Yes | Array of signature objects with public_key and sign_data | |
| trigger | No | Optional trigger object |
Implementation Reference
- src/index.ts:368-388 (registration)Tool registration in the tools array, defining name, description, and inputSchema for MCP tool listing.{ name: "zetrix_ws_submit_transaction", description: "Submit transaction via WebSocket and get real-time status updates", inputSchema: { type: "object", properties: { transaction: { type: "object", description: "Transaction object", }, signatures: { type: "array", description: "Array of signature objects with public_key and sign_data", }, trigger: { type: "object", description: "Optional trigger object", }, }, required: ["transaction", "signatures"], },
- src/index.ts:1072-1089 (handler)MCP server request handler switch case that validates arguments, retrieves WebSocket client, calls submitTransaction, and returns the result.case "zetrix_ws_submit_transaction": { if (!args) { throw new Error("Missing arguments"); } const wsClient = getWebSocketClient(); const result = await wsClient.submitTransaction( args.transaction, args.signatures as Array<{ public_key: string; sign_data: string }>, args.trigger ); return { content: [ { type: "text", text: JSON.stringify(result, null, 2), }, ], };
- src/zetrix-websocket.ts:247-278 (handler)Core tool logic implementation in ZetrixWebSocketClient: validates registration, constructs ChainSubmitTransactionRequest message, sends via WebSocket, sets up listener for tx_status response with timeout, resolves with ChainTxStatusResponse.submitTransaction( transaction: any, signatures: Array<{ public_key: string; sign_data: string }>, trigger?: any ): Promise<ChainTxStatusResponse> { return new Promise((resolve, reject) => { if (!this.isRegistered) { reject(new Error("WebSocket not registered. Call registerAndConnect first.")); return; } const request: ChainSubmitTransactionRequest = { type: ChainMessageType.CHAIN_SUBMITTRANSACTION, transaction, signatures, trigger, }; const timeout = setTimeout(() => { this.off("tx_status", onTxStatus); reject(new Error("Transaction submission timeout")); }, 30000); const onTxStatus = (response: ChainTxStatusResponse) => { clearTimeout(timeout); resolve(response); }; this.once("tx_status", onTxStatus); this.sendMessage(request); }); }