@vtechcom/hexcore 2.0.0-beta.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/CHANGELOG.md +127 -0
- package/LICENSE +201 -0
- package/README.md +283 -0
- package/dist/app.module.js +55 -0
- package/dist/app.module.js.map +1 -0
- package/dist/auth.js +151 -0
- package/dist/auth.js.map +1 -0
- package/dist/chain/cost-models.js +81 -0
- package/dist/chain/cost-models.js.map +1 -0
- package/dist/chain/provider.js +269 -0
- package/dist/chain/provider.js.map +1 -0
- package/dist/chain/socket.js +48 -0
- package/dist/chain/socket.js.map +1 -0
- package/dist/cli/doctor.js +43 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/hexcore.js +435 -0
- package/dist/cli/hexcore.js.map +1 -0
- package/dist/common/auth.guard.js +66 -0
- package/dist/common/auth.guard.js.map +1 -0
- package/dist/common/http.js +171 -0
- package/dist/common/http.js.map +1 -0
- package/dist/common/zod-validation.pipe.js +47 -0
- package/dist/common/zod-validation.pipe.js.map +1 -0
- package/dist/config.js +354 -0
- package/dist/config.js.map +1 -0
- package/dist/config.module.js +35 -0
- package/dist/config.module.js.map +1 -0
- package/dist/controllers/cardano.controller.js +173 -0
- package/dist/controllers/cardano.controller.js.map +1 -0
- package/dist/controllers/heads.controller.js +225 -0
- package/dist/controllers/heads.controller.js.map +1 -0
- package/dist/controllers/setup.controller.js +127 -0
- package/dist/controllers/setup.controller.js.map +1 -0
- package/dist/controllers/system.controller.js +153 -0
- package/dist/controllers/system.controller.js.map +1 -0
- package/dist/db/database.module.js +73 -0
- package/dist/db/database.module.js.map +1 -0
- package/dist/db/index.js +135 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/repositories.js +220 -0
- package/dist/db/repositories.js.map +1 -0
- package/dist/docker/container-stats.js +134 -0
- package/dist/docker/container-stats.js.map +1 -0
- package/dist/docker/docker.service.js +335 -0
- package/dist/docker/docker.service.js.map +1 -0
- package/dist/hydra/argv.js +172 -0
- package/dist/hydra/argv.js.map +1 -0
- package/dist/hydra/blockfrost-keys.js +15 -0
- package/dist/hydra/blockfrost-keys.js.map +1 -0
- package/dist/hydra/boot-progress.js +165 -0
- package/dist/hydra/boot-progress.js.map +1 -0
- package/dist/hydra/capabilities.js +131 -0
- package/dist/hydra/capabilities.js.map +1 -0
- package/dist/hydra/head.service.js +1072 -0
- package/dist/hydra/head.service.js.map +1 -0
- package/dist/hydra/keys.js +301 -0
- package/dist/hydra/keys.js.map +1 -0
- package/dist/hydra/node-monitor.service.js +265 -0
- package/dist/hydra/node-monitor.service.js.map +1 -0
- package/dist/hydra/ws-client.js +177 -0
- package/dist/hydra/ws-client.js.map +1 -0
- package/dist/main.js +106 -0
- package/dist/main.js.map +1 -0
- package/dist/preflight.js +215 -0
- package/dist/preflight.js.map +1 -0
- package/dist/settings.js +243 -0
- package/dist/settings.js.map +1 -0
- package/dist/setup.service.js +257 -0
- package/dist/setup.service.js.map +1 -0
- package/dist/version.js +46 -0
- package/dist/version.js.map +1 -0
- package/node_modules/@hexcore/shared/dist/cjs/api.d.ts +730 -0
- package/node_modules/@hexcore/shared/dist/cjs/api.d.ts.map +1 -0
- package/node_modules/@hexcore/shared/dist/cjs/api.js +358 -0
- package/node_modules/@hexcore/shared/dist/cjs/api.js.map +1 -0
- package/node_modules/@hexcore/shared/dist/cjs/domain.d.ts +298 -0
- package/node_modules/@hexcore/shared/dist/cjs/domain.d.ts.map +1 -0
- package/node_modules/@hexcore/shared/dist/cjs/domain.js +49 -0
- package/node_modules/@hexcore/shared/dist/cjs/domain.js.map +1 -0
- package/node_modules/@hexcore/shared/dist/cjs/hydra-versions.d.ts +279 -0
- package/node_modules/@hexcore/shared/dist/cjs/hydra-versions.d.ts.map +1 -0
- package/node_modules/@hexcore/shared/dist/cjs/hydra-versions.js +453 -0
- package/node_modules/@hexcore/shared/dist/cjs/hydra-versions.js.map +1 -0
- package/node_modules/@hexcore/shared/dist/cjs/index.d.ts +7 -0
- package/node_modules/@hexcore/shared/dist/cjs/index.d.ts.map +1 -0
- package/node_modules/@hexcore/shared/dist/cjs/index.js +23 -0
- package/node_modules/@hexcore/shared/dist/cjs/index.js.map +1 -0
- package/node_modules/@hexcore/shared/dist/cjs/naming.d.ts +118 -0
- package/node_modules/@hexcore/shared/dist/cjs/naming.d.ts.map +1 -0
- package/node_modules/@hexcore/shared/dist/cjs/naming.js +103 -0
- package/node_modules/@hexcore/shared/dist/cjs/naming.js.map +1 -0
- package/node_modules/@hexcore/shared/dist/cjs/offline.d.ts +73 -0
- package/node_modules/@hexcore/shared/dist/cjs/offline.d.ts.map +1 -0
- package/node_modules/@hexcore/shared/dist/cjs/offline.js +80 -0
- package/node_modules/@hexcore/shared/dist/cjs/offline.js.map +1 -0
- package/node_modules/@hexcore/shared/dist/cjs/protocol-params.d.ts +79 -0
- package/node_modules/@hexcore/shared/dist/cjs/protocol-params.d.ts.map +1 -0
- package/node_modules/@hexcore/shared/dist/cjs/protocol-params.js +223 -0
- package/node_modules/@hexcore/shared/dist/cjs/protocol-params.js.map +1 -0
- package/node_modules/@hexcore/shared/dist/esm/api.js +355 -0
- package/node_modules/@hexcore/shared/dist/esm/api.js.map +1 -0
- package/node_modules/@hexcore/shared/dist/esm/domain.js +46 -0
- package/node_modules/@hexcore/shared/dist/esm/domain.js.map +1 -0
- package/node_modules/@hexcore/shared/dist/esm/hydra-versions.js +441 -0
- package/node_modules/@hexcore/shared/dist/esm/hydra-versions.js.map +1 -0
- package/node_modules/@hexcore/shared/dist/esm/index.js +7 -0
- package/node_modules/@hexcore/shared/dist/esm/index.js.map +1 -0
- package/node_modules/@hexcore/shared/dist/esm/naming.js +95 -0
- package/node_modules/@hexcore/shared/dist/esm/naming.js.map +1 -0
- package/node_modules/@hexcore/shared/dist/esm/offline.js +75 -0
- package/node_modules/@hexcore/shared/dist/esm/offline.js.map +1 -0
- package/node_modules/@hexcore/shared/dist/esm/package.json +3 -0
- package/node_modules/@hexcore/shared/dist/esm/protocol-params.js +217 -0
- package/node_modules/@hexcore/shared/dist/esm/protocol-params.js.map +1 -0
- package/node_modules/@hexcore/shared/package.json +15 -0
- package/package.json +67 -0
- package/web/200.html +23 -0
- package/web/404.html +23 -0
- package/web/_nuxt/2MxohCD-.js +1 -0
- package/web/_nuxt/4pFXjB_u.js +1 -0
- package/web/_nuxt/B-v0dEQX.js +1 -0
- package/web/_nuxt/B4yE3U25.js +1 -0
- package/web/_nuxt/BFh8Ai0L.js +1 -0
- package/web/_nuxt/BgPn4NJH.js +1 -0
- package/web/_nuxt/Bj1xviSh.js +1 -0
- package/web/_nuxt/BnotlrL7.js +1 -0
- package/web/_nuxt/C1YRg2ic.js +1 -0
- package/web/_nuxt/CGD7MYQH.js +1 -0
- package/web/_nuxt/CQcG7Bu4.js +1 -0
- package/web/_nuxt/CS3KqpH_.js +1 -0
- package/web/_nuxt/CT-yt694.js +1 -0
- package/web/_nuxt/CZK6xUH-.js +1 -0
- package/web/_nuxt/CcdyYRYz.js +1 -0
- package/web/_nuxt/CePNTU1S.js +1 -0
- package/web/_nuxt/CgPLsCeU.js +5 -0
- package/web/_nuxt/CkCrahXt.js +1 -0
- package/web/_nuxt/CnOqDT9k.js +3 -0
- package/web/_nuxt/CqsSss-D.js +1 -0
- package/web/_nuxt/Cr8dL64Q.js +1 -0
- package/web/_nuxt/D3CwzwU0.js +1 -0
- package/web/_nuxt/DDANn6-H.js +1 -0
- package/web/_nuxt/DDl9uKIA.js +1 -0
- package/web/_nuxt/DL9i0ayn.js +1 -0
- package/web/_nuxt/DLNoK9BC.js +1 -0
- package/web/_nuxt/DLztFeOQ.js +1 -0
- package/web/_nuxt/DPihKXdt.js +1 -0
- package/web/_nuxt/DXyr6Naa.js +1 -0
- package/web/_nuxt/DeDg5p0D.js +1 -0
- package/web/_nuxt/DgDlQiDU.js +1 -0
- package/web/_nuxt/DyPI7qJE.js +30 -0
- package/web/_nuxt/LGfPBi70.js +1 -0
- package/web/_nuxt/Onf26W-r.js +1 -0
- package/web/_nuxt/QZNQe_OX.js +1 -0
- package/web/_nuxt/Y8IJM-iz.js +1 -0
- package/web/_nuxt/YUGC0nt0.js +1 -0
- package/web/_nuxt/builds/latest.json +1 -0
- package/web/_nuxt/builds/meta/7e461629-93e2-4694-b237-6d5c6a85c97c.json +1 -0
- package/web/_nuxt/builds/meta/dev.json +1 -0
- package/web/_nuxt/entry.BxsAxZxf.css +1 -0
- package/web/_nuxt/error-404.XbtAw-qw.css +1 -0
- package/web/_nuxt/error-500.CNHVltWM.css +1 -0
- package/web/_nuxt/rS90pPZ_.js +1 -0
- package/web/_nuxt/rhEiP908.js +1 -0
- package/web/_nuxt/vSj9Ec0g.js +1 -0
- package/web/_nuxt/woNjBJMN.js +1 -0
- package/web/favicon.svg +28 -0
- package/web/heads/index.html +23 -0
- package/web/heads/new/index.html +23 -0
- package/web/index.html +23 -0
- package/web/login/index.html +23 -0
- package/web/logo.svg +56 -0
- package/web/settings/index.html +23 -0
- package/web/setup/index.html +23 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"head.service.js","sourceRoot":"","sources":["../../src/hydra/head.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KeyImportError = exports.KEY_TYPE = void 0;
|
|
4
|
+
exports.toCliSigningKey = toCliSigningKey;
|
|
5
|
+
exports.toCliVerificationKey = toCliVerificationKey;
|
|
6
|
+
exports.validateCardanoKeyInput = validateCardanoKeyInput;
|
|
7
|
+
exports.generateNodeKeys = generateNodeKeys;
|
|
8
|
+
exports.addressFromVkeyEnvelope = addressFromVkeyEnvelope;
|
|
9
|
+
exports.ensureNodeKeys = ensureNodeKeys;
|
|
10
|
+
exports.removeNodeKeys = removeNodeKeys;
|
|
11
|
+
exports.networkArgs = networkArgs;
|
|
12
|
+
/**
|
|
13
|
+
* Key material generation.
|
|
14
|
+
*
|
|
15
|
+
* THE headline change in v2. In v1 `POST /hydra-heads/create` demanded a
|
|
16
|
+
* `hydraHeadKeys[]` array where the caller had already produced, for every
|
|
17
|
+
* node, a Hydra signing/verification pair AND a Cardano payment pair in
|
|
18
|
+
* text-envelope cborHex form. That meant running `hydra-node gen-hydra-key` and
|
|
19
|
+
* `cardano-cli address key-gen` by hand before the API was usable at all, and
|
|
20
|
+
* it is the reason the v1 UI could not create a working head on its own.
|
|
21
|
+
*
|
|
22
|
+
* v2 generates both pairs in-process and writes them straight to disk as the
|
|
23
|
+
* text envelopes hydra-node expects. Generating stays the default, but a
|
|
24
|
+
* Cardano payment key may now be supplied per node at creation, so a node can
|
|
25
|
+
* reuse an address that already holds funds instead of needing the faucet
|
|
26
|
+
* again. Hydra keys are always generated — they only sign Head protocol
|
|
27
|
+
* messages, so there is no funded state to carry over.
|
|
28
|
+
*
|
|
29
|
+
* Envelope handling comes from `KeysUtils` in @hydra-sdk/core rather than being
|
|
30
|
+
* hand-rolled here: it already knows every shape `cardano-cli` writes (plain,
|
|
31
|
+
* 64-byte extended, 96- and 128-byte xprv) and emits the exact `type` and
|
|
32
|
+
* `description` fields the CLI does. The serialization lib underneath arrives
|
|
33
|
+
* through @hydra-sdk/cardano-wasm, which picks the node or browser build
|
|
34
|
+
* automatically. Verified before switching off the direct `@emurgo/…` import:
|
|
35
|
+
* the CSL 14 the SDK carries derives byte-identical addresses to the 13.x this
|
|
36
|
+
* used to import, so addresses funded by earlier builds stay valid.
|
|
37
|
+
*/
|
|
38
|
+
const cardano_wasm_1 = require("@hydra-sdk/cardano-wasm");
|
|
39
|
+
const core_1 = require("@hydra-sdk/core");
|
|
40
|
+
const promises_1 = require("node:fs/promises");
|
|
41
|
+
const node_fs_1 = require("node:fs");
|
|
42
|
+
const shared_1 = require("@hexcore/shared");
|
|
43
|
+
exports.KEY_TYPE = {
|
|
44
|
+
hydraSk: 'HydraSigningKey_ed25519',
|
|
45
|
+
hydraVk: 'HydraVerificationKey_ed25519',
|
|
46
|
+
cardanoSk: 'PaymentSigningKeyShelley_ed25519',
|
|
47
|
+
cardanoVk: 'PaymentVerificationKeyShelley_ed25519',
|
|
48
|
+
};
|
|
49
|
+
/** Rejected key material. Carries no key bytes, so it is safe to log or return. */
|
|
50
|
+
class KeyImportError extends Error {
|
|
51
|
+
constructor(message) {
|
|
52
|
+
super(message);
|
|
53
|
+
this.name = 'KeyImportError';
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.KeyImportError = KeyImportError;
|
|
57
|
+
function networkId(network) {
|
|
58
|
+
return network === 'mainnet'
|
|
59
|
+
? cardano_wasm_1.CardanoWASM.NetworkInfo.mainnet().network_id()
|
|
60
|
+
: cardano_wasm_1.CardanoWASM.NetworkInfo.testnet_preprod().network_id();
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* CSL and the SDK throw values that are not always Errors, so `err.message` can
|
|
64
|
+
* be undefined. Wrap them, and never let key bytes reach the message.
|
|
65
|
+
*/
|
|
66
|
+
function guard(fn, what) {
|
|
67
|
+
try {
|
|
68
|
+
return fn();
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
if (err instanceof KeyImportError)
|
|
72
|
+
throw err;
|
|
73
|
+
throw new KeyImportError(`That ${what} is not a valid ed25519 key`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Reduce whatever the operator pasted to a plain 32-byte signing key envelope.
|
|
78
|
+
*
|
|
79
|
+
* Every accepted form is one someone genuinely has to hand: the whole `.skey`
|
|
80
|
+
* file, the `cborHex` line out of it, the bare hex, or the bech32 the CLI
|
|
81
|
+
* prints.
|
|
82
|
+
*
|
|
83
|
+
* Extended (BIP32-Ed25519) keys are refused even though the SDK can decode
|
|
84
|
+
* them: hydra-node reads `--cardano-signing-key` as a plain PaymentKey, not a
|
|
85
|
+
* PaymentExtendedKey, so accepting one would trade a clear message here for a
|
|
86
|
+
* container that dies at boot.
|
|
87
|
+
*/
|
|
88
|
+
function toCliSigningKey(input) {
|
|
89
|
+
let value = input.trim();
|
|
90
|
+
if (!value)
|
|
91
|
+
throw new KeyImportError('The signing key is empty');
|
|
92
|
+
// A pasted .skey file: {"type": …, "description": …, "cborHex": "5820…"}
|
|
93
|
+
if (value.startsWith('{')) {
|
|
94
|
+
const parsed = parseEnvelope(value, 'signing key');
|
|
95
|
+
if (parsed.type && /Extended/i.test(parsed.type))
|
|
96
|
+
throw extendedKeyError(parsed.type);
|
|
97
|
+
value = parsed.cborHex;
|
|
98
|
+
}
|
|
99
|
+
if (value.startsWith('ed25519e_sk') || value.startsWith('xprv'))
|
|
100
|
+
throw extendedKeyError();
|
|
101
|
+
if (value.startsWith('ed25519_sk')) {
|
|
102
|
+
const raw = guard(() => cardano_wasm_1.CardanoWASM.PrivateKey.from_bech32(value).as_bytes(), 'signing key');
|
|
103
|
+
return signingEnvelope(core_1.KeysUtils.encodeCliKeyEnvelope(raw));
|
|
104
|
+
}
|
|
105
|
+
return signingEnvelope(normaliseCborHex(value, 'signing key'));
|
|
106
|
+
}
|
|
107
|
+
/** Same reduction for a verification key, which is only ever a cross-check. */
|
|
108
|
+
function toCliVerificationKey(input) {
|
|
109
|
+
let value = input.trim();
|
|
110
|
+
if (!value)
|
|
111
|
+
throw new KeyImportError('The verification key is empty');
|
|
112
|
+
if (value.startsWith('{')) {
|
|
113
|
+
const parsed = parseEnvelope(value, 'verification key');
|
|
114
|
+
if (parsed.type && /Extended/i.test(parsed.type))
|
|
115
|
+
throw extendedKeyError(parsed.type);
|
|
116
|
+
value = parsed.cborHex;
|
|
117
|
+
}
|
|
118
|
+
if (value.startsWith('ed25519_pk')) {
|
|
119
|
+
const raw = guard(() => cardano_wasm_1.CardanoWASM.PublicKey.from_bech32(value).as_bytes(), 'verification key');
|
|
120
|
+
return {
|
|
121
|
+
type: exports.KEY_TYPE.cardanoVk,
|
|
122
|
+
description: 'Payment Verification Key',
|
|
123
|
+
cborHex: core_1.KeysUtils.encodeCliKeyEnvelope(raw),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
type: exports.KEY_TYPE.cardanoVk,
|
|
128
|
+
description: 'Payment Verification Key',
|
|
129
|
+
cborHex: normaliseCborHex(value, 'verification key'),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function parseEnvelope(json, what) {
|
|
133
|
+
let parsed;
|
|
134
|
+
try {
|
|
135
|
+
parsed = JSON.parse(json);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
throw new KeyImportError(`That looks like a ${what} file but is not valid JSON`);
|
|
139
|
+
}
|
|
140
|
+
if (typeof parsed.cborHex !== 'string') {
|
|
141
|
+
throw new KeyImportError(`The ${what} file has no "cborHex" field`);
|
|
142
|
+
}
|
|
143
|
+
return { type: parsed.type, cborHex: parsed.cborHex.trim() };
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Accept a bare 32-byte hex or an already-wrapped `5820…`, and reject anything
|
|
147
|
+
* whose payload is not 32 bytes — which is exactly what an extended key is.
|
|
148
|
+
*/
|
|
149
|
+
function normaliseCborHex(value, what) {
|
|
150
|
+
const hex = value.toLowerCase().replace(/\s+/g, '');
|
|
151
|
+
if (!/^[0-9a-f]+$/.test(hex)) {
|
|
152
|
+
throw new KeyImportError(`Expected a ${what}: a key file, its cborHex, 64 hex characters, or a bech32 key`);
|
|
153
|
+
}
|
|
154
|
+
if (/^[0-9a-f]{64}$/.test(hex))
|
|
155
|
+
return core_1.KeysUtils.encodeCliKeyEnvelope(hexToBytes(hex));
|
|
156
|
+
const bytes = guard(() => core_1.KeysUtils.decodeCliKeyEnvelope(hex), what);
|
|
157
|
+
if (bytes.length !== core_1.KeysUtils.CLI_KEY_LENGTH.NORMAL)
|
|
158
|
+
throw extendedKeyError();
|
|
159
|
+
return core_1.KeysUtils.encodeCliKeyEnvelope(bytes);
|
|
160
|
+
}
|
|
161
|
+
function extendedKeyError(type) {
|
|
162
|
+
return new KeyImportError(`${type ? `"${type}" is` : 'That is'} an extended (BIP32) key. hydra-node needs a plain ` +
|
|
163
|
+
'payment signing key — generate one with `cardano-cli address key-gen`.');
|
|
164
|
+
}
|
|
165
|
+
function hexToBytes(hex) {
|
|
166
|
+
return Uint8Array.from(hex.match(/.{2}/g).map(b => parseInt(b, 16)));
|
|
167
|
+
}
|
|
168
|
+
function signingEnvelope(cborHex) {
|
|
169
|
+
return { type: exports.KEY_TYPE.cardanoSk, description: 'Payment Signing Key', cborHex };
|
|
170
|
+
}
|
|
171
|
+
function addressFromPublicKey(pub, network) {
|
|
172
|
+
return cardano_wasm_1.CardanoWASM.EnterpriseAddress.new(networkId(network), cardano_wasm_1.CardanoWASM.Credential.from_keyhash(pub.hash()))
|
|
173
|
+
.to_address()
|
|
174
|
+
.to_bech32();
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Parse a supplied pair without writing anything, so a bad key on the last node
|
|
178
|
+
* is caught before the first row is inserted. Creating a head is several
|
|
179
|
+
* inserts plus four files per node; failing halfway would leave a half-built
|
|
180
|
+
* head nobody asked for.
|
|
181
|
+
*
|
|
182
|
+
* Throws KeyImportError; returns the address the key produces, which is the
|
|
183
|
+
* part worth showing back to the operator.
|
|
184
|
+
*/
|
|
185
|
+
function validateCardanoKeyInput(input, network) {
|
|
186
|
+
const sk = toCliSigningKey(input.signingKey);
|
|
187
|
+
const priv = guard(() => core_1.KeysUtils.cliSkeyToPrivateKey(sk.cborHex), 'signing key');
|
|
188
|
+
const pub = priv.to_public();
|
|
189
|
+
try {
|
|
190
|
+
if (input.verificationKey) {
|
|
191
|
+
const claimed = toCliVerificationKey(input.verificationKey);
|
|
192
|
+
if (claimed.cborHex !== core_1.KeysUtils.encodeCliKeyEnvelope(pub.as_bytes())) {
|
|
193
|
+
throw new KeyImportError('The verification key does not belong to that signing key — check the pair ' +
|
|
194
|
+
'came from the same `cardano-cli address key-gen`.');
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return addressFromPublicKey(pub, network);
|
|
198
|
+
}
|
|
199
|
+
finally {
|
|
200
|
+
priv.free();
|
|
201
|
+
pub.free();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/** Generate one complete node identity: Hydra pair + Cardano pair + address. */
|
|
205
|
+
function generateNodeKeys(network, provided) {
|
|
206
|
+
// Hydra keys: plain ed25519, only ever used to sign Head protocol messages.
|
|
207
|
+
const hydra = core_1.KeysUtils.hydraCliKeygen();
|
|
208
|
+
// Cardano keys: fund the node on L1 (commit + fanout fees). Supplying one
|
|
209
|
+
// is how a node reuses an address that already holds test ADA.
|
|
210
|
+
let cardanoSk;
|
|
211
|
+
let cardanoVk;
|
|
212
|
+
if (provided) {
|
|
213
|
+
// Re-derives rather than trusting a supplied vkey: the address must
|
|
214
|
+
// follow the key that will actually sign, and validateCardanoKeyInput
|
|
215
|
+
// has already rejected a pair that disagrees.
|
|
216
|
+
validateCardanoKeyInput(provided, network);
|
|
217
|
+
cardanoSk = toCliSigningKey(provided.signingKey);
|
|
218
|
+
cardanoVk = core_1.KeysUtils.genVkey({ cborHex: cardanoSk.cborHex });
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
const generated = core_1.KeysUtils.cardanoCliKeygen();
|
|
222
|
+
cardanoSk = generated.sk;
|
|
223
|
+
cardanoVk = generated.vk;
|
|
224
|
+
}
|
|
225
|
+
const pub = guard(() => core_1.KeysUtils.cliVkeyToPublicKey(cardanoVk.cborHex), 'verification key');
|
|
226
|
+
const address = addressFromPublicKey(pub, network);
|
|
227
|
+
pub.free();
|
|
228
|
+
return {
|
|
229
|
+
hydraSk: hydra.sk,
|
|
230
|
+
hydraVk: hydra.vk,
|
|
231
|
+
cardanoSk,
|
|
232
|
+
cardanoVk,
|
|
233
|
+
cardanoAddress: address,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
/** Derive the bech32 enterprise address from an existing Cardano vkey envelope. */
|
|
237
|
+
function addressFromVkeyEnvelope(vk, network) {
|
|
238
|
+
const pub = guard(() => core_1.KeysUtils.cliVkeyToPublicKey(vk.cborHex), 'verification key');
|
|
239
|
+
const address = addressFromPublicKey(pub, network);
|
|
240
|
+
pub.free();
|
|
241
|
+
return address;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Materialise keys for a node on disk, idempotently: if the envelopes already
|
|
245
|
+
* exist they are re-read instead of regenerated, so restarting or resizing a
|
|
246
|
+
* head never invalidates addresses the user has already funded.
|
|
247
|
+
*/
|
|
248
|
+
async function ensureNodeKeys(stateDir, headId, nodeIndex, network, provided) {
|
|
249
|
+
const hp = (0, shared_1.headPaths)(stateDir, headId);
|
|
250
|
+
await (0, promises_1.mkdir)(hp.keys, { recursive: true });
|
|
251
|
+
const paths = hp.nodeKeys(nodeIndex);
|
|
252
|
+
const allExist = (0, node_fs_1.existsSync)(paths.hydraSk) &&
|
|
253
|
+
(0, node_fs_1.existsSync)(paths.hydraVk) &&
|
|
254
|
+
(0, node_fs_1.existsSync)(paths.cardanoSk) &&
|
|
255
|
+
(0, node_fs_1.existsSync)(paths.cardanoVk);
|
|
256
|
+
if (allExist) {
|
|
257
|
+
// Existing envelopes win over `provided`: this path also runs on every
|
|
258
|
+
// start, and re-importing there would change the address of a head that
|
|
259
|
+
// is already funded and possibly open.
|
|
260
|
+
const [hydraSk, hydraVk, cardanoSk, cardanoVk] = (await Promise.all([
|
|
261
|
+
(0, promises_1.readFile)(paths.hydraSk, 'utf8'),
|
|
262
|
+
(0, promises_1.readFile)(paths.hydraVk, 'utf8'),
|
|
263
|
+
(0, promises_1.readFile)(paths.cardanoSk, 'utf8'),
|
|
264
|
+
(0, promises_1.readFile)(paths.cardanoVk, 'utf8'),
|
|
265
|
+
]));
|
|
266
|
+
const parsed = {
|
|
267
|
+
hydraSk: JSON.parse(hydraSk),
|
|
268
|
+
hydraVk: JSON.parse(hydraVk),
|
|
269
|
+
cardanoSk: JSON.parse(cardanoSk),
|
|
270
|
+
cardanoVk: JSON.parse(cardanoVk),
|
|
271
|
+
};
|
|
272
|
+
return {
|
|
273
|
+
...parsed,
|
|
274
|
+
cardanoAddress: addressFromVkeyEnvelope(parsed.cardanoVk, network),
|
|
275
|
+
nodeIndex,
|
|
276
|
+
paths: paths,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
const keys = generateNodeKeys(network, provided);
|
|
280
|
+
await Promise.all([
|
|
281
|
+
writeJson(paths.hydraSk, keys.hydraSk),
|
|
282
|
+
writeJson(paths.hydraVk, keys.hydraVk),
|
|
283
|
+
writeJson(paths.cardanoSk, keys.cardanoSk),
|
|
284
|
+
writeJson(paths.cardanoVk, keys.cardanoVk),
|
|
285
|
+
]);
|
|
286
|
+
return { ...keys, nodeIndex, paths: paths };
|
|
287
|
+
}
|
|
288
|
+
async function removeNodeKeys(stateDir, headId, nodeIndex) {
|
|
289
|
+
const paths = (0, shared_1.headPaths)(stateDir, headId).nodeKeys(nodeIndex);
|
|
290
|
+
await Promise.all(Object.values(paths).map(p => (0, promises_1.rm)(p, { force: true })));
|
|
291
|
+
}
|
|
292
|
+
async function writeJson(path, value) {
|
|
293
|
+
// Keys are secrets: 0600 so only the control-plane user can read them.
|
|
294
|
+
await (0, promises_1.writeFile)(path, JSON.stringify(value, null, 2) + '\n', { encoding: 'utf8', mode: 0o600 });
|
|
295
|
+
}
|
|
296
|
+
/** Network magic argument pair for hydra-node / cardano-cli. */
|
|
297
|
+
function networkArgs(network) {
|
|
298
|
+
const magic = shared_1.NETWORK_MAGIC[network];
|
|
299
|
+
return magic === null ? ['--mainnet'] : ['--testnet-magic', String(magic)];
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/hydra/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var NodeMonitorService_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.NodeMonitorService = void 0;
|
|
11
|
+
/**
|
|
12
|
+
* Live node state, held open rather than sampled.
|
|
13
|
+
*
|
|
14
|
+
* The status a head reported used to come from a short-lived WebSocket opened
|
|
15
|
+
* per request, which read the `Greetings` frame and closed. That is enough to
|
|
16
|
+
* answer "is this node up", and nothing else — and it produced two wrong
|
|
17
|
+
* answers that this service exists to fix:
|
|
18
|
+
*
|
|
19
|
+
* 1. **A peer dropping out is invisible to a sampler.** hydra-node announces it
|
|
20
|
+
* as a `PeerDisconnected` / `NetworkDisconnected` EVENT. It is not part of
|
|
21
|
+
* `Greetings`, and it is not in `GET /head` either — a head whose peer died
|
|
22
|
+
* still reports `Open`, because losing a peer is a connectivity fact, not a
|
|
23
|
+
* protocol state change. A connection opened after the fact sees none of it.
|
|
24
|
+
* Verified against hydra-node 2.3.0: killing one node of a two-node head
|
|
25
|
+
* leaves `GET /head` answering `Open` indefinitely while the survivor emits
|
|
26
|
+
* `NetworkDisconnected` every few seconds.
|
|
27
|
+
* 2. **`connectedPeers` is gone from `Greetings` in 2.x.** The old probe read
|
|
28
|
+
* it and reported `undefined` on every modern node, so peer counts silently
|
|
29
|
+
* stopped working after the version bump.
|
|
30
|
+
*
|
|
31
|
+
* So the control-plane keeps ONE connection per running node, folds every frame
|
|
32
|
+
* into a small state record, and answers status requests from memory. That also
|
|
33
|
+
* takes the per-request WebSocket handshake off the polling path.
|
|
34
|
+
*
|
|
35
|
+
* Connections are owned by node container name, which is unique and derived, so
|
|
36
|
+
* adopting the nodes of a head after a control-plane restart needs nothing but
|
|
37
|
+
* the DB rows.
|
|
38
|
+
*/
|
|
39
|
+
const common_1 = require("@nestjs/common");
|
|
40
|
+
const bridge_1 = require("@hydra-sdk/bridge");
|
|
41
|
+
const ws_client_1 = require("./ws-client");
|
|
42
|
+
function emptyState() {
|
|
43
|
+
return {
|
|
44
|
+
connected: false,
|
|
45
|
+
hydraState: 'UNKNOWN',
|
|
46
|
+
headId: null,
|
|
47
|
+
version: null,
|
|
48
|
+
chainSynced: null,
|
|
49
|
+
networkConnected: null,
|
|
50
|
+
peersDown: new Set(),
|
|
51
|
+
snapshotUtxoCount: null,
|
|
52
|
+
lastMessageAt: null,
|
|
53
|
+
lastError: null,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
let NodeMonitorService = NodeMonitorService_1 = class NodeMonitorService {
|
|
57
|
+
logger = new common_1.Logger(NodeMonitorService_1.name);
|
|
58
|
+
watched = new Map();
|
|
59
|
+
/**
|
|
60
|
+
* Start (or keep) a connection to a node.
|
|
61
|
+
*
|
|
62
|
+
* Idempotent by container name: reconciliation calls this for every running
|
|
63
|
+
* node on every pass, and a second call for an already-watched node must
|
|
64
|
+
* not churn the connection.
|
|
65
|
+
*/
|
|
66
|
+
watch(name, apiPort) {
|
|
67
|
+
const existing = this.watched.get(name);
|
|
68
|
+
if (existing) {
|
|
69
|
+
// A port change means the row was rebuilt underneath us; drop the
|
|
70
|
+
// stale connection rather than reporting another node's state.
|
|
71
|
+
if (existing.port === apiPort)
|
|
72
|
+
return;
|
|
73
|
+
this.unwatch(name);
|
|
74
|
+
}
|
|
75
|
+
const state = emptyState();
|
|
76
|
+
const bridge = new bridge_1.HydraBridge({
|
|
77
|
+
url: `ws://127.0.0.1:${apiPort}`,
|
|
78
|
+
/**
|
|
79
|
+
* history=no: a long-running head's log replays thousands of frames
|
|
80
|
+
* on every connect, and the monitor only cares about what is true
|
|
81
|
+
* now. The cost is that we never see the peer connections that
|
|
82
|
+
* predate us, which is exactly why state tracks departures rather
|
|
83
|
+
* than membership — see `peersDown` in NodeRuntimeState.
|
|
84
|
+
*
|
|
85
|
+
* noSnapshotUtxo=false so the first Greetings seeds a UTxO count
|
|
86
|
+
* without a separate HTTP round trip.
|
|
87
|
+
*/
|
|
88
|
+
history: false,
|
|
89
|
+
noSnapshotUtxo: false,
|
|
90
|
+
// The node is a container we manage; if it restarts, reconnect
|
|
91
|
+
// rather than leaving a permanently dead entry behind.
|
|
92
|
+
autoReconnect: true,
|
|
93
|
+
reconnectInterval: 3000,
|
|
94
|
+
maxReconnectAttempts: 0,
|
|
95
|
+
});
|
|
96
|
+
bridge.events.on('onConnected', () => {
|
|
97
|
+
state.connected = true;
|
|
98
|
+
state.lastError = null;
|
|
99
|
+
});
|
|
100
|
+
bridge.events.on('onDisconnected', () => {
|
|
101
|
+
state.connected = false;
|
|
102
|
+
/**
|
|
103
|
+
* Everything below was true of a node we can no longer hear from.
|
|
104
|
+
* Keeping the last known Hydra state would let a dead node keep
|
|
105
|
+
* reporting OPEN, which is the failure this service exists to stop.
|
|
106
|
+
*/
|
|
107
|
+
state.hydraState = 'UNKNOWN';
|
|
108
|
+
state.networkConnected = null;
|
|
109
|
+
state.peersDown.clear();
|
|
110
|
+
});
|
|
111
|
+
bridge.events.on('onConnectError', (err) => {
|
|
112
|
+
state.connected = false;
|
|
113
|
+
state.lastError = (0, ws_client_1.describeConnectError)(err);
|
|
114
|
+
});
|
|
115
|
+
bridge.events.on('onMessage', (payload) => {
|
|
116
|
+
state.lastMessageAt = new Date().toISOString();
|
|
117
|
+
this.fold(state, payload);
|
|
118
|
+
});
|
|
119
|
+
this.watched.set(name, { bridge, state, port: apiPort });
|
|
120
|
+
// connect() rejects when the node is not up yet; autoReconnect keeps
|
|
121
|
+
// trying, so a failure here is not fatal and must not throw into the
|
|
122
|
+
// caller's reconciliation pass.
|
|
123
|
+
void bridge.connect().catch((err) => {
|
|
124
|
+
state.lastError = (0, ws_client_1.describeConnectError)(err);
|
|
125
|
+
});
|
|
126
|
+
this.logger.debug(`watching ${name} on :${apiPort}`);
|
|
127
|
+
}
|
|
128
|
+
/** Fold one frame into the node's state. */
|
|
129
|
+
fold(state, payload) {
|
|
130
|
+
const tag = String(payload.tag ?? '');
|
|
131
|
+
switch (tag) {
|
|
132
|
+
case 'Greetings': {
|
|
133
|
+
state.hydraState = (0, ws_client_1.toHydraState)(payload.headStatus);
|
|
134
|
+
state.headId = typeof payload.hydraHeadId === 'string' ? payload.hydraHeadId : null;
|
|
135
|
+
state.version = typeof payload.hydraNodeVersion === 'string' ? payload.hydraNodeVersion : null;
|
|
136
|
+
const synced = payload.chainSyncedStatus;
|
|
137
|
+
state.chainSynced = synced === 'InSync' || synced === 'CatchingUp' ? synced : null;
|
|
138
|
+
const utxo = payload.snapshotUtxo;
|
|
139
|
+
if (utxo)
|
|
140
|
+
state.snapshotUtxoCount = Object.keys(utxo).length;
|
|
141
|
+
/**
|
|
142
|
+
* Greetings carries the head's CONFIGURED parties, not its
|
|
143
|
+
* connected ones, so it can say nothing about who is reachable.
|
|
144
|
+
* A node that is greeting us has a working API, though — treat
|
|
145
|
+
* its network as up until it says otherwise.
|
|
146
|
+
*/
|
|
147
|
+
if (state.networkConnected === null)
|
|
148
|
+
state.networkConnected = true;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
// The head's own protocol state. Kept in step with Greetings so a
|
|
152
|
+
// head that opens or closes while we are connected is not stale
|
|
153
|
+
// until the next reconnect.
|
|
154
|
+
case 'HeadIsOpen':
|
|
155
|
+
state.hydraState = 'OPEN';
|
|
156
|
+
break;
|
|
157
|
+
case 'HeadIsClosed':
|
|
158
|
+
state.hydraState = 'CLOSED';
|
|
159
|
+
break;
|
|
160
|
+
case 'ReadyToFanout':
|
|
161
|
+
state.hydraState = 'FANOUT_POSSIBLE';
|
|
162
|
+
break;
|
|
163
|
+
case 'HeadPartiallyFannedOut':
|
|
164
|
+
state.hydraState = 'FANNING_OUT';
|
|
165
|
+
break;
|
|
166
|
+
case 'HeadIsFinalized':
|
|
167
|
+
state.hydraState = 'FINAL';
|
|
168
|
+
break;
|
|
169
|
+
case 'HeadIsAborted':
|
|
170
|
+
state.hydraState = 'IDLE';
|
|
171
|
+
break;
|
|
172
|
+
// Connectivity. This is the part no snapshot of the head can give
|
|
173
|
+
// us — see the note at the top of the file.
|
|
174
|
+
case 'PeerConnected':
|
|
175
|
+
// A peer coming back clears it; one we never saw leave is a
|
|
176
|
+
// no-op, which is correct — see peersDown.
|
|
177
|
+
if (typeof payload.peer === 'string')
|
|
178
|
+
state.peersDown.delete(payload.peer);
|
|
179
|
+
break;
|
|
180
|
+
case 'PeerDisconnected':
|
|
181
|
+
if (typeof payload.peer === 'string')
|
|
182
|
+
state.peersDown.add(payload.peer);
|
|
183
|
+
break;
|
|
184
|
+
case 'NetworkConnected':
|
|
185
|
+
state.networkConnected = true;
|
|
186
|
+
break;
|
|
187
|
+
case 'NetworkDisconnected':
|
|
188
|
+
state.networkConnected = false;
|
|
189
|
+
break;
|
|
190
|
+
// Chain sync, which on the Blockfrost backend is the difference
|
|
191
|
+
// between a head that signs snapshots and one that refuses input.
|
|
192
|
+
case 'NodeSynced':
|
|
193
|
+
state.chainSynced = 'InSync';
|
|
194
|
+
break;
|
|
195
|
+
case 'NodeUnsynced':
|
|
196
|
+
state.chainSynced = 'CatchingUp';
|
|
197
|
+
break;
|
|
198
|
+
case 'SyncedStatusReport': {
|
|
199
|
+
const synced = payload.synced;
|
|
200
|
+
if (synced === 'InSync' || synced === 'CatchingUp')
|
|
201
|
+
state.chainSynced = synced;
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
case 'SnapshotConfirmed': {
|
|
205
|
+
const snapshot = payload.snapshot;
|
|
206
|
+
if (snapshot?.utxo)
|
|
207
|
+
state.snapshotUtxoCount = Object.keys(snapshot.utxo).length;
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
default:
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/** Drop the connection to a node we no longer expect to be up. */
|
|
215
|
+
unwatch(name) {
|
|
216
|
+
const entry = this.watched.get(name);
|
|
217
|
+
if (!entry)
|
|
218
|
+
return;
|
|
219
|
+
this.watched.delete(name);
|
|
220
|
+
// Best-effort: a node whose container is already gone will reject here,
|
|
221
|
+
// and there is nothing useful to do about it.
|
|
222
|
+
void Promise.resolve(entry.bridge.disconnect()).catch(() => undefined);
|
|
223
|
+
this.logger.debug(`stopped watching ${name}`);
|
|
224
|
+
}
|
|
225
|
+
unwatchAll(names) {
|
|
226
|
+
for (const name of names)
|
|
227
|
+
this.unwatch(name);
|
|
228
|
+
}
|
|
229
|
+
/** Current folded state, or undefined when this node is not being watched. */
|
|
230
|
+
stateFor(name) {
|
|
231
|
+
return this.watched.get(name)?.state;
|
|
232
|
+
}
|
|
233
|
+
isWatching(name) {
|
|
234
|
+
return this.watched.has(name);
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* The head's own view of itself, straight from `GET /head`.
|
|
238
|
+
*
|
|
239
|
+
* Authoritative for the protocol state — and deliberately NOT for
|
|
240
|
+
* connectivity, which it cannot see: a head whose peer just died still
|
|
241
|
+
* answers `Open`. Used as a cross-check on the folded WebSocket state, so a
|
|
242
|
+
* missed frame cannot leave the head reporting the wrong phase forever.
|
|
243
|
+
*/
|
|
244
|
+
async headInfo(name) {
|
|
245
|
+
const entry = this.watched.get(name);
|
|
246
|
+
if (!entry)
|
|
247
|
+
return null;
|
|
248
|
+
try {
|
|
249
|
+
const info = await entry.bridge.headInfo();
|
|
250
|
+
return { headId: info.headId, headStatus: String(info.headStatus) };
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
onModuleDestroy() {
|
|
257
|
+
for (const name of [...this.watched.keys()])
|
|
258
|
+
this.unwatch(name);
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
exports.NodeMonitorService = NodeMonitorService;
|
|
262
|
+
exports.NodeMonitorService = NodeMonitorService = NodeMonitorService_1 = __decorate([
|
|
263
|
+
(0, common_1.Injectable)()
|
|
264
|
+
], NodeMonitorService);
|
|
265
|
+
//# sourceMappingURL=node-monitor.service.js.map
|