@catalyst-team/poly-sdk 0.2.0 → 0.2.1
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/LICENSE +1 -1
- package/README.en.md +8 -44
- package/README.md +5 -3
- package/README.zh-CN.md +502 -0
- package/dist/__tests__/clob-api.test.d.ts +5 -0
- package/dist/__tests__/clob-api.test.d.ts.map +1 -0
- package/dist/__tests__/clob-api.test.js +240 -0
- package/dist/__tests__/clob-api.test.js.map +1 -0
- package/dist/__tests__/integration/bridge-client.integration.test.d.ts +11 -0
- package/dist/__tests__/integration/bridge-client.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/bridge-client.integration.test.js +260 -0
- package/dist/__tests__/integration/bridge-client.integration.test.js.map +1 -0
- package/dist/__tests__/integration/clob-api.integration.test.d.ts +13 -0
- package/dist/__tests__/integration/clob-api.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/clob-api.integration.test.js +170 -0
- package/dist/__tests__/integration/clob-api.integration.test.js.map +1 -0
- package/dist/__tests__/integration/ctf-client.integration.test.d.ts +17 -0
- package/dist/__tests__/integration/ctf-client.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/ctf-client.integration.test.js +234 -0
- package/dist/__tests__/integration/ctf-client.integration.test.js.map +1 -0
- package/dist/__tests__/integration/data-api.integration.test.d.ts +9 -0
- package/dist/__tests__/integration/data-api.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/data-api.integration.test.js +161 -0
- package/dist/__tests__/integration/data-api.integration.test.js.map +1 -0
- package/dist/__tests__/integration/gamma-api.integration.test.d.ts +9 -0
- package/dist/__tests__/integration/gamma-api.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/gamma-api.integration.test.js +170 -0
- package/dist/__tests__/integration/gamma-api.integration.test.js.map +1 -0
- package/dist/__tests__/test-utils.d.ts +92 -0
- package/dist/__tests__/test-utils.d.ts.map +1 -0
- package/dist/__tests__/test-utils.js +143 -0
- package/dist/__tests__/test-utils.js.map +1 -0
- package/dist/clients/bridge-client.d.ts +388 -0
- package/dist/clients/bridge-client.d.ts.map +1 -0
- package/dist/clients/bridge-client.js +587 -0
- package/dist/clients/bridge-client.js.map +1 -0
- package/dist/clients/clob-api.d.ts +318 -0
- package/dist/clients/clob-api.d.ts.map +1 -0
- package/dist/clients/clob-api.js +388 -0
- package/dist/clients/clob-api.js.map +1 -0
- package/dist/clients/ctf-client.d.ts +473 -0
- package/dist/clients/ctf-client.d.ts.map +1 -0
- package/dist/clients/ctf-client.js +915 -0
- package/dist/clients/ctf-client.js.map +1 -0
- package/dist/clients/data-api.d.ts +134 -0
- package/dist/clients/data-api.d.ts.map +1 -0
- package/dist/clients/data-api.js +265 -0
- package/dist/clients/data-api.js.map +1 -0
- package/dist/clients/gamma-api.d.ts +401 -0
- package/dist/clients/gamma-api.d.ts.map +1 -0
- package/dist/clients/gamma-api.js +352 -0
- package/dist/clients/gamma-api.js.map +1 -0
- package/dist/clients/trading-client.d.ts +252 -0
- package/dist/clients/trading-client.d.ts.map +1 -0
- package/dist/clients/trading-client.js +543 -0
- package/dist/clients/trading-client.js.map +1 -0
- package/dist/clients/websocket-manager.d.ts +100 -0
- package/dist/clients/websocket-manager.d.ts.map +1 -0
- package/dist/clients/websocket-manager.js +193 -0
- package/dist/clients/websocket-manager.js.map +1 -0
- package/dist/core/cache-adapter-bridge.d.ts +36 -0
- package/dist/core/cache-adapter-bridge.d.ts.map +1 -0
- package/dist/core/cache-adapter-bridge.js +81 -0
- package/dist/core/cache-adapter-bridge.js.map +1 -0
- package/dist/core/cache.d.ts +40 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +71 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/errors.d.ts +38 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +84 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/rate-limiter.d.ts +31 -0
- package/dist/core/rate-limiter.d.ts.map +1 -0
- package/dist/core/rate-limiter.js +70 -0
- package/dist/core/rate-limiter.js.map +1 -0
- package/{src/core/types.ts → dist/core/types.d.ts} +169 -215
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +19 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/unified-cache.d.ts +63 -0
- package/dist/core/unified-cache.d.ts.map +1 -0
- package/dist/core/unified-cache.js +114 -0
- package/dist/core/unified-cache.js.map +1 -0
- package/dist/index.d.ts +93 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +255 -0
- package/dist/index.js.map +1 -0
- package/dist/services/arbitrage-service.d.ts +408 -0
- package/dist/services/arbitrage-service.d.ts.map +1 -0
- package/dist/services/arbitrage-service.js +1422 -0
- package/dist/services/arbitrage-service.js.map +1 -0
- package/dist/services/authorization-service.d.ts +97 -0
- package/dist/services/authorization-service.d.ts.map +1 -0
- package/dist/services/authorization-service.js +279 -0
- package/dist/services/authorization-service.js.map +1 -0
- package/dist/services/market-service.d.ts +108 -0
- package/dist/services/market-service.d.ts.map +1 -0
- package/dist/services/market-service.js +458 -0
- package/dist/services/market-service.js.map +1 -0
- package/dist/services/realtime-service.d.ts +82 -0
- package/dist/services/realtime-service.d.ts.map +1 -0
- package/dist/services/realtime-service.js +150 -0
- package/dist/services/realtime-service.js.map +1 -0
- package/dist/services/swap-service.d.ts +217 -0
- package/dist/services/swap-service.d.ts.map +1 -0
- package/dist/services/swap-service.js +695 -0
- package/dist/services/swap-service.js.map +1 -0
- package/dist/services/wallet-service.d.ts +94 -0
- package/dist/services/wallet-service.d.ts.map +1 -0
- package/dist/services/wallet-service.js +173 -0
- package/dist/services/wallet-service.js.map +1 -0
- package/dist/utils/price-utils.d.ts +153 -0
- package/dist/utils/price-utils.d.ts.map +1 -0
- package/dist/utils/price-utils.js +236 -0
- package/dist/utils/price-utils.js.map +1 -0
- package/package.json +7 -2
- package/docs/00-design.md +0 -760
- package/docs/02-API.md +0 -1148
- package/docs/arb/test-plan.md +0 -387
- package/docs/arb/test-results.md +0 -336
- package/docs/arbitrage.md +0 -754
- package/docs/reports/smart-money-analysis-2025-12-23-cn.md +0 -840
- package/examples/01-basic-usage.ts +0 -68
- package/examples/02-smart-money.ts +0 -95
- package/examples/03-market-analysis.ts +0 -108
- package/examples/04-kline-aggregation.ts +0 -158
- package/examples/05-follow-wallet-strategy.ts +0 -156
- package/examples/06-services-demo.ts +0 -124
- package/examples/07-realtime-websocket.ts +0 -117
- package/examples/08-trading-orders.ts +0 -278
- package/examples/09-rewards-tracking.ts +0 -187
- package/examples/10-ctf-operations.ts +0 -336
- package/examples/11-live-arbitrage-scan.ts +0 -221
- package/examples/12-trending-arb-monitor.ts +0 -406
- package/examples/13-arbitrage-service.ts +0 -211
- package/examples/README.md +0 -179
- package/scripts/README.md +0 -163
- package/scripts/approvals/approve-erc1155.ts +0 -129
- package/scripts/approvals/approve-neg-risk-erc1155.ts +0 -149
- package/scripts/approvals/approve-neg-risk.ts +0 -102
- package/scripts/approvals/check-all-allowances.ts +0 -150
- package/scripts/approvals/check-allowance.ts +0 -129
- package/scripts/approvals/check-ctf-approval.ts +0 -158
- package/scripts/arb/faze-bo3-arb.ts +0 -385
- package/scripts/arb/settle-position.ts +0 -190
- package/scripts/arb/token-rebalancer.ts +0 -420
- package/scripts/arb-tests/01-unit-tests.ts +0 -495
- package/scripts/arb-tests/02-integration-tests.ts +0 -412
- package/scripts/arb-tests/03-e2e-tests.ts +0 -503
- package/scripts/arb-tests/README.md +0 -109
- package/scripts/datas/001-report.md +0 -486
- package/scripts/datas/clone-modal-screenshot.png +0 -0
- package/scripts/deposit/deposit-native-usdc.ts +0 -179
- package/scripts/deposit/deposit-usdc.ts +0 -155
- package/scripts/deposit/swap-usdc-to-usdce.ts +0 -375
- package/scripts/research/research-markets.ts +0 -166
- package/scripts/trading/check-orders.ts +0 -50
- package/scripts/trading/sell-nvidia-positions.ts +0 -206
- package/scripts/trading/test-order.ts +0 -172
- package/scripts/verify/test-approve-trading.ts +0 -98
- package/scripts/verify/test-provider-fix.ts +0 -43
- package/scripts/verify/test-search-mcp.ts +0 -113
- package/scripts/verify/verify-all-apis.ts +0 -160
- package/scripts/wallet/check-wallet-balances.ts +0 -75
- package/scripts/wallet/test-wallet-operations.ts +0 -191
- package/scripts/wallet/verify-wallet-tools.ts +0 -124
- package/src/__tests__/clob-api.test.ts +0 -301
- package/src/__tests__/integration/bridge-client.integration.test.ts +0 -314
- package/src/__tests__/integration/clob-api.integration.test.ts +0 -218
- package/src/__tests__/integration/ctf-client.integration.test.ts +0 -331
- package/src/__tests__/integration/data-api.integration.test.ts +0 -194
- package/src/__tests__/integration/gamma-api.integration.test.ts +0 -206
- package/src/__tests__/test-utils.ts +0 -170
- package/src/clients/bridge-client.ts +0 -841
- package/src/clients/clob-api.ts +0 -629
- package/src/clients/ctf-client.ts +0 -1216
- package/src/clients/data-api.ts +0 -469
- package/src/clients/gamma-api.ts +0 -597
- package/src/clients/trading-client.ts +0 -749
- package/src/clients/websocket-manager.ts +0 -267
- package/src/core/cache-adapter-bridge.ts +0 -94
- package/src/core/cache.ts +0 -85
- package/src/core/errors.ts +0 -117
- package/src/core/rate-limiter.ts +0 -74
- package/src/core/unified-cache.ts +0 -153
- package/src/index.ts +0 -461
- package/src/services/arbitrage-service.ts +0 -1807
- package/src/services/authorization-service.ts +0 -357
- package/src/services/market-service.ts +0 -544
- package/src/services/realtime-service.ts +0 -196
- package/src/services/swap-service.ts +0 -896
- package/src/services/wallet-service.ts +0 -259
- package/src/utils/price-utils.ts +0 -307
- package/tsconfig.json +0 -8
- package/vitest.config.ts +0 -19
- package/vitest.integration.config.ts +0 -18
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArbitrageService - Real-time Arbitrage Detection and Execution
|
|
3
|
+
*
|
|
4
|
+
* Uses WebSocket for real-time orderbook monitoring and automatically
|
|
5
|
+
* detects arbitrage opportunities in Polymarket binary markets.
|
|
6
|
+
*
|
|
7
|
+
* Strategy:
|
|
8
|
+
* - Long Arb: Buy YES + NO (effective cost < $1) → Merge → $1 USDC
|
|
9
|
+
* - Short Arb: Sell pre-held YES + NO tokens (effective revenue > $1)
|
|
10
|
+
*
|
|
11
|
+
* Features:
|
|
12
|
+
* - Real-time orderbook monitoring via WebSocket
|
|
13
|
+
* - Automatic arbitrage detection using effective prices
|
|
14
|
+
* - Configurable profit threshold and trade sizes
|
|
15
|
+
* - Auto-execute mode or event-based manual mode
|
|
16
|
+
* - Balance tracking and position management
|
|
17
|
+
*
|
|
18
|
+
* Based on: scripts/arb/faze-bo3-arb.ts
|
|
19
|
+
* Docs: docs/arbitrage.md
|
|
20
|
+
*/
|
|
21
|
+
import { EventEmitter } from 'events';
|
|
22
|
+
export interface ArbitrageMarketConfig {
|
|
23
|
+
/** Market name for logging */
|
|
24
|
+
name: string;
|
|
25
|
+
/** Condition ID */
|
|
26
|
+
conditionId: string;
|
|
27
|
+
/** YES token ID from CLOB API */
|
|
28
|
+
yesTokenId: string;
|
|
29
|
+
/** NO token ID from CLOB API */
|
|
30
|
+
noTokenId: string;
|
|
31
|
+
/** Outcome names [YES, NO] */
|
|
32
|
+
outcomes?: [string, string];
|
|
33
|
+
}
|
|
34
|
+
export interface ArbitrageServiceConfig {
|
|
35
|
+
/** Private key for trading (optional for monitor-only mode) */
|
|
36
|
+
privateKey?: string;
|
|
37
|
+
/** RPC URL for CTF operations */
|
|
38
|
+
rpcUrl?: string;
|
|
39
|
+
/** Minimum profit threshold (default: 0.005 = 0.5%) */
|
|
40
|
+
profitThreshold?: number;
|
|
41
|
+
/** Minimum trade size in USDC (default: 5) */
|
|
42
|
+
minTradeSize?: number;
|
|
43
|
+
/** Maximum single trade size in USDC (default: 100) */
|
|
44
|
+
maxTradeSize?: number;
|
|
45
|
+
/** Minimum token reserve for short arb (default: 10) */
|
|
46
|
+
minTokenReserve?: number;
|
|
47
|
+
/** Auto-execute mode (default: false) */
|
|
48
|
+
autoExecute?: boolean;
|
|
49
|
+
/** Enable logging (default: true) */
|
|
50
|
+
enableLogging?: boolean;
|
|
51
|
+
/** Cooldown between executions in ms (default: 5000) */
|
|
52
|
+
executionCooldown?: number;
|
|
53
|
+
/** Enable auto-rebalancing (default: false) */
|
|
54
|
+
enableRebalancer?: boolean;
|
|
55
|
+
/** Minimum USDC ratio 0-1 (default: 0.2 = 20%) - Split if below */
|
|
56
|
+
minUsdcRatio?: number;
|
|
57
|
+
/** Maximum USDC ratio 0-1 (default: 0.8 = 80%) - Merge if above */
|
|
58
|
+
maxUsdcRatio?: number;
|
|
59
|
+
/** Target USDC ratio when rebalancing (default: 0.5 = 50%) */
|
|
60
|
+
targetUsdcRatio?: number;
|
|
61
|
+
/** Max YES/NO imbalance before auto-fix (default: 5 tokens) */
|
|
62
|
+
imbalanceThreshold?: number;
|
|
63
|
+
/** Rebalance check interval in ms (default: 10000) */
|
|
64
|
+
rebalanceInterval?: number;
|
|
65
|
+
/** Minimum cooldown between rebalance actions in ms (default: 30000) */
|
|
66
|
+
rebalanceCooldown?: number;
|
|
67
|
+
/** Size safety factor 0-1 (default: 0.8) - use only 80% of orderbook depth to prevent partial fills */
|
|
68
|
+
sizeSafetyFactor?: number;
|
|
69
|
+
/** Auto-fix imbalance after failed execution (default: true) */
|
|
70
|
+
autoFixImbalance?: boolean;
|
|
71
|
+
}
|
|
72
|
+
export interface RebalanceAction {
|
|
73
|
+
type: 'split' | 'merge' | 'sell_yes' | 'sell_no' | 'none';
|
|
74
|
+
amount: number;
|
|
75
|
+
reason: string;
|
|
76
|
+
priority: number;
|
|
77
|
+
}
|
|
78
|
+
export interface RebalanceResult {
|
|
79
|
+
success: boolean;
|
|
80
|
+
action: RebalanceAction;
|
|
81
|
+
txHash?: string;
|
|
82
|
+
error?: string;
|
|
83
|
+
}
|
|
84
|
+
export interface SettleResult {
|
|
85
|
+
market: ArbitrageMarketConfig;
|
|
86
|
+
yesBalance: number;
|
|
87
|
+
noBalance: number;
|
|
88
|
+
pairedTokens: number;
|
|
89
|
+
unpairedYes: number;
|
|
90
|
+
unpairedNo: number;
|
|
91
|
+
merged: boolean;
|
|
92
|
+
mergeAmount?: number;
|
|
93
|
+
mergeTxHash?: string;
|
|
94
|
+
usdcRecovered?: number;
|
|
95
|
+
error?: string;
|
|
96
|
+
}
|
|
97
|
+
export interface ClearPositionResult {
|
|
98
|
+
market: ArbitrageMarketConfig;
|
|
99
|
+
marketStatus: 'active' | 'resolved' | 'unknown';
|
|
100
|
+
yesBalance: number;
|
|
101
|
+
noBalance: number;
|
|
102
|
+
actions: ClearAction[];
|
|
103
|
+
totalUsdcRecovered: number;
|
|
104
|
+
success: boolean;
|
|
105
|
+
error?: string;
|
|
106
|
+
}
|
|
107
|
+
export interface ClearAction {
|
|
108
|
+
type: 'merge' | 'sell_yes' | 'sell_no' | 'redeem';
|
|
109
|
+
amount: number;
|
|
110
|
+
usdcResult: number;
|
|
111
|
+
txHash?: string;
|
|
112
|
+
success: boolean;
|
|
113
|
+
error?: string;
|
|
114
|
+
}
|
|
115
|
+
export interface ScanCriteria {
|
|
116
|
+
/** Minimum 24h volume in USDC (default: 1000) */
|
|
117
|
+
minVolume24h?: number;
|
|
118
|
+
/** Maximum 24h volume (optional) */
|
|
119
|
+
maxVolume24h?: number;
|
|
120
|
+
/** Keywords to filter markets (optional) */
|
|
121
|
+
keywords?: string[];
|
|
122
|
+
/** Maximum number of markets to scan (default: 100) */
|
|
123
|
+
limit?: number;
|
|
124
|
+
}
|
|
125
|
+
export interface ScanResult {
|
|
126
|
+
/** Market config ready to use with start() */
|
|
127
|
+
market: ArbitrageMarketConfig;
|
|
128
|
+
/** Best arbitrage type */
|
|
129
|
+
arbType: 'long' | 'short' | 'none';
|
|
130
|
+
/** Profit rate (e.g., 0.01 = 1%) */
|
|
131
|
+
profitRate: number;
|
|
132
|
+
/** Profit percentage */
|
|
133
|
+
profitPercent: number;
|
|
134
|
+
/** Effective prices */
|
|
135
|
+
effectivePrices: {
|
|
136
|
+
buyYes: number;
|
|
137
|
+
buyNo: number;
|
|
138
|
+
sellYes: number;
|
|
139
|
+
sellNo: number;
|
|
140
|
+
longCost: number;
|
|
141
|
+
shortRevenue: number;
|
|
142
|
+
};
|
|
143
|
+
/** 24h volume */
|
|
144
|
+
volume24h: number;
|
|
145
|
+
/** Available size on orderbook */
|
|
146
|
+
availableSize: number;
|
|
147
|
+
/** Score 0-100 */
|
|
148
|
+
score: number;
|
|
149
|
+
/** Description */
|
|
150
|
+
description: string;
|
|
151
|
+
}
|
|
152
|
+
export interface OrderbookState {
|
|
153
|
+
yesBids: Array<{
|
|
154
|
+
price: number;
|
|
155
|
+
size: number;
|
|
156
|
+
}>;
|
|
157
|
+
yesAsks: Array<{
|
|
158
|
+
price: number;
|
|
159
|
+
size: number;
|
|
160
|
+
}>;
|
|
161
|
+
noBids: Array<{
|
|
162
|
+
price: number;
|
|
163
|
+
size: number;
|
|
164
|
+
}>;
|
|
165
|
+
noAsks: Array<{
|
|
166
|
+
price: number;
|
|
167
|
+
size: number;
|
|
168
|
+
}>;
|
|
169
|
+
lastUpdate: number;
|
|
170
|
+
}
|
|
171
|
+
export interface BalanceState {
|
|
172
|
+
usdc: number;
|
|
173
|
+
yesTokens: number;
|
|
174
|
+
noTokens: number;
|
|
175
|
+
lastUpdate: number;
|
|
176
|
+
}
|
|
177
|
+
export interface ArbitrageOpportunity {
|
|
178
|
+
type: 'long' | 'short';
|
|
179
|
+
/** Profit rate (0.01 = 1%) */
|
|
180
|
+
profitRate: number;
|
|
181
|
+
/** Profit in percentage */
|
|
182
|
+
profitPercent: number;
|
|
183
|
+
/** Effective buy/sell prices */
|
|
184
|
+
effectivePrices: {
|
|
185
|
+
buyYes: number;
|
|
186
|
+
buyNo: number;
|
|
187
|
+
sellYes: number;
|
|
188
|
+
sellNo: number;
|
|
189
|
+
};
|
|
190
|
+
/** Maximum executable size based on orderbook depth */
|
|
191
|
+
maxOrderbookSize: number;
|
|
192
|
+
/** Maximum executable size based on balance */
|
|
193
|
+
maxBalanceSize: number;
|
|
194
|
+
/** Recommended trade size */
|
|
195
|
+
recommendedSize: number;
|
|
196
|
+
/** Estimated profit in USDC */
|
|
197
|
+
estimatedProfit: number;
|
|
198
|
+
/** Description */
|
|
199
|
+
description: string;
|
|
200
|
+
/** Timestamp */
|
|
201
|
+
timestamp: number;
|
|
202
|
+
}
|
|
203
|
+
export interface ArbitrageExecutionResult {
|
|
204
|
+
success: boolean;
|
|
205
|
+
type: 'long' | 'short';
|
|
206
|
+
size: number;
|
|
207
|
+
profit: number;
|
|
208
|
+
txHashes: string[];
|
|
209
|
+
error?: string;
|
|
210
|
+
executionTimeMs: number;
|
|
211
|
+
}
|
|
212
|
+
export interface ArbitrageServiceEvents {
|
|
213
|
+
opportunity: (opportunity: ArbitrageOpportunity) => void;
|
|
214
|
+
execution: (result: ArbitrageExecutionResult) => void;
|
|
215
|
+
balanceUpdate: (balance: BalanceState) => void;
|
|
216
|
+
orderbookUpdate: (orderbook: OrderbookState) => void;
|
|
217
|
+
rebalance: (result: RebalanceResult) => void;
|
|
218
|
+
settle: (result: SettleResult) => void;
|
|
219
|
+
error: (error: Error) => void;
|
|
220
|
+
started: (market: ArbitrageMarketConfig) => void;
|
|
221
|
+
stopped: () => void;
|
|
222
|
+
}
|
|
223
|
+
export declare class ArbitrageService extends EventEmitter {
|
|
224
|
+
private wsManager;
|
|
225
|
+
private ctf;
|
|
226
|
+
private tradingClient;
|
|
227
|
+
private rateLimiter;
|
|
228
|
+
private market;
|
|
229
|
+
private config;
|
|
230
|
+
private orderbook;
|
|
231
|
+
private balance;
|
|
232
|
+
private isExecuting;
|
|
233
|
+
private lastExecutionTime;
|
|
234
|
+
private lastRebalanceTime;
|
|
235
|
+
private balanceUpdateInterval;
|
|
236
|
+
private rebalanceInterval;
|
|
237
|
+
private isRunning;
|
|
238
|
+
private totalCapital;
|
|
239
|
+
private stats;
|
|
240
|
+
constructor(config?: ArbitrageServiceConfig);
|
|
241
|
+
/**
|
|
242
|
+
* Start monitoring a market for arbitrage opportunities
|
|
243
|
+
*/
|
|
244
|
+
start(market: ArbitrageMarketConfig): Promise<void>;
|
|
245
|
+
/**
|
|
246
|
+
* Stop monitoring
|
|
247
|
+
*/
|
|
248
|
+
stop(): Promise<void>;
|
|
249
|
+
/**
|
|
250
|
+
* Get current orderbook state
|
|
251
|
+
*/
|
|
252
|
+
getOrderbook(): OrderbookState;
|
|
253
|
+
/**
|
|
254
|
+
* Get current balance state
|
|
255
|
+
*/
|
|
256
|
+
getBalance(): BalanceState;
|
|
257
|
+
/**
|
|
258
|
+
* Get statistics
|
|
259
|
+
*/
|
|
260
|
+
getStats(): {
|
|
261
|
+
runningTimeMs: number;
|
|
262
|
+
opportunitiesDetected: number;
|
|
263
|
+
executionsAttempted: number;
|
|
264
|
+
executionsSucceeded: number;
|
|
265
|
+
totalProfit: number;
|
|
266
|
+
startTime: number;
|
|
267
|
+
};
|
|
268
|
+
/**
|
|
269
|
+
* Check for arbitrage opportunity based on current orderbook
|
|
270
|
+
*/
|
|
271
|
+
checkOpportunity(): ArbitrageOpportunity | null;
|
|
272
|
+
/**
|
|
273
|
+
* Manually execute an arbitrage opportunity
|
|
274
|
+
*/
|
|
275
|
+
execute(opportunity: ArbitrageOpportunity): Promise<ArbitrageExecutionResult>;
|
|
276
|
+
/**
|
|
277
|
+
* Calculate recommended rebalance action based on current state
|
|
278
|
+
*/
|
|
279
|
+
calculateRebalanceAction(): RebalanceAction;
|
|
280
|
+
/**
|
|
281
|
+
* Execute a rebalance action
|
|
282
|
+
*/
|
|
283
|
+
rebalance(action?: RebalanceAction): Promise<RebalanceResult>;
|
|
284
|
+
/**
|
|
285
|
+
* Settle a market position - merge paired tokens to recover USDC
|
|
286
|
+
* @param market Market to settle (defaults to current market)
|
|
287
|
+
* @param execute If true, execute the merge. If false, just return info.
|
|
288
|
+
*/
|
|
289
|
+
settlePosition(market?: ArbitrageMarketConfig, execute?: boolean): Promise<SettleResult>;
|
|
290
|
+
/**
|
|
291
|
+
* Settle multiple markets at once
|
|
292
|
+
*/
|
|
293
|
+
settleMultiple(markets: ArbitrageMarketConfig[], execute?: boolean): Promise<SettleResult[]>;
|
|
294
|
+
/**
|
|
295
|
+
* Clear all positions in a market using the best strategy
|
|
296
|
+
*
|
|
297
|
+
* Strategy:
|
|
298
|
+
* - Active market: Merge paired tokens → Sell remaining unpaired tokens
|
|
299
|
+
* - Resolved market: Redeem winning tokens
|
|
300
|
+
*
|
|
301
|
+
* @param market Market to clear positions from
|
|
302
|
+
* @param execute If true, execute the clearing. If false, just return info.
|
|
303
|
+
* @returns Result with all actions taken
|
|
304
|
+
*
|
|
305
|
+
* @example
|
|
306
|
+
* ```typescript
|
|
307
|
+
* const service = new ArbitrageService({ privateKey: '0x...' });
|
|
308
|
+
*
|
|
309
|
+
* // View clearing plan
|
|
310
|
+
* const plan = await service.clearPositions(market, false);
|
|
311
|
+
* console.log(`Will recover: $${plan.totalUsdcRecovered}`);
|
|
312
|
+
*
|
|
313
|
+
* // Execute clearing
|
|
314
|
+
* const result = await service.clearPositions(market, true);
|
|
315
|
+
* ```
|
|
316
|
+
*/
|
|
317
|
+
clearPositions(market: ArbitrageMarketConfig, execute?: boolean): Promise<ClearPositionResult>;
|
|
318
|
+
/**
|
|
319
|
+
* Clear positions from multiple markets
|
|
320
|
+
*
|
|
321
|
+
* @param markets Markets to clear
|
|
322
|
+
* @param execute If true, execute clearing
|
|
323
|
+
* @returns Results for all markets
|
|
324
|
+
*/
|
|
325
|
+
clearAllPositions(markets: ArbitrageMarketConfig[], execute?: boolean): Promise<ClearPositionResult[]>;
|
|
326
|
+
private handleBookUpdate;
|
|
327
|
+
private checkAndHandleOpportunity;
|
|
328
|
+
private checkAndRebalance;
|
|
329
|
+
/**
|
|
330
|
+
* Fix YES/NO imbalance immediately after partial execution
|
|
331
|
+
* This is critical when one side of a parallel order fails
|
|
332
|
+
*/
|
|
333
|
+
private fixImbalanceIfNeeded;
|
|
334
|
+
private updateBalance;
|
|
335
|
+
private executeLongArb;
|
|
336
|
+
private executeShortArb;
|
|
337
|
+
private log;
|
|
338
|
+
/**
|
|
339
|
+
* Scan markets for arbitrage opportunities
|
|
340
|
+
*
|
|
341
|
+
* @param criteria Filter criteria for markets
|
|
342
|
+
* @param minProfit Minimum profit threshold (default: 0.005 = 0.5%)
|
|
343
|
+
* @returns Array of scan results sorted by profit
|
|
344
|
+
*
|
|
345
|
+
* @example
|
|
346
|
+
* ```typescript
|
|
347
|
+
* const service = new ArbitrageService({ privateKey: '0x...' });
|
|
348
|
+
*
|
|
349
|
+
* // Scan markets with at least $5000 volume
|
|
350
|
+
* const results = await service.scanMarkets({ minVolume24h: 5000 }, 0.005);
|
|
351
|
+
*
|
|
352
|
+
* // Start arbitraging the best opportunity
|
|
353
|
+
* if (results.length > 0 && results[0].arbType !== 'none') {
|
|
354
|
+
* await service.start(results[0].market);
|
|
355
|
+
* }
|
|
356
|
+
* ```
|
|
357
|
+
*/
|
|
358
|
+
scanMarkets(criteria?: ScanCriteria, minProfit?: number): Promise<ScanResult[]>;
|
|
359
|
+
/**
|
|
360
|
+
* Quick scan for best arbitrage opportunities
|
|
361
|
+
*
|
|
362
|
+
* @param minProfit Minimum profit threshold (default: 0.005 = 0.5%)
|
|
363
|
+
* @param limit Maximum number of results to return (default: 10)
|
|
364
|
+
* @returns Top arbitrage opportunities
|
|
365
|
+
*
|
|
366
|
+
* @example
|
|
367
|
+
* ```typescript
|
|
368
|
+
* const service = new ArbitrageService({ privateKey: '0x...' });
|
|
369
|
+
*
|
|
370
|
+
* // Find best arbitrage opportunities
|
|
371
|
+
* const top = await service.quickScan(0.005, 5);
|
|
372
|
+
*
|
|
373
|
+
* // Print results
|
|
374
|
+
* for (const r of top) {
|
|
375
|
+
* console.log(`${r.market.name}: ${r.arbType} +${r.profitPercent.toFixed(2)}%`);
|
|
376
|
+
* }
|
|
377
|
+
*
|
|
378
|
+
* // Start the best one
|
|
379
|
+
* if (top.length > 0) {
|
|
380
|
+
* await service.start(top[0].market);
|
|
381
|
+
* }
|
|
382
|
+
* ```
|
|
383
|
+
*/
|
|
384
|
+
quickScan(minProfit?: number, limit?: number): Promise<ScanResult[]>;
|
|
385
|
+
/**
|
|
386
|
+
* Find and start arbitraging the best opportunity
|
|
387
|
+
*
|
|
388
|
+
* @param minProfit Minimum profit threshold (default: 0.005 = 0.5%)
|
|
389
|
+
* @returns The scan result that was started, or null if none found
|
|
390
|
+
*
|
|
391
|
+
* @example
|
|
392
|
+
* ```typescript
|
|
393
|
+
* const service = new ArbitrageService({
|
|
394
|
+
* privateKey: '0x...',
|
|
395
|
+
* autoExecute: true,
|
|
396
|
+
* profitThreshold: 0.005,
|
|
397
|
+
* });
|
|
398
|
+
*
|
|
399
|
+
* // Find and start the best opportunity
|
|
400
|
+
* const started = await service.findAndStart(0.005);
|
|
401
|
+
* if (started) {
|
|
402
|
+
* console.log(`Started: ${started.market.name} (+${started.profitPercent.toFixed(2)}%)`);
|
|
403
|
+
* }
|
|
404
|
+
* ```
|
|
405
|
+
*/
|
|
406
|
+
findAndStart(minProfit?: number): Promise<ScanResult | null>;
|
|
407
|
+
}
|
|
408
|
+
//# sourceMappingURL=arbitrage-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arbitrage-service.d.ts","sourceRoot":"","sources":["../../src/services/arbitrage-service.ts"],"names":[],"mappings":"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"}
|