@clonegod/ttd-sui-common 1.0.35 → 1.0.36

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 (79) hide show
  1. package/dist/trade/abstract_sui_dex_trade_plus.d.ts +32 -0
  2. package/dist/trade/abstract_sui_dex_trade_plus.js +216 -0
  3. package/dist/trade/index.d.ts +1 -0
  4. package/dist/trade/index.js +1 -0
  5. package/dist/ttd-sui-common/src/constants/index.d.ts +4 -0
  6. package/dist/ttd-sui-common/src/constants/index.js +8 -0
  7. package/dist/ttd-sui-common/src/grpc/gas-price-cache.d.ts +21 -0
  8. package/dist/ttd-sui-common/src/grpc/gas-price-cache.js +83 -0
  9. package/dist/ttd-sui-common/src/grpc/grpc-connection.d.ts +13 -0
  10. package/dist/ttd-sui-common/src/grpc/grpc-connection.js +99 -0
  11. package/dist/ttd-sui-common/src/grpc/index.d.ts +7 -0
  12. package/dist/ttd-sui-common/src/grpc/index.js +17 -0
  13. package/dist/ttd-sui-common/src/grpc/ledger-service.d.ts +12 -0
  14. package/dist/ttd-sui-common/src/grpc/ledger-service.js +161 -0
  15. package/dist/ttd-sui-common/src/grpc/live-data-service.d.ts +10 -0
  16. package/dist/ttd-sui-common/src/grpc/live-data-service.js +107 -0
  17. package/dist/ttd-sui-common/src/grpc/subscription-service.d.ts +7 -0
  18. package/dist/ttd-sui-common/src/grpc/subscription-service.js +69 -0
  19. package/dist/ttd-sui-common/src/grpc/sui-grpc-client.d.ts +16 -0
  20. package/dist/ttd-sui-common/src/grpc/sui-grpc-client.js +38 -0
  21. package/dist/ttd-sui-common/src/grpc/transaction-service.d.ts +7 -0
  22. package/dist/ttd-sui-common/src/grpc/transaction-service.js +49 -0
  23. package/dist/ttd-sui-common/src/index.d.ts +9 -0
  24. package/dist/ttd-sui-common/src/index.js +25 -0
  25. package/dist/ttd-sui-common/src/quote/index.d.ts +1 -0
  26. package/dist/ttd-sui-common/src/quote/index.js +17 -0
  27. package/dist/ttd-sui-common/src/quote/pricing/index.d.ts +1 -0
  28. package/dist/ttd-sui-common/src/quote/pricing/index.js +17 -0
  29. package/dist/ttd-sui-common/src/quote/pricing/token_price_cache.d.ts +9 -0
  30. package/dist/ttd-sui-common/src/quote/pricing/token_price_cache.js +42 -0
  31. package/dist/ttd-sui-common/src/redis/index.d.ts +1 -0
  32. package/dist/ttd-sui-common/src/redis/index.js +17 -0
  33. package/dist/ttd-sui-common/src/redis/redis_client.d.ts +21 -0
  34. package/dist/ttd-sui-common/src/redis/redis_client.js +155 -0
  35. package/dist/ttd-sui-common/src/test/test.d.ts +1 -0
  36. package/dist/ttd-sui-common/src/test/test.js +126 -0
  37. package/dist/ttd-sui-common/src/test/test_checkpoint.d.ts +1 -0
  38. package/dist/ttd-sui-common/src/test/test_checkpoint.js +64 -0
  39. package/dist/ttd-sui-common/src/test/test_grpc.d.ts +1 -0
  40. package/dist/ttd-sui-common/src/test/test_grpc.js +84 -0
  41. package/dist/ttd-sui-common/src/trade/abstract_sui_dex_trade_plus.d.ts +32 -0
  42. package/dist/ttd-sui-common/src/trade/abstract_sui_dex_trade_plus.js +216 -0
  43. package/dist/ttd-sui-common/src/trade/check/index.d.ts +1 -0
  44. package/dist/ttd-sui-common/src/trade/check/index.js +5 -0
  45. package/dist/ttd-sui-common/src/trade/check/tx_result_checker.d.ts +13 -0
  46. package/dist/ttd-sui-common/src/trade/check/tx_result_checker.js +111 -0
  47. package/dist/ttd-sui-common/src/trade/index.d.ts +4 -0
  48. package/dist/ttd-sui-common/src/trade/index.js +20 -0
  49. package/dist/ttd-sui-common/src/trade/parse/index.d.ts +1 -0
  50. package/dist/ttd-sui-common/src/trade/parse/index.js +5 -0
  51. package/dist/ttd-sui-common/src/trade/parse/sui_tx_parser.d.ts +13 -0
  52. package/dist/ttd-sui-common/src/trade/parse/sui_tx_parser.js +167 -0
  53. package/dist/ttd-sui-common/src/trade/send_tx/index.d.ts +10 -0
  54. package/dist/ttd-sui-common/src/trade/send_tx/index.js +48 -0
  55. package/dist/ttd-sui-common/src/trade/test/test_parse_sui_tx_result.d.ts +1 -0
  56. package/dist/ttd-sui-common/src/trade/test/test_parse_sui_tx_result.js +105 -0
  57. package/dist/ttd-sui-common/src/type/index.d.ts +18 -0
  58. package/dist/ttd-sui-common/src/type/index.js +2 -0
  59. package/dist/ttd-sui-common/src/utils/checkpoint_parse.d.ts +0 -0
  60. package/dist/ttd-sui-common/src/utils/checkpoint_parse.js +0 -0
  61. package/dist/ttd-sui-common/src/utils/decode.d.ts +2 -0
  62. package/dist/ttd-sui-common/src/utils/decode.js +43 -0
  63. package/dist/ttd-sui-common/src/utils/format.d.ts +1 -0
  64. package/dist/ttd-sui-common/src/utils/format.js +18 -0
  65. package/dist/ttd-sui-common/src/utils/index.d.ts +2 -0
  66. package/dist/ttd-sui-common/src/utils/index.js +18 -0
  67. package/dist/ttd-sui-market-data/src/sui_objects/config_manager.d.ts +22 -0
  68. package/dist/ttd-sui-market-data/src/sui_objects/config_manager.js +169 -0
  69. package/dist/ttd-sui-market-data/src/sui_objects/example.d.ts +1 -0
  70. package/dist/ttd-sui-market-data/src/sui_objects/example.js +72 -0
  71. package/dist/ttd-sui-market-data/src/sui_objects/index.d.ts +6 -0
  72. package/dist/ttd-sui-market-data/src/sui_objects/index.js +15 -0
  73. package/dist/ttd-sui-market-data/src/sui_objects/object_mgt.d.ts +47 -0
  74. package/dist/ttd-sui-market-data/src/sui_objects/object_mgt.js +483 -0
  75. package/dist/ttd-sui-market-data/src/sui_objects/types.d.ts +60 -0
  76. package/dist/ttd-sui-market-data/src/sui_objects/types.js +24 -0
  77. package/dist/ttd-sui-market-data/src/sui_objects/version_checker.d.ts +30 -0
  78. package/dist/ttd-sui-market-data/src/sui_objects/version_checker.js +207 -0
  79. package/package.json +1 -1
