ysk-server-core 1.1.15 → 1.1.17
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/dist/hosting/validators/adapters/avax.d.ts +3 -3
- package/dist/hosting/validators/adapters/avax.d.ts.map +1 -1
- package/dist/hosting/validators/adapters/avax.js +19 -5
- package/dist/hosting/validators/adapters/avax.js.map +1 -1
- package/dist/hosting/validators/adapters/eth-clients.js +3 -3
- package/dist/hosting/validators/adapters/eth-clients.js.map +1 -1
- package/dist/hosting/validators/adapters/eth.d.ts.map +1 -1
- package/dist/hosting/validators/adapters/eth.js +4 -3
- package/dist/hosting/validators/adapters/eth.js.map +1 -1
- package/dist/hosting/validators/adapters/near.d.ts.map +1 -1
- package/dist/hosting/validators/adapters/near.js +5 -1
- package/dist/hosting/validators/adapters/near.js.map +1 -1
- package/dist/hosting/validators/adapters/phase2.d.ts +25 -4
- package/dist/hosting/validators/adapters/phase2.d.ts.map +1 -1
- package/dist/hosting/validators/adapters/phase2.js +210 -17
- package/dist/hosting/validators/adapters/phase2.js.map +1 -1
- package/dist/hosting/validators/compose-runner.d.ts +13 -5
- package/dist/hosting/validators/compose-runner.d.ts.map +1 -1
- package/dist/hosting/validators/compose-runner.js +104 -17
- package/dist/hosting/validators/compose-runner.js.map +1 -1
- package/dist/hosting/validators/extras.d.ts.map +1 -1
- package/dist/hosting/validators/extras.js +5 -2
- package/dist/hosting/validators/extras.js.map +1 -1
- package/dist/hosting/validators/manager.d.ts +2 -0
- package/dist/hosting/validators/manager.d.ts.map +1 -1
- package/dist/hosting/validators/manager.js +109 -18
- package/dist/hosting/validators/manager.js.map +1 -1
- package/dist/hosting/validators/ports.d.ts +4 -1
- package/dist/hosting/validators/ports.d.ts.map +1 -1
- package/dist/hosting/validators/ports.js +26 -2
- package/dist/hosting/validators/ports.js.map +1 -1
- package/dist/hosting/validators/registry.d.ts +4 -0
- package/dist/hosting/validators/registry.d.ts.map +1 -1
- package/dist/hosting/validators/registry.js +9 -1
- package/dist/hosting/validators/registry.js.map +1 -1
- package/dist/hosting/validators/rpc-json.d.ts +8 -0
- package/dist/hosting/validators/rpc-json.d.ts.map +1 -0
- package/dist/hosting/validators/rpc-json.js +19 -0
- package/dist/hosting/validators/rpc-json.js.map +1 -0
- package/dist/hosting/validators/runtime-status.d.ts +5 -1
- package/dist/hosting/validators/runtime-status.d.ts.map +1 -1
- package/dist/hosting/validators/runtime-status.js +21 -3
- package/dist/hosting/validators/runtime-status.js.map +1 -1
- package/dist/hosting/validators/software-catalog.d.ts.map +1 -1
- package/dist/hosting/validators/software-catalog.js +3 -1
- package/dist/hosting/validators/software-catalog.js.map +1 -1
- package/dist/monitoring/notifications.js +1 -1
- package/dist/monitoring/notifications.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Avalanche adapter — avalanchego, state-sync on for minimal/pruned.
|
|
3
|
-
*/
|
|
4
1
|
import type { ValidatorInstanceDto } from 'ysk-server-shared';
|
|
5
2
|
import type { ValidatorHostPlan } from './base.js';
|
|
3
|
+
/** C-Chain JSON — `--state-sync-enabled` is not an avalanchego CLI flag. */
|
|
4
|
+
export declare function avaxCChainConfig(stateSync: boolean): string;
|
|
5
|
+
export declare function ensureAvaxChainConfig(dataPath: string, stateSync?: boolean): void;
|
|
6
6
|
export declare function buildAvaxComposeYaml(spec: ValidatorInstanceDto): string;
|
|
7
7
|
export declare function planAvaxInstall(spec: ValidatorInstanceDto): ValidatorHostPlan;
|
|
8
8
|
export declare function parseAvaxHealth(body: unknown): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avax.d.ts","sourceRoot":"","sources":["../../../../src/hosting/validators/adapters/avax.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"avax.d.ts","sourceRoot":"","sources":["../../../../src/hosting/validators/adapters/avax.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAKnD,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,CAE3D;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,UAAO,GAAG,IAAI,CAI9E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAyBvE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,oBAAoB,GAAG,iBAAiB,CAS7E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAKnE;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,oBAAoB,EAC1B,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC;IACT,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC,CAmBD;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC,CAAC;AAYF,qFAAqF;AACrF,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,oBAAoB,EAC1B,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CA6B9B;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,oBAAoB,EAC1B,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAExB"}
|
|
@@ -1,25 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Avalanche adapter — avalanchego, state-sync on for minimal/pruned.
|
|
3
|
+
*/
|
|
4
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
5
|
+
import { join } from 'node:path';
|
|
1
6
|
import { v1ValidatorClients } from '../registry.js';
|
|
2
7
|
import { composeBind } from '../compose-runner.js';
|
|
8
|
+
import { readRpcJson } from '../rpc-json.js';
|
|
9
|
+
/** C-Chain JSON — `--state-sync-enabled` is not an avalanchego CLI flag. */
|
|
10
|
+
export function avaxCChainConfig(stateSync) {
|
|
11
|
+
return `${JSON.stringify({ 'state-sync-enabled': stateSync }, null, 2)}\n`;
|
|
12
|
+
}
|
|
13
|
+
export function ensureAvaxChainConfig(dataPath, stateSync = true) {
|
|
14
|
+
const dir = join(String(dataPath ?? '').replace(/\/+$/, ''), 'configs', 'chains', 'C');
|
|
15
|
+
mkdirSync(dir, { recursive: true });
|
|
16
|
+
writeFileSync(join(dir, 'config.json'), avaxCChainConfig(stateSync), 'utf8');
|
|
17
|
+
}
|
|
3
18
|
export function buildAvaxComposeYaml(spec) {
|
|
4
19
|
const node = spec.clients.node ?? v1ValidatorClients('avax')[0];
|
|
5
20
|
const img = `${node?.image ?? 'avaplatform/avalanchego'}:${node?.tag ?? 'v1.13.5'}`;
|
|
6
21
|
const rpc = spec.ports.rpc ?? 9650;
|
|
7
22
|
const p2p = spec.ports.p2p ?? 9651;
|
|
8
23
|
const netId = spec.network === 'mainnet' ? 'mainnet' : 'fuji';
|
|
9
|
-
const stateSync = spec.profile === 'validator-ready' ? 'true' : 'true';
|
|
10
24
|
return `# ysk-server validators avax — generated
|
|
11
25
|
services:
|
|
12
26
|
node:
|
|
13
27
|
image: ${img}
|
|
14
28
|
restart: unless-stopped
|
|
29
|
+
entrypoint: ["/avalanchego/build/avalanchego"]
|
|
15
30
|
command:
|
|
16
|
-
- avalanchego
|
|
17
31
|
- --network-id=${netId}
|
|
18
32
|
- --http-host=0.0.0.0
|
|
19
33
|
- --http-port=9650
|
|
20
34
|
- --staking-port=9651
|
|
21
35
|
- --db-dir=/data
|
|
22
|
-
- --
|
|
36
|
+
- --chain-config-dir=/data/configs/chains
|
|
23
37
|
ports:
|
|
24
38
|
- "127.0.0.1:${rpc}:9650"
|
|
25
39
|
- "0.0.0.0:${p2p}:9651"
|
|
@@ -47,7 +61,7 @@ export async function probeAvaxStatus(spec, fetchFn = fetch) {
|
|
|
47
61
|
const url = `http://127.0.0.1:${spec.ports.rpc ?? 9650}/ext/health`;
|
|
48
62
|
try {
|
|
49
63
|
const res = await fetchFn(url);
|
|
50
|
-
const healthy = parseAvaxHealth(await res
|
|
64
|
+
const healthy = parseAvaxHealth(await readRpcJson(res)).healthy;
|
|
51
65
|
return {
|
|
52
66
|
syncProgress: healthy ? 1 : null,
|
|
53
67
|
peers: null,
|
|
@@ -86,7 +100,7 @@ export async function probeAvaxStakingIdentity(spec, fetchFn = fetch) {
|
|
|
86
100
|
params: {},
|
|
87
101
|
}),
|
|
88
102
|
});
|
|
89
|
-
const body = (await res
|
|
103
|
+
const body = (await readRpcJson(res));
|
|
90
104
|
const pop = body.result?.nodePOP;
|
|
91
105
|
return {
|
|
92
106
|
nodeId: asTrimmed(body.result?.nodeID ?? body.result?.nodeId),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avax.js","sourceRoot":"","sources":["../../../../src/hosting/validators/adapters/avax.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"avax.js","sourceRoot":"","sources":["../../../../src/hosting/validators/adapters/avax.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { composeBind } from '../compose-runner.js';
|
|
2
2
|
export const ETH_CHECKPOINT = {
|
|
3
|
-
hoodi: 'https://
|
|
3
|
+
hoodi: 'https://hoodi.beaconstate.info',
|
|
4
4
|
sepolia: 'https://checkpoint-sync.sepolia.ethpandaops.io',
|
|
5
5
|
mainnet: 'https://beaconstate.info',
|
|
6
6
|
};
|
|
@@ -45,7 +45,7 @@ export function buildElService(spec, jwt) {
|
|
|
45
45
|
- --http.port
|
|
46
46
|
- "8545"
|
|
47
47
|
- --http.api
|
|
48
|
-
- eth,net,web3
|
|
48
|
+
- eth,net,web3
|
|
49
49
|
- --authrpc.addr
|
|
50
50
|
- 0.0.0.0
|
|
51
51
|
- --authrpc.port
|
|
@@ -105,7 +105,7 @@ ${netFlag.join('\n')}
|
|
|
105
105
|
- --http.port
|
|
106
106
|
- "8545"
|
|
107
107
|
- --http.api
|
|
108
|
-
- eth,net,web3
|
|
108
|
+
- eth,net,web3
|
|
109
109
|
- --authrpc.addr
|
|
110
110
|
- 0.0.0.0
|
|
111
111
|
- --authrpc.port
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eth-clients.js","sourceRoot":"","sources":["../../../../src/hosting/validators/adapters/eth-clients.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"eth-clients.js","sourceRoot":"","sources":["../../../../src/hosting/validators/adapters/eth-clients.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eth.d.ts","sourceRoot":"","sources":["../../../../src/hosting/validators/adapters/eth.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"eth.d.ts","sourceRoot":"","sources":["../../../../src/hosting/validators/adapters/eth.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAKtF,wBAAgB,UAAU,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAE7D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAa5F;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAM9D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAStE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,oBAAoB,GAAG,iBAAiB,CAgB5E;AAED,eAAO,MAAM,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,aAAa,CAAC,GAAG;IAClE,MAAM,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAAC;CAO5C,CAAC;AAEF,wBAAsB,cAAc,CAClC,IAAI,EAAE,oBAAoB,EAC1B,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC,CAAC,CAqCxF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { v1ValidatorClients } from '../registry.js';
|
|
2
2
|
import { buildClService, buildElService, jwtHost } from './eth-clients.js';
|
|
3
|
+
import { readRpcJson } from '../rpc-json.js';
|
|
3
4
|
export function ethJwtPath(spec) {
|
|
4
5
|
return jwtHost(spec);
|
|
5
6
|
}
|
|
@@ -80,9 +81,9 @@ export async function probeEthStatus(spec, fetchFn = fetch) {
|
|
|
80
81
|
body: JSON.stringify({ jsonrpc: '2.0', id: 3, method: 'web3_clientVersion', params: [] }),
|
|
81
82
|
}),
|
|
82
83
|
]);
|
|
83
|
-
const sync = parseEthSyncing(await syncRes
|
|
84
|
-
const peers = parseEthPeerCount(await peerRes
|
|
85
|
-
const verBody = (await verRes
|
|
84
|
+
const sync = parseEthSyncing(await readRpcJson(syncRes));
|
|
85
|
+
const peers = parseEthPeerCount(await readRpcJson(peerRes));
|
|
86
|
+
const verBody = (await readRpcJson(verRes));
|
|
86
87
|
return {
|
|
87
88
|
syncProgress: sync.syncing ? sync.progress : 1,
|
|
88
89
|
peers,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eth.js","sourceRoot":"","sources":["../../../../src/hosting/validators/adapters/eth.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"eth.js","sourceRoot":"","sources":["../../../../src/hosting/validators/adapters/eth.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,UAAU,UAAU,CAAC,IAA0B;IACnD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACzD,MAAM,CAAC,GAAI,IAA4B,CAAC,MAAM,CAAC;QAC/C,IAAI,CAAC,KAAK,KAAK;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAqD,CAAC;YAChE,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/D,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9D,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC;YAC9F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC7C,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACzD,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAE,IAA4B,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5E,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAA0B;IAC5D,MAAM,GAAG,GAAG,cAAc,CAAC;IAC3B,OAAO;OACF,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,MAAM,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,YAAY;;;EAG5E,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC;EACzB,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC;CAC1B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAA0B;IACvD,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO;QACL,KAAK,EAAE;YACL,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,YAAY,EAAE;YAC7E,oBAAoB;YACpB,iBAAiB;SAClB;QACD,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;QACjD,MAAM,EAAE,SAAS,EAAE,yBAAyB;QAC5C,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC;QACzB,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAEnB;IACF,EAAE,EAAE,KAAK;IACT,WAAW,EAAE,cAAc;IAC3B,MAAM,CAAC,IAAI;QACT,OAAO,oBAAoB,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACtD,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAA0B,EAC1B,UAAwB,KAAK;IAE7B,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnD,OAAO,CAAC,GAAG,EAAE;gBACX,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;aACnF,CAAC;YACF,OAAO,CAAC,GAAG,EAAE;gBACX,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;aACrF,CAAC;YACF,OAAO,CAAC,GAAG,EAAE;gBACX,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;aAC1F,CAAC;SACH,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,CAAwB,CAAC;QACnE,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC9C,KAAK;YACL,OAAO,EAAE,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;YACnE,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"near.d.ts","sourceRoot":"","sources":["../../../../src/hosting/validators/adapters/near.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"near.d.ts","sourceRoot":"","sources":["../../../../src/hosting/validators/adapters/near.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAKxE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CA4BvE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,oBAAoB,GAAG,iBAAiB,CAS7E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG;IAC9C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAqBA;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,oBAAoB,EAC1B,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC,CAAC,CAcxF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { v1ValidatorClients } from '../registry.js';
|
|
2
2
|
import { composeBind } from '../compose-runner.js';
|
|
3
|
+
import { readRpcJson } from '../rpc-json.js';
|
|
3
4
|
export function buildNearComposeYaml(spec) {
|
|
4
5
|
const node = spec.clients.node ?? v1ValidatorClients('near')[0];
|
|
5
6
|
const img = `${node?.image ?? 'nearprotocol/nearcore'}:${node?.tag ?? '2.5.0'}`;
|
|
@@ -11,6 +12,9 @@ services:
|
|
|
11
12
|
node:
|
|
12
13
|
image: ${img}
|
|
13
14
|
restart: unless-stopped
|
|
15
|
+
mem_limit: 4g
|
|
16
|
+
memswap_limit: 4g
|
|
17
|
+
pids_limit: 4096
|
|
14
18
|
entrypoint: ["/bin/sh", "-c"]
|
|
15
19
|
command:
|
|
16
20
|
- |
|
|
@@ -57,7 +61,7 @@ export async function probeNearStatus(spec, fetchFn = fetch) {
|
|
|
57
61
|
const url = `http://127.0.0.1:${spec.ports.rpc ?? 3030}/status`;
|
|
58
62
|
try {
|
|
59
63
|
const res = await fetchFn(url);
|
|
60
|
-
const parsed = parseNearStatus(await res
|
|
64
|
+
const parsed = parseNearStatus(await readRpcJson(res));
|
|
61
65
|
return { ...parsed, lastError: null };
|
|
62
66
|
}
|
|
63
67
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"near.js","sourceRoot":"","sources":["../../../../src/hosting/validators/adapters/near.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"near.js","sourceRoot":"","sources":["../../../../src/hosting/validators/adapters/near.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,35 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Phase 2 chain adapters: Bitcoin, Cosmos Hub, Sui, Aptos, Polkadot, Solana.
|
|
3
|
-
* RPC bound to localhost on the host. No keys written.
|
|
4
|
-
*/
|
|
5
1
|
import type { ValidatorInstanceDto } from 'ysk-server-shared';
|
|
6
2
|
import type { ValidatorHostPlan, ValidatorNodeStatus } from './base.js';
|
|
7
3
|
type Probe = Pick<ValidatorNodeStatus, 'syncProgress' | 'peers' | 'version' | 'lastError'>;
|
|
8
4
|
export declare function buildBtcComposeYaml(spec: ValidatorInstanceDto): string;
|
|
9
5
|
export declare function planBtcInstall(spec: ValidatorInstanceDto): ValidatorHostPlan;
|
|
10
6
|
export declare function parseBtcInfo(body: unknown): Probe;
|
|
7
|
+
export declare function cosmosChainId(network: string): string;
|
|
8
|
+
/** Official Cosmos Hub testnet is ICS `provider` (theta-testnet-001 is killed). */
|
|
9
|
+
export declare function cosmosGenesisUrl(network: string): string;
|
|
10
|
+
export declare function cosmosSeeds(network: string): string;
|
|
11
|
+
export declare function ensureCosmosGenesisFile(dataPath: string, network: string, fetchFn?: typeof fetch): Promise<{
|
|
12
|
+
ok: boolean;
|
|
13
|
+
notes: string[];
|
|
14
|
+
}>;
|
|
11
15
|
export declare function buildCosmosComposeYaml(spec: ValidatorInstanceDto): string;
|
|
12
16
|
export declare function planCosmosInstall(spec: ValidatorInstanceDto): ValidatorHostPlan;
|
|
13
17
|
export declare function parseCosmosStatus(body: unknown): Probe;
|
|
18
|
+
export declare function suiGenesisUrl(network: string): string;
|
|
19
|
+
export declare function suiFullnodeYaml(network: string): string;
|
|
20
|
+
export declare function ensureSuiFullnodeFiles(dataPath: string, network: string, fetchFn?: typeof fetch): Promise<{
|
|
21
|
+
ok: boolean;
|
|
22
|
+
notes: string[];
|
|
23
|
+
}>;
|
|
14
24
|
export declare function buildSuiComposeYaml(spec: ValidatorInstanceDto): string;
|
|
15
25
|
export declare function planSuiInstall(spec: ValidatorInstanceDto): ValidatorHostPlan;
|
|
16
26
|
export declare function parseSuiHealth(body: unknown): Probe;
|
|
27
|
+
export declare function aptosFullnodeYaml(): string;
|
|
28
|
+
export declare function aptosNetworkFileUrl(network: string, file: 'genesis.blob' | 'waypoint.txt'): string;
|
|
29
|
+
export declare function ensureAptosFullnodeFiles(dataPath: string, network: string, fetchFn?: typeof fetch): Promise<{
|
|
30
|
+
ok: boolean;
|
|
31
|
+
notes: string[];
|
|
32
|
+
}>;
|
|
17
33
|
export declare function buildAptosComposeYaml(spec: ValidatorInstanceDto): string;
|
|
18
34
|
export declare function planAptosInstall(spec: ValidatorInstanceDto): ValidatorHostPlan;
|
|
19
35
|
export declare function parseAptosLedger(body: unknown): Probe;
|
|
@@ -23,6 +39,11 @@ export declare function parseDotSync(body: unknown): Probe;
|
|
|
23
39
|
export declare function buildSolComposeYaml(spec: ValidatorInstanceDto): string;
|
|
24
40
|
export declare function planSolInstall(spec: ValidatorInstanceDto): ValidatorHostPlan;
|
|
25
41
|
export declare function parseSolHealth(body: unknown): Probe;
|
|
42
|
+
export declare function btcCookiePaths(dataPath: string, network: string): string[];
|
|
43
|
+
export declare function parseBtcCookieFile(raw: string): {
|
|
44
|
+
user: string;
|
|
45
|
+
pass: string;
|
|
46
|
+
} | null;
|
|
26
47
|
export declare function probeBtcStatus(spec: ValidatorInstanceDto, fetchFn?: typeof fetch): Promise<Probe>;
|
|
27
48
|
export declare function probeCosmosStatus(spec: ValidatorInstanceDto, fetchFn?: typeof fetch): Promise<Probe>;
|
|
28
49
|
export declare function probeSuiStatus(spec: ValidatorInstanceDto, fetchFn?: typeof fetch): Promise<Probe>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase2.d.ts","sourceRoot":"","sources":["../../../../src/hosting/validators/adapters/phase2.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"phase2.d.ts","sourceRoot":"","sources":["../../../../src/hosting/validators/adapters/phase2.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Phase 2 chain adapters: Bitcoin, Cosmos Hub, Sui, Aptos, Polkadot, Solana.
|
|
3
|
+
* RPC bound to localhost on the host. No keys written.
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { SUI_NODE_IMAGE, suiNodeTag, v1ValidatorClients } from '../registry.js';
|
|
2
8
|
import { composeBind } from '../compose-runner.js';
|
|
9
|
+
import { readRpcJson } from '../rpc-json.js';
|
|
3
10
|
function img(spec, fallback, tag) {
|
|
4
11
|
const n = spec.clients.node ?? v1ValidatorClients(spec.chain)[0];
|
|
5
12
|
return `${n?.image ?? fallback}:${n?.tag ?? tag}`;
|
|
@@ -52,11 +59,49 @@ export function parseBtcInfo(body) {
|
|
|
52
59
|
lastError: null,
|
|
53
60
|
};
|
|
54
61
|
}
|
|
62
|
+
export function cosmosChainId(network) {
|
|
63
|
+
return network === 'mainnet' ? 'cosmoshub-4' : 'provider';
|
|
64
|
+
}
|
|
65
|
+
/** Official Cosmos Hub testnet is ICS `provider` (theta-testnet-001 is killed). */
|
|
66
|
+
export function cosmosGenesisUrl(network) {
|
|
67
|
+
if (network === 'mainnet') {
|
|
68
|
+
return 'https://raw.githubusercontent.com/cosmos/mainnet/master/genesis.json';
|
|
69
|
+
}
|
|
70
|
+
return 'https://raw.githubusercontent.com/cosmos/testnets/master/provider/provider-genesis.json';
|
|
71
|
+
}
|
|
72
|
+
export function cosmosSeeds(network) {
|
|
73
|
+
if (network === 'mainnet') {
|
|
74
|
+
return 'ade4d8bc8cbe014af6ebdf3cb7b1e9ad36f412c0@seeds.polkachu.com:14956';
|
|
75
|
+
}
|
|
76
|
+
return '08ec17e86dac67b9da70deb20177655495a55407@provider-seed-01.hub-testnet.polypore.xyz:26656,4ea6e56300a2f37b90e58de5ee27d1c9065cf871@provider-seed-02.hub-testnet.polypore.xyz:26656';
|
|
77
|
+
}
|
|
78
|
+
export async function ensureCosmosGenesisFile(dataPath, network, fetchFn = fetch) {
|
|
79
|
+
const dir = String(dataPath ?? '').replace(/\/+$/, '');
|
|
80
|
+
mkdirSync(dir, { recursive: true });
|
|
81
|
+
const dest = join(dir, 'official-genesis.json');
|
|
82
|
+
if (existsSync(dest))
|
|
83
|
+
return { ok: true, notes: [] };
|
|
84
|
+
const url = cosmosGenesisUrl(network);
|
|
85
|
+
try {
|
|
86
|
+
const res = await fetchFn(url);
|
|
87
|
+
if (!res.ok)
|
|
88
|
+
return { ok: false, notes: [`cosmos genesis http ${res.status} ${url}`] };
|
|
89
|
+
const buf = Buffer.from(await res.arrayBuffer());
|
|
90
|
+
if (buf.length < 64)
|
|
91
|
+
return { ok: false, notes: ['cosmos genesis too small'] };
|
|
92
|
+
writeFileSync(dest, buf);
|
|
93
|
+
return { ok: true, notes: [] };
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
return { ok: false, notes: [e instanceof Error ? e.message : 'cosmos genesis fetch failed'] };
|
|
97
|
+
}
|
|
98
|
+
}
|
|
55
99
|
export function buildCosmosComposeYaml(spec) {
|
|
56
100
|
const rpc = spec.ports.rpc ?? 26657;
|
|
57
101
|
const p2p = spec.ports.p2p ?? 26656;
|
|
58
|
-
const chainId = spec.network
|
|
59
|
-
|
|
102
|
+
const chainId = cosmosChainId(spec.network);
|
|
103
|
+
const seeds = cosmosSeeds(spec.network);
|
|
104
|
+
return `# ysk-server validators cosmos — generated (official genesis)
|
|
60
105
|
services:
|
|
61
106
|
node:
|
|
62
107
|
image: ${img(spec, 'ghcr.io/cosmos/gaia', 'v23.3.0')}
|
|
@@ -69,10 +114,19 @@ services:
|
|
|
69
114
|
echo "data dir not writable: /data" >&2
|
|
70
115
|
exit 1
|
|
71
116
|
fi
|
|
72
|
-
if [ ! -f /data/
|
|
117
|
+
if [ ! -f /data/official-genesis.json ]; then
|
|
118
|
+
echo "official genesis missing: /data/official-genesis.json" >&2
|
|
119
|
+
exit 1
|
|
120
|
+
fi
|
|
121
|
+
if [ ! -f /data/config/config.toml ]; then
|
|
73
122
|
gaiad init ysk --home /data --chain-id ${chainId}
|
|
74
123
|
fi
|
|
75
|
-
|
|
124
|
+
cp /data/official-genesis.json /data/config/genesis.json
|
|
125
|
+
if [ -f /data/config/config.toml ]; then
|
|
126
|
+
sed -i -e '/minimum-gas-prices =/ s^= .*^= "0.005uatom"^' /data/config/app.toml || true
|
|
127
|
+
sed -i -e '/seeds =/ s^= .*^= "${seeds}"^' /data/config/config.toml || true
|
|
128
|
+
fi
|
|
129
|
+
gaiad start --home /data --rpc.laddr tcp://0.0.0.0:26657 --p2p.laddr tcp://0.0.0.0:26656 --p2p.seeds="${seeds}" --minimum-gas-prices=0.005uatom
|
|
76
130
|
ports:
|
|
77
131
|
- "127.0.0.1:${rpc}:26657"
|
|
78
132
|
- "0.0.0.0:${p2p}:26656"
|
|
@@ -96,15 +150,58 @@ export function parseCosmosStatus(body) {
|
|
|
96
150
|
lastError: null,
|
|
97
151
|
};
|
|
98
152
|
}
|
|
153
|
+
export function suiGenesisUrl(network) {
|
|
154
|
+
const net = network === 'mainnet' ? 'mainnet' : 'testnet';
|
|
155
|
+
return `https://github.com/MystenLabs/sui-genesis/raw/main/${net}/genesis.blob`;
|
|
156
|
+
}
|
|
157
|
+
export function suiFullnodeYaml(network) {
|
|
158
|
+
const net = network === 'mainnet' ? 'mainnet' : 'testnet';
|
|
159
|
+
return `# ysk-server generated Sui ${net} fullnode
|
|
160
|
+
db-path: /data/suidb
|
|
161
|
+
network-address: /ip4/0.0.0.0/tcp/8080/http
|
|
162
|
+
metrics-address: 0.0.0.0:9184
|
|
163
|
+
json-rpc-address: 0.0.0.0:9000
|
|
164
|
+
enable-index-processing: false
|
|
165
|
+
genesis:
|
|
166
|
+
genesis-file-location: /data/genesis.blob
|
|
167
|
+
`;
|
|
168
|
+
}
|
|
169
|
+
export async function ensureSuiFullnodeFiles(dataPath, network, fetchFn = fetch) {
|
|
170
|
+
const dir = String(dataPath ?? '').replace(/\/+$/, '');
|
|
171
|
+
mkdirSync(dir, { recursive: true });
|
|
172
|
+
writeFileSync(join(dir, 'fullnode.yaml'), suiFullnodeYaml(network), 'utf8');
|
|
173
|
+
const genesisPath = join(dir, 'genesis.blob');
|
|
174
|
+
if (existsSync(genesisPath))
|
|
175
|
+
return { ok: true, notes: [] };
|
|
176
|
+
const url = suiGenesisUrl(network);
|
|
177
|
+
try {
|
|
178
|
+
const res = await fetchFn(url);
|
|
179
|
+
if (!res.ok)
|
|
180
|
+
return { ok: false, notes: [`sui genesis http ${res.status} ${url}`] };
|
|
181
|
+
const buf = Buffer.from(await res.arrayBuffer());
|
|
182
|
+
if (buf.length < 8)
|
|
183
|
+
return { ok: false, notes: ['sui genesis blob too small'] };
|
|
184
|
+
writeFileSync(genesisPath, buf);
|
|
185
|
+
return { ok: true, notes: [] };
|
|
186
|
+
}
|
|
187
|
+
catch (e) {
|
|
188
|
+
return { ok: false, notes: [e instanceof Error ? e.message : 'sui genesis fetch failed'] };
|
|
189
|
+
}
|
|
190
|
+
}
|
|
99
191
|
export function buildSuiComposeYaml(spec) {
|
|
100
192
|
const rpc = spec.ports.rpc ?? 9002;
|
|
101
193
|
const net = spec.network === 'mainnet' ? 'mainnet' : 'testnet';
|
|
194
|
+
const tag = suiNodeTag(spec.network);
|
|
195
|
+
const image = spec.clients.node?.image || SUI_NODE_IMAGE;
|
|
102
196
|
return `# ysk-server validators sui — generated
|
|
103
197
|
services:
|
|
104
198
|
node:
|
|
105
|
-
image: ${
|
|
199
|
+
image: ${image}:${tag}
|
|
106
200
|
restart: unless-stopped
|
|
107
|
-
command:
|
|
201
|
+
command:
|
|
202
|
+
- sui-node
|
|
203
|
+
- --config-path
|
|
204
|
+
- /data/fullnode.yaml
|
|
108
205
|
environment:
|
|
109
206
|
SUI_NETWORK: ${net}
|
|
110
207
|
ports:
|
|
@@ -122,8 +219,53 @@ export function parseSuiHealth(body) {
|
|
|
122
219
|
}
|
|
123
220
|
return { syncProgress: null, peers: null, version: null, lastError: 'unhealthy' };
|
|
124
221
|
}
|
|
222
|
+
export function aptosFullnodeYaml() {
|
|
223
|
+
return `# ysk-server generated Aptos public fullnode
|
|
224
|
+
base:
|
|
225
|
+
role: "full_node"
|
|
226
|
+
data_dir: "/data"
|
|
227
|
+
waypoint:
|
|
228
|
+
from_file: "/data/waypoint.txt"
|
|
229
|
+
execution:
|
|
230
|
+
genesis_file_location: "/data/genesis.blob"
|
|
231
|
+
full_node_networks:
|
|
232
|
+
- discovery_method: "onchain"
|
|
233
|
+
listen_address: "/ip4/0.0.0.0/tcp/6180"
|
|
234
|
+
api:
|
|
235
|
+
enabled: true
|
|
236
|
+
address: 0.0.0.0:8080
|
|
237
|
+
`;
|
|
238
|
+
}
|
|
239
|
+
export function aptosNetworkFileUrl(network, file) {
|
|
240
|
+
const net = network === 'mainnet' ? 'mainnet' : 'testnet';
|
|
241
|
+
return `https://github.com/aptos-labs/aptos-networks/raw/main/${net}/${file}`;
|
|
242
|
+
}
|
|
243
|
+
export async function ensureAptosFullnodeFiles(dataPath, network, fetchFn = fetch) {
|
|
244
|
+
const dir = String(dataPath ?? '').replace(/\/+$/, '');
|
|
245
|
+
mkdirSync(dir, { recursive: true });
|
|
246
|
+
writeFileSync(join(dir, 'fullnode.yaml'), aptosFullnodeYaml(), 'utf8');
|
|
247
|
+
const notes = [];
|
|
248
|
+
for (const file of ['genesis.blob', 'waypoint.txt']) {
|
|
249
|
+
const dest = join(dir, file);
|
|
250
|
+
if (existsSync(dest))
|
|
251
|
+
continue;
|
|
252
|
+
const url = aptosNetworkFileUrl(network, file);
|
|
253
|
+
try {
|
|
254
|
+
const res = await fetchFn(url);
|
|
255
|
+
if (!res.ok) {
|
|
256
|
+
notes.push(`aptos ${file} http ${res.status}`);
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
writeFileSync(dest, Buffer.from(await res.arrayBuffer()));
|
|
260
|
+
}
|
|
261
|
+
catch (e) {
|
|
262
|
+
notes.push(e instanceof Error ? e.message : `aptos ${file} fetch failed`);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return { ok: notes.length === 0, notes };
|
|
266
|
+
}
|
|
125
267
|
export function buildAptosComposeYaml(spec) {
|
|
126
|
-
const rpc = spec.ports.rpc ??
|
|
268
|
+
const rpc = spec.ports.rpc ?? 18080;
|
|
127
269
|
const p2p = spec.ports.p2p ?? 6180;
|
|
128
270
|
const net = spec.network === 'mainnet' ? 'mainnet' : 'testnet';
|
|
129
271
|
return `# ysk-server validators aptos — generated
|
|
@@ -131,9 +273,16 @@ services:
|
|
|
131
273
|
node:
|
|
132
274
|
image: ${img(spec, 'aptoslabs/validator', 'aptos-node-v1.27.2')}
|
|
133
275
|
restart: unless-stopped
|
|
134
|
-
command:
|
|
276
|
+
command:
|
|
277
|
+
- aptos-node
|
|
278
|
+
- -f
|
|
279
|
+
- /data/fullnode.yaml
|
|
135
280
|
environment:
|
|
136
281
|
APTOS_NETWORK: ${net}
|
|
282
|
+
ulimits:
|
|
283
|
+
nofile:
|
|
284
|
+
soft: 65536
|
|
285
|
+
hard: 65536
|
|
137
286
|
ports:
|
|
138
287
|
- "127.0.0.1:${rpc}:8080"
|
|
139
288
|
- "0.0.0.0:${p2p}:6180"
|
|
@@ -235,26 +384,70 @@ export function parseSolHealth(body) {
|
|
|
235
384
|
return { syncProgress: 1, peers: null, version: 'agave', lastError: null };
|
|
236
385
|
return { syncProgress: null, peers: null, version: null, lastError: 'unhealthy' };
|
|
237
386
|
}
|
|
238
|
-
|
|
387
|
+
export function btcCookiePaths(dataPath, network) {
|
|
388
|
+
const p = String(dataPath ?? '').replace(/\/+$/, '');
|
|
389
|
+
if (network === 'mainnet')
|
|
390
|
+
return [join(p, '.cookie')];
|
|
391
|
+
return [join(p, 'testnet3', '.cookie'), join(p, 'signet', '.cookie'), join(p, '.cookie')];
|
|
392
|
+
}
|
|
393
|
+
export function parseBtcCookieFile(raw) {
|
|
394
|
+
const line = String(raw ?? '')
|
|
395
|
+
.trim()
|
|
396
|
+
.split('\n')
|
|
397
|
+
.map((l) => l.trim())
|
|
398
|
+
.find(Boolean);
|
|
399
|
+
if (!line)
|
|
400
|
+
return null;
|
|
401
|
+
const i = line.indexOf(':');
|
|
402
|
+
if (i <= 0)
|
|
403
|
+
return null;
|
|
404
|
+
const user = line.slice(0, i);
|
|
405
|
+
const pass = line.slice(i + 1);
|
|
406
|
+
if (!user || !pass)
|
|
407
|
+
return null;
|
|
408
|
+
return { user, pass };
|
|
409
|
+
}
|
|
410
|
+
function readBtcCookie(dataPath, network) {
|
|
411
|
+
for (const f of btcCookiePaths(dataPath, network)) {
|
|
412
|
+
try {
|
|
413
|
+
if (!existsSync(f))
|
|
414
|
+
continue;
|
|
415
|
+
const parsed = parseBtcCookieFile(readFileSync(f, 'utf8'));
|
|
416
|
+
if (parsed)
|
|
417
|
+
return parsed;
|
|
418
|
+
}
|
|
419
|
+
catch {
|
|
420
|
+
/* unreadable cookie is RPC-not-ready, not a crash */
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
return null;
|
|
424
|
+
}
|
|
425
|
+
async function postRpc(url, method, fetchFn, auth) {
|
|
426
|
+
const headers = { 'content-type': 'application/json' };
|
|
427
|
+
if (auth) {
|
|
428
|
+
headers.authorization = `Basic ${Buffer.from(`${auth.user}:${auth.pass}`).toString('base64')}`;
|
|
429
|
+
}
|
|
239
430
|
const res = await fetchFn(url, {
|
|
240
431
|
method: 'POST',
|
|
241
|
-
headers
|
|
432
|
+
headers,
|
|
242
433
|
body: JSON.stringify({ jsonrpc: '2.0', id: 1, method, params: [] }),
|
|
243
434
|
});
|
|
244
|
-
return res
|
|
435
|
+
return readRpcJson(res);
|
|
245
436
|
}
|
|
246
437
|
export async function probeBtcStatus(spec, fetchFn = fetch) {
|
|
247
438
|
try {
|
|
248
|
-
|
|
439
|
+
const cookie = readBtcCookie(spec.dataPath, spec.network);
|
|
440
|
+
return parseBtcInfo(await postRpc(`http://127.0.0.1:${spec.ports.rpc ?? 8332}`, 'getblockchaininfo', fetchFn, cookie ?? undefined));
|
|
249
441
|
}
|
|
250
442
|
catch (e) {
|
|
251
|
-
|
|
443
|
+
const msg = e instanceof Error ? e.message : 'rpc unreachable';
|
|
444
|
+
return { syncProgress: null, peers: null, version: null, lastError: msg };
|
|
252
445
|
}
|
|
253
446
|
}
|
|
254
447
|
export async function probeCosmosStatus(spec, fetchFn = fetch) {
|
|
255
448
|
try {
|
|
256
449
|
const res = await fetchFn(`http://127.0.0.1:${spec.ports.rpc ?? 26657}/status`);
|
|
257
|
-
return parseCosmosStatus(await res
|
|
450
|
+
return parseCosmosStatus(await readRpcJson(res));
|
|
258
451
|
}
|
|
259
452
|
catch (e) {
|
|
260
453
|
return { syncProgress: null, peers: null, version: null, lastError: e instanceof Error ? e.message : 'rpc' };
|
|
@@ -270,8 +463,8 @@ export async function probeSuiStatus(spec, fetchFn = fetch) {
|
|
|
270
463
|
}
|
|
271
464
|
export async function probeAptosStatus(spec, fetchFn = fetch) {
|
|
272
465
|
try {
|
|
273
|
-
const res = await fetchFn(`http://127.0.0.1:${spec.ports.rpc ??
|
|
274
|
-
return parseAptosLedger(await res
|
|
466
|
+
const res = await fetchFn(`http://127.0.0.1:${spec.ports.rpc ?? 18080}/v1`);
|
|
467
|
+
return parseAptosLedger(await readRpcJson(res));
|
|
275
468
|
}
|
|
276
469
|
catch (e) {
|
|
277
470
|
return { syncProgress: null, peers: null, version: null, lastError: e instanceof Error ? e.message : 'rpc' };
|