Skip to main content
Glama
test-8-duplicate-transaction.md6.58 kB
# Test Case 8: Duplicate Transaction Detection ## Description Ensure the system detects and ignores repeated processing of the same transaction. ## Requirements - Track already-processed transaction IDs - Reject duplicates to avoid double processing ## Sequence Diagram ```mermaid sequenceDiagram participant JEST as Jest Test participant WALLET as Wallet Server participant SERVICE as Wallet Service participant BLOCKCHAIN as Blockchain participant CONTRACT as Registration Contract participant AGENT as Registered Agent participant DB as Transaction Database JEST->>WALLET: GET /wallet/balance WALLET-->>JEST: Initial Balance Note over JEST,AGENT: Setup: Agent is registered AGENT->>CONTRACT: Register with Identity CONTRACT-->>AGENT: Registration Confirmed Note over JEST,AGENT: First Transaction AGENT->>BLOCKCHAIN: Send Payment (Transaction ID: TX001) BLOCKCHAIN->>SERVICE: Transaction Received SERVICE->>SERVICE: Extract Transaction ID SERVICE->>DB: Check if TX001 already processed DB-->>SERVICE: Transaction not found SERVICE->>SERVICE: Validate Sender Registration SERVICE->>SERVICE: Validate Amount SERVICE->>DB: Store TX001 as processed SERVICE-->>WALLET: Payment Accepted WALLET-->>JEST: Payment Confirmed JEST->>WALLET: GET /wallet/balance WALLET-->>JEST: Updated Balance Note over JEST,AGENT: Duplicate Transaction (Same TX001) AGENT->>BLOCKCHAIN: Send Same Payment (Transaction ID: TX001) BLOCKCHAIN->>SERVICE: Transaction Received SERVICE->>SERVICE: Extract Transaction ID SERVICE->>DB: Check if TX001 already processed DB-->>SERVICE: Transaction already processed Note over SERVICE: Duplicate detected SERVICE-->>WALLET: Payment Rejected (Duplicate) WALLET-->>JEST: Payment Rejected Error JEST->>WALLET: GET /wallet/balance WALLET-->>JEST: Balance unchanged Note over JEST: Assert: Balance unchanged after duplicate Note over JEST: Assert: Error indicates duplicate transaction Note over JEST: Assert: No double processing occurred ``` ## Test Flow ```mermaid graph TD START[Test Start] --> CHECK_BALANCE[Check Initial Balance] CHECK_BALANCE --> SETUP_AGENT[Setup Registered Agent] SETUP_AGENT --> SEND_FIRST[Send First Transaction] SEND_FIRST --> PROCESS_FIRST[Process First Transaction] PROCESS_FIRST --> STORE_TX[Store Transaction ID] STORE_TX --> UPDATE_BALANCE[Update Balance] UPDATE_BALANCE --> SEND_DUPLICATE[Send Duplicate Transaction] SEND_DUPLICATE --> CHECK_DUPLICATE[Check for Duplicate] CHECK_DUPLICATE --> IS_DUPLICATE{Is<br/>Duplicate?} IS_DUPLICATE -->|Yes| REJECT_DUPLICATE[Reject Duplicate] IS_DUPLICATE -->|No| PROCESS_DUPLICATE[Process as New] REJECT_DUPLICATE --> ASSERT_SUCCESS[Assert Success - Expected] PROCESS_DUPLICATE --> ASSERT_FAILURE[Assert Failure - Unexpected] ASSERT_SUCCESS --> END[Test End] ASSERT_FAILURE --> END style START fill:#e1f5fe style ASSERT_SUCCESS fill:#e8f5e8 style ASSERT_FAILURE fill:#ffebee style IS_DUPLICATE fill:#fff3e0 ``` ## Duplicate Detection Logic ```mermaid graph TD TX_INPUT[Transaction Input] --> EXTRACT_ID[Extract Transaction ID] EXTRACT_ID --> QUERY_DB[Query Transaction Database] QUERY_DB --> EXISTS{Transaction<br/>Exists?} EXISTS -->|Yes| DUPLICATE[Mark as Duplicate] EXISTS -->|No| VALIDATE[Validate Transaction] DUPLICATE --> REJECT[Reject Transaction] VALIDATE --> VALID{Valid<br/>Transaction?} VALID -->|Yes| STORE[Store Transaction] VALID -->|No| REJECT_INVALID[Reject Invalid Transaction] STORE --> ACCEPT[Accept Transaction] REJECT --> ERROR_DUPLICATE[Return Duplicate Error] REJECT_INVALID --> ERROR_INVALID[Return Invalid Error] style TX_INPUT fill:#e1f5fe style EXISTS fill:#fff3e0 style VALID fill:#f3e5f5 style ACCEPT fill:#e8f5e8 style ERROR_DUPLICATE fill:#ffebee style ERROR_INVALID fill:#ffebee ``` ## HTTP API Calls ```mermaid graph LR JEST[Jest Test] --> GET_BALANCE[GET /wallet/balance] JEST --> GET_TRANSACTION[GET /wallet/transaction/{id}] JEST --> GET_TRANSACTIONS[GET /wallet/transactions] JEST --> POST_TRANSACTION[POST /wallet/transaction] JEST --> GET_PROCESSED[GET /wallet/processed/{txId}] GET_BALANCE --> WALLET[Wallet Server] GET_TRANSACTION --> WALLET GET_TRANSACTIONS --> WALLET POST_TRANSACTION --> WALLET GET_PROCESSED --> WALLET WALLET --> SERVICE[Wallet Service] SERVICE --> DB[Transaction Database] SERVICE --> BLOCKCHAIN[Blockchain] style JEST fill:#e1f5fe style WALLET fill:#fff3e0 style SERVICE fill:#f3e5f5 style DB fill:#e8f5e8 ``` ## Database Schema for Transaction Tracking ```mermaid graph TD DB[Transaction Database] --> TX_TABLE[Transactions Table] TX_TABLE --> TX_ID[Transaction ID] TX_TABLE --> SENDER[Sender Address] TX_TABLE --> AMOUNT[Amount] TX_TABLE --> STATUS[Status] TX_TABLE --> TIMESTAMP[Timestamp] TX_TABLE --> PROCESSED[Processed Flag] TX_ID --> PRIMARY_KEY[Primary Key] SENDER --> INDEX[Indexed Field] STATUS --> ENUM[Enum: PENDING, PROCESSED, REJECTED] PROCESSED --> BOOLEAN[Boolean: true/false] TIMESTAMP --> DATETIME[DateTime Field] style DB fill:#e1f5fe style TX_TABLE fill:#fff3e0 style PRIMARY_KEY fill:#e8f5e8 ``` ## Transaction Processing States ```mermaid graph TD RECEIVED[Transaction Received] --> VALIDATE[Validate Transaction] VALIDATE --> CHECK_DUPLICATE[Check for Duplicate] CHECK_DUPLICATE --> DUPLICATE{Is<br/>Duplicate?} DUPLICATE -->|Yes| REJECT_DUPLICATE[Reject - Duplicate] DUPLICATE -->|No| CHECK_REGISTRATION[Check Registration] CHECK_REGISTRATION --> REGISTERED{Agent<br/>Registered?} REGISTERED -->|No| REJECT_UNREGISTERED[Reject - Unregistered] REGISTERED -->|Yes| CHECK_AMOUNT[Check Amount] CHECK_AMOUNT --> AMOUNT_VALID{Amount<br/>Valid?} AMOUNT_VALID -->|No| REJECT_AMOUNT[Reject - Invalid Amount] AMOUNT_VALID -->|Yes| PROCESS[Process Transaction] PROCESS --> ACCEPT[Accept Transaction] REJECT_DUPLICATE --> END[End] REJECT_UNREGISTERED --> END REJECT_AMOUNT --> END ACCEPT --> END style RECEIVED fill:#e1f5fe style ACCEPT fill:#e8f5e8 style REJECT_DUPLICATE fill:#ffebee style REJECT_UNREGISTERED fill:#ffebee style REJECT_AMOUNT fill:#ffebee ```

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/evilpixi/pixi-midnight-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server