degate-cli 1.0.0 → 1.0.2
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/cli.js +66 -21
- package/package.json +2 -2
package/cli.js
CHANGED
|
@@ -32,7 +32,7 @@ const ENV_CONFIG = {
|
|
|
32
32
|
prod: {
|
|
33
33
|
DG_API: 'https://v1-mainnet-backend.degate.com',
|
|
34
34
|
DEGATE_VERSION: 'V1',
|
|
35
|
-
EXCHANGE_ADDRESS: '
|
|
35
|
+
EXCHANGE_ADDRESS: '0x9C07A72177c5A05410cA338823e790876E79D73B',
|
|
36
36
|
DEX_CHAIN_ID: 1,
|
|
37
37
|
SIGN_TEMPLATE: 'S3',
|
|
38
38
|
API_SIGN_VALID_ADDRESS: '',
|
|
@@ -237,6 +237,15 @@ async function getAccessToken(dgWalletPrivateKey) {
|
|
|
237
237
|
return resp.data.token;
|
|
238
238
|
}
|
|
239
239
|
|
|
240
|
+
async function fetchExchangeAddress(client) {
|
|
241
|
+
try {
|
|
242
|
+
const resp = await client.get('/order-book-api/v3/configuration');
|
|
243
|
+
return resp.data?.exchange_address || null;
|
|
244
|
+
} catch {
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
240
249
|
async function fetchChainInfo(client) {
|
|
241
250
|
const resp = await client.get('/order-book-api/intent/chains');
|
|
242
251
|
const { chains } = resp.data;
|
|
@@ -293,23 +302,19 @@ async function fetchDAOwner(eoaAddress) {
|
|
|
293
302
|
}
|
|
294
303
|
|
|
295
304
|
async function fetchRegisteredDAs(authClient) {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
return { keyNonce: key_nonce_when_addr_generate, das };
|
|
310
|
-
} catch {
|
|
311
|
-
return { keyNonce: null, das: {} };
|
|
312
|
-
}
|
|
305
|
+
const resp = await authClient.get('/order-book-api/intent/daAddress');
|
|
306
|
+
const { key_nonce_when_addr_generate, addresses } = resp.data || {};
|
|
307
|
+
const das = {};
|
|
308
|
+
(addresses || []).forEach(item => {
|
|
309
|
+
const info = item.chain_addresses_info?.[0] || {};
|
|
310
|
+
das[item.chain_name?.toUpperCase()] = {
|
|
311
|
+
chain: item.chain_name?.toUpperCase(),
|
|
312
|
+
address: info.address,
|
|
313
|
+
publicKey: info.public_key,
|
|
314
|
+
path: info.address_path,
|
|
315
|
+
};
|
|
316
|
+
});
|
|
317
|
+
return { keyNonce: key_nonce_when_addr_generate, das };
|
|
313
318
|
}
|
|
314
319
|
|
|
315
320
|
async function signSolanaMessage(message, privateKey) {
|
|
@@ -399,6 +404,9 @@ async function intentTryCreate(client, order) {
|
|
|
399
404
|
const resp = await client.post('/order-book-api/intent/v2/compact_try_create', order, {
|
|
400
405
|
headers: { Version: '0.0.1' },
|
|
401
406
|
});
|
|
407
|
+
if (!resp.data?.result) {
|
|
408
|
+
console.log(chalk.yellow('[DEBUG] compact_try_create raw resp.data:'), JSON.stringify(resp.data, null, 2));
|
|
409
|
+
}
|
|
402
410
|
return resp.data;
|
|
403
411
|
}
|
|
404
412
|
|
|
@@ -493,15 +501,51 @@ async function buildSession(privateKey, keyNonce = 1, env = 'dev') {
|
|
|
493
501
|
const jwt = await getAccessToken(keys.DGWallet.privateKey);
|
|
494
502
|
const client = createApiClient(jwt);
|
|
495
503
|
|
|
504
|
+
spinner.text = '获取链配置 (exchange_address)...';
|
|
505
|
+
const remoteExchangeAddr = await fetchExchangeAddress(client);
|
|
506
|
+
if (remoteExchangeAddr) {
|
|
507
|
+
const cfg = getConfig();
|
|
508
|
+
if (cfg.EXCHANGE_ADDRESS.toLowerCase() !== remoteExchangeAddr.toLowerCase()) {
|
|
509
|
+
console.log(chalk.yellow(`\n [配置修正] EXCHANGE_ADDRESS: ${cfg.EXCHANGE_ADDRESS} → ${remoteExchangeAddr}`));
|
|
510
|
+
cfg.EXCHANGE_ADDRESS = remoteExchangeAddr;
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
|
|
496
514
|
spinner.text = '获取 DA Owner...';
|
|
497
515
|
const da_owner = await fetchDAOwner(keys.eoaAddress) || `${keys.DGWallet.address}_0`;
|
|
498
516
|
|
|
499
517
|
spinner.text = '检查 DA 注册状态...';
|
|
500
|
-
|
|
501
|
-
|
|
518
|
+
let registeredDAs = {};
|
|
519
|
+
let needsSync = false;
|
|
520
|
+
try {
|
|
521
|
+
const result = await fetchRegisteredDAs(client);
|
|
522
|
+
registeredDAs = result.das;
|
|
523
|
+
needsSync = !registeredDAs.SOLANA?.address || !registeredDAs.ETHEREUM?.address;
|
|
524
|
+
} catch {
|
|
525
|
+
needsSync = true;
|
|
526
|
+
}
|
|
527
|
+
|
|
502
528
|
if (needsSync) {
|
|
503
529
|
spinner.text = '注册 DA 地址到后端...';
|
|
504
|
-
|
|
530
|
+
try {
|
|
531
|
+
await registerDAs(client, { eoaAddress: keys.eoaAddress, keys, keyNonce });
|
|
532
|
+
spinner.text = 'DA 注册成功';
|
|
533
|
+
} catch (regErr) {
|
|
534
|
+
// 注册失败时二次确认 DA 是否已存在(常见于重复 setup)
|
|
535
|
+
try {
|
|
536
|
+
const recheck = await fetchRegisteredDAs(client);
|
|
537
|
+
const alreadyRegistered = recheck.das.SOLANA?.address && recheck.das.ETHEREUM?.address;
|
|
538
|
+
if (alreadyRegistered) {
|
|
539
|
+
registeredDAs = recheck.das;
|
|
540
|
+
needsSync = false;
|
|
541
|
+
spinner.text = 'DA 已存在,跳过注册';
|
|
542
|
+
} else {
|
|
543
|
+
throw regErr;
|
|
544
|
+
}
|
|
545
|
+
} catch {
|
|
546
|
+
throw regErr;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
505
549
|
}
|
|
506
550
|
|
|
507
551
|
spinner.text = '获取链配置...';
|
|
@@ -537,6 +581,7 @@ async function buildSession(privateKey, keyNonce = 1, env = 'dev') {
|
|
|
537
581
|
console.log(chalk.gray(` DGWallet: ${keys.DGWallet.address}`));
|
|
538
582
|
console.log(chalk.gray(` DA Owner: ${da_owner}`));
|
|
539
583
|
console.log(chalk.gray(` Solana DA: ${keys.SOLANA.address}`));
|
|
584
|
+
console.log(chalk.gray(` DA 状态: ${needsSync ? '刚注册' : '已存在'}`));
|
|
540
585
|
return session;
|
|
541
586
|
} catch (err) {
|
|
542
587
|
spinner.fail('认证失败');
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "degate-cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "DeGate Turbo Range CLI - deposit/withdraw LP positions across Solana & EVM chains",
|
|
5
5
|
"main": "cli.js",
|
|
6
6
|
"bin": {
|
|
7
|
-
"degate-cli": "
|
|
7
|
+
"degate-cli": "cli.js"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
10
|
"start": "node cli.js"
|