torch-liquidation-bot 2.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -7
- package/readme.md +46 -80
- package/dist/config.d.ts +0 -6
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -51
- package/dist/config.js.map +0 -1
- package/dist/index.d.ts +0 -28
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -172
- package/dist/index.js.map +0 -1
- package/dist/liquidator.d.ts +0 -17
- package/dist/liquidator.d.ts.map +0 -1
- package/dist/liquidator.js +0 -72
- package/dist/liquidator.js.map +0 -1
- package/dist/logger.d.ts +0 -17
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -54
- package/dist/logger.js.map +0 -1
- package/dist/monitor.d.ts +0 -27
- package/dist/monitor.d.ts.map +0 -1
- package/dist/monitor.js +0 -136
- package/dist/monitor.js.map +0 -1
- package/dist/risk-scorer.d.ts +0 -13
- package/dist/risk-scorer.d.ts.map +0 -1
- package/dist/risk-scorer.js +0 -102
- package/dist/risk-scorer.js.map +0 -1
- package/dist/scanner.d.ts +0 -11
- package/dist/scanner.d.ts.map +0 -1
- package/dist/scanner.js +0 -55
- package/dist/scanner.js.map +0 -1
- package/dist/types.d.ts +0 -69
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -8
- package/dist/types.js.map +0 -1
- package/dist/utils.d.ts +0 -9
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -24
- package/dist/utils.js.map +0 -1
- package/dist/wallet-profiler.d.ts +0 -21
- package/dist/wallet-profiler.d.ts.map +0 -1
- package/dist/wallet-profiler.js +0 -116
- package/dist/wallet-profiler.js.map +0 -1
package/dist/wallet-profiler.js
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* wallet-profiler.ts — assesses wallet risk using SAID reputation + trade history.
|
|
4
|
-
*
|
|
5
|
-
* checks each borrower's trust tier and analyzes their trade messages
|
|
6
|
-
* to determine if they tend to lose money (higher liquidation risk).
|
|
7
|
-
*
|
|
8
|
-
* profiles are cached in-memory with a cooldown to avoid hammering RPC.
|
|
9
|
-
*/
|
|
10
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.WalletProfiler = void 0;
|
|
12
|
-
const torchsdk_1 = require("torchsdk");
|
|
13
|
-
const utils_1 = require("./utils");
|
|
14
|
-
const PROFILE_COOLDOWN_MS = 5 * 60 * 1000; // refresh profiles every 5 min
|
|
15
|
-
const MAX_CACHE_AGE_MS = 30 * 60 * 1000; // evict entries older than 30 min
|
|
16
|
-
const MAX_CACHE_SIZE = 1000; // hard cap on cache entries
|
|
17
|
-
class WalletProfiler {
|
|
18
|
-
constructor(log) {
|
|
19
|
-
this.cache = new Map();
|
|
20
|
-
this.log = log;
|
|
21
|
-
}
|
|
22
|
-
async profile(connection, address, mint) {
|
|
23
|
-
this.evictStale();
|
|
24
|
-
const cached = this.cache.get(address);
|
|
25
|
-
if (cached && Date.now() - cached.lastUpdated < PROFILE_COOLDOWN_MS) {
|
|
26
|
-
return cached;
|
|
27
|
-
}
|
|
28
|
-
this.log.debug(`profiling wallet ${address.slice(0, 8)}...`);
|
|
29
|
-
// SAID reputation
|
|
30
|
-
const said = await (0, torchsdk_1.verifySaid)(address);
|
|
31
|
-
// trade history from messages
|
|
32
|
-
const tradeStats = await this.analyzeTradeHistory(connection, mint, address);
|
|
33
|
-
// compute wallet risk score (0-100)
|
|
34
|
-
const riskScore = this.computeWalletRisk(said.trustTier, tradeStats);
|
|
35
|
-
const profile = {
|
|
36
|
-
address,
|
|
37
|
-
saidVerified: said.verified,
|
|
38
|
-
trustTier: said.trustTier,
|
|
39
|
-
tradeStats,
|
|
40
|
-
riskScore,
|
|
41
|
-
lastUpdated: Date.now(),
|
|
42
|
-
};
|
|
43
|
-
this.cache.set(address, profile);
|
|
44
|
-
return profile;
|
|
45
|
-
}
|
|
46
|
-
async analyzeTradeHistory(connection, mint, address) {
|
|
47
|
-
try {
|
|
48
|
-
const { messages } = await (0, torchsdk_1.getMessages)(connection, mint, 50);
|
|
49
|
-
// filter messages from this wallet and analyze buy/sell patterns
|
|
50
|
-
const walletMsgs = messages.filter((m) => m.sender === address);
|
|
51
|
-
let wins = 0;
|
|
52
|
-
let losses = 0;
|
|
53
|
-
let netPnlSol = 0;
|
|
54
|
-
for (const msg of walletMsgs) {
|
|
55
|
-
const m = msg;
|
|
56
|
-
if (m.pnl_sol !== undefined) {
|
|
57
|
-
if (m.pnl_sol > 0)
|
|
58
|
-
wins++;
|
|
59
|
-
else
|
|
60
|
-
losses++;
|
|
61
|
-
netPnlSol += m.pnl_sol;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
const totalTrades = wins + losses;
|
|
65
|
-
return {
|
|
66
|
-
totalTrades,
|
|
67
|
-
wins,
|
|
68
|
-
losses,
|
|
69
|
-
winRate: totalTrades > 0 ? wins / totalTrades : 0.5,
|
|
70
|
-
netPnlSol,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
// if we can't get trade history, assume neutral
|
|
75
|
-
return { totalTrades: 0, wins: 0, losses: 0, winRate: 0.5, netPnlSol: 0 };
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
computeWalletRisk(trustTier, stats) {
|
|
79
|
-
// base risk from trust tier
|
|
80
|
-
const tierRisk = {
|
|
81
|
-
high: 10,
|
|
82
|
-
medium: 40,
|
|
83
|
-
low: 70,
|
|
84
|
-
};
|
|
85
|
-
let risk = tierRisk[trustTier ?? ''] ?? 50; // unverified = 50
|
|
86
|
-
// modifier from trade history: bad traders are riskier
|
|
87
|
-
if (stats.totalTrades > 0) {
|
|
88
|
-
// low win rate increases risk, high win rate decreases it
|
|
89
|
-
const winRateModifier = (0.5 - stats.winRate) * 40; // -20 to +20
|
|
90
|
-
risk += winRateModifier;
|
|
91
|
-
// net losses increase risk
|
|
92
|
-
if (stats.netPnlSol < 0) {
|
|
93
|
-
risk += Math.min(Math.abs(stats.netPnlSol) * 5, 20); // up to +20
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
return (0, utils_1.clamp)(Math.round(risk), 0, 100);
|
|
97
|
-
}
|
|
98
|
-
evictStale() {
|
|
99
|
-
const now = Date.now();
|
|
100
|
-
for (const [key, profile] of this.cache) {
|
|
101
|
-
if (now - profile.lastUpdated > MAX_CACHE_AGE_MS) {
|
|
102
|
-
this.cache.delete(key);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
// hard cap: if still too large, evict oldest entries
|
|
106
|
-
if (this.cache.size > MAX_CACHE_SIZE) {
|
|
107
|
-
const sorted = [...this.cache.entries()].sort((a, b) => a[1].lastUpdated - b[1].lastUpdated);
|
|
108
|
-
const toEvict = sorted.slice(0, this.cache.size - MAX_CACHE_SIZE);
|
|
109
|
-
for (const [key] of toEvict) {
|
|
110
|
-
this.cache.delete(key);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
exports.WalletProfiler = WalletProfiler;
|
|
116
|
-
//# sourceMappingURL=wallet-profiler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-profiler.js","sourceRoot":"","sources":["../src/wallet-profiler.ts"],"names":[],"mappings":"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"}
|