@clonegod/ttd-sui-common 1.0.68 → 1.0.70
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/dist/grpc/grpc-connection.js +15 -6
- package/dist/test/test_grpc.js +12 -2
- package/dist/trade/parse/sui_tx_parser.js +0 -13
- package/dist/trade/test/test_parse_sui_tx_result.js +24 -24
- package/package.json +1 -1
- package/dist/rpc/account-api.d.ts +0 -14
- package/dist/rpc/account-api.js +0 -113
- package/dist/rpc/coin-api.d.ts +0 -0
- package/dist/rpc/coin-api.js +0 -0
- package/dist/rpc/rpc-connection.d.ts +0 -8
- package/dist/rpc/rpc-connection.js +0 -54
- package/dist/test/test_checkpoint_processor.d.ts +0 -1
- package/dist/test/test_checkpoint_processor.js +0 -112
- package/dist/test/test_checkpoint_subscription.d.ts +0 -1
- package/dist/test/test_checkpoint_subscription.js +0 -132
- package/dist/test/test_checkpoint_with_schema.d.ts +0 -1
- package/dist/test/test_checkpoint_with_schema.js +0 -250
- package/dist/test/test_dynamic_bcs.d.ts +0 -1
- package/dist/test/test_dynamic_bcs.js +0 -82
- package/dist/test/test_github_extractor.d.ts +0 -1
- package/dist/test/test_github_extractor.js +0 -69
- package/dist/test/test_hybrid_bcs.d.ts +0 -1
- package/dist/test/test_hybrid_bcs.js +0 -98
- package/dist/test/test_momentum_events.d.ts +0 -1
- package/dist/test/test_momentum_events.js +0 -113
- package/dist/test/test_rpc.d.ts +0 -1
- package/dist/test/test_rpc.js +0 -34
- package/dist/test/test_schema_database.d.ts +0 -1
- package/dist/test/test_schema_database.js +0 -91
- package/dist/test/test_simple_schema.d.ts +0 -1
- package/dist/test/test_simple_schema.js +0 -78
- package/dist/test/test_single_momentum_event.d.ts +0 -1
- package/dist/test/test_single_momentum_event.js +0 -44
- package/dist/ttd-sui-common/src/constants/index.d.ts +0 -4
- package/dist/ttd-sui-common/src/constants/index.js +0 -8
- package/dist/ttd-sui-common/src/grpc/gas-price-cache.d.ts +0 -21
- package/dist/ttd-sui-common/src/grpc/gas-price-cache.js +0 -83
- package/dist/ttd-sui-common/src/grpc/grpc-connection.d.ts +0 -13
- package/dist/ttd-sui-common/src/grpc/grpc-connection.js +0 -99
- package/dist/ttd-sui-common/src/grpc/index.d.ts +0 -7
- package/dist/ttd-sui-common/src/grpc/index.js +0 -17
- package/dist/ttd-sui-common/src/grpc/ledger-service.d.ts +0 -12
- package/dist/ttd-sui-common/src/grpc/ledger-service.js +0 -161
- package/dist/ttd-sui-common/src/grpc/live-data-service.d.ts +0 -10
- package/dist/ttd-sui-common/src/grpc/live-data-service.js +0 -107
- package/dist/ttd-sui-common/src/grpc/subscription-service.d.ts +0 -7
- package/dist/ttd-sui-common/src/grpc/subscription-service.js +0 -69
- package/dist/ttd-sui-common/src/grpc/sui-grpc-client.d.ts +0 -16
- package/dist/ttd-sui-common/src/grpc/sui-grpc-client.js +0 -38
- package/dist/ttd-sui-common/src/grpc/transaction-service.d.ts +0 -7
- package/dist/ttd-sui-common/src/grpc/transaction-service.js +0 -49
- package/dist/ttd-sui-common/src/index.d.ts +0 -9
- package/dist/ttd-sui-common/src/index.js +0 -25
- package/dist/ttd-sui-common/src/quote/index.d.ts +0 -1
- package/dist/ttd-sui-common/src/quote/index.js +0 -17
- package/dist/ttd-sui-common/src/quote/pricing/index.d.ts +0 -1
- package/dist/ttd-sui-common/src/quote/pricing/index.js +0 -17
- package/dist/ttd-sui-common/src/quote/pricing/token_price_cache.d.ts +0 -9
- package/dist/ttd-sui-common/src/quote/pricing/token_price_cache.js +0 -42
- package/dist/ttd-sui-common/src/redis/index.d.ts +0 -1
- package/dist/ttd-sui-common/src/redis/index.js +0 -17
- package/dist/ttd-sui-common/src/redis/redis_client.d.ts +0 -21
- package/dist/ttd-sui-common/src/redis/redis_client.js +0 -155
- package/dist/ttd-sui-common/src/test/test.d.ts +0 -1
- package/dist/ttd-sui-common/src/test/test.js +0 -126
- package/dist/ttd-sui-common/src/test/test_checkpoint.d.ts +0 -1
- package/dist/ttd-sui-common/src/test/test_checkpoint.js +0 -64
- package/dist/ttd-sui-common/src/test/test_grpc.d.ts +0 -1
- package/dist/ttd-sui-common/src/test/test_grpc.js +0 -84
- package/dist/ttd-sui-common/src/trade/abstract_sui_dex_trade_plus.d.ts +0 -32
- package/dist/ttd-sui-common/src/trade/abstract_sui_dex_trade_plus.js +0 -216
- package/dist/ttd-sui-common/src/trade/check/index.d.ts +0 -1
- package/dist/ttd-sui-common/src/trade/check/index.js +0 -5
- package/dist/ttd-sui-common/src/trade/check/tx_result_checker.d.ts +0 -13
- package/dist/ttd-sui-common/src/trade/check/tx_result_checker.js +0 -111
- package/dist/ttd-sui-common/src/trade/index.d.ts +0 -4
- package/dist/ttd-sui-common/src/trade/index.js +0 -20
- package/dist/ttd-sui-common/src/trade/parse/index.d.ts +0 -1
- package/dist/ttd-sui-common/src/trade/parse/index.js +0 -5
- package/dist/ttd-sui-common/src/trade/parse/sui_tx_parser.d.ts +0 -13
- package/dist/ttd-sui-common/src/trade/parse/sui_tx_parser.js +0 -167
- package/dist/ttd-sui-common/src/trade/send_tx/index.d.ts +0 -10
- package/dist/ttd-sui-common/src/trade/send_tx/index.js +0 -48
- package/dist/ttd-sui-common/src/trade/test/test_parse_sui_tx_result.d.ts +0 -1
- package/dist/ttd-sui-common/src/trade/test/test_parse_sui_tx_result.js +0 -105
- package/dist/ttd-sui-common/src/type/index.d.ts +0 -18
- package/dist/ttd-sui-common/src/type/index.js +0 -2
- package/dist/ttd-sui-common/src/utils/checkpoint_parse.d.ts +0 -0
- package/dist/ttd-sui-common/src/utils/checkpoint_parse.js +0 -0
- package/dist/ttd-sui-common/src/utils/decode.d.ts +0 -2
- package/dist/ttd-sui-common/src/utils/decode.js +0 -43
- package/dist/ttd-sui-common/src/utils/format.d.ts +0 -1
- package/dist/ttd-sui-common/src/utils/format.js +0 -18
- package/dist/ttd-sui-common/src/utils/index.d.ts +0 -2
- package/dist/ttd-sui-common/src/utils/index.js +0 -18
- package/dist/ttd-sui-market-data/src/sui_objects/config_manager.d.ts +0 -22
- package/dist/ttd-sui-market-data/src/sui_objects/config_manager.js +0 -169
- package/dist/ttd-sui-market-data/src/sui_objects/example.d.ts +0 -1
- package/dist/ttd-sui-market-data/src/sui_objects/example.js +0 -72
- package/dist/ttd-sui-market-data/src/sui_objects/index.d.ts +0 -6
- package/dist/ttd-sui-market-data/src/sui_objects/index.js +0 -15
- package/dist/ttd-sui-market-data/src/sui_objects/object_mgt.d.ts +0 -47
- package/dist/ttd-sui-market-data/src/sui_objects/object_mgt.js +0 -483
- package/dist/ttd-sui-market-data/src/sui_objects/types.d.ts +0 -60
- package/dist/ttd-sui-market-data/src/sui_objects/types.js +0 -24
- package/dist/ttd-sui-market-data/src/sui_objects/version_checker.d.ts +0 -30
- package/dist/ttd-sui-market-data/src/sui_objects/version_checker.js +0 -207
- package/dist/utils/bcs-parser.d.ts +0 -8
- package/dist/utils/bcs-parser.js +0 -121
- package/dist/utils/checkpoint-processor.d.ts +0 -7
- package/dist/utils/checkpoint-processor.js +0 -123
- package/dist/utils/checkpoint.d.ts +0 -7
- package/dist/utils/checkpoint.js +0 -26
- package/dist/utils/dex-parser-manager.d.ts +0 -7
- package/dist/utils/dex-parser-manager.js +0 -138
- package/dist/utils/dex_event_parser.d.ts +0 -34
- package/dist/utils/dex_event_parser.js +0 -132
- package/dist/utils/dex_schema_database.d.ts +0 -206
- package/dist/utils/dex_schema_database.js +0 -169
- package/dist/utils/dynamic_bcs_parser.d.ts +0 -21
- package/dist/utils/dynamic_bcs_parser.js +0 -166
- package/dist/utils/github_schema_extractor.d.ts +0 -20
- package/dist/utils/github_schema_extractor.js +0 -153
- package/dist/utils/hybrid_bcs_parser.d.ts +0 -22
- package/dist/utils/hybrid_bcs_parser.js +0 -194
- package/dist/utils/simple_schema_parser.d.ts +0 -76
- package/dist/utils/simple_schema_parser.js +0 -193
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DexEventParser = void 0;
|
|
4
|
-
class DexEventParser {
|
|
5
|
-
static parseCheckpointEvents(transactions) {
|
|
6
|
-
const dexEvents = [];
|
|
7
|
-
transactions.forEach((transaction, txIndex) => {
|
|
8
|
-
const events = this.extractEventsFromTransaction(transaction, txIndex);
|
|
9
|
-
dexEvents.push(...events);
|
|
10
|
-
});
|
|
11
|
-
return dexEvents;
|
|
12
|
-
}
|
|
13
|
-
static extractEventsFromTransaction(transaction, txIndex) {
|
|
14
|
-
const events = [];
|
|
15
|
-
if (transaction.events && transaction.events.events) {
|
|
16
|
-
transaction.events.events.forEach((event, eventIndex) => {
|
|
17
|
-
const eventInfo = this.parseSingleEvent(event, txIndex, eventIndex);
|
|
18
|
-
if (eventInfo) {
|
|
19
|
-
events.push(eventInfo);
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
return events;
|
|
24
|
-
}
|
|
25
|
-
static parseSingleEvent(event, txIndex, eventIndex) {
|
|
26
|
-
try {
|
|
27
|
-
const packageId = this.extractPackageId(event);
|
|
28
|
-
const dexName = this.getDexName(packageId);
|
|
29
|
-
const eventName = this.extractEventName(event.event_type);
|
|
30
|
-
const module = event.module || 'Unknown';
|
|
31
|
-
const sender = event.sender || 'Unknown';
|
|
32
|
-
return {
|
|
33
|
-
txIndex: txIndex,
|
|
34
|
-
eventIndex: eventIndex,
|
|
35
|
-
dexName: dexName,
|
|
36
|
-
packageId: packageId,
|
|
37
|
-
eventType: event.event_type || 'Unknown',
|
|
38
|
-
eventName: eventName,
|
|
39
|
-
module: module,
|
|
40
|
-
sender: sender,
|
|
41
|
-
hasContent: !!(event.contents && event.contents.value),
|
|
42
|
-
contents: event.contents
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
console.error('解析事件失败:', error);
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
static extractPackageId(event) {
|
|
51
|
-
if (event.package_id) {
|
|
52
|
-
return event.package_id;
|
|
53
|
-
}
|
|
54
|
-
if (event.event_type) {
|
|
55
|
-
return this.extractPackageFromEventType(event.event_type);
|
|
56
|
-
}
|
|
57
|
-
return 'unknown';
|
|
58
|
-
}
|
|
59
|
-
static extractPackageFromEventType(eventType) {
|
|
60
|
-
if (!eventType)
|
|
61
|
-
return 'unknown';
|
|
62
|
-
const parts = eventType.split('::');
|
|
63
|
-
if (parts.length >= 1 && parts[0].startsWith('0x')) {
|
|
64
|
-
return parts[0];
|
|
65
|
-
}
|
|
66
|
-
return 'unknown';
|
|
67
|
-
}
|
|
68
|
-
static getDexName(packageId) {
|
|
69
|
-
return this.DEX_PACKAGES[packageId] || 'Unknown DEX';
|
|
70
|
-
}
|
|
71
|
-
static extractEventName(eventType) {
|
|
72
|
-
if (!eventType)
|
|
73
|
-
return 'Unknown';
|
|
74
|
-
const parts = eventType.split('::');
|
|
75
|
-
return parts[parts.length - 1] || 'Unknown';
|
|
76
|
-
}
|
|
77
|
-
static generateStats(events) {
|
|
78
|
-
const dexStats = {};
|
|
79
|
-
const eventTypeStats = {};
|
|
80
|
-
events.forEach(event => {
|
|
81
|
-
dexStats[event.dexName] = (dexStats[event.dexName] || 0) + 1;
|
|
82
|
-
eventTypeStats[event.eventName] = (eventTypeStats[event.eventName] || 0) + 1;
|
|
83
|
-
});
|
|
84
|
-
return {
|
|
85
|
-
totalEvents: events.length,
|
|
86
|
-
dexStats: dexStats,
|
|
87
|
-
eventTypeStats: eventTypeStats
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
static printStats(events, checkpointId) {
|
|
91
|
-
const stats = this.generateStats(events);
|
|
92
|
-
console.log(`\n=== Checkpoint ${checkpointId} DEX 事件统计 ===`);
|
|
93
|
-
console.log(`总事件数: ${stats.totalEvents}`);
|
|
94
|
-
if (stats.totalEvents > 0) {
|
|
95
|
-
console.log('\n=== DEX 统计 ===');
|
|
96
|
-
Object.entries(stats.dexStats).forEach(([dex, count]) => {
|
|
97
|
-
console.log(`${dex}: ${count} 个事件`);
|
|
98
|
-
});
|
|
99
|
-
console.log('\n=== 事件类型统计 ===');
|
|
100
|
-
Object.entries(stats.eventTypeStats).forEach(([eventType, count]) => {
|
|
101
|
-
console.log(`${eventType}: ${count} 个事件`);
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
static printEventDetails(events) {
|
|
106
|
-
if (events.length === 0) {
|
|
107
|
-
console.log('没有找到 DEX 事件');
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
console.log('\n=== DEX 事件详情 ===');
|
|
111
|
-
events.forEach((event, index) => {
|
|
112
|
-
console.log(`事件 ${index + 1}:`);
|
|
113
|
-
console.log(` 交易索引: ${event.txIndex}`);
|
|
114
|
-
console.log(` 事件索引: ${event.eventIndex}`);
|
|
115
|
-
console.log(` DEX: ${event.dexName}`);
|
|
116
|
-
console.log(` 包地址: ${event.packageId}`);
|
|
117
|
-
console.log(` 模块: ${event.module}`);
|
|
118
|
-
console.log(` 事件名称: ${event.eventName}`);
|
|
119
|
-
console.log(` 发送者: ${event.sender}`);
|
|
120
|
-
console.log(` 有内容数据: ${event.hasContent}`);
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
exports.DexEventParser = DexEventParser;
|
|
125
|
-
DexEventParser.DEX_PACKAGES = {
|
|
126
|
-
'0x1eabed72c53feb3805120a081dc15963c204dc8d091542592abaf7a35689b2fb': 'Cetus',
|
|
127
|
-
'0x70285592c97965e811e0c6f98dccc3a9c2b4ad854b3594faab9597ada267b860': 'Momentum CLMM',
|
|
128
|
-
'0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267': 'Turbos Finance',
|
|
129
|
-
'0xf1962ddb76a7f9968b4e597278d3cc717a00620cc421b00e3429c5c071eba26a': 'Turbos Finance',
|
|
130
|
-
'0x53134eb544c5a0b5085e99efaf7eab13b28ad123de35d61f941f8c8c40b72033': 'Tradeport',
|
|
131
|
-
'0x67b34b728c4e28e704dcfecf7c5cf55c7fc593b6c65c20d1836d97c209c1928a': 'Unknown DEX'
|
|
132
|
-
};
|
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
export declare const DEX_SCHEMA_DATABASE: {
|
|
2
|
-
'0x70285592c97965e811e0c6f98dccc3a9c2b4ad854b3594faab9597ada267b860': {
|
|
3
|
-
name: string;
|
|
4
|
-
source: string;
|
|
5
|
-
events: {
|
|
6
|
-
SwapEvent: {
|
|
7
|
-
pool_id: string;
|
|
8
|
-
token_in: string;
|
|
9
|
-
token_out: string;
|
|
10
|
-
amount_in: string;
|
|
11
|
-
amount_out: string;
|
|
12
|
-
fee: string;
|
|
13
|
-
};
|
|
14
|
-
RepayFlashSwapEvent: {
|
|
15
|
-
pool_id: string;
|
|
16
|
-
token_borrowed: string;
|
|
17
|
-
amount_borrowed: string;
|
|
18
|
-
token_repaid: string;
|
|
19
|
-
amount_repaid: string;
|
|
20
|
-
fee: string;
|
|
21
|
-
};
|
|
22
|
-
AddLiquidityEvent: {
|
|
23
|
-
pool_id: string;
|
|
24
|
-
liquidity: string;
|
|
25
|
-
amount_a: string;
|
|
26
|
-
amount_b: string;
|
|
27
|
-
};
|
|
28
|
-
RemoveLiquidityEvent: {
|
|
29
|
-
pool_id: string;
|
|
30
|
-
liquidity: string;
|
|
31
|
-
amount_a: string;
|
|
32
|
-
amount_b: string;
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
};
|
|
36
|
-
'0x1eabed72c53feb3805120a081dc15963c204dc8d091542592abaf7a35689b2fb': {
|
|
37
|
-
name: string;
|
|
38
|
-
source: string;
|
|
39
|
-
events: {
|
|
40
|
-
SwapEvent: {
|
|
41
|
-
pool_id: string;
|
|
42
|
-
token_in: string;
|
|
43
|
-
token_out: string;
|
|
44
|
-
amount_in: string;
|
|
45
|
-
amount_out: string;
|
|
46
|
-
fee: string;
|
|
47
|
-
};
|
|
48
|
-
AddLiquidityEvent: {
|
|
49
|
-
pool_id: string;
|
|
50
|
-
liquidity: string;
|
|
51
|
-
amount_a: string;
|
|
52
|
-
amount_b: string;
|
|
53
|
-
};
|
|
54
|
-
RemoveLiquidityEvent: {
|
|
55
|
-
pool_id: string;
|
|
56
|
-
liquidity: string;
|
|
57
|
-
amount_a: string;
|
|
58
|
-
amount_b: string;
|
|
59
|
-
};
|
|
60
|
-
};
|
|
61
|
-
};
|
|
62
|
-
'0x5c45d10c26c5fb53f332c6be5c8c6b6b8b9e6b6b8b9e6b6b8b9e6b6b8b9e6b6b': {
|
|
63
|
-
name: string;
|
|
64
|
-
source: string;
|
|
65
|
-
events: {
|
|
66
|
-
SwapEvent: {
|
|
67
|
-
pool_id: string;
|
|
68
|
-
token_in: string;
|
|
69
|
-
token_out: string;
|
|
70
|
-
amount_in: string;
|
|
71
|
-
amount_out: string;
|
|
72
|
-
fee: string;
|
|
73
|
-
};
|
|
74
|
-
};
|
|
75
|
-
};
|
|
76
|
-
'0xcaf6ba059d539a97646d47f0b9ddf843e138d215e2a12ca1f4585d386f7aec3a': {
|
|
77
|
-
name: string;
|
|
78
|
-
source: string;
|
|
79
|
-
events: {
|
|
80
|
-
OrderPlaced: {
|
|
81
|
-
order_id: string;
|
|
82
|
-
user: string;
|
|
83
|
-
amount: string;
|
|
84
|
-
price: string;
|
|
85
|
-
side: string;
|
|
86
|
-
};
|
|
87
|
-
OrderInfo: {
|
|
88
|
-
order_id: string;
|
|
89
|
-
user: string;
|
|
90
|
-
amount: string;
|
|
91
|
-
price: string;
|
|
92
|
-
side: string;
|
|
93
|
-
status: string;
|
|
94
|
-
};
|
|
95
|
-
};
|
|
96
|
-
};
|
|
97
|
-
};
|
|
98
|
-
export declare class DexSchemaDatabase {
|
|
99
|
-
getDexInfo(packageId: string): any;
|
|
100
|
-
getEventSchema(packageId: string, eventName: string): any;
|
|
101
|
-
isSupported(packageId: string): boolean;
|
|
102
|
-
getSupportedPackages(): string[];
|
|
103
|
-
getAllDexInfo(): {
|
|
104
|
-
'0x70285592c97965e811e0c6f98dccc3a9c2b4ad854b3594faab9597ada267b860': {
|
|
105
|
-
name: string;
|
|
106
|
-
source: string;
|
|
107
|
-
events: {
|
|
108
|
-
SwapEvent: {
|
|
109
|
-
pool_id: string;
|
|
110
|
-
token_in: string;
|
|
111
|
-
token_out: string;
|
|
112
|
-
amount_in: string;
|
|
113
|
-
amount_out: string;
|
|
114
|
-
fee: string;
|
|
115
|
-
};
|
|
116
|
-
RepayFlashSwapEvent: {
|
|
117
|
-
pool_id: string;
|
|
118
|
-
token_borrowed: string;
|
|
119
|
-
amount_borrowed: string;
|
|
120
|
-
token_repaid: string;
|
|
121
|
-
amount_repaid: string;
|
|
122
|
-
fee: string;
|
|
123
|
-
};
|
|
124
|
-
AddLiquidityEvent: {
|
|
125
|
-
pool_id: string;
|
|
126
|
-
liquidity: string;
|
|
127
|
-
amount_a: string;
|
|
128
|
-
amount_b: string;
|
|
129
|
-
};
|
|
130
|
-
RemoveLiquidityEvent: {
|
|
131
|
-
pool_id: string;
|
|
132
|
-
liquidity: string;
|
|
133
|
-
amount_a: string;
|
|
134
|
-
amount_b: string;
|
|
135
|
-
};
|
|
136
|
-
};
|
|
137
|
-
};
|
|
138
|
-
'0x1eabed72c53feb3805120a081dc15963c204dc8d091542592abaf7a35689b2fb': {
|
|
139
|
-
name: string;
|
|
140
|
-
source: string;
|
|
141
|
-
events: {
|
|
142
|
-
SwapEvent: {
|
|
143
|
-
pool_id: string;
|
|
144
|
-
token_in: string;
|
|
145
|
-
token_out: string;
|
|
146
|
-
amount_in: string;
|
|
147
|
-
amount_out: string;
|
|
148
|
-
fee: string;
|
|
149
|
-
};
|
|
150
|
-
AddLiquidityEvent: {
|
|
151
|
-
pool_id: string;
|
|
152
|
-
liquidity: string;
|
|
153
|
-
amount_a: string;
|
|
154
|
-
amount_b: string;
|
|
155
|
-
};
|
|
156
|
-
RemoveLiquidityEvent: {
|
|
157
|
-
pool_id: string;
|
|
158
|
-
liquidity: string;
|
|
159
|
-
amount_a: string;
|
|
160
|
-
amount_b: string;
|
|
161
|
-
};
|
|
162
|
-
};
|
|
163
|
-
};
|
|
164
|
-
'0x5c45d10c26c5fb53f332c6be5c8c6b6b8b9e6b6b8b9e6b6b8b9e6b6b8b9e6b6b': {
|
|
165
|
-
name: string;
|
|
166
|
-
source: string;
|
|
167
|
-
events: {
|
|
168
|
-
SwapEvent: {
|
|
169
|
-
pool_id: string;
|
|
170
|
-
token_in: string;
|
|
171
|
-
token_out: string;
|
|
172
|
-
amount_in: string;
|
|
173
|
-
amount_out: string;
|
|
174
|
-
fee: string;
|
|
175
|
-
};
|
|
176
|
-
};
|
|
177
|
-
};
|
|
178
|
-
'0xcaf6ba059d539a97646d47f0b9ddf843e138d215e2a12ca1f4585d386f7aec3a': {
|
|
179
|
-
name: string;
|
|
180
|
-
source: string;
|
|
181
|
-
events: {
|
|
182
|
-
OrderPlaced: {
|
|
183
|
-
order_id: string;
|
|
184
|
-
user: string;
|
|
185
|
-
amount: string;
|
|
186
|
-
price: string;
|
|
187
|
-
side: string;
|
|
188
|
-
};
|
|
189
|
-
OrderInfo: {
|
|
190
|
-
order_id: string;
|
|
191
|
-
user: string;
|
|
192
|
-
amount: string;
|
|
193
|
-
price: string;
|
|
194
|
-
side: string;
|
|
195
|
-
status: string;
|
|
196
|
-
};
|
|
197
|
-
};
|
|
198
|
-
};
|
|
199
|
-
};
|
|
200
|
-
addDexSchema(packageId: string, name: string, source: string, events: any): void;
|
|
201
|
-
addEventSchema(packageId: string, eventName: string, schema: any): void;
|
|
202
|
-
generateTypeScriptCode(): string;
|
|
203
|
-
exportToJSON(): string;
|
|
204
|
-
importFromJSON(json: string): void;
|
|
205
|
-
}
|
|
206
|
-
export declare const createSchemaDatabase: () => DexSchemaDatabase;
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createSchemaDatabase = exports.DexSchemaDatabase = exports.DEX_SCHEMA_DATABASE = void 0;
|
|
4
|
-
exports.DEX_SCHEMA_DATABASE = {
|
|
5
|
-
'0x70285592c97965e811e0c6f98dccc3a9c2b4ad854b3594faab9597ada267b860': {
|
|
6
|
-
name: 'Momentum CLMM',
|
|
7
|
-
source: 'https://github.com/mmt-finance/clmm-sdk',
|
|
8
|
-
events: {
|
|
9
|
-
'SwapEvent': {
|
|
10
|
-
pool_id: 'address',
|
|
11
|
-
token_in: 'address',
|
|
12
|
-
token_out: 'address',
|
|
13
|
-
amount_in: 'u64',
|
|
14
|
-
amount_out: 'u64',
|
|
15
|
-
fee: 'u64'
|
|
16
|
-
},
|
|
17
|
-
'RepayFlashSwapEvent': {
|
|
18
|
-
pool_id: 'address',
|
|
19
|
-
token_borrowed: 'address',
|
|
20
|
-
amount_borrowed: 'u64',
|
|
21
|
-
token_repaid: 'address',
|
|
22
|
-
amount_repaid: 'u64',
|
|
23
|
-
fee: 'u64'
|
|
24
|
-
},
|
|
25
|
-
'AddLiquidityEvent': {
|
|
26
|
-
pool_id: 'address',
|
|
27
|
-
liquidity: 'u128',
|
|
28
|
-
amount_a: 'u64',
|
|
29
|
-
amount_b: 'u64'
|
|
30
|
-
},
|
|
31
|
-
'RemoveLiquidityEvent': {
|
|
32
|
-
pool_id: 'address',
|
|
33
|
-
liquidity: 'u128',
|
|
34
|
-
amount_a: 'u64',
|
|
35
|
-
amount_b: 'u64'
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
'0x1eabed72c53feb3805120a081dc15963c204dc8d091542592abaf7a35689b2fb': {
|
|
40
|
-
name: 'Cetus CLMM',
|
|
41
|
-
source: 'https://github.com/CetusProtocol/cetus-clmm',
|
|
42
|
-
events: {
|
|
43
|
-
'SwapEvent': {
|
|
44
|
-
pool_id: 'address',
|
|
45
|
-
token_in: 'address',
|
|
46
|
-
token_out: 'address',
|
|
47
|
-
amount_in: 'u64',
|
|
48
|
-
amount_out: 'u64',
|
|
49
|
-
fee: 'u64'
|
|
50
|
-
},
|
|
51
|
-
'AddLiquidityEvent': {
|
|
52
|
-
pool_id: 'address',
|
|
53
|
-
liquidity: 'u128',
|
|
54
|
-
amount_a: 'u64',
|
|
55
|
-
amount_b: 'u64'
|
|
56
|
-
},
|
|
57
|
-
'RemoveLiquidityEvent': {
|
|
58
|
-
pool_id: 'address',
|
|
59
|
-
liquidity: 'u128',
|
|
60
|
-
amount_a: 'u64',
|
|
61
|
-
amount_b: 'u64'
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
},
|
|
65
|
-
'0x5c45d10c26c5fb53f332c6be5c8c6b6b8b9e6b6b8b9e6b6b8b9e6b6b8b9e6b6b': {
|
|
66
|
-
name: 'Turbos Finance',
|
|
67
|
-
source: 'https://github.com/turbos-finance',
|
|
68
|
-
events: {
|
|
69
|
-
'SwapEvent': {
|
|
70
|
-
pool_id: 'address',
|
|
71
|
-
token_in: 'address',
|
|
72
|
-
token_out: 'address',
|
|
73
|
-
amount_in: 'u64',
|
|
74
|
-
amount_out: 'u64',
|
|
75
|
-
fee: 'u64'
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
'0xcaf6ba059d539a97646d47f0b9ddf843e138d215e2a12ca1f4585d386f7aec3a': {
|
|
80
|
-
name: 'Order Book DEX',
|
|
81
|
-
source: 'discovered from checkpoint',
|
|
82
|
-
events: {
|
|
83
|
-
'OrderPlaced': {
|
|
84
|
-
order_id: 'address',
|
|
85
|
-
user: 'address',
|
|
86
|
-
amount: 'u64',
|
|
87
|
-
price: 'u64',
|
|
88
|
-
side: 'u8'
|
|
89
|
-
},
|
|
90
|
-
'OrderInfo': {
|
|
91
|
-
order_id: 'address',
|
|
92
|
-
user: 'address',
|
|
93
|
-
amount: 'u64',
|
|
94
|
-
price: 'u64',
|
|
95
|
-
side: 'u8',
|
|
96
|
-
status: 'u8'
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
class DexSchemaDatabase {
|
|
102
|
-
getDexInfo(packageId) {
|
|
103
|
-
return exports.DEX_SCHEMA_DATABASE[packageId];
|
|
104
|
-
}
|
|
105
|
-
getEventSchema(packageId, eventName) {
|
|
106
|
-
var _a;
|
|
107
|
-
const dexInfo = this.getDexInfo(packageId);
|
|
108
|
-
return ((_a = dexInfo === null || dexInfo === void 0 ? void 0 : dexInfo.events) === null || _a === void 0 ? void 0 : _a[eventName]) || null;
|
|
109
|
-
}
|
|
110
|
-
isSupported(packageId) {
|
|
111
|
-
return !!exports.DEX_SCHEMA_DATABASE[packageId];
|
|
112
|
-
}
|
|
113
|
-
getSupportedPackages() {
|
|
114
|
-
return Object.keys(exports.DEX_SCHEMA_DATABASE);
|
|
115
|
-
}
|
|
116
|
-
getAllDexInfo() {
|
|
117
|
-
return exports.DEX_SCHEMA_DATABASE;
|
|
118
|
-
}
|
|
119
|
-
addDexSchema(packageId, name, source, events) {
|
|
120
|
-
exports.DEX_SCHEMA_DATABASE[packageId] = {
|
|
121
|
-
name,
|
|
122
|
-
source,
|
|
123
|
-
events
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
addEventSchema(packageId, eventName, schema) {
|
|
127
|
-
if (!exports.DEX_SCHEMA_DATABASE[packageId]) {
|
|
128
|
-
console.warn(`DEX ${packageId} 不存在,请先添加 DEX 信息`);
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
if (!exports.DEX_SCHEMA_DATABASE[packageId].events) {
|
|
132
|
-
exports.DEX_SCHEMA_DATABASE[packageId].events = {};
|
|
133
|
-
}
|
|
134
|
-
exports.DEX_SCHEMA_DATABASE[packageId].events[eventName] = schema;
|
|
135
|
-
}
|
|
136
|
-
generateTypeScriptCode() {
|
|
137
|
-
let code = '// 自动生成的 DEX Schema 数据库\n';
|
|
138
|
-
code += 'export const DEX_SCHEMA_DATABASE = {\n';
|
|
139
|
-
for (const [packageId, dexInfo] of Object.entries(exports.DEX_SCHEMA_DATABASE)) {
|
|
140
|
-
code += ` '${packageId}': {\n`;
|
|
141
|
-
code += ` name: '${dexInfo.name}',\n`;
|
|
142
|
-
code += ` source: '${dexInfo.source}',\n`;
|
|
143
|
-
code += ` events: {\n`;
|
|
144
|
-
for (const [eventName, fields] of Object.entries(dexInfo.events)) {
|
|
145
|
-
code += ` '${eventName}': {\n`;
|
|
146
|
-
for (const [fieldName, fieldType] of Object.entries(fields)) {
|
|
147
|
-
code += ` ${fieldName}: '${fieldType}',\n`;
|
|
148
|
-
}
|
|
149
|
-
code += ` },\n`;
|
|
150
|
-
}
|
|
151
|
-
code += ` }\n`;
|
|
152
|
-
code += ` },\n`;
|
|
153
|
-
}
|
|
154
|
-
code += '};\n';
|
|
155
|
-
return code;
|
|
156
|
-
}
|
|
157
|
-
exportToJSON() {
|
|
158
|
-
return JSON.stringify(exports.DEX_SCHEMA_DATABASE, null, 2);
|
|
159
|
-
}
|
|
160
|
-
importFromJSON(json) {
|
|
161
|
-
const data = JSON.parse(json);
|
|
162
|
-
Object.assign(exports.DEX_SCHEMA_DATABASE, data);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
exports.DexSchemaDatabase = DexSchemaDatabase;
|
|
166
|
-
const createSchemaDatabase = () => {
|
|
167
|
-
return new DexSchemaDatabase();
|
|
168
|
-
};
|
|
169
|
-
exports.createSchemaDatabase = createSchemaDatabase;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { SuiClient } from '@mysten/sui/client';
|
|
2
|
-
export declare class DynamicBCSParser {
|
|
3
|
-
private schemaCache;
|
|
4
|
-
private suiClient;
|
|
5
|
-
constructor(suiClient: SuiClient);
|
|
6
|
-
parseEvent(event: any): Promise<{
|
|
7
|
-
[x: string]: unknown;
|
|
8
|
-
}>;
|
|
9
|
-
private extractEventInfo;
|
|
10
|
-
private getSchemas;
|
|
11
|
-
private fetchSchemasFromChain;
|
|
12
|
-
private extractSchemaFromPackage;
|
|
13
|
-
private parseStructToBCSSchema;
|
|
14
|
-
private mapMoveTypeToBCS;
|
|
15
|
-
private decodeWithSchema;
|
|
16
|
-
clearCache(): void;
|
|
17
|
-
getCacheStats(): {
|
|
18
|
-
cachedPackages: number;
|
|
19
|
-
packages: string[];
|
|
20
|
-
};
|
|
21
|
-
}
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.DynamicBCSParser = void 0;
|
|
13
|
-
const bcs_1 = require("@mysten/sui/bcs");
|
|
14
|
-
class DynamicBCSParser {
|
|
15
|
-
constructor(suiClient) {
|
|
16
|
-
this.schemaCache = new Map();
|
|
17
|
-
this.suiClient = suiClient;
|
|
18
|
-
}
|
|
19
|
-
parseEvent(event) {
|
|
20
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
-
try {
|
|
22
|
-
const { packageId, eventName } = this.extractEventInfo(event);
|
|
23
|
-
if (!packageId || !eventName) {
|
|
24
|
-
console.log('无法提取事件信息');
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
const schemas = yield this.getSchemas(packageId);
|
|
28
|
-
const schema = schemas[eventName];
|
|
29
|
-
if (!schema) {
|
|
30
|
-
console.log(`未找到事件 ${eventName} 的 schema`);
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
return this.decodeWithSchema(schema, event.bcs.value);
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
console.error('解析事件失败:', error);
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
extractEventInfo(event) {
|
|
42
|
-
if (!event.type)
|
|
43
|
-
return { packageId: null, eventName: null };
|
|
44
|
-
const parts = event.type.split('::');
|
|
45
|
-
if (parts.length < 3)
|
|
46
|
-
return { packageId: null, eventName: null };
|
|
47
|
-
const packageId = parts[0];
|
|
48
|
-
const eventName = parts[parts.length - 1];
|
|
49
|
-
return { packageId, eventName };
|
|
50
|
-
}
|
|
51
|
-
getSchemas(packageId) {
|
|
52
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
-
if (this.schemaCache.has(packageId)) {
|
|
54
|
-
return this.schemaCache.get(packageId);
|
|
55
|
-
}
|
|
56
|
-
const schemas = yield this.fetchSchemasFromChain(packageId);
|
|
57
|
-
this.schemaCache.set(packageId, schemas);
|
|
58
|
-
return schemas;
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
fetchSchemasFromChain(packageId) {
|
|
62
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
-
var _a;
|
|
64
|
-
try {
|
|
65
|
-
console.log(`正在获取包 ${packageId} 的 schema...`);
|
|
66
|
-
const packageInfo = yield this.suiClient.getObject({
|
|
67
|
-
id: packageId,
|
|
68
|
-
options: {
|
|
69
|
-
showContent: true,
|
|
70
|
-
showType: true
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
if (!((_a = packageInfo.data) === null || _a === void 0 ? void 0 : _a.content)) {
|
|
74
|
-
console.log(`包 ${packageId} 没有内容`);
|
|
75
|
-
return {};
|
|
76
|
-
}
|
|
77
|
-
return this.extractSchemaFromPackage(packageInfo.data.content);
|
|
78
|
-
}
|
|
79
|
-
catch (error) {
|
|
80
|
-
console.error(`获取包 ${packageId} 的 schema 失败:`, error);
|
|
81
|
-
return {};
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
extractSchemaFromPackage(packageContent) {
|
|
86
|
-
const schemas = {};
|
|
87
|
-
try {
|
|
88
|
-
if (packageContent.dataType === 'movePackage') {
|
|
89
|
-
const modules = packageContent.modules || [];
|
|
90
|
-
modules.forEach((module) => {
|
|
91
|
-
const moduleName = module.name;
|
|
92
|
-
const structs = module.structs || [];
|
|
93
|
-
structs.forEach((struct) => {
|
|
94
|
-
const schemaKey = struct.name;
|
|
95
|
-
schemas[schemaKey] = this.parseStructToBCSSchema(struct);
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
catch (error) {
|
|
101
|
-
console.error('提取 schema 失败:', error);
|
|
102
|
-
}
|
|
103
|
-
return schemas;
|
|
104
|
-
}
|
|
105
|
-
parseStructToBCSSchema(struct) {
|
|
106
|
-
const schema = {};
|
|
107
|
-
try {
|
|
108
|
-
const fields = struct.fields || [];
|
|
109
|
-
fields.forEach((field) => {
|
|
110
|
-
const fieldName = field.name;
|
|
111
|
-
const fieldType = this.mapMoveTypeToBCS(field.type);
|
|
112
|
-
if (fieldType) {
|
|
113
|
-
schema[fieldName] = fieldType;
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
catch (error) {
|
|
118
|
-
console.error('解析结构体失败:', error);
|
|
119
|
-
}
|
|
120
|
-
return schema;
|
|
121
|
-
}
|
|
122
|
-
mapMoveTypeToBCS(moveType) {
|
|
123
|
-
const typeMap = {
|
|
124
|
-
'u8': 'u8',
|
|
125
|
-
'u16': 'u16',
|
|
126
|
-
'u32': 'u32',
|
|
127
|
-
'u64': 'u64',
|
|
128
|
-
'u128': 'u128',
|
|
129
|
-
'u256': 'u256',
|
|
130
|
-
'bool': 'bool',
|
|
131
|
-
'address': 'address',
|
|
132
|
-
'vector<u8>': 'vector<u8>',
|
|
133
|
-
'vector<u64>': 'vector<u64>',
|
|
134
|
-
'string::String': 'string'
|
|
135
|
-
};
|
|
136
|
-
if (moveType.startsWith('vector<')) {
|
|
137
|
-
const innerType = moveType.slice(7, -1);
|
|
138
|
-
const bcsInnerType = this.mapMoveTypeToBCS(innerType);
|
|
139
|
-
return bcsInnerType ? `vector<${bcsInnerType}>` : null;
|
|
140
|
-
}
|
|
141
|
-
return typeMap[moveType] || null;
|
|
142
|
-
}
|
|
143
|
-
decodeWithSchema(schema, bcsHex) {
|
|
144
|
-
try {
|
|
145
|
-
const schemaName = 'DynamicEvent';
|
|
146
|
-
const dynamicType = bcs_1.bcs.struct(schemaName, schema);
|
|
147
|
-
const bcsBytes = Buffer.from(bcsHex, 'hex');
|
|
148
|
-
const decoded = dynamicType.parse(bcsBytes);
|
|
149
|
-
return decoded;
|
|
150
|
-
}
|
|
151
|
-
catch (error) {
|
|
152
|
-
console.error('BCS 解码失败:', error);
|
|
153
|
-
return null;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
clearCache() {
|
|
157
|
-
this.schemaCache.clear();
|
|
158
|
-
}
|
|
159
|
-
getCacheStats() {
|
|
160
|
-
return {
|
|
161
|
-
cachedPackages: this.schemaCache.size,
|
|
162
|
-
packages: Array.from(this.schemaCache.keys())
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
exports.DynamicBCSParser = DynamicBCSParser;
|