@ercworldio/blockchain-shared 1.0.1-dev.2 → 1.0.1-dev.20
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/build/chains/networks_dev.json +28 -7
- package/build/chains/networks_prod-bu.json +14 -7
- package/build/chains/networks_prod-dz.json +12 -6
- package/build/chains/networks_stg-bu.json +14 -7
- package/build/chains/networks_stg-dz.json +38 -20
- package/build/entities/DepositAddress.d.ts +1 -0
- package/build/entities/DepositAddress.d.ts.map +1 -1
- package/build/entities/DepositAddress.js +6 -2
- package/build/entities/DepositAddressArchive.d.ts +14 -0
- package/build/entities/DepositAddressArchive.d.ts.map +1 -0
- package/build/entities/DepositAddressArchive.js +66 -0
- package/build/index.d.ts +2 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +5 -2
- package/build/interfaces/database.d.ts +2 -0
- package/build/interfaces/database.d.ts.map +1 -1
- package/build/services/AlchemyWebhookAddressManager.d.ts.map +1 -1
- package/build/services/AlchemyWebhookAddressManager.js +3 -1
- package/build/services/BalanceService.d.ts +9 -0
- package/build/services/BalanceService.d.ts.map +1 -1
- package/build/services/BalanceService.js +93 -0
- package/build/services/DepositAddressArchiveService.d.ts +33 -0
- package/build/services/DepositAddressArchiveService.d.ts.map +1 -0
- package/build/services/DepositAddressArchiveService.js +140 -0
- package/build/services/DepositAddressService.d.ts +3 -1
- package/build/services/DepositAddressService.d.ts.map +1 -1
- package/build/services/DepositAddressService.js +5 -1
- package/build/services/WalletManager.d.ts +2 -2
- package/build/services/WalletManager.d.ts.map +1 -1
- package/build/services/WalletManager.js +6 -17
- package/build/services/quicknode-notifications/QnWebhookAddressManager.d.ts +5 -3
- package/build/services/quicknode-notifications/QnWebhookAddressManager.d.ts.map +1 -1
- package/build/services/quicknode-notifications/QnWebhookAddressManager.js +55 -46
- package/build/services/quicknode-notifications/SetupNotifications.d.ts +1 -0
- package/build/services/quicknode-notifications/SetupNotifications.d.ts.map +1 -1
- package/build/services/quicknode-notifications/SetupNotifications.js +29 -2
- package/build/services/types/chain_manager.d.ts +5 -0
- package/build/services/types/chain_manager.d.ts.map +1 -1
- package/build/services/types/wallet_manager.d.ts +1 -0
- package/build/services/types/wallet_manager.d.ts.map +1 -1
- package/build/utils/Logger.d.ts.map +1 -1
- package/build/utils/Logger.js +13 -2
- package/build/utils/solana.d.ts +2 -1
- package/build/utils/solana.d.ts.map +1 -1
- package/build/utils/solana.js +28 -3
- package/package.json +1 -1
|
@@ -12,18 +12,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const AsyncTTLCache_1 = __importDefault(require("../../utils/AsyncTTLCache"));
|
|
15
16
|
const ChainManager_1 = __importDefault(require("../ChainManager"));
|
|
17
|
+
const DepositAddressService_1 = __importDefault(require("../DepositAddressService"));
|
|
16
18
|
const QnNotificationsApi_1 = __importDefault(require("./QnNotificationsApi"));
|
|
17
19
|
const CACHE_TTL_MS = 10 * 60 * 1000; // 10 minutes
|
|
20
|
+
const ADDRESS_SYNC_BATCH_SIZE = 500;
|
|
21
|
+
const ADDRESS_LOG_THRESHOLD = 1000;
|
|
18
22
|
class QnWebhookAddressManager {
|
|
19
|
-
constructor(config, rlc) {
|
|
20
|
-
this.cache =
|
|
23
|
+
constructor(config, db, rlc) {
|
|
24
|
+
this.cache = AsyncTTLCache_1.default.create(CACHE_TTL_MS);
|
|
21
25
|
this.config = config;
|
|
22
26
|
this.api = QnNotificationsApi_1.default.getInstance(config, rlc);
|
|
27
|
+
this.db = db;
|
|
23
28
|
}
|
|
24
|
-
static getInstance(config, rlc) {
|
|
29
|
+
static getInstance(config, db, rlc) {
|
|
25
30
|
if (!this.instance) {
|
|
26
|
-
this.instance = new QnWebhookAddressManager(config, rlc);
|
|
31
|
+
this.instance = new QnWebhookAddressManager(config, db, rlc);
|
|
27
32
|
}
|
|
28
33
|
return this.instance;
|
|
29
34
|
}
|
|
@@ -54,40 +59,27 @@ class QnWebhookAddressManager {
|
|
|
54
59
|
.flatMap(([_, cfg]) => cfg.quicknodeNotificationConfig.map(n => (Object.assign(Object.assign({}, n), { blockchain: cfg.blockchainType }))))
|
|
55
60
|
.filter((n, i, arr) => arr.findIndex(x => x.name === n.name) === i);
|
|
56
61
|
}
|
|
57
|
-
|
|
58
|
-
const cached = this.cache.get(blockchain);
|
|
59
|
-
if (!cached)
|
|
60
|
-
return true;
|
|
61
|
-
return Date.now() - cached.loaded_at > CACHE_TTL_MS;
|
|
62
|
-
}
|
|
63
|
-
load(blockchain) {
|
|
62
|
+
load_entries(blockchain) {
|
|
64
63
|
return __awaiter(this, void 0, void 0, function* () {
|
|
65
|
-
var _a;
|
|
66
64
|
const notif_configs = this.get_notif_configs(blockchain);
|
|
67
65
|
if (notif_configs.length === 0)
|
|
68
|
-
return;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
catch (error) {
|
|
75
|
-
console.error(`QnWebhookAddressManager: Failed to fetch webhooks for blockchain=${blockchain}`, error);
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
66
|
+
return [];
|
|
67
|
+
const res = yield this.api.get_all_webhooks();
|
|
68
|
+
const all_webhooks = res.data || [];
|
|
69
|
+
const addresses = yield this.fetch_all_db_addresses(blockchain);
|
|
70
|
+
console.log(`Loaded ${addresses.length} addresses from db`);
|
|
78
71
|
const entries = [];
|
|
79
72
|
for (const notif_config of notif_configs) {
|
|
80
73
|
const existing = all_webhooks.find(w => {
|
|
81
|
-
var _a, _b;
|
|
74
|
+
var _a, _b, _c;
|
|
82
75
|
return ((_a = w.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === notif_config.name.toLowerCase() &&
|
|
83
|
-
((_b = w.network) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === notif_config.network.toLowerCase()
|
|
76
|
+
((_b = w.network) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === notif_config.network.toLowerCase() &&
|
|
77
|
+
!((_c = w.name) === null || _c === void 0 ? void 0 : _c.includes('escrow'));
|
|
84
78
|
});
|
|
85
79
|
if (!existing) {
|
|
86
80
|
console.warn(`QnWebhookAddressManager: No webhook found for config=${notif_config.name} network=${notif_config.network}`);
|
|
87
81
|
continue;
|
|
88
82
|
}
|
|
89
|
-
const arg_key = notif_config.template === 'solanaWalletFilter' ? 'accounts' : 'wallets';
|
|
90
|
-
const addresses = ((_a = existing.templateArgs) === null || _a === void 0 ? void 0 : _a[arg_key]) || [];
|
|
91
83
|
entries.push({
|
|
92
84
|
webhook_id: existing.id,
|
|
93
85
|
name: notif_config.name.toLowerCase(),
|
|
@@ -96,16 +88,12 @@ class QnWebhookAddressManager {
|
|
|
96
88
|
address_set: new Set(addresses),
|
|
97
89
|
});
|
|
98
90
|
}
|
|
99
|
-
|
|
91
|
+
return entries;
|
|
100
92
|
});
|
|
101
93
|
}
|
|
102
94
|
ensure_loaded(blockchain) {
|
|
103
95
|
return __awaiter(this, void 0, void 0, function* () {
|
|
104
|
-
|
|
105
|
-
if (this.is_stale(blockchain)) {
|
|
106
|
-
yield this.load(blockchain);
|
|
107
|
-
}
|
|
108
|
-
return ((_a = this.cache.get(blockchain)) === null || _a === void 0 ? void 0 : _a.entries) || [];
|
|
96
|
+
return this.cache.get_value(blockchain, blockchain, (bc) => this.load_entries(bc));
|
|
109
97
|
});
|
|
110
98
|
}
|
|
111
99
|
matches_key(entry, key) {
|
|
@@ -114,11 +102,12 @@ class QnWebhookAddressManager {
|
|
|
114
102
|
add_address(blockchain, address) {
|
|
115
103
|
return __awaiter(this, void 0, void 0, function* () {
|
|
116
104
|
const entries = yield this.ensure_loaded(blockchain);
|
|
105
|
+
console.log(`Pushing ${entries.length} addresses: `, entries);
|
|
106
|
+
console.log(`Pushed ${entries.length} addresses `);
|
|
117
107
|
for (const entry of entries) {
|
|
118
|
-
if (entry.address_set.has(address))
|
|
119
|
-
continue;
|
|
120
108
|
entry.address_set.add(address);
|
|
121
109
|
try {
|
|
110
|
+
console.log(`add_address : Adding addresses: `, entry.address_set);
|
|
122
111
|
yield this.api.update_webhook_addresses(entry.webhook_id, entry.template, Array.from(entry.address_set));
|
|
123
112
|
console.log(`QnWebhookAddressManager: Added ${address} to ${entry.name} webhook`);
|
|
124
113
|
}
|
|
@@ -133,12 +122,12 @@ class QnWebhookAddressManager {
|
|
|
133
122
|
}
|
|
134
123
|
remove_address(blockchain, address) {
|
|
135
124
|
return __awaiter(this, void 0, void 0, function* () {
|
|
125
|
+
console.log(`Ensuring loaded...`);
|
|
136
126
|
const entries = yield this.ensure_loaded(blockchain);
|
|
137
127
|
for (const entry of entries) {
|
|
138
|
-
if (!entry.address_set.has(address))
|
|
139
|
-
continue;
|
|
140
128
|
entry.address_set.delete(address);
|
|
141
129
|
try {
|
|
130
|
+
console.log(`remove_address: Updating webhook addresses to :`, Array.from(entry.address_set));
|
|
142
131
|
yield this.api.update_webhook_addresses(entry.webhook_id, entry.template, Array.from(entry.address_set));
|
|
143
132
|
console.log(`QnWebhookAddressManager: Removed ${address} from ${entry.name} webhook`);
|
|
144
133
|
}
|
|
@@ -165,10 +154,10 @@ class QnWebhookAddressManager {
|
|
|
165
154
|
const entries = (yield this.ensure_loaded(blockchain))
|
|
166
155
|
.filter(e => keys.some(k => this.matches_key(e, k)));
|
|
167
156
|
for (const entry of entries) {
|
|
168
|
-
if (entry.address_set.has(address))
|
|
169
|
-
|
|
170
|
-
entry.address_set.add(address);
|
|
157
|
+
if (!entry.address_set.has(address) && !entry.address_set.has(address.toLowerCase()))
|
|
158
|
+
entry.address_set.add(address);
|
|
171
159
|
try {
|
|
160
|
+
console.log(`add_address_to_chain: Updating webhook addresses. new set ${entry.address_set.size} addresses`);
|
|
172
161
|
yield this.api.update_webhook_addresses(entry.webhook_id, entry.template, Array.from(entry.address_set));
|
|
173
162
|
console.log(`QnWebhookAddressManager: Added ${address} to ${entry.name} webhook (chain ${chain_id})`);
|
|
174
163
|
}
|
|
@@ -195,10 +184,10 @@ class QnWebhookAddressManager {
|
|
|
195
184
|
const entries = (yield this.ensure_loaded(blockchain))
|
|
196
185
|
.filter(e => keys.some(k => this.matches_key(e, k)));
|
|
197
186
|
for (const entry of entries) {
|
|
198
|
-
if (
|
|
199
|
-
|
|
200
|
-
entry.address_set.delete(address);
|
|
187
|
+
if (entry.address_set.has(address) || entry.address_set.has(address.toLowerCase()))
|
|
188
|
+
entry.address_set.delete(address);
|
|
201
189
|
try {
|
|
190
|
+
console.log(`remove_address_from_chain: Updating webhook addresses. new set ${entry.address_set.size} addresses`);
|
|
202
191
|
yield this.api.update_webhook_addresses(entry.webhook_id, entry.template, Array.from(entry.address_set));
|
|
203
192
|
console.log(`QnWebhookAddressManager: Removed ${address} from ${entry.name} webhook (chain ${chain_id})`);
|
|
204
193
|
}
|
|
@@ -222,10 +211,9 @@ class QnWebhookAddressManager {
|
|
|
222
211
|
const entries = (yield this.ensure_loaded(blockchain))
|
|
223
212
|
.filter(e => !exclude_keys.some(k => this.matches_key(e, k)));
|
|
224
213
|
for (const entry of entries) {
|
|
225
|
-
if (entry.address_set.has(address))
|
|
226
|
-
continue;
|
|
227
214
|
entry.address_set.add(address);
|
|
228
215
|
try {
|
|
216
|
+
console.log(`sync_add_to_remaining: Updating webhook addresses. new set ${entry.address_set.size} addresses`);
|
|
229
217
|
yield this.api.update_webhook_addresses(entry.webhook_id, entry.template, Array.from(entry.address_set));
|
|
230
218
|
console.log(`QnWebhookAddressManager: Synced add ${address} to ${entry.name} webhook`);
|
|
231
219
|
}
|
|
@@ -247,10 +235,9 @@ class QnWebhookAddressManager {
|
|
|
247
235
|
const entries = (yield this.ensure_loaded(blockchain))
|
|
248
236
|
.filter(e => !exclude_keys.some(k => this.matches_key(e, k)));
|
|
249
237
|
for (const entry of entries) {
|
|
250
|
-
if (!entry.address_set.has(address))
|
|
251
|
-
continue;
|
|
252
238
|
entry.address_set.delete(address);
|
|
253
239
|
try {
|
|
240
|
+
console.log(`sync_remove_from_remaining: Updating webhook addresses. new set ${entry.address_set.size} addresses`);
|
|
254
241
|
yield this.api.update_webhook_addresses(entry.webhook_id, entry.template, Array.from(entry.address_set));
|
|
255
242
|
console.log(`QnWebhookAddressManager: Synced remove ${address} from ${entry.name} webhook`);
|
|
256
243
|
}
|
|
@@ -261,5 +248,27 @@ class QnWebhookAddressManager {
|
|
|
261
248
|
}
|
|
262
249
|
});
|
|
263
250
|
}
|
|
251
|
+
// Get all custodial addresses for monitoring
|
|
252
|
+
fetch_all_db_addresses(blockchain) {
|
|
253
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
254
|
+
const service = new DepositAddressService_1.default(this.db);
|
|
255
|
+
const addresses = [];
|
|
256
|
+
let page = 1;
|
|
257
|
+
const page_size = ADDRESS_SYNC_BATCH_SIZE;
|
|
258
|
+
while (true) {
|
|
259
|
+
const result = yield service.getDepositAddressesPaginated(page, page_size, { blockchain });
|
|
260
|
+
for (const item of result.items) {
|
|
261
|
+
addresses.push(item.address);
|
|
262
|
+
}
|
|
263
|
+
if (!result.has_next)
|
|
264
|
+
break;
|
|
265
|
+
page++;
|
|
266
|
+
}
|
|
267
|
+
if (addresses.length > ADDRESS_LOG_THRESHOLD) {
|
|
268
|
+
console.warn(`QnWebhookAddressManager: ${addresses.length} addresses fetched for blockchain=${blockchain} — ensure QN webhook limit is sufficient`);
|
|
269
|
+
}
|
|
270
|
+
return addresses;
|
|
271
|
+
});
|
|
272
|
+
}
|
|
264
273
|
}
|
|
265
274
|
exports.default = QnWebhookAddressManager;
|
|
@@ -27,6 +27,7 @@ declare class SetupNotifications extends BaseErrors {
|
|
|
27
27
|
* The `blockchain` filter value in DepositAddressService is the string stored
|
|
28
28
|
* in the DB — e.g. "solana", "evm", "ethereum", etc.
|
|
29
29
|
*/
|
|
30
|
+
private fetch_contract_addresses;
|
|
30
31
|
private fetch_all_db_addresses;
|
|
31
32
|
/**
|
|
32
33
|
* Register a newly-created webhook entry in the internal maps.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SetupNotifications.d.ts","sourceRoot":"","sources":["../../../src/services/quicknode-notifications/SetupNotifications.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SetupNotifications.d.ts","sourceRoot":"","sources":["../../../src/services/quicknode-notifications/SetupNotifications.ts"],"names":[],"mappings":"AAEA,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAiB,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAUlE,MAAM,WAAW,wBAAwB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,cAAc,CAAC;IAC3B,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC5B;AAWD,cAAM,kBAAmB,SAAQ,UAAU;IACvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqB;IAC5C,OAAO,CAAC,GAAG,CAAqB;IAEhC,OAAO,CAAC,WAAW,CAAoD;IAEvE,OAAO,CAAC,aAAa,CAA8D;IAEnF,OAAO,CAAC,eAAe,CAAqD;IAC5E,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,EAAE,CAAgB;IAC1B,OAAO;IAOP,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,kBAAkB,GAAG,kBAAkB;IAO5F,mBAAmB,IAAI,MAAM,EAAE;IAI/B,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS;IAOhF;;;;OAIG;YACW,wBAAwB;YAoBxB,sBAAsB;IAuBpC;;OAEG;IACH,OAAO,CAAC,cAAc;IAOT,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA0H3B,WAAW,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyDvE,cAAc,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAe1F;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -12,11 +12,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
16
|
+
const constants_1 = require("../../constants");
|
|
15
17
|
const errors_1 = __importDefault(require("../../errors/errors"));
|
|
16
18
|
const ChainManager_1 = __importDefault(require("../ChainManager"));
|
|
17
19
|
const DepositAddressService_1 = __importDefault(require("../DepositAddressService"));
|
|
18
20
|
const QuicknodeWebhookSignature_1 = __importDefault(require("../QuicknodeWebhookSignature"));
|
|
19
21
|
const QnNotificationsApi_1 = __importDefault(require("./QnNotificationsApi"));
|
|
22
|
+
const Wallets_1 = require("../../utils/Wallets");
|
|
23
|
+
const __1 = require("../..");
|
|
20
24
|
const ADDRESS_SYNC_BATCH_SIZE = 500;
|
|
21
25
|
const ADDRESS_LOG_THRESHOLD = 1000;
|
|
22
26
|
class SetupNotifications extends errors_1.default {
|
|
@@ -53,6 +57,27 @@ class SetupNotifications extends errors_1.default {
|
|
|
53
57
|
* The `blockchain` filter value in DepositAddressService is the string stored
|
|
54
58
|
* in the DB — e.g. "solana", "evm", "ethereum", etc.
|
|
55
59
|
*/
|
|
60
|
+
fetch_contract_addresses(notif_config) {
|
|
61
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
+
var _a;
|
|
63
|
+
if (!notif_config.chain_id) {
|
|
64
|
+
console.warn(`SetupNotifications: source='contract' but no chain_id set for ${notif_config.name} — skipping`);
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
const chain_manager = ChainManager_1.default.getInstance(this.config);
|
|
68
|
+
const escrow_config = chain_manager.getEscrowContractForChain(notif_config.chain_id);
|
|
69
|
+
// Derive vault authority for solana escrow program
|
|
70
|
+
if (notif_config.chain_id !== undefined && notif_config.blockchain === constants_1.BLOCKCHAINS.SOLANA) {
|
|
71
|
+
const chain_manager = ChainManager_1.default.getInstance(this.config);
|
|
72
|
+
const escrow_config = chain_manager.getEscrowContractForChain(parseInt(notif_config.chain_id.toString()));
|
|
73
|
+
// TODO handle multiple escrow contracts on solana
|
|
74
|
+
const escrow_program_pubkey = new web3_js_1.PublicKey((0, Wallets_1.normalizeAddress)(escrow_config.addresses[0], "solana"));
|
|
75
|
+
const vault_authority = __1.EscrowService.findVaultAuthorityPda(escrow_program_pubkey);
|
|
76
|
+
return [vault_authority.toString()];
|
|
77
|
+
}
|
|
78
|
+
return (_a = escrow_config === null || escrow_config === void 0 ? void 0 : escrow_config.addresses) !== null && _a !== void 0 ? _a : [];
|
|
79
|
+
});
|
|
80
|
+
}
|
|
56
81
|
fetch_all_db_addresses(blockchain) {
|
|
57
82
|
return __awaiter(this, void 0, void 0, function* () {
|
|
58
83
|
const service = new DepositAddressService_1.default(this.db);
|
|
@@ -117,8 +142,10 @@ class SetupNotifications extends errors_1.default {
|
|
|
117
142
|
return ((_a = w.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === notif_config.name.toLowerCase() &&
|
|
118
143
|
((_b = w.network) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === notif_config.network.toLowerCase();
|
|
119
144
|
});
|
|
120
|
-
// Fetch
|
|
121
|
-
const db_addresses =
|
|
145
|
+
// Fetch addresses — contract source uses escrow addresses, wallet source uses DB deposit addresses
|
|
146
|
+
const db_addresses = notif_config.source === 'contract'
|
|
147
|
+
? yield this.fetch_contract_addresses(notif_config)
|
|
148
|
+
: yield this.fetch_all_db_addresses(notif_config.blockchain);
|
|
122
149
|
console.log(`SetupNotifications: ${db_addresses.length} DB addresses for blockchain=${notif_config.blockchain}`);
|
|
123
150
|
let webhook_id;
|
|
124
151
|
if (existing) {
|
|
@@ -12,6 +12,10 @@ export type QuicknodeNotificationConfig = {
|
|
|
12
12
|
name: string;
|
|
13
13
|
network: string;
|
|
14
14
|
template: 'solanaWalletFilter' | 'evmWalletFilter';
|
|
15
|
+
/** 'wallet' (default) = custodial deposit addresses; 'contract' = escrow contract addresses */
|
|
16
|
+
source?: 'wallet' | 'contract';
|
|
17
|
+
/** Required when source === 'contract' — the chain ID to look up the escrow contract */
|
|
18
|
+
chain_id?: number;
|
|
15
19
|
};
|
|
16
20
|
export type QuicknodeStreamConfig = {
|
|
17
21
|
network: string;
|
|
@@ -46,6 +50,7 @@ export interface ChainAccountingDetails {
|
|
|
46
50
|
treasury_receiver: string;
|
|
47
51
|
overflow_treasury_receiver: string;
|
|
48
52
|
overflow_threshold_decimal: number;
|
|
53
|
+
min_funding_wallet_balance_usd: number;
|
|
49
54
|
}
|
|
50
55
|
export interface TronConfig {
|
|
51
56
|
trxTransferCost: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain_manager.d.ts","sourceRoot":"","sources":["../../../src/services/types/chain_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAElD,MAAM,MAAM,6BAA6B,GAAG;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC;CACjC,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,oBAAoB,GAAG,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"chain_manager.d.ts","sourceRoot":"","sources":["../../../src/services/types/chain_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAElD,MAAM,MAAM,6BAA6B,GAAG;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC;CACjC,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,oBAAoB,GAAG,iBAAiB,CAAC;IACnD,+FAA+F;IAC/F,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC/B,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,GAAG,qBAAqB,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,cAAc,GAAG,cAAc,GAAG,cAAc,CAAC;IAC7H,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CAC3C,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,0BAA0B,EAAE,CAAC;IACpD,SAAS,EAAE,MAAM,EAAE,CAAC;CACvB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,IAAI,EAAE,SAAS,GAAG,kBAAkB,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAA;CAChC,CAAA;AAGD,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0BAA0B,EAAE,MAAM,CAAC;IACnC,0BAA0B,EAAE,MAAM,CAAC;IACnC,8BAA8B,EAAE,MAAM,CAAC;CAC1C;AAED,MAAM,WAAW,UAAU;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet_manager.d.ts","sourceRoot":"","sources":["../../../src/services/types/wallet_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,WAAW,OAAO;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,GAAG,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,GAAG,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACnB"}
|
|
1
|
+
{"version":3,"file":"wallet_manager.d.ts","sourceRoot":"","sources":["../../../src/services/types/wallet_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,WAAW,OAAO;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,GAAG,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,GAAG,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/utils/Logger.ts"],"names":[],"mappings":"AACA,OAAO,aAAa,MAAM,2BAA2B,CAAC;AAItD,MAAM,WAAW,UAAU;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AASD,cAAM,MAAM;IACR,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuB;IAC9C,OAAO,CAAC,MAAM,CAAC,OAAO,CAA8B;IACpD,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;IAkCP;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,GAAE,MAAc,EAAE,WAAW,GAAE,MAAsB,GAAG,MAAM;IAOvF;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAI/C;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM;IAcxE;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI;IAI/C;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI;IAI9C;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/utils/Logger.ts"],"names":[],"mappings":"AACA,OAAO,aAAa,MAAM,2BAA2B,CAAC;AAItD,MAAM,WAAW,UAAU;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AASD,cAAM,MAAM;IACR,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuB;IAC9C,OAAO,CAAC,MAAM,CAAC,OAAO,CAA8B;IACpD,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;IAkCP;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,GAAE,MAAc,EAAE,WAAW,GAAE,MAAsB,GAAG,MAAM;IAOvF;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAI/C;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM;IAcxE;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI;IAI/C;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI;IAI9C;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI;IAM9C;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI;IAO/C;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI;IAM/C;;OAEG;IACH,OAAO,CAAC,aAAa;IAuCrB;;OAEG;IACH,OAAO,CAAC,cAAc;CAezB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,EAAE,aAAa,MAAM,EAAE,UAAU,UAAU,KAAG,MAExF,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/build/utils/Logger.js
CHANGED
|
@@ -84,8 +84,9 @@ class Logger {
|
|
|
84
84
|
* Warn level - sent to ElasticSearch
|
|
85
85
|
*/
|
|
86
86
|
warn(message, data) {
|
|
87
|
-
|
|
88
|
-
this.
|
|
87
|
+
const logData = this.normalizeData(data);
|
|
88
|
+
this.pino.warn(Object.assign({ source: this.source }, logData), message);
|
|
89
|
+
this.indexToElastic('Warning', message, logData);
|
|
89
90
|
}
|
|
90
91
|
/**
|
|
91
92
|
* Error level - sent to ElasticSearch
|
|
@@ -129,6 +130,16 @@ class Logger {
|
|
|
129
130
|
stack: value.stack,
|
|
130
131
|
};
|
|
131
132
|
}
|
|
133
|
+
else if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
|
|
134
|
+
// Recurse one level to catch nested Error objects (e.g. { data: { err: Error } })
|
|
135
|
+
const nested = {};
|
|
136
|
+
for (const [nk, nv] of Object.entries(value)) {
|
|
137
|
+
nested[nk] = nv instanceof Error
|
|
138
|
+
? { name: nv.name, message: nv.message, stack: nv.stack }
|
|
139
|
+
: nv;
|
|
140
|
+
}
|
|
141
|
+
normalized[key] = nested;
|
|
142
|
+
}
|
|
132
143
|
else {
|
|
133
144
|
normalized[key] = value;
|
|
134
145
|
}
|
package/build/utils/solana.d.ts
CHANGED
|
@@ -70,7 +70,8 @@ export declare const handle_transfer_batch: (payloads: SolanaTransactionRequest[
|
|
|
70
70
|
success: SolanaTransactionSuccessRequest[];
|
|
71
71
|
failed: SolanaTransactionRequest[];
|
|
72
72
|
}>;
|
|
73
|
-
export declare const find_transfer_instruction: (tx: SolanaTransactionLog) => TransferInstructionRecord;
|
|
73
|
+
export declare const find_transfer_instruction: (tx: SolanaTransactionLog, receiver?: string) => TransferInstructionRecord;
|
|
74
|
+
export declare const find_transfer_instruction_depr: (tx: SolanaTransactionLog) => TransferInstructionRecord;
|
|
74
75
|
export declare const getSolanaConnection: (chainId: string, config: IConfig) => web3.Connection;
|
|
75
76
|
export declare const getSolanaArchivalConnection: (chainId: string, config: IConfig) => web3.Connection;
|
|
76
77
|
export declare const getSolanaConnectionPublic: (chainId: string) => web3.Connection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/utils/solana.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/utils/solana.ts"],"names":[],"mappings":"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"}
|
package/build/utils/solana.js
CHANGED
|
@@ -45,7 +45,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
45
45
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
46
46
|
};
|
|
47
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
-
exports.check_approve_delegate = exports.handle_create_versioned_transaction_spl = exports.estimate_withdraw_gas_cost = exports.create_versioned_transaction_solana = exports.get_token_account_info = exports.getSolanaConnectionPublic = exports.getSolanaArchivalConnection = exports.getSolanaConnection = exports.find_transfer_instruction = exports.handle_transfer_batch = exports.handle_sweep = exports.SplTransferCheckedLayout = exports.SolTransferInstructionLayout = exports.usdc_program_address = exports.solana_program_address = exports.min_solana_funding_lamports = void 0;
|
|
48
|
+
exports.check_approve_delegate = exports.handle_create_versioned_transaction_spl = exports.estimate_withdraw_gas_cost = exports.create_versioned_transaction_solana = exports.get_token_account_info = exports.getSolanaConnectionPublic = exports.getSolanaArchivalConnection = exports.getSolanaConnection = exports.find_transfer_instruction_depr = exports.find_transfer_instruction = exports.handle_transfer_batch = exports.handle_sweep = exports.SplTransferCheckedLayout = exports.SolTransferInstructionLayout = exports.usdc_program_address = exports.solana_program_address = exports.min_solana_funding_lamports = void 0;
|
|
49
49
|
const buffer_layout_utils_1 = require("@solana/buffer-layout-utils");
|
|
50
50
|
const buffer_layout_1 = require("@solana/buffer-layout");
|
|
51
51
|
const web3_js_1 = __importStar(require("@solana/web3.js"));
|
|
@@ -182,7 +182,32 @@ const handle_transfer_batch = (payloads_1, chain_id_1, token_type_1, connection_
|
|
|
182
182
|
return { status: true, signatures, success, failed };
|
|
183
183
|
});
|
|
184
184
|
exports.handle_transfer_batch = handle_transfer_batch;
|
|
185
|
-
const find_transfer_instruction = (tx) => {
|
|
185
|
+
const find_transfer_instruction = (tx, receiver) => {
|
|
186
|
+
const message = tx.transaction[0].message[0];
|
|
187
|
+
const target_instruction = message.instructions.find(i => {
|
|
188
|
+
const program = message.account_keys[parseInt(i.program_id_index)];
|
|
189
|
+
if (!token_program_addresses.some(a => a === program))
|
|
190
|
+
return false;
|
|
191
|
+
// If a receiver is specified and this is a native SOL transfer, match by
|
|
192
|
+
// the destination account (accounts[1]) to find the exact instruction for
|
|
193
|
+
// that recipient. Needed for batch sends where one tx has many transfers.
|
|
194
|
+
if (receiver && program === exports.solana_program_address) {
|
|
195
|
+
if (!i.accounts || i.accounts.length < 2)
|
|
196
|
+
return false;
|
|
197
|
+
return message.account_keys[i.accounts[1]] === receiver;
|
|
198
|
+
}
|
|
199
|
+
return true; // original behaviour: first matching program
|
|
200
|
+
});
|
|
201
|
+
if (!target_instruction)
|
|
202
|
+
throw new Error(`Cannot find program index for accepted payment tokens: ${token_program_addresses}`);
|
|
203
|
+
const program_index = target_instruction.program_id_index;
|
|
204
|
+
return {
|
|
205
|
+
instruction: target_instruction,
|
|
206
|
+
is_native: message.account_keys[parseInt(program_index)] === exports.solana_program_address
|
|
207
|
+
};
|
|
208
|
+
};
|
|
209
|
+
exports.find_transfer_instruction = find_transfer_instruction;
|
|
210
|
+
const find_transfer_instruction_depr = (tx) => {
|
|
186
211
|
const message = tx.transaction[0].message[0];
|
|
187
212
|
const target_instruction = message.instructions.find(i => token_program_addresses.some(a => a === message.account_keys[parseInt(i.program_id_index)]));
|
|
188
213
|
if (!target_instruction)
|
|
@@ -190,7 +215,7 @@ const find_transfer_instruction = (tx) => {
|
|
|
190
215
|
const program_index = target_instruction === null || target_instruction === void 0 ? void 0 : target_instruction.program_id_index;
|
|
191
216
|
return { instruction: target_instruction, is_native: tx.transaction[0].message[0].account_keys[parseInt(program_index)] === exports.solana_program_address };
|
|
192
217
|
};
|
|
193
|
-
exports.
|
|
218
|
+
exports.find_transfer_instruction_depr = find_transfer_instruction_depr;
|
|
194
219
|
const getSolanaConnection = (chainId, config) => {
|
|
195
220
|
const network = ChainManager_1.default.getInstance(config).getChainConfigForChainIdSync(parseInt(chainId));
|
|
196
221
|
if (!network)
|