@@ -0,0 +1,161 @@
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.LedgerService = void 0;
13
+ class LedgerService {
14
+ constructor(connection) {
15
+ this.connection = connection;
16
+ this.ledgerClient = connection.createServiceClient('ledger_service.proto', 'LedgerService');
17
+ }
18
+ getServiceInfo() {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ return new Promise((resolve, reject) => {
21
+ const request = {};
22
+ this.ledgerClient.GetServiceInfo(request, this.connection.getMetadata(), (error, response) => {
23
+ if (error)
24
+ reject(error);
25
+ else
26
+ resolve(response);
27
+ });
28
+ });
29
+ });
30
+ }
31
+ getEpoch(epoch_1) {
32
+ return __awaiter(this, arguments, void 0, function* (epoch, includeGasPrice = true) {
33
+ return new Promise((resolve, reject) => {
34
+ const request = {};
35
+ if (epoch)
36
+ request.epoch = epoch;
37
+ const paths = ['epoch'];
38
+ if (includeGasPrice) {
39
+ paths.push('reference_gas_price');
40
+ }
41
+ request.read_mask = {
42
+ paths: paths
43
+ };
44
+ this.ledgerClient.GetEpoch(request, this.connection.getMetadata(), (error, response) => {
45
+ if (error)
46
+ reject(error);
47
+ else
48
+ resolve(response);
49
+ });
50
+ });
51
+ });
52
+ }
53
+ getCheckpoint(checkpointId) {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ return new Promise((resolve, reject) => {
56
+ const request = checkpointId ? { digest: checkpointId } : {};
57
+ this.ledgerClient.GetCheckpoint(request, this.connection.getMetadata(), (error, response) => {
58
+ if (error)
59
+ reject(error);
60
+ else
61
+ resolve(response);
62
+ });
63
+ });
64
+ });
65
+ }
66
+ getObject(objectId, readMask) {
67
+ return __awaiter(this, void 0, void 0, function* () {
68
+ return new Promise((resolve, reject) => {
69
+ const request = {
70
+ object_id: objectId
71
+ };
72
+ if (readMask && readMask.length > 0) {
73
+ request.read_mask = {
74
+ paths: readMask
75
+ };
76
+ }
77
+ else {
78
+ request.read_mask = {
79
+ paths: [
80
+ "object_id",
81
+ "version",
82
+ "digest",
83
+ "owner",
84
+ "object_type",
85
+ "has_public_transfer",
86
+ "previous_transaction",
87
+ "storage_rebate",
88
+ "balance"
89
+ ]
90
+ };
91
+ }
92
+ this.ledgerClient.GetObject(request, this.connection.getMetadata(), (error, response) => {
93
+ if (error)
94
+ reject(error);
95
+ else {
96
+ resolve(response);
97
+ }
98
+ });
99
+ });
100
+ });
101
+ }
102
+ batchGetObjects(objectIds, readMask) {
103
+ return __awaiter(this, void 0, void 0, function* () {
104
+ return new Promise((resolve, reject) => {
105
+ const requests = objectIds.map(id => ({ object_id: id }));
106
+ const request = { requests };
107
+ if (readMask && readMask.length > 0) {
108
+ request.read_mask = {
109
+ paths: readMask
110
+ };
111
+ }
112
+ else {
113
+ request.read_mask = {
114
+ paths: [
115
+ "object_id",
116
+ "version",
117
+ "digest",
118
+ "owner",
119
+ "object_type",
120
+ "has_public_transfer",
121
+ "previous_transaction",
122
+ "storage_rebate",
123
+ "balance"
124
+ ]
125
+ };
126
+ }
127
+ this.ledgerClient.BatchGetObjects(request, this.connection.getMetadata(), (error, response) => {
128
+ if (error)
129
+ reject(error);
130
+ else {
131
+ resolve(response);
132
+ }
133
+ });
134
+ });
135
+ });
136
+ }
137
+ getTransaction(digest, readMask) {
138
+ return __awaiter(this, void 0, void 0, function* () {
139
+ return new Promise((resolve, reject) => {
140
+ const request = { digest };
141
+ if (readMask && readMask.length > 0) {
142
+ request.read_mask = {
143
+ paths: readMask
144
+ };
145
+ }
146
+ else {
147
+ request.read_mask = {
148
+ paths: ['digest', 'effects.gas_used', 'checkpoint', 'timestamp', 'balance_changes', 'input_objects', 'output_objects']
149
+ };
150
+ }
151
+ this.ledgerClient.GetTransaction(request, this.connection.getMetadata(), (error, response) => {
152
+ if (error)
153
+ reject(error);
154
+ else
155
+ resolve(response);
156
+ });
157
+ });
158
+ });
159
+ }
160
+ }
161
+ exports.LedgerService = LedgerService;
@@ -0,0 +1,10 @@
1
+ import { GrpcConnection } from './grpc-connection';
2
+ export declare class LiveDataService {
3
+ private liveDataClient;
4
+ private connection;
5
+ constructor(connection: GrpcConnection);
6
+ getBalance(owner: string, coinType: string): Promise<any>;
7
+ listBalances(owner: string): Promise<unknown>;
8
+ getCoinInfo(coinType: string): Promise<unknown>;
9
+ listOwnedObjects(owner: string, coinType?: string, limit?: number, readMask?: string[]): Promise<unknown>;
10
+ }
@@ -0,0 +1,107 @@
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.LiveDataService = void 0;
13
+ const utils_1 = require("../utils");
14
+ class LiveDataService {
15
+ constructor(connection) {
16
+ this.connection = connection;
17
+ this.liveDataClient = connection.createServiceClient('live_data_service.proto', 'LiveDataService');
18
+ }
19
+ getBalance(owner, coinType) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ if (!owner) {
22
+ throw new Error('owner 参数是必需的');
23
+ }
24
+ if (!coinType) {
25
+ coinType = '0x2::sui::SUI';
26
+ }
27
+ return new Promise((resolve, reject) => {
28
+ const request = {
29
+ owner: owner,
30
+ coin_type: coinType
31
+ };
32
+ this.liveDataClient.GetBalance(request, this.connection.getMetadata(), (error, response) => {
33
+ if (error)
34
+ reject(error);
35
+ else
36
+ resolve(response);
37
+ });
38
+ });
39
+ });
40
+ }
41
+ listBalances(owner) {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ return new Promise((resolve, reject) => {
44
+ this.liveDataClient.ListBalances({ owner }, this.connection.getMetadata(), (error, response) => {
45
+ if (error)
46
+ reject(error);
47
+ else
48
+ resolve(response);
49
+ });
50
+ });
51
+ });
52
+ }
53
+ getCoinInfo(coinType) {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ return new Promise((resolve, reject) => {
56
+ this.liveDataClient.GetCoinInfo({ coin_type: coinType }, this.connection.getMetadata(), (error, response) => {
57
+ if (error)
58
+ reject(error);
59
+ else
60
+ resolve(response);
61
+ });
62
+ });
63
+ });
64
+ }
65
+ listOwnedObjects(owner, coinType, limit, readMask) {
66
+ return __awaiter(this, void 0, void 0, function* () {
67
+ return new Promise((resolve, reject) => {
68
+ const request = { owner };
69
+ if (coinType) {
70
+ const objectType = coinType.startsWith('0x2::coin::Coin<')
71
+ ? coinType
72
+ : `0x2::coin::Coin<${coinType}>`;
73
+ request.object_type = objectType;
74
+ }
75
+ if (limit)
76
+ request.page_size = limit;
77
+ if (readMask && readMask.length > 0) {
78
+ request.read_mask = {
79
+ paths: readMask
80
+ };
81
+ }
82
+ else {
83
+ request.read_mask = {
84
+ paths: [
85
+ "object_id",
86
+ "version",
87
+ "digest",
88
+ "owner",
89
+ "object_type",
90
+ "storage_rebate",
91
+ "balance"
92
+ ]
93
+ };
94
+ }
95
+ this.liveDataClient.ListOwnedObjects(request, this.connection.getMetadata(), (error, response) => {
96
+ if (error)
97
+ reject(error);
98
+ else {
99
+ let res = (0, utils_1.decodeBytes)(response);
100
+ resolve(res);
101
+ }
102
+ });
103
+ });
104
+ });
105
+ }
106
+ }
107
+ exports.LiveDataService = LiveDataService;
@@ -0,0 +1,7 @@
1
+ import { GrpcConnection } from './grpc-connection';
2
+ export declare class SubscriptionService {
3
+ private subscriptionClient;
4
+ private connection;
5
+ constructor(connection: GrpcConnection);
6
+ subscribeCheckpoints(onCheckpoint: (response: any) => void, onError: (error: any) => void, readMask?: string[]): any;
7
+ }
@@ -0,0 +1,69 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SubscriptionService = void 0;
37
+ const dotenv = __importStar(require("dotenv"));
38
+ dotenv.config();
39
+ class SubscriptionService {
40
+ constructor(connection) {
41
+ this.connection = connection;
42
+ this.subscriptionClient = connection.createServiceClient('subscription_service.proto', 'SubscriptionService');
43
+ }
44
+ subscribeCheckpoints(onCheckpoint, onError, readMask) {
45
+ const request = {};
46
+ if (!readMask || readMask.length === 0) {
47
+ readMask = [
48
+ 'sequence_number',
49
+ 'digest',
50
+ 'summary',
51
+ 'transactions',
52
+ ];
53
+ }
54
+ request.read_mask = { paths: readMask };
55
+ const stream = this.subscriptionClient.SubscribeCheckpoints(request, this.connection.getMetadata());
56
+ stream.on('data', (response) => {
57
+ onCheckpoint(response);
58
+ });
59
+ stream.on('error', (error) => {
60
+ console.error('订阅检查点流错误:', error);
61
+ onError(error);
62
+ });
63
+ stream.on('end', () => {
64
+ console.log('检查点流订阅结束');
65
+ });
66
+ return stream;
67
+ }
68
+ }
69
+ exports.SubscriptionService = SubscriptionService;
@@ -0,0 +1,16 @@
1
+ import { LedgerService } from "./ledger-service";
2
+ import { LiveDataService } from "./live-data-service";
3
+ import { SubscriptionService } from "./subscription-service";
4
+ import { TransactionService } from "./transaction-service";
5
+ import { GasPriceCache } from "./gas-price-cache";
6
+ export declare class SuiGrpcClient {
7
+ ledgerService: LedgerService;
8
+ transactionService: TransactionService;
9
+ liveDataService: LiveDataService;
10
+ subscriptionService: SubscriptionService;
11
+ gasPriceCache: GasPriceCache;
12
+ gas_price: number;
13
+ constructor();
14
+ init(): void;
15
+ get_gas_price(): Promise<number>;
16
+ }
@@ -0,0 +1,38 @@
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.SuiGrpcClient = void 0;
13
+ const grpc_connection_1 = require("./grpc-connection");
14
+ const ledger_service_1 = require("./ledger-service");
15
+ const live_data_service_1 = require("./live-data-service");
16
+ const subscription_service_1 = require("./subscription-service");
17
+ const transaction_service_1 = require("./transaction-service");
18
+ const gas_price_cache_1 = require("./gas-price-cache");
19
+ class SuiGrpcClient {
20
+ constructor() {
21
+ this.gas_price = 0;
22
+ this.init();
23
+ }
24
+ init() {
25
+ const grpcClient = grpc_connection_1.GrpcConnection.getInstance(process.env.SUI_GRPC_ENDPOINT, process.env.SUI_GRPC_TOKEN);
26
+ this.ledgerService = new ledger_service_1.LedgerService(grpcClient);
27
+ this.transactionService = new transaction_service_1.TransactionService(grpcClient);
28
+ this.liveDataService = new live_data_service_1.LiveDataService(grpcClient);
29
+ this.subscriptionService = new subscription_service_1.SubscriptionService(grpcClient);
30
+ this.gasPriceCache = gas_price_cache_1.GasPriceCache.getInstance(this.ledgerService);
31
+ }
32
+ get_gas_price() {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ return yield this.gasPriceCache.getGasPrice();
35
+ });
36
+ }
37
+ }
38
+ exports.SuiGrpcClient = SuiGrpcClient;
@@ -0,0 +1,7 @@
1
+ import { GrpcConnection } from './grpc-connection';
2
+ export declare class TransactionService {
3
+ private transactionClient;
4
+ private connection;
5
+ constructor(connection: GrpcConnection);
6
+ executeTransaction(transactionBytes: Uint8Array, signatureBytes: Uint8Array, fields?: string[]): Promise<unknown>;
7
+ }
@@ -0,0 +1,49 @@
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.TransactionService = void 0;
13
+ class TransactionService {
14
+ constructor(connection) {
15
+ this.connection = connection;
16
+ this.transactionClient = connection.createServiceClient('transaction_execution_service.proto', 'TransactionExecutionService');
17
+ }
18
+ executeTransaction(transactionBytes_1, signatureBytes_1) {
19
+ return __awaiter(this, arguments, void 0, function* (transactionBytes, signatureBytes, fields = ['transaction', 'finality']) {
20
+ return new Promise((resolve, reject) => {
21
+ const request = {
22
+ transaction: {
23
+ bcs: {
24
+ value: transactionBytes
25
+ }
26
+ },
27
+ signatures: [
28
+ {
29
+ scheme: 0,
30
+ bcs: {
31
+ value: signatureBytes
32
+ }
33
+ }
34
+ ],
35
+ read_mask: {
36
+ paths: fields
37
+ }
38
+ };
39
+ this.transactionClient.ExecuteTransaction(request, this.connection.getMetadata(), (error, response) => {
40
+ if (error)
41
+ reject(error);
42
+ else
43
+ resolve(response);
44
+ });
45
+ });
46
+ });
47
+ }
48
+ }
49
+ exports.TransactionService = TransactionService;
@@ -0,0 +1,9 @@
1
+ export * from './quote';
2
+ export * from './grpc';
3
+ export * from './utils';
4
+ export * from './type';
5
+ export * from './grpc';
6
+ export * from './utils';
7
+ export * from './constants';
8
+ export * from './trade';
9
+ export * from './redis';
@@ -0,0 +1,25 @@
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("./quote"), exports);
18
+ __exportStar(require("./grpc"), exports);
19
+ __exportStar(require("./utils"), exports);
20
+ __exportStar(require("./type"), exports);
21
+ __exportStar(require("./grpc"), exports);
22
+ __exportStar(require("./utils"), exports);
23
+ __exportStar(require("./constants"), exports);
24
+ __exportStar(require("./trade"), exports);
25
+ __exportStar(require("./redis"), exports);
@@ -0,0 +1 @@
1
+ export * from './pricing';
@@ -0,0 +1,17 @@
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("./pricing"), exports);
@@ -0,0 +1 @@
1
+ export * from './token_price_cache';
@@ -0,0 +1,17 @@
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("./token_price_cache"), exports);
@@ -0,0 +1,9 @@
1
+ export declare class TokenPriceCache {
2
+ private tokenPriceCache;
3
+ private readonly PRICE_CACHE_TIMEOUT_MILLS;
4
+ constructor();
5
+ getTokenPrice(tokenAddress: string): Promise<{
6
+ price: string;
7
+ timestamp: number;
8
+ }>;
9
+ }
@@ -0,0 +1,42 @@
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.TokenPriceCache = void 0;
13
+ const dist_1 = require("@clonegod/ttd-core/dist");
14
+ class TokenPriceCache {
15
+ constructor() {
16
+ this.tokenPriceCache = new Map();
17
+ this.PRICE_CACHE_TIMEOUT_MILLS = parseInt(process.env.PRICE_CACHE_TIMEOUT_MILLS || Number(1000 * 60 * 60 * 1).toString());
18
+ (0, dist_1.log_info)(`代币价格缓存超时时间: ${this.PRICE_CACHE_TIMEOUT_MILLS} ms`);
19
+ }
20
+ getTokenPrice(tokenAddress) {
21
+ return __awaiter(this, void 0, void 0, function* () {
22
+ let tokenParts = tokenAddress.split('::');
23
+ tokenParts[0] = tokenParts[0].toLowerCase();
24
+ tokenAddress = tokenParts.join('::');
25
+ const now = Date.now();
26
+ const cachedData = this.tokenPriceCache.get(tokenAddress);
27
+ if (cachedData && (now - cachedData.timestamp) < this.PRICE_CACHE_TIMEOUT_MILLS) {
28
+ (0, dist_1.log_debug)(`use cached token price: ${tokenAddress}, price: ${cachedData.price}`, '');
29
+ return cachedData;
30
+ }
31
+ const priceMap = yield (0, dist_1.get_sui_token_price_info)([tokenAddress]);
32
+ const tokenPrice = priceMap.get(tokenAddress);
33
+ if (!tokenPrice || !tokenPrice.price || Number(tokenPrice.price) <= 0) {
34
+ throw new Error(`无法获取代币 ${tokenAddress} 的有效USD价格`);
35
+ }
36
+ const newPrice = { price: tokenPrice.price, timestamp: now };
37
+ this.tokenPriceCache.set(tokenAddress, newPrice);
38
+ return newPrice;
39
+ });
40
+ }
41
+ }
42
+ exports.TokenPriceCache = TokenPriceCache;
@@ -0,0 +1 @@
1
+ export * from "./redis_client";
@@ -0,0 +1,17 @@
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("./redis_client"), exports);
@@ -0,0 +1,21 @@
1
+ import { RedisClientType } from "redis";
2
+ export declare class SimpleRedisClient {
3
+ private lock_prefix;
4
+ private redisClient;
5
+ private lockMaxRetries;
6
+ private lockRetryDelayMs;
7
+ private lockExpireSeconds;
8
+ constructor(lock_prefix: string);
9
+ getRedisClient(): Promise<RedisClientType>;
10
+ private getLockKey;
11
+ private acquireLock;
12
+ private releaseLock;
13
+ withLock<T>(lock_identifier: string, callback: () => Promise<T>, release_lock_delay_ms?: number): Promise<T>;
14
+ getValue(key: string): Promise<string>;
15
+ setValue(key: string, value: string, expireSeconds: number): Promise<any>;
16
+ hsetValue(key: string, field: string, value: string, expireSeconds: number): Promise<any>;
17
+ hgetvalue(key: string, field: string): Promise<any>;
18
+ hkeys(key: string): Promise<any>;
19
+ hgetall(key: string): Promise<any>;
20
+ del(key: string, field?: string): Promise<any>;
21
+ }