@clonegod/ttd-bsc-common 1.0.90 → 3.0.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.
Files changed (69) hide show
  1. package/dist/config/BscQuoteAppConfig.d.ts +11 -0
  2. package/dist/config/BscQuoteAppConfig.js +62 -0
  3. package/dist/config/bsc_env_args.d.ts +1 -1
  4. package/dist/config/bsc_env_args.js +2 -2
  5. package/dist/config/index.d.ts +1 -0
  6. package/dist/config/index.js +1 -0
  7. package/dist/quote/event/index.d.ts +1 -0
  8. package/dist/quote/event/index.js +1 -0
  9. package/dist/quote/event/pool_event_listener.d.ts +1 -1
  10. package/dist/quote/event/pool_event_listener.js +31 -31
  11. package/dist/quote/event/swap_debouncer.d.ts +22 -0
  12. package/dist/quote/event/swap_debouncer.js +92 -0
  13. package/dist/quote/index.d.ts +1 -0
  14. package/dist/quote/index.js +1 -0
  15. package/dist/quote/pricing/index.d.ts +2 -0
  16. package/dist/quote/pricing/index.js +2 -0
  17. package/dist/quote/pricing/pool_state_initializer.d.ts +8 -0
  18. package/dist/quote/pricing/pool_state_initializer.js +142 -0
  19. package/dist/quote/pricing/sdk_token_factory.d.ts +2 -0
  20. package/dist/quote/pricing/sdk_token_factory.js +21 -0
  21. package/dist/quote/pricing/token_price_cache.js +4 -4
  22. package/dist/quote/tick/clmm_tick_cache.d.ts +40 -0
  23. package/dist/quote/tick/clmm_tick_cache.js +219 -0
  24. package/dist/quote/tick/index.d.ts +2 -0
  25. package/dist/{trade/send → quote/tick}/index.js +2 -8
  26. package/dist/quote/tick/tick_lens_loaders.d.ts +25 -0
  27. package/dist/quote/tick/tick_lens_loaders.js +170 -0
  28. package/dist/redis/redis_client.d.ts +1 -0
  29. package/dist/redis/redis_client.js +12 -6
  30. package/dist/trade/abstract_dex_trade.d.ts +31 -17
  31. package/dist/trade/abstract_dex_trade.js +214 -109
  32. package/dist/trade/caller_manager.d.ts +35 -0
  33. package/dist/trade/caller_manager.js +178 -0
  34. package/dist/trade/check/tx_websocket_manager.js +11 -11
  35. package/dist/trade/index.d.ts +1 -2
  36. package/dist/trade/index.js +1 -2
  37. package/dist/trade/parse/base_parser.js +2 -2
  38. package/dist/types/pool_state.d.ts +31 -0
  39. package/dist/utils/gas_helper.js +9 -9
  40. package/dist/utils/index.d.ts +1 -0
  41. package/dist/utils/index.js +1 -0
  42. package/dist/utils/trade_direction.d.ts +15 -0
  43. package/dist/utils/trade_direction.js +23 -0
  44. package/dist/ws/event_filter.js +2 -2
  45. package/dist/yyws/yyws_client.js +2 -2
  46. package/package.json +3 -2
  47. package/dist/trade/abstract_dex_trade_plus.d.ts +0 -44
  48. package/dist/trade/abstract_dex_trade_plus.js +0 -449
  49. package/dist/trade/send/48club.d.ts +0 -17
  50. package/dist/trade/send/48club.js +0 -123
  51. package/dist/trade/send/48club_member.d.ts +0 -1
  52. package/dist/trade/send/48club_member.js +0 -25
  53. package/dist/trade/send/48club_sp.d.ts +0 -9
  54. package/dist/trade/send/48club_sp.js +0 -137
  55. package/dist/trade/send/blockrazor.d.ts +0 -7
  56. package/dist/trade/send/blockrazor.js +0 -78
  57. package/dist/trade/send/blxr.d.ts +0 -0
  58. package/dist/trade/send/blxr.js +0 -0
  59. package/dist/trade/send/bsc_rpc.d.ts +0 -6
  60. package/dist/trade/send/bsc_rpc.js +0 -47
  61. package/dist/trade/send/index.d.ts +0 -6
  62. package/dist/trade/send/send_bundle_proxy.d.ts +0 -7
  63. package/dist/trade/send/send_bundle_proxy.js +0 -30
  64. package/dist/trade/send/send_bundle_ws.d.ts +0 -7
  65. package/dist/trade/send/send_bundle_ws.js +0 -30
  66. package/dist/trade/send/send_tx.d.ts +0 -9
  67. package/dist/trade/send/send_tx.js +0 -119
  68. package/dist/ws/bsc_stream_ws_client.d.ts +0 -10
  69. package/dist/ws/bsc_stream_ws_client.js +0 -95
@@ -14,8 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./send"), exports);
18
17
  __exportStar(require("./parse"), exports);
19
18
  __exportStar(require("./check"), exports);
19
+ __exportStar(require("./caller_manager"), exports);
20
20
  __exportStar(require("./abstract_dex_trade"), exports);
21
- __exportStar(require("./abstract_dex_trade_plus"), exports);
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.BaseTxParser = void 0;
13
- const dist_1 = require("@clonegod/ttd-core/dist");
13
+ const ttd_core_1 = require("@clonegod/ttd-core");
14
14
  const ethers_1 = require("ethers");
15
15
  class BaseTxParser {
16
16
  constructor(config) {
@@ -66,7 +66,7 @@ class BaseTxParser {
66
66
  };
67
67
  }
68
68
  catch (error) {
69
- (0, dist_1.log_error)('calculateGasFee error:', error);
69
+ (0, ttd_core_1.log_error)('calculateGasFee error:', error);
70
70
  return {
71
71
  base_fee: 0,
72
72
  priority_fee: 0,
@@ -10,6 +10,33 @@ export interface OnchainPoolData {
10
10
  sqrtPriceX96: string;
11
11
  liquidity: string;
12
12
  }
13
+ export interface AmmPoolState {
14
+ address: string;
15
+ token0: string;
16
+ token1: string;
17
+ fee: number;
18
+ reserve0: string;
19
+ reserve1: string;
20
+ }
21
+ export interface ClmmPoolState {
22
+ address: string;
23
+ token0: string;
24
+ token1: string;
25
+ fee: number;
26
+ tickSpacing: number;
27
+ tick: number;
28
+ sqrtPriceX96: string;
29
+ liquidity: string;
30
+ }
31
+ export interface InfinityPoolState extends ClmmPoolState {
32
+ hooks: string;
33
+ poolManager: string;
34
+ parameters: string;
35
+ currency0: string;
36
+ currency1: string;
37
+ lpFee?: number;
38
+ protocolFee?: number;
39
+ }
13
40
  export interface OnchainPoolChangeEvent {
14
41
  provider_id?: string;
15
42
  pool_address: string;
@@ -26,5 +53,9 @@ export interface OnchainPoolChangeEvent {
26
53
  tick: number;
27
54
  sqrtPriceX96: BigInt | string;
28
55
  liquidity: BigInt | string;
56
+ tickLower?: number;
57
+ tickUpper?: number;
58
+ liquidityDelta?: string;
59
+ amount?: string;
29
60
  };
30
61
  }
@@ -11,18 +11,18 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.EVMGasHelper = void 0;
13
13
  const ethers_1 = require("ethers");
14
- const dist_1 = require("@clonegod/ttd-core/dist");
14
+ const ttd_core_1 = require("@clonegod/ttd-core");
15
15
  class EVMGasHelper {
16
16
  static wrapNativeToken(provider_1, wallet_1, wrappedTokenAddress_1, amount_1) {
17
17
  return __awaiter(this, arguments, void 0, function* (provider, wallet, wrappedTokenAddress, amount, minReserve = "0.1", tokenSymbol = "ETH") {
18
18
  const nativeBalance = yield provider.getBalance(wallet.address);
19
19
  const nativeBalanceEth = ethers_1.ethers.utils.formatEther(nativeBalance);
20
- (0, dist_1.log_info)(`当前${tokenSymbol}余额: ${nativeBalanceEth} ${tokenSymbol}`);
20
+ (0, ttd_core_1.log_info)(`当前${tokenSymbol}余额: ${nativeBalanceEth} ${tokenSymbol}`);
21
21
  let wrapAmount;
22
22
  if (amount === "max") {
23
23
  const minReserveBN = ethers_1.ethers.utils.parseEther(minReserve);
24
24
  if (nativeBalance.lte(minReserveBN)) {
25
- (0, dist_1.log_info)(`${tokenSymbol}余额不足最小保留额 ${minReserve} ${tokenSymbol},不执行转换`);
25
+ (0, ttd_core_1.log_info)(`${tokenSymbol}余额不足最小保留额 ${minReserve} ${tokenSymbol},不执行转换`);
26
26
  return null;
27
27
  }
28
28
  wrapAmount = nativeBalance.sub(minReserveBN);
@@ -31,19 +31,19 @@ class EVMGasHelper {
31
31
  wrapAmount = ethers_1.ethers.utils.parseEther(amount);
32
32
  const minReserveBN = ethers_1.ethers.utils.parseEther(minReserve);
33
33
  if (nativeBalance.sub(wrapAmount).lt(minReserveBN)) {
34
- (0, dist_1.log_info)(`转换后${tokenSymbol}余额将低于最小保留额 ${minReserve} ${tokenSymbol},调整转换金额`);
34
+ (0, ttd_core_1.log_info)(`转换后${tokenSymbol}余额将低于最小保留额 ${minReserve} ${tokenSymbol},调整转换金额`);
35
35
  wrapAmount = nativeBalance.sub(minReserveBN);
36
36
  }
37
37
  }
38
38
  if (wrapAmount.lte(ethers_1.ethers.constants.Zero)) {
39
- (0, dist_1.log_info)(`计算的转换金额为0或负数,不执行转换`);
39
+ (0, ttd_core_1.log_info)(`计算的转换金额为0或负数,不执行转换`);
40
40
  return null;
41
41
  }
42
42
  const wrappedTokenContract = new ethers_1.ethers.Contract(wrappedTokenAddress, [
43
43
  "function deposit() external payable",
44
44
  "function withdraw(uint wad) external"
45
45
  ], wallet);
46
- (0, dist_1.log_info)(`准备将 ${ethers_1.ethers.utils.formatEther(wrapAmount)} ${tokenSymbol} 转换为 W${tokenSymbol}`);
46
+ (0, ttd_core_1.log_info)(`准备将 ${ethers_1.ethers.utils.formatEther(wrapAmount)} ${tokenSymbol} 转换为 W${tokenSymbol}`);
47
47
  const gasPrice = yield provider.getGasPrice();
48
48
  const txOptions = {
49
49
  value: wrapAmount,
@@ -52,13 +52,13 @@ class EVMGasHelper {
52
52
  };
53
53
  try {
54
54
  const tx = yield wrappedTokenContract.deposit(txOptions);
55
- (0, dist_1.log_info)(`${tokenSymbol}转换为W${tokenSymbol}交易已发送,txHash: ${tx.hash}`);
55
+ (0, ttd_core_1.log_info)(`${tokenSymbol}转换为W${tokenSymbol}交易已发送,txHash: ${tx.hash}`);
56
56
  yield tx.wait();
57
- (0, dist_1.log_info)(`${tokenSymbol}转换为W${tokenSymbol}交易已确认,txHash: ${tx.hash}`);
57
+ (0, ttd_core_1.log_info)(`${tokenSymbol}转换为W${tokenSymbol}交易已确认,txHash: ${tx.hash}`);
58
58
  return tx.hash;
59
59
  }
60
60
  catch (error) {
61
- (0, dist_1.log_error)(`${tokenSymbol}转换为W${tokenSymbol}失败: ${error.message}`, error);
61
+ (0, ttd_core_1.log_error)(`${tokenSymbol}转换为W${tokenSymbol}失败: ${error.message}`, error);
62
62
  throw error;
63
63
  }
64
64
  });
@@ -1,6 +1,7 @@
1
1
  import { ethers } from "ethers";
2
2
  import Decimal from "decimal.js";
3
3
  export * from './gas_helper';
4
+ export * from './trade_direction';
4
5
  export declare const sleep: (ms: number) => Promise<void>;
5
6
  export declare const formatPrice: (price: number, precision?: number) => string;
6
7
  export declare const formatUnits: (value: ethers.BigNumber, decimals: number) => Decimal;
@@ -21,6 +21,7 @@ exports.formatNumberHighPrecision = exports.formatUnits = exports.formatPrice =
21
21
  const ethers_1 = require("ethers");
22
22
  const decimal_js_1 = __importDefault(require("decimal.js"));
23
23
  __exportStar(require("./gas_helper"), exports);
24
+ __exportStar(require("./trade_direction"), exports);
24
25
  const sleep = (ms) => {
25
26
  return new Promise(resolve => setTimeout(resolve, ms));
26
27
  };
@@ -0,0 +1,15 @@
1
+ export interface TokenInfo {
2
+ symbol: string;
3
+ address: string;
4
+ decimals: number;
5
+ [key: string]: any;
6
+ }
7
+ export interface TradeDirectionResult {
8
+ isBuy: boolean;
9
+ inputToken: TokenInfo;
10
+ outputToken: TokenInfo;
11
+ baseToken: TokenInfo;
12
+ quoteToken: TokenInfo;
13
+ }
14
+ export declare function resolveTradeDirection(poolInfo: any, isBuy: boolean): TradeDirectionResult;
15
+ export declare function calculateStandardPrice(inputAmount: number, outputAmount: number, isBuy: boolean): string;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveTradeDirection = resolveTradeDirection;
4
+ exports.calculateStandardPrice = calculateStandardPrice;
5
+ function resolveTradeDirection(poolInfo, isBuy) {
6
+ const { tokenA, tokenB, quote_token } = poolInfo;
7
+ const quoteToken = [tokenA, tokenB].find((t) => t.symbol === quote_token);
8
+ const baseToken = [tokenA, tokenB].find((t) => t.symbol !== quote_token);
9
+ if (!quoteToken || !baseToken) {
10
+ throw new Error(`Cannot resolve tokens: tokenA=${tokenA === null || tokenA === void 0 ? void 0 : tokenA.symbol}, tokenB=${tokenB === null || tokenB === void 0 ? void 0 : tokenB.symbol}, quote_token=${quote_token}`);
11
+ }
12
+ const inputToken = isBuy ? quoteToken : baseToken;
13
+ const outputToken = isBuy ? baseToken : quoteToken;
14
+ return { isBuy, inputToken, outputToken, baseToken, quoteToken };
15
+ }
16
+ function calculateStandardPrice(inputAmount, outputAmount, isBuy) {
17
+ if (isBuy) {
18
+ return (inputAmount / outputAmount).toFixed(18);
19
+ }
20
+ else {
21
+ return (outputAmount / inputAmount).toFixed(18);
22
+ }
23
+ }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EventFilter = void 0;
4
- const dist_1 = require("@clonegod/ttd-core/dist");
4
+ const ttd_core_1 = require("@clonegod/ttd-core");
5
5
  class EventFilter {
6
6
  static initializeCleanup() {
7
7
  if (this.cleanupInitialized) {
@@ -21,7 +21,7 @@ class EventFilter {
21
21
  this.initializeCleanup();
22
22
  const key = `${poolAddress}-${blockNumber}-${eventType.toUpperCase()}`;
23
23
  if (this.poolEventMap.has(key)) {
24
- (0, dist_1.log_warn)(`Event ${eventType} already occurred on pool: ${poolAddress}, block: ${blockNumber}`);
24
+ (0, ttd_core_1.log_warn)(`Event ${eventType} already occurred on pool: ${poolAddress}, block: ${blockNumber}`);
25
25
  return false;
26
26
  }
27
27
  this.poolEventMap.set(key, Date.now());
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.subscribe_pool_price_from_yyws = subscribe_pool_price_from_yyws;
13
- const dist_1 = require("@clonegod/ttd-core/dist");
13
+ const ttd_core_1 = require("@clonegod/ttd-core");
14
14
  const ws_client_1 = require("@clonegod/ttd-core/dist/ws/ws_client");
15
15
  function subscribe_pool_price_from_yyws(poolInfoList, callback) {
16
16
  const ws_url = process.env.SUBSCIBE_YY_WS_URL || 'ws://43.165.135.114:10100/ws';
@@ -70,7 +70,7 @@ function log_yyws_price_msg(poolInfo, priceData) {
70
70
  const { poolAddress, token0, token1, askToken0InToken1, bidToken0InToken1, askToken1InToken0, bidToken1InToken0 } = poolPrice;
71
71
  line += `${token0}/${token1} - ${poolAddress} - ${askToken0InToken1} - ${bidToken0InToken1} - ${askToken1InToken0} - ${bidToken1InToken0}\n`;
72
72
  }
73
- (0, dist_1.appendLogWithPeriodicReset)("logs", `yyws-price-msg-${poolInfo.pool_address}.txt`, line, 10)
73
+ (0, ttd_core_1.appendLogWithPeriodicReset)("logs", `yyws-price-msg-${poolInfo.pool_address}.txt`, line, 10)
74
74
  .catch(err => console.error('log_yyws_price_msg error', err));
75
75
  });
76
76
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clonegod/ttd-bsc-common",
3
- "version": "1.0.90",
3
+ "version": "3.0.1",
4
4
  "description": "BSC common library",
5
5
  "license": "UNLICENSED",
6
6
  "main": "dist/index.js",
@@ -14,7 +14,8 @@
14
14
  "push": "npm run build && npm publish"
15
15
  },
16
16
  "dependencies": {
17
- "@clonegod/ttd-core": "2.1.35",
17
+ "@clonegod/ttd-core": "3.0.1",
18
+ "@clonegod/ttd-bsc-send-tx": "1.0.0",
18
19
  "axios": "^1.12.0",
19
20
  "dotenv": "^16.4.7",
20
21
  "ethers": "^5.8.0"
@@ -1,44 +0,0 @@
1
- import { AbastrcatTrade, AppConfig, TradeContext } from "@clonegod/ttd-core/dist";
2
- import { ethers } from "ethers";
3
- import { DexConfig, EvmChainConfig } from "../types";
4
- import { SimpleRedisClient } from "../redis";
5
- export declare abstract class AbstractEvmDexTradePlus extends AbastrcatTrade {
6
- protected appConfig: AppConfig;
7
- protected group_wallets: ethers.Wallet[];
8
- protected wallet: ethers.Wallet;
9
- protected provider: ethers.providers.JsonRpcProvider;
10
- protected walletMode: 'single' | 'multi';
11
- protected approvedTokens: Map<string, Map<string, boolean>>;
12
- protected pairContracts: Map<string, ethers.Contract>;
13
- protected tokenContracts: Map<string, ethers.Contract>;
14
- protected routerContract: ethers.Contract;
15
- protected chainConfig: EvmChainConfig;
16
- protected dexConfig: DexConfig;
17
- protected redisClient: SimpleRedisClient;
18
- protected chainNameLower: string;
19
- constructor(appConfig: AppConfig);
20
- protected abstract initConfigs(): void;
21
- init(): Promise<void>;
22
- protected getWalletMode(): 'single' | 'multi';
23
- protected getSingleWallet(): ethers.Wallet;
24
- protected getGroupWallets(): ethers.Wallet[];
25
- protected getTokenContract(tokenAddress: string): ethers.Contract;
26
- protected getTokenContractWithWallet(tokenAddress: string, wallet: ethers.Wallet): ethers.Contract;
27
- protected getGasPriceGwei(context: TradeContext): string;
28
- protected getBuilderTipAmoutGwei(context: TradeContext): string;
29
- preApproveAllWallets(token_list?: string[]): Promise<void>;
30
- private approveTokenIfNeeded;
31
- protected checkTradeTokenApprove(context: TradeContext, wallet: ethers.Wallet, routerAddress?: string): Promise<void>;
32
- protected checkTokenApprove(tokenAddress: string, tokenSymbol: string, tokenContract: ethers.Contract, spenderAddress: string, wallet: ethers.Wallet): Promise<boolean>;
33
- protected isNonceRelatedError(error: any): boolean;
34
- protected isNativeCurrency(symbol: string): boolean;
35
- protected getWrappedNativeAddress(): string;
36
- abstract execute(context: TradeContext, retryCount?: number): Promise<string>;
37
- protected buildTipTransferTx(to: string, transfer_amount_gwei: string, gas_price_gwei: string, transfer_nonce: number, wallet: ethers.Wallet): Promise<string>;
38
- protected chooseWallet(context: TradeContext): Promise<ethers.Wallet>;
39
- protected getWalletNextNonce(walletAddress: string): Promise<any>;
40
- protected determineInputOutputTokens(order_msg: any, pool_info: any): {
41
- inputToken: any;
42
- outputToken: any;
43
- };
44
- }