@clonegod/ttd-bsc-common 3.1.28 → 3.1.29
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/appconfig/BscQuoteAppConfig.d.ts +11 -0
- package/dist/appconfig/BscQuoteAppConfig.js +50 -0
- package/dist/appconfig/BscTradeAppConfig.d.ts +7 -0
- package/dist/appconfig/BscTradeAppConfig.js +15 -0
- package/dist/appconfig/bsc_dex_env_args.d.ts +5 -0
- package/dist/appconfig/bsc_dex_env_args.js +59 -0
- package/dist/appconfig/bsc_env_args.d.ts +71 -0
- package/dist/appconfig/bsc_env_args.js +80 -0
- package/dist/appconfig/ensure_core_env.d.ts +1 -0
- package/dist/appconfig/ensure_core_env.js +18 -0
- package/dist/appconfig/index.d.ts +5 -0
- package/dist/appconfig/index.js +21 -0
- package/dist/config/BscQuoteAppConfig.js +2 -0
- package/dist/config/BscTradeAppConfig.d.ts +7 -0
- package/dist/config/BscTradeAppConfig.js +15 -0
- package/dist/config/ensure_core_env.d.ts +1 -0
- package/dist/config/ensure_core_env.js +18 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.js +2 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/trade/abstract_dex_trade.d.ts +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BscEnvArgs } from "./bsc_env_args";
|
|
2
|
+
import { AppConfig } from '@clonegod/ttd-core';
|
|
3
|
+
export declare class BscQuoteAppConfig extends AppConfig {
|
|
4
|
+
private eventEmitter;
|
|
5
|
+
env_args: BscEnvArgs;
|
|
6
|
+
constructor();
|
|
7
|
+
on(eventName: string | symbol, listener: (...args: any[]) => void): this;
|
|
8
|
+
emit(eventName: string | symbol, ...args: any[]): boolean;
|
|
9
|
+
init(): Promise<void>;
|
|
10
|
+
subscribe_config_change(): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BscQuoteAppConfig = void 0;
|
|
4
|
+
const bsc_env_args_1 = require("./bsc_env_args");
|
|
5
|
+
const ensure_core_env_1 = require("./ensure_core_env");
|
|
6
|
+
const ttd_core_1 = require("@clonegod/ttd-core");
|
|
7
|
+
const events_1 = require("events");
|
|
8
|
+
class BscQuoteAppConfig extends ttd_core_1.AppConfig {
|
|
9
|
+
constructor() {
|
|
10
|
+
(0, ensure_core_env_1.ensureCoreEnv)();
|
|
11
|
+
super();
|
|
12
|
+
this.eventEmitter = new events_1.EventEmitter();
|
|
13
|
+
this.env_args = new bsc_env_args_1.BscEnvArgs();
|
|
14
|
+
(0, ttd_core_1.setCoreEnv)(this.env_args);
|
|
15
|
+
}
|
|
16
|
+
on(eventName, listener) {
|
|
17
|
+
this.eventEmitter.on(eventName, listener);
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
emit(eventName, ...args) {
|
|
21
|
+
return this.eventEmitter.emit(eventName, ...args);
|
|
22
|
+
}
|
|
23
|
+
async init() {
|
|
24
|
+
await super.init();
|
|
25
|
+
await this.arb_cache.init();
|
|
26
|
+
if (!this.arb_event_subscriber) {
|
|
27
|
+
this.arb_event_subscriber = (0, ttd_core_1.getArbEventSubscriber)(this.arb_cache);
|
|
28
|
+
}
|
|
29
|
+
(0, ttd_core_1.log_info)('BscQuoteAppConfig initialized', {
|
|
30
|
+
chain_id: this.env_args.chain_id,
|
|
31
|
+
dex_id: this.env_args.dex_id,
|
|
32
|
+
quote_pair: this.env_args.quote_pair,
|
|
33
|
+
rpc_endpoint: this.env_args.rpc_endpoint,
|
|
34
|
+
ws_endpoint: this.env_args.ws_endpoint,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
async subscribe_config_change() {
|
|
38
|
+
this.on('config_change', async (config) => {
|
|
39
|
+
(0, ttd_core_1.log_info)('Config change received', config);
|
|
40
|
+
if (config.env_args) {
|
|
41
|
+
this.env_args = new bsc_env_args_1.BscEnvArgs();
|
|
42
|
+
(0, ttd_core_1.setCoreEnv)(this.env_args);
|
|
43
|
+
}
|
|
44
|
+
if (config.arb_cache) {
|
|
45
|
+
await this.arb_cache.init();
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.BscQuoteAppConfig = BscQuoteAppConfig;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AbstractTradeAppConfig } from '@clonegod/ttd-core';
|
|
2
|
+
import { BscEnvArgs } from './bsc_env_args';
|
|
3
|
+
export declare abstract class BscTradeAppConfig extends AbstractTradeAppConfig {
|
|
4
|
+
env_args: BscEnvArgs;
|
|
5
|
+
constructor();
|
|
6
|
+
abstract subscribe_wallet_raw_txn_event(): void;
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BscTradeAppConfig = void 0;
|
|
4
|
+
const ttd_core_1 = require("@clonegod/ttd-core");
|
|
5
|
+
const bsc_env_args_1 = require("./bsc_env_args");
|
|
6
|
+
const ensure_core_env_1 = require("./ensure_core_env");
|
|
7
|
+
class BscTradeAppConfig extends ttd_core_1.AbstractTradeAppConfig {
|
|
8
|
+
constructor() {
|
|
9
|
+
(0, ensure_core_env_1.ensureCoreEnv)();
|
|
10
|
+
super();
|
|
11
|
+
this.env_args = new bsc_env_args_1.BscEnvArgs();
|
|
12
|
+
(0, ttd_core_1.setCoreEnv)(this.env_args);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.BscTradeAppConfig = BscTradeAppConfig;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BscDexEnvArgs = void 0;
|
|
4
|
+
const dist_1 = require("@clonegod/ttd-core/dist");
|
|
5
|
+
const bsc_env_args_1 = require("./bsc_env_args");
|
|
6
|
+
class BscDexEnvArgs extends bsc_env_args_1.BscEnvArgs {
|
|
7
|
+
constructor() {
|
|
8
|
+
super();
|
|
9
|
+
const cfg = this._cfg;
|
|
10
|
+
this.app_name = (cfg.app_name || '').toLowerCase();
|
|
11
|
+
this.chain_id = (cfg.chain_id || '').toUpperCase();
|
|
12
|
+
this.dex_id = (cfg.dex_id || '').toUpperCase();
|
|
13
|
+
this.server_id = cfg.server_id ?? '';
|
|
14
|
+
this.redis_host = cfg.redis_host;
|
|
15
|
+
this.redis_port = String(cfg.redis_port);
|
|
16
|
+
this.rpc_endpoint = cfg.rpc_endpoint;
|
|
17
|
+
this.ws_endpoint = cfg.ws_endpoint;
|
|
18
|
+
this.group_id = cfg.group_id ?? '';
|
|
19
|
+
this.trade_group_id = cfg.trade_group_id;
|
|
20
|
+
this.quote_pair = cfg.quote_pair;
|
|
21
|
+
this.quote_pool_address = cfg.quote_pool_address;
|
|
22
|
+
this.quote_pool_name = cfg.quote_pool_name;
|
|
23
|
+
this.quote_pool_fee_rate = cfg.quote_pool_fee_rate;
|
|
24
|
+
this.quote_amount_usd = cfg.quote_amount_usd;
|
|
25
|
+
this.wallet_dir = cfg.wallet_dir;
|
|
26
|
+
this.encryption_key = cfg.encryption_key ?? '';
|
|
27
|
+
this.server_ip_list = cfg.server_ip_list ?? '';
|
|
28
|
+
this.ip_exclude_prefix = cfg.ip_exclude_prefix ?? '';
|
|
29
|
+
this.alert_analyze_host = cfg.alert_analyze_host ?? '';
|
|
30
|
+
this.alert_flush_size = cfg.alert_flush_size;
|
|
31
|
+
this.alert_flush_ms = cfg.alert_flush_ms;
|
|
32
|
+
this.alert_dedup_window_ms = cfg.alert_dedup_window_ms;
|
|
33
|
+
this.namespace = cfg.namespace ?? '';
|
|
34
|
+
this.trade_analyze_host = cfg.trade_analyze_host ?? '';
|
|
35
|
+
this.gas_price_gwei = cfg.gas_price_gwei;
|
|
36
|
+
this.gas_limit = cfg.gas_limit;
|
|
37
|
+
this.tip_amount_gwei = cfg.tip_amount_gwei;
|
|
38
|
+
this.pancake_executor_id = cfg.pancake_executor_id;
|
|
39
|
+
this.uniswap_executor_id = cfg.uniswap_executor_id;
|
|
40
|
+
this.caller_select_strategy = cfg.caller_select_strategy;
|
|
41
|
+
this.send_tx_blockrazor_bundle = cfg.send_tx_blockrazor_bundle;
|
|
42
|
+
this.send_tx_48club_bundle = cfg.send_tx_48club_bundle;
|
|
43
|
+
this.send_tx_48club_bundle_ws = cfg.send_tx_48club_bundle_ws;
|
|
44
|
+
this.send_tx_blox_bundle_ws = cfg.send_tx_blox_bundle_ws;
|
|
45
|
+
this.send_tx_ws_host = cfg.send_tx_ws_host;
|
|
46
|
+
this.stream_quote_ws_host = cfg.stream_quote_ws_host;
|
|
47
|
+
this.min_quote_interval_ms = cfg.min_quote_interval_ms;
|
|
48
|
+
this.skip_price_feed_yynode = cfg.skip_price_feed_yynode;
|
|
49
|
+
this.push_price_feed = cfg.push_price_feed;
|
|
50
|
+
this.trade_parse_fetch_block_time = cfg.trade_parse_fetch_block_time;
|
|
51
|
+
this.tick_cache_neighboring_words = cfg.tick_cache_neighboring_words;
|
|
52
|
+
this.tick_cache_ttl = cfg.tick_cache_ttl;
|
|
53
|
+
this.tick_cache_min_update_interval = cfg.tick_cache_min_update_interval;
|
|
54
|
+
}
|
|
55
|
+
print(moduleName) {
|
|
56
|
+
(0, dist_1.printEnvConfig)(moduleName || this.app_name || 'bsc-dex', this);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.BscDexEnvArgs = BscDexEnvArgs;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { EnvArgs } from '@clonegod/ttd-core';
|
|
2
|
+
export declare class BscEnvArgs extends EnvArgs {
|
|
3
|
+
gas_price_gwei: number;
|
|
4
|
+
gas_limit: number;
|
|
5
|
+
tip_amount_gwei: number;
|
|
6
|
+
pancake_executor_id: string;
|
|
7
|
+
uniswap_executor_id: string;
|
|
8
|
+
caller_select_strategy: string;
|
|
9
|
+
send_tx_blockrazor_bundle: boolean;
|
|
10
|
+
send_tx_48club_bundle: boolean;
|
|
11
|
+
send_tx_48club_bundle_ws: boolean;
|
|
12
|
+
send_tx_blox_bundle_ws: boolean;
|
|
13
|
+
stream_quote_ws_host: string;
|
|
14
|
+
min_quote_interval_ms: number;
|
|
15
|
+
skip_price_feed_yynode: boolean;
|
|
16
|
+
push_price_feed: boolean;
|
|
17
|
+
trade_parse_fetch_block_time: boolean;
|
|
18
|
+
tick_cache_neighboring_words: number;
|
|
19
|
+
tick_cache_ttl: number;
|
|
20
|
+
tick_cache_min_update_interval: number;
|
|
21
|
+
ws_push_enable: boolean;
|
|
22
|
+
print_event_data: boolean;
|
|
23
|
+
pool_sync_interval_ms: number;
|
|
24
|
+
redis_sync_pool_enable: boolean;
|
|
25
|
+
redis_url: string;
|
|
26
|
+
skip_pool_list: string;
|
|
27
|
+
price_feed_skip_dup: boolean;
|
|
28
|
+
trade_analyze_port: number;
|
|
29
|
+
log_max_size_mb: number;
|
|
30
|
+
log_check_interval_min: number;
|
|
31
|
+
log_dir: string;
|
|
32
|
+
chain_name: string;
|
|
33
|
+
caller_balance_check_interval: string;
|
|
34
|
+
caller_balance_low_threshold: string;
|
|
35
|
+
caller_balance_empty_threshold: string;
|
|
36
|
+
send_tx_ws_host: string;
|
|
37
|
+
send_tx_48club_ws: boolean;
|
|
38
|
+
send_tx_bloxroute_ws: boolean;
|
|
39
|
+
send_tx_default_rpc: boolean;
|
|
40
|
+
send_tx_blockrazor_private: boolean;
|
|
41
|
+
send_tx_48club_private: boolean;
|
|
42
|
+
bsc_rpc_endpoint: string;
|
|
43
|
+
bloxroute_ws_url: string;
|
|
44
|
+
blox_auth_key: string;
|
|
45
|
+
_48club_ws_url: string;
|
|
46
|
+
_48club_rpc_url: string;
|
|
47
|
+
_48club_sp_wallet_id: string;
|
|
48
|
+
blockrazor_rpc_url: string;
|
|
49
|
+
blockrazor_auth_token: string;
|
|
50
|
+
gecko_network: string;
|
|
51
|
+
chain_id_num: number;
|
|
52
|
+
native_token_symbol: string;
|
|
53
|
+
native_token_address: string;
|
|
54
|
+
wrapped_native_address: string;
|
|
55
|
+
sync_pool_interval_ms: number;
|
|
56
|
+
fetch_api_wait_ms: number;
|
|
57
|
+
fetch_min_tvl: number;
|
|
58
|
+
fetch_min_vol: number;
|
|
59
|
+
pool_default_tvl: number;
|
|
60
|
+
fetch_max_page_no: number;
|
|
61
|
+
token_batch_size: number;
|
|
62
|
+
fetch_on_startup: boolean;
|
|
63
|
+
vault_mgt_rpc_url: string;
|
|
64
|
+
vault_mgt_chain_id: number;
|
|
65
|
+
vault_mgt_chain_name: string;
|
|
66
|
+
vault_mgt_vault_groups: string;
|
|
67
|
+
vault_mgt_native_symbol: string;
|
|
68
|
+
vault_mgt_wrapped_native_address: string;
|
|
69
|
+
vault_mgt_fund_caller_max: string;
|
|
70
|
+
constructor();
|
|
71
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BscEnvArgs = void 0;
|
|
4
|
+
const ttd_core_1 = require("@clonegod/ttd-core");
|
|
5
|
+
const constants_1 = require("../common/constants");
|
|
6
|
+
(0, ttd_core_1.registerEnvVars)({
|
|
7
|
+
gas_price_gwei: { env: 'GAS_PRICE_GWEI', type: 'number', default: 1, desc: '交易 gas 价格(Gwei)' },
|
|
8
|
+
gas_limit: { env: 'GAS_LIMIT', type: 'number', default: 300000, desc: '交易 gas 上限' },
|
|
9
|
+
tip_amount_gwei: { env: 'TIP_AMOUNT_GWEI', type: 'number', default: 10000, desc: 'Builder tip(Gwei)' },
|
|
10
|
+
pancake_executor_id: { env: 'PANCAKE_EXECUTOR_ID', type: 'string', default: 'PANCAKE', desc: 'Vault 中 Pancake executor 注册名(keccak256 后作为 bytes32)' },
|
|
11
|
+
uniswap_executor_id: { env: 'UNISWAP_EXECUTOR_ID', type: 'string', default: 'UNISWAP', desc: 'Vault 中 Uniswap executor 注册名(keccak256 后作为 bytes32)' },
|
|
12
|
+
caller_select_strategy: { env: 'CALLER_SELECT_STRATEGY', type: 'string', default: 'lock', desc: 'CallerManager LRU 选择策略:lock=Redis 分布式锁(默认) | lua_cas=Lua 原子脚本(单 RTT,无锁重试)' },
|
|
13
|
+
send_tx_blockrazor_bundle: { env: 'SEND_TX_BLOCKRAZOR_BUNDLE', type: 'boolean', default: false, desc: 'BlockRazor Bundle 开关' },
|
|
14
|
+
send_tx_48club_bundle: { env: 'SEND_TX_48CLUB_BUNDLE', type: 'boolean', default: false, desc: '48Club Bundle HTTP 开关' },
|
|
15
|
+
send_tx_48club_bundle_ws: { env: 'SEND_TX_48CLUB_BUNDLE_WS', type: 'boolean', default: false, desc: '48Club Bundle WS 开关' },
|
|
16
|
+
send_tx_blox_bundle_ws: { env: 'SEND_TX_BLOX_BUNDLE_WS', type: 'boolean', default: false, desc: 'BloxRoute Bundle WS 开关' },
|
|
17
|
+
stream_quote_ws_host: { env: 'STREAM_QUOTE_WS_HOST', type: 'string', default: '127.0.0.1', desc: 'stream-quote WS 地址' },
|
|
18
|
+
min_quote_interval_ms: { env: 'MIN_QUOTE_INTERVAL_MS', type: 'number', default: 10000, desc: '最小询价间隔(ms)' },
|
|
19
|
+
skip_price_feed_yynode: { env: 'SKIP_PRICE_FEED_YYNODE', type: 'boolean', default: false, desc: '跳过 YYNode PriceFeed' },
|
|
20
|
+
push_price_feed: { env: 'PUSH_PRICE_FEED', type: 'boolean', default: false, desc: 'PriceFeed 推送开关' },
|
|
21
|
+
trade_parse_fetch_block_time: { env: 'TRADE_PARSE_FETCH_BLOCK_TIME', type: 'boolean', default: false, desc: '解析交易 receipt 时是否额外 RPC 查询 block 时间戳填入结果' },
|
|
22
|
+
tick_cache_neighboring_words: { env: 'TICK_CACHE_NEIGHBORING_WORDS', type: 'number', default: 2, desc: 'tick 预加载 words 数' },
|
|
23
|
+
tick_cache_ttl: { env: 'TICK_CACHE_TTL', type: 'number', default: 30000, desc: 'tick 缓存 TTL(ms)' },
|
|
24
|
+
tick_cache_min_update_interval: { env: 'TICK_CACHE_MIN_UPDATE_INTERVAL', type: 'number', default: 3000, desc: 'tick 最小刷新间隔(ms)' },
|
|
25
|
+
ws_push_enable: { env: 'WS_PUSH_ENABLE', type: 'boolean', default: true, desc: 'WS 推送开关' },
|
|
26
|
+
print_event_data: { env: 'PRINT_EVENT_DATA', type: 'boolean', default: false, desc: '打印原始事件数据' },
|
|
27
|
+
pool_sync_interval_ms: { env: 'POOL_SYNC_INTERVAL_MS', type: 'number', default: 5000, desc: '池子同步间隔(ms)' },
|
|
28
|
+
redis_sync_pool_enable: { env: 'REDIS_SYNC_POOL_ENABLE', type: 'boolean', default: false, desc: 'Redis 同步池子开关' },
|
|
29
|
+
redis_url: { env: 'REDIS_URL', type: 'string', default: 'redis://127.0.0.1:6379', desc: 'Redis 连接 URL' },
|
|
30
|
+
skip_pool_list: { env: 'SKIP_POOL_LIST', type: 'string', default: '', desc: '跳过的池子名称列表(逗号分隔)' },
|
|
31
|
+
price_feed_skip_dup: { env: 'PRICE_FEED_SKIP_DUP', type: 'boolean', default: false, desc: 'PriceFeed 去重过滤' },
|
|
32
|
+
trade_analyze_port: { env: 'TRADE_ANALYZE_PORT', type: 'number', default: 8004, desc: '上报 analyze 的 HTTP 端口' },
|
|
33
|
+
log_max_size_mb: { env: 'LOG_MAX_SIZE_MB', type: 'number', default: 20, desc: '日志文件大小上限(MB)' },
|
|
34
|
+
log_check_interval_min: { env: 'LOG_CHECK_INTERVAL_MIN', type: 'number', default: 10, desc: '日志检查间隔(分钟)' },
|
|
35
|
+
log_dir: { env: 'LOG_DIR', type: 'string', default: 'logs', desc: '日志目录' },
|
|
36
|
+
chain_name: { env: 'CHAIN_NAME', type: 'string', default: '', desc: '链名称(Redis key 前缀),stream-trade 建议必填' },
|
|
37
|
+
caller_balance_check_interval: { env: 'CALLER_BALANCE_CHECK_INTERVAL', type: 'string', default: '1h', desc: 'caller 余额检查周期,支持 8h/30m/45s/100ms 格式' },
|
|
38
|
+
caller_balance_low_threshold: { env: 'CALLER_BALANCE_LOW_THRESHOLD', type: 'string', default: '0.01', desc: 'caller 低余额阈值(原生币单位),低于报 ERROR' },
|
|
39
|
+
caller_balance_empty_threshold: { env: 'CALLER_BALANCE_EMPTY_THRESHOLD', type: 'string', default: '0', desc: 'caller 耗尽阈值,低于报 CRITICAL;为 0 表示禁用此级' },
|
|
40
|
+
send_tx_ws_host: { env: 'SEND_TX_WS_HOST', type: 'string', default: '127.0.0.1', desc: 'send-tx WS 地址' },
|
|
41
|
+
send_tx_48club_ws: { env: 'SEND_TX_48CLUB_WS', type: 'boolean', default: false, desc: '48Club WS server 开关' },
|
|
42
|
+
send_tx_bloxroute_ws: { env: 'SEND_TX_BLOXROUTE_WS', type: 'boolean', default: false, desc: 'BloxRoute WS server 开关' },
|
|
43
|
+
send_tx_default_rpc: { env: 'SEND_TX_DEFAULT_RPC', type: 'boolean', default: false, desc: '默认 RPC 私有发送' },
|
|
44
|
+
send_tx_blockrazor_private: { env: 'SEND_TX_BLOCKRAZOR_PRIVATE', type: 'boolean', default: false, desc: 'BlockRazor 私有发送' },
|
|
45
|
+
send_tx_48club_private: { env: 'SEND_TX_48CLUB_PRIVATE', type: 'boolean', default: false, desc: '48Club 私有发送' },
|
|
46
|
+
bsc_rpc_endpoint: { env: 'BSC_RPC_ENDPOINT', type: 'string', default: '', desc: 'BSC RPC 端点(default_rpc 发送用)' },
|
|
47
|
+
bloxroute_ws_url: { env: 'BLOXROUTE_WS_URL', type: 'string', default: 'wss://api.blxrbdn.com/ws', desc: 'BloxRoute WS URL' },
|
|
48
|
+
blox_auth_key: { env: 'BLOX_AUTH_KEY', type: 'string', default: '', sensitive: true, desc: 'BloxRoute 认证 key' },
|
|
49
|
+
_48club_ws_url: { env: '_48CLUB_WS_URL', type: 'string', default: 'wss://puissant-builder.48.club/', desc: '48Club WS URL' },
|
|
50
|
+
_48club_rpc_url: { env: '_48CLUB_RPC_URL', type: 'string', default: 'https://puissant-builder.48.club/', desc: '48Club RPC URL' },
|
|
51
|
+
_48club_sp_wallet_id: { env: '_48CLUB_SP_WALLET_ID', type: 'string', default: 'TTD-PAYMENT', desc: '48Club SoulPoint 钱包 ID' },
|
|
52
|
+
blockrazor_rpc_url: { env: 'BLOCKRAZOR_RPC_URL', type: 'string', default: 'https://rpc.blockrazor.builders', desc: 'BlockRazor RPC URL' },
|
|
53
|
+
blockrazor_auth_token: { env: 'BLOCKRAZOR_AUTH_TOKEN', type: 'string', default: '', sensitive: true, desc: 'BlockRazor 认证 Token' },
|
|
54
|
+
gecko_network: { env: 'GECKO_NETWORK', type: 'string', default: '', desc: 'GeckoTerminal 网络标识(可选;缺省按 chain_id 推断)' },
|
|
55
|
+
chain_id_num: { env: 'CHAIN_ID_NUM', type: 'number', default: 56, desc: '链 ID 数字' },
|
|
56
|
+
native_token_symbol: { env: 'NATIVE_TOKEN_SYMBOL', type: 'string', default: 'BNB', desc: '原生代币符号' },
|
|
57
|
+
native_token_address: { env: 'NATIVE_TOKEN_ADDRESS', type: 'string', default: constants_1.NATIVE_BNB_ADDRESS, desc: '原生代币地址' },
|
|
58
|
+
wrapped_native_address: { env: 'WRAPPED_NATIVE_ADDRESS', type: 'string', default: constants_1.WBNB_ADDRESS, desc: 'Wrapped 代币地址' },
|
|
59
|
+
sync_pool_interval_ms: { env: 'SYNC_POOL_INTERVAL_MS', type: 'number', default: 3600000, desc: '定时池子全量同步间隔(毫秒)' },
|
|
60
|
+
fetch_api_wait_ms: { env: 'FETCH_API_WAIT_MS', type: 'number', default: 6000, desc: 'Gecko/DefiLlama 等外部 API 调用间隔(毫秒)' },
|
|
61
|
+
fetch_min_tvl: { env: 'FETCH_MIN_TVL', type: 'number', default: 50000, desc: '最小 TVL(USD)' },
|
|
62
|
+
fetch_min_vol: { env: 'FETCH_MIN_VOL', type: 'number', default: 100000, desc: '最小 24h 成交量(USD)' },
|
|
63
|
+
pool_default_tvl: { env: 'POOL_DEFAULT_TVL', type: 'number', default: 100000, desc: '默认 TVL' },
|
|
64
|
+
fetch_max_page_no: { env: 'FETCH_MAX_PAGE_NO', type: 'number', default: 10, desc: '最大翻页数' },
|
|
65
|
+
token_batch_size: { env: 'TOKEN_BATCH_SIZE', type: 'number', default: 10, desc: 'token 批量大小' },
|
|
66
|
+
fetch_on_startup: { env: 'FETCH_ON_STARTUP', type: 'boolean', default: true, desc: '启动时立即执行' },
|
|
67
|
+
vault_mgt_rpc_url: { env: 'VAULT_MGT_RPC_URL', type: 'string', default: '', desc: 'Vault 管理 RPC(contract-mgt 必填)' },
|
|
68
|
+
vault_mgt_chain_id: { env: 'VAULT_MGT_CHAIN_ID', type: 'number', default: 0, desc: '链 ID 数字(contract-mgt 必填)' },
|
|
69
|
+
vault_mgt_chain_name: { env: 'VAULT_MGT_CHAIN_NAME', type: 'string', default: '', desc: '链名称(contract-mgt 必填)' },
|
|
70
|
+
vault_mgt_vault_groups: { env: 'VAULT_MGT_VAULT_GROUPS', type: 'string', default: '', desc: 'Vault 分组列表(逗号分隔,contract-mgt 必填)' },
|
|
71
|
+
vault_mgt_native_symbol: { env: 'VAULT_MGT_NATIVE_SYMBOL', type: 'string', default: '', desc: '原生代币符号(contract-mgt 必填)' },
|
|
72
|
+
vault_mgt_wrapped_native_address: { env: 'VAULT_MGT_WRAPPED_NATIVE_ADDRESS', type: 'string', default: '', desc: 'Wrapped 代币地址(contract-mgt 必填)' },
|
|
73
|
+
vault_mgt_fund_caller_max: { env: 'VAULT_MGT_FUND_CALLER_MAX', type: 'string', default: '', desc: 'Caller 充值上限' },
|
|
74
|
+
});
|
|
75
|
+
class BscEnvArgs extends ttd_core_1.EnvArgs {
|
|
76
|
+
constructor() {
|
|
77
|
+
super();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.BscEnvArgs = BscEnvArgs;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function ensureCoreEnv(): void;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ensureCoreEnv = ensureCoreEnv;
|
|
4
|
+
const ttd_core_1 = require("@clonegod/ttd-core");
|
|
5
|
+
const bsc_dex_env_args_1 = require("./bsc_dex_env_args");
|
|
6
|
+
let _ensured = false;
|
|
7
|
+
function ensureCoreEnv() {
|
|
8
|
+
if (_ensured)
|
|
9
|
+
return;
|
|
10
|
+
try {
|
|
11
|
+
(0, ttd_core_1.getCoreEnv)();
|
|
12
|
+
_ensured = true;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
(0, ttd_core_1.setCoreEnv)(new bsc_dex_env_args_1.BscDexEnvArgs());
|
|
16
|
+
_ensured = true;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./bsc_env_args"), exports);
|
|
18
|
+
__exportStar(require("./bsc_dex_env_args"), exports);
|
|
19
|
+
__exportStar(require("./BscQuoteAppConfig"), exports);
|
|
20
|
+
__exportStar(require("./BscTradeAppConfig"), exports);
|
|
21
|
+
__exportStar(require("./ensure_core_env"), exports);
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BscQuoteAppConfig = void 0;
|
|
4
4
|
const bsc_env_args_1 = require("./bsc_env_args");
|
|
5
|
+
const ensure_core_env_1 = require("./ensure_core_env");
|
|
5
6
|
const ttd_core_1 = require("@clonegod/ttd-core");
|
|
6
7
|
const events_1 = require("events");
|
|
7
8
|
class BscQuoteAppConfig extends ttd_core_1.AppConfig {
|
|
8
9
|
constructor() {
|
|
10
|
+
(0, ensure_core_env_1.ensureCoreEnv)();
|
|
9
11
|
super();
|
|
10
12
|
this.eventEmitter = new events_1.EventEmitter();
|
|
11
13
|
this.env_args = new bsc_env_args_1.BscEnvArgs();
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AbstractTradeAppConfig } from '@clonegod/ttd-core';
|
|
2
|
+
import { BscEnvArgs } from './bsc_env_args';
|
|
3
|
+
export declare abstract class BscTradeAppConfig extends AbstractTradeAppConfig {
|
|
4
|
+
env_args: BscEnvArgs;
|
|
5
|
+
constructor();
|
|
6
|
+
abstract subscribe_wallet_raw_txn_event(): void;
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BscTradeAppConfig = void 0;
|
|
4
|
+
const ttd_core_1 = require("@clonegod/ttd-core");
|
|
5
|
+
const bsc_env_args_1 = require("./bsc_env_args");
|
|
6
|
+
const ensure_core_env_1 = require("./ensure_core_env");
|
|
7
|
+
class BscTradeAppConfig extends ttd_core_1.AbstractTradeAppConfig {
|
|
8
|
+
constructor() {
|
|
9
|
+
(0, ensure_core_env_1.ensureCoreEnv)();
|
|
10
|
+
super();
|
|
11
|
+
this.env_args = new bsc_env_args_1.BscEnvArgs();
|
|
12
|
+
(0, ttd_core_1.setCoreEnv)(this.env_args);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.BscTradeAppConfig = BscTradeAppConfig;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function ensureCoreEnv(): void;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ensureCoreEnv = ensureCoreEnv;
|
|
4
|
+
const ttd_core_1 = require("@clonegod/ttd-core");
|
|
5
|
+
const bsc_dex_env_args_1 = require("./bsc_dex_env_args");
|
|
6
|
+
let _ensured = false;
|
|
7
|
+
function ensureCoreEnv() {
|
|
8
|
+
if (_ensured)
|
|
9
|
+
return;
|
|
10
|
+
try {
|
|
11
|
+
(0, ttd_core_1.getCoreEnv)();
|
|
12
|
+
_ensured = true;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
(0, ttd_core_1.setCoreEnv)(new bsc_dex_env_args_1.BscDexEnvArgs());
|
|
16
|
+
_ensured = true;
|
|
17
|
+
}
|
|
18
|
+
}
|
package/dist/config/index.d.ts
CHANGED
package/dist/config/index.js
CHANGED
|
@@ -17,3 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./bsc_env_args"), exports);
|
|
18
18
|
__exportStar(require("./bsc_dex_env_args"), exports);
|
|
19
19
|
__exportStar(require("./BscQuoteAppConfig"), exports);
|
|
20
|
+
__exportStar(require("./BscTradeAppConfig"), exports);
|
|
21
|
+
__exportStar(require("./ensure_core_env"), exports);
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -16,7 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
require("./alert_rules");
|
|
18
18
|
__exportStar(require("./common"), exports);
|
|
19
|
-
__exportStar(require("./
|
|
19
|
+
__exportStar(require("./appconfig"), exports);
|
|
20
20
|
__exportStar(require("./quote"), exports);
|
|
21
21
|
__exportStar(require("./trade"), exports);
|
|
22
22
|
__exportStar(require("./types"), exports);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AbastrcatTrade, AppConfig, TradeContext } from '@clonegod/ttd-core';
|
|
2
|
-
import { BscEnvArgs } from '../
|
|
2
|
+
import { BscEnvArgs } from '../appconfig/bsc_env_args';
|
|
3
3
|
import { ethers } from "ethers";
|
|
4
4
|
import { EvmChainConfig } from "../types";
|
|
5
5
|
import { CallerManager } from "./caller_manager";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clonegod/ttd-bsc-common",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.29",
|
|
4
4
|
"description": "BSC common library",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"push": "npm run build && npm publish"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@clonegod/ttd-core": "3.1.
|
|
17
|
+
"@clonegod/ttd-core": "3.1.30",
|
|
18
18
|
"axios": "1.15.0",
|
|
19
19
|
"dotenv": "^16.4.7",
|
|
20
20
|
"ethers": "^5.8.0",
|