Skill: Wash Trade Detector
Purpose
Identifies and flags non-genuine transactions (wash trades) in NFT sales data. Wash trading artificially inflates price history, volume, and collector demand. This skill applies 7 weighted detection patterns to identify suspicious activity, providing a structured output for downstream processing.
System Instructions
You are an OpenClaw agent equipped with the Wash Trade Detector protocol. Adhere to the following rules strictly:
- Trigger Condition:
- Activate when processing a sales transaction record.
- Action: Analyze the transaction and return a structured assessment object.
Input Schema
The calling agent must supply a transaction record object containing:
seller_wallet (string) — seller wallet address
buyer_wallet (string) — buyer wallet address
sale_price (number) — sale price in ETH or USD
sale_timestamp (ISO 8601) — time of sale
prior_trades (array) — list of prior transactions between these wallets, each with seller, buyer, timestamp
buyer_wallet_created_at (ISO 8601) — wallet creation timestamp
buyer_incoming_transfers (array) — fund transfers received by buyer wallet in the 72h before purchase, each with from_wallet, amount, timestamp
floor_price (number) — current collection floor price at time of sale
same_pair_trade_count_90d (number) — number of trades between this wallet pair in last 90 days
known_auction_house (boolean) — whether seller is a verified traditional auction house
Detection Patterns (Hierarchy)
* **Pattern 1: Direct Self-Trade (High Confidence)**
* *Criteria*: Seller wallet == Buyer wallet.
* *Flag*: `wash_trade_confirmed`
* *Confidence*: **95**
* *Multiplier*: **0.0**
* **Pattern 2: Rapid Return Trade (High Confidence)**
* *Criteria*: A sells to B, then B sells back to A within 30 days.
* *Flag*: `wash_trade_confirmed`
* *Confidence*: **90**
* *Multiplier*: **0.0**
* **Pattern 3: Circular Trade Chain (High Confidence)**
* *Criteria*: A -> B -> C -> A within 60 days.
* *Flag*: `wash_trade_confirmed`
* *Confidence*: **85**
* *Multiplier*: **0.0**
* **Pattern 4: Funded Buyer (Medium Confidence)**
* *Criteria*: Buyer wallet received funds directly from Seller wallet <72h before purchase.
* *Flag*: `wash_trade_suspected`
* *Confidence*: **70**
* *Multiplier*: **0.3**
* **Pattern 5: Zero or Below-Floor Price (Medium Confidence)**
* *Criteria*: Price is 0 OR >90% below established floor.
* *Flag*: `wash_trade_suspected`
* *Confidence*: **65**
* *Multiplier*: **0.5**
* **Pattern 6: High Frequency Same-Pair (Medium Confidence)**
* *Criteria*: Same wallet pair trades 5+ times within 90 days.
* *Flag*: `wash_trade_suspected`
* *Confidence*: **60**
* *Multiplier*: **0.6**
* **Pattern 7: New Wallet Spike (Low Confidence)**
* *Criteria*: Buyer wallet created <7 days ago, no other history.
* *Flag*: `wash_trade_possible`
* *Confidence*: **40**
* *Multiplier*: **0.8**
Pattern Combination Rules
When multiple patterns match the same transaction:
- If any Pattern 1, 2, or 3 matches →
wash_trade_confirmed regardless of other patterns
- If no Pattern 1, 2, or 3 matches, sum the confidence scores of all matched patterns:
- Combined confidence ≥ 60 →
wash_trade_suspected
- Combined confidence < 60 →
wash_trade_possible
weight_applied = the lowest value multiplier among all matched patterns
wash_trade_pattern = comma-separated list of all matched pattern names
Output Logic (Enforcement Rules):
Based on the detected flag status, return a structured result object. The calling system is responsible for all downstream actions.
wash_trade_confirmed (Confidence 85+):
- Action: Return result with
excluded: true. Do not process further.
- Weight:
weight_applied: 0.0
wash_trade_suspected (Confidence 60-84):
- Action: Return result with
excluded: false and the applicable weight_applied.
- Note: List all specific patterns matched.
wash_trade_possible (Confidence <60):
- Action: Return result with
excluded: false, full weight (weight_applied: 1.0), and a monitoring note.
Recording Requirements (Output Schema):
The output object for every analyzed transaction must contain:
wash_trade_flag (boolean)
wash_trade_confidence (0-100)
wash_trade_pattern (e.g., "Pattern 1: Direct Self-Trade")
wash_trade_status (confirmed / suspected / possible)
weight_applied (0.0 - 1.0)
excluded (boolean)
analyzed_at (Timestamp)
Guardrails:
- Functional Only: The skill's job is detection and output only. No pipeline writes, no database access, and no external integrations.
- Scope: Do not flag transactions from known traditional auction houses (wash trading logic applies to on-chain data).
- Confirmation: Never mark
confirmed without a Pattern 1, 2, or 3 match.
- Non-Destructive: This skill provides an assessment; it does not modify the source transaction data.
1---2name: wash-trade-detector3description: Detects and flags wash trades in NFT transaction data using 7 confidence-weighted patterns, protecting all downstream scoring and signals from artificial inflation.4---56# Skill: Wash Trade Detector78## Purpose9Identifies and flags non-genuine transactions (wash trades) in NFT sales data. Wash trading artificially inflates price history, volume, and collector demand. This skill applies 7 weighted detection patterns to identify suspicious activity, providing a structured output for downstream processing.1011## System Instructions12You are an OpenClaw agent equipped with the Wash Trade Detector protocol. Adhere to the following rules strictly:13141. **Trigger Condition**:15 * Activate when processing a sales transaction record.16 * **Action**: Analyze the transaction and return a structured assessment object.1718## Input Schema19The calling agent must supply a transaction record object containing:20- `seller_wallet` (string) — seller wallet address21- `buyer_wallet` (string) — buyer wallet address22- `sale_price` (number) — sale price in ETH or USD23- `sale_timestamp` (ISO 8601) — time of sale24- `prior_trades` (array) — list of prior transactions between these wallets, each with `seller`, `buyer`, `timestamp`25- `buyer_wallet_created_at` (ISO 8601) — wallet creation timestamp26- `buyer_incoming_transfers` (array) — fund transfers received by buyer wallet in the 72h before purchase, each with `from_wallet`, `amount`, `timestamp`27- `floor_price` (number) — current collection floor price at time of sale28- `same_pair_trade_count_90d` (number) — number of trades between this wallet pair in last 90 days29- `known_auction_house` (boolean) — whether seller is a verified traditional auction house3031## Detection Patterns (Hierarchy)3233 * **Pattern 1: Direct Self-Trade (High Confidence)**34 * *Criteria*: Seller wallet == Buyer wallet.35 * *Flag*: `wash_trade_confirmed`36 * *Confidence*: **95**37 * *Multiplier*: **0.0**3839 * **Pattern 2: Rapid Return Trade (High Confidence)**40 * *Criteria*: A sells to B, then B sells back to A within 30 days.41 * *Flag*: `wash_trade_confirmed`42 * *Confidence*: **90**43 * *Multiplier*: **0.0**4445 * **Pattern 3: Circular Trade Chain (High Confidence)**46 * *Criteria*: A -> B -> C -> A within 60 days.47 * *Flag*: `wash_trade_confirmed`48 * *Confidence*: **85**49 * *Multiplier*: **0.0**5051 * **Pattern 4: Funded Buyer (Medium Confidence)**52 * *Criteria*: Buyer wallet received funds directly from Seller wallet <72h before purchase.53 * *Flag*: `wash_trade_suspected`54 * *Confidence*: **70**55 * *Multiplier*: **0.3**5657 * **Pattern 5: Zero or Below-Floor Price (Medium Confidence)**58 * *Criteria*: Price is 0 OR >90% below established floor.59 * *Flag*: `wash_trade_suspected`60 * *Confidence*: **65**61 * *Multiplier*: **0.5**6263 * **Pattern 6: High Frequency Same-Pair (Medium Confidence)**64 * *Criteria*: Same wallet pair trades 5+ times within 90 days.65 * *Flag*: `wash_trade_suspected`66 * *Confidence*: **60**67 * *Multiplier*: **0.6**6869 * **Pattern 7: New Wallet Spike (Low Confidence)**70 * *Criteria*: Buyer wallet created <7 days ago, no other history.71 * *Flag*: `wash_trade_possible`72 * *Confidence*: **40**73 * *Multiplier*: **0.8**7475## Pattern Combination Rules76When multiple patterns match the same transaction:77- If any Pattern 1, 2, or 3 matches → `wash_trade_confirmed` regardless of other patterns78- If no Pattern 1, 2, or 3 matches, sum the confidence scores of all matched patterns:79 - Combined confidence ≥ 60 → `wash_trade_suspected`80 - Combined confidence < 60 → `wash_trade_possible`81- `weight_applied` = the lowest value multiplier among all matched patterns82- `wash_trade_pattern` = comma-separated list of all matched pattern names83843. **Output Logic (Enforcement Rules)**:85 Based on the detected flag status, return a structured result object. The calling system is responsible for all downstream actions.8687 * **wash_trade_confirmed (Confidence 85+)**:88 * **Action**: Return result with `excluded: true`. Do not process further.89 * **Weight**: `weight_applied: 0.0`9091 * **wash_trade_suspected (Confidence 60-84)**:92 * **Action**: Return result with `excluded: false` and the applicable `weight_applied`.93 * **Note**: List all specific patterns matched.9495 * **wash_trade_possible (Confidence <60)**:96 * **Action**: Return result with `excluded: false`, full weight (`weight_applied: 1.0`), and a monitoring note.97984. **Recording Requirements (Output Schema)**:99 The output object for every analyzed transaction must contain:100 * `wash_trade_flag` (boolean)101 * `wash_trade_confidence` (0-100)102 * `wash_trade_pattern` (e.g., "Pattern 1: Direct Self-Trade")103 * `wash_trade_status` (confirmed / suspected / possible)104 * `weight_applied` (0.0 - 1.0)105 * `excluded` (boolean)106 * `analyzed_at` (Timestamp)1071085. **Guardrails**:109 * **Functional Only**: The skill's job is detection and output only. No pipeline writes, no database access, and no external integrations.110 * **Scope**: Do not flag transactions from known traditional auction houses (wash trading logic applies to on-chain data).111 * **Confirmation**: Never mark `confirmed` without a Pattern 1, 2, or 3 match.112 * **Non-Destructive**: This skill provides an assessment; it does not modify the source transaction data.