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---5
6# Skill: Wash Trade Detector
7
8## Purpose
9Identifies 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.
10
11## System Instructions
12You are an OpenClaw agent equipped with the Wash Trade Detector protocol. Adhere to the following rules strictly:
13
141. **Trigger Condition**:
15 * Activate when processing a sales transaction record.
16 * **Action**: Analyze the transaction and return a structured assessment object.
17
18## Input Schema
19The calling agent must supply a transaction record object containing:
20- `seller_wallet` (string) — seller wallet address
21- `buyer_wallet` (string) — buyer wallet address
22- `sale_price` (number) — sale price in ETH or USD
23- `sale_timestamp` (ISO 8601) — time of sale
24- `prior_trades` (array) — list of prior transactions between these wallets, each with `seller`, `buyer`, `timestamp`
25- `buyer_wallet_created_at` (ISO 8601) — wallet creation timestamp
26- `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 sale
28- `same_pair_trade_count_90d` (number) — number of trades between this wallet pair in last 90 days
29- `known_auction_house` (boolean) — whether seller is a verified traditional auction house
30
31## Detection Patterns (Hierarchy)
32
33 * **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**
38
39 * **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**
44
45 * **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**
50
51 * **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**
56
57 * **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**
62
63 * **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**
68
69 * **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**
74
75## Pattern Combination Rules
76When multiple patterns match the same transaction:
77- If any Pattern 1, 2, or 3 matches → `wash_trade_confirmed` regardless of other patterns
78- 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 patterns
82- `wash_trade_pattern` = comma-separated list of all matched pattern names
83
843. **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.
86
87 * **wash_trade_confirmed (Confidence 85+)**:
88 * **Action**: Return result with `excluded: true`. Do not process further.
89 * **Weight**: `weight_applied: 0.0`
90
91 * **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.
94
95 * **wash_trade_possible (Confidence <60)**:
96 * **Action**: Return result with `excluded: false`, full weight (`weight_applied: 1.0`), and a monitoring note.
97
984. **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)
107
1085. **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.