degate-cli 1.0.0 → 1.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.
- package/cli.js +63 -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) {
|
|
@@ -493,15 +498,51 @@ async function buildSession(privateKey, keyNonce = 1, env = 'dev') {
|
|
|
493
498
|
const jwt = await getAccessToken(keys.DGWallet.privateKey);
|
|
494
499
|
const client = createApiClient(jwt);
|
|
495
500
|
|
|
501
|
+
spinner.text = '获取链配置 (exchange_address)...';
|
|
502
|
+
const remoteExchangeAddr = await fetchExchangeAddress(client);
|
|
503
|
+
if (remoteExchangeAddr) {
|
|
504
|
+
const cfg = getConfig();
|
|
505
|
+
if (cfg.EXCHANGE_ADDRESS.toLowerCase() !== remoteExchangeAddr.toLowerCase()) {
|
|
506
|
+
console.log(chalk.yellow(`\n [配置修正] EXCHANGE_ADDRESS: ${cfg.EXCHANGE_ADDRESS} → ${remoteExchangeAddr}`));
|
|
507
|
+
cfg.EXCHANGE_ADDRESS = remoteExchangeAddr;
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
|
|
496
511
|
spinner.text = '获取 DA Owner...';
|
|
497
512
|
const da_owner = await fetchDAOwner(keys.eoaAddress) || `${keys.DGWallet.address}_0`;
|
|
498
513
|
|
|
499
514
|
spinner.text = '检查 DA 注册状态...';
|
|
500
|
-
|
|
501
|
-
|
|
515
|
+
let registeredDAs = {};
|
|
516
|
+
let needsSync = false;
|
|
517
|
+
try {
|
|
518
|
+
const result = await fetchRegisteredDAs(client);
|
|
519
|
+
registeredDAs = result.das;
|
|
520
|
+
needsSync = !registeredDAs.SOLANA?.address || !registeredDAs.ETHEREUM?.address;
|
|
521
|
+
} catch {
|
|
522
|
+
needsSync = true;
|
|
523
|
+
}
|
|
524
|
+
|
|
502
525
|
if (needsSync) {
|
|
503
526
|
spinner.text = '注册 DA 地址到后端...';
|
|
504
|
-
|
|
527
|
+
try {
|
|
528
|
+
await registerDAs(client, { eoaAddress: keys.eoaAddress, keys, keyNonce });
|
|
529
|
+
spinner.text = 'DA 注册成功';
|
|
530
|
+
} catch (regErr) {
|
|
531
|
+
// 注册失败时二次确认 DA 是否已存在(常见于重复 setup)
|
|
532
|
+
try {
|
|
533
|
+
const recheck = await fetchRegisteredDAs(client);
|
|
534
|
+
const alreadyRegistered = recheck.das.SOLANA?.address && recheck.das.ETHEREUM?.address;
|
|
535
|
+
if (alreadyRegistered) {
|
|
536
|
+
registeredDAs = recheck.das;
|
|
537
|
+
needsSync = false;
|
|
538
|
+
spinner.text = 'DA 已存在,跳过注册';
|
|
539
|
+
} else {
|
|
540
|
+
throw regErr;
|
|
541
|
+
}
|
|
542
|
+
} catch {
|
|
543
|
+
throw regErr;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
505
546
|
}
|
|
506
547
|
|
|
507
548
|
spinner.text = '获取链配置...';
|
|
@@ -537,6 +578,7 @@ async function buildSession(privateKey, keyNonce = 1, env = 'dev') {
|
|
|
537
578
|
console.log(chalk.gray(` DGWallet: ${keys.DGWallet.address}`));
|
|
538
579
|
console.log(chalk.gray(` DA Owner: ${da_owner}`));
|
|
539
580
|
console.log(chalk.gray(` Solana DA: ${keys.SOLANA.address}`));
|
|
581
|
+
console.log(chalk.gray(` DA 状态: ${needsSync ? '刚注册' : '已存在'}`));
|
|
540
582
|
return session;
|
|
541
583
|
} catch (err) {
|
|
542
584
|
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.1",
|
|
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"
|