@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.
Files changed (173) hide show
  1. package/CHANGELOG.md +127 -0
  2. package/LICENSE +201 -0
  3. package/README.md +283 -0
  4. package/dist/app.module.js +55 -0
  5. package/dist/app.module.js.map +1 -0
  6. package/dist/auth.js +151 -0
  7. package/dist/auth.js.map +1 -0
  8. package/dist/chain/cost-models.js +81 -0
  9. package/dist/chain/cost-models.js.map +1 -0
  10. package/dist/chain/provider.js +269 -0
  11. package/dist/chain/provider.js.map +1 -0
  12. package/dist/chain/socket.js +48 -0
  13. package/dist/chain/socket.js.map +1 -0
  14. package/dist/cli/doctor.js +43 -0
  15. package/dist/cli/doctor.js.map +1 -0
  16. package/dist/cli/hexcore.js +435 -0
  17. package/dist/cli/hexcore.js.map +1 -0
  18. package/dist/common/auth.guard.js +66 -0
  19. package/dist/common/auth.guard.js.map +1 -0
  20. package/dist/common/http.js +171 -0
  21. package/dist/common/http.js.map +1 -0
  22. package/dist/common/zod-validation.pipe.js +47 -0
  23. package/dist/common/zod-validation.pipe.js.map +1 -0
  24. package/dist/config.js +354 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/config.module.js +35 -0
  27. package/dist/config.module.js.map +1 -0
  28. package/dist/controllers/cardano.controller.js +173 -0
  29. package/dist/controllers/cardano.controller.js.map +1 -0
  30. package/dist/controllers/heads.controller.js +225 -0
  31. package/dist/controllers/heads.controller.js.map +1 -0
  32. package/dist/controllers/setup.controller.js +127 -0
  33. package/dist/controllers/setup.controller.js.map +1 -0
  34. package/dist/controllers/system.controller.js +153 -0
  35. package/dist/controllers/system.controller.js.map +1 -0
  36. package/dist/db/database.module.js +73 -0
  37. package/dist/db/database.module.js.map +1 -0
  38. package/dist/db/index.js +135 -0
  39. package/dist/db/index.js.map +1 -0
  40. package/dist/db/repositories.js +220 -0
  41. package/dist/db/repositories.js.map +1 -0
  42. package/dist/docker/container-stats.js +134 -0
  43. package/dist/docker/container-stats.js.map +1 -0
  44. package/dist/docker/docker.service.js +335 -0
  45. package/dist/docker/docker.service.js.map +1 -0
  46. package/dist/hydra/argv.js +172 -0
  47. package/dist/hydra/argv.js.map +1 -0
  48. package/dist/hydra/blockfrost-keys.js +15 -0
  49. package/dist/hydra/blockfrost-keys.js.map +1 -0
  50. package/dist/hydra/boot-progress.js +165 -0
  51. package/dist/hydra/boot-progress.js.map +1 -0
  52. package/dist/hydra/capabilities.js +131 -0
  53. package/dist/hydra/capabilities.js.map +1 -0
  54. package/dist/hydra/head.service.js +1072 -0
  55. package/dist/hydra/head.service.js.map +1 -0
  56. package/dist/hydra/keys.js +301 -0
  57. package/dist/hydra/keys.js.map +1 -0
  58. package/dist/hydra/node-monitor.service.js +265 -0
  59. package/dist/hydra/node-monitor.service.js.map +1 -0
  60. package/dist/hydra/ws-client.js +177 -0
  61. package/dist/hydra/ws-client.js.map +1 -0
  62. package/dist/main.js +106 -0
  63. package/dist/main.js.map +1 -0
  64. package/dist/preflight.js +215 -0
  65. package/dist/preflight.js.map +1 -0
  66. package/dist/settings.js +243 -0
  67. package/dist/settings.js.map +1 -0
  68. package/dist/setup.service.js +257 -0
  69. package/dist/setup.service.js.map +1 -0
  70. package/dist/version.js +46 -0
  71. package/dist/version.js.map +1 -0
  72. package/node_modules/@hexcore/shared/dist/cjs/api.d.ts +730 -0
  73. package/node_modules/@hexcore/shared/dist/cjs/api.d.ts.map +1 -0
  74. package/node_modules/@hexcore/shared/dist/cjs/api.js +358 -0
  75. package/node_modules/@hexcore/shared/dist/cjs/api.js.map +1 -0
  76. package/node_modules/@hexcore/shared/dist/cjs/domain.d.ts +298 -0
  77. package/node_modules/@hexcore/shared/dist/cjs/domain.d.ts.map +1 -0
  78. package/node_modules/@hexcore/shared/dist/cjs/domain.js +49 -0
  79. package/node_modules/@hexcore/shared/dist/cjs/domain.js.map +1 -0
  80. package/node_modules/@hexcore/shared/dist/cjs/hydra-versions.d.ts +279 -0
  81. package/node_modules/@hexcore/shared/dist/cjs/hydra-versions.d.ts.map +1 -0
  82. package/node_modules/@hexcore/shared/dist/cjs/hydra-versions.js +453 -0
  83. package/node_modules/@hexcore/shared/dist/cjs/hydra-versions.js.map +1 -0
  84. package/node_modules/@hexcore/shared/dist/cjs/index.d.ts +7 -0
  85. package/node_modules/@hexcore/shared/dist/cjs/index.d.ts.map +1 -0
  86. package/node_modules/@hexcore/shared/dist/cjs/index.js +23 -0
  87. package/node_modules/@hexcore/shared/dist/cjs/index.js.map +1 -0
  88. package/node_modules/@hexcore/shared/dist/cjs/naming.d.ts +118 -0
  89. package/node_modules/@hexcore/shared/dist/cjs/naming.d.ts.map +1 -0
  90. package/node_modules/@hexcore/shared/dist/cjs/naming.js +103 -0
  91. package/node_modules/@hexcore/shared/dist/cjs/naming.js.map +1 -0
  92. package/node_modules/@hexcore/shared/dist/cjs/offline.d.ts +73 -0
  93. package/node_modules/@hexcore/shared/dist/cjs/offline.d.ts.map +1 -0
  94. package/node_modules/@hexcore/shared/dist/cjs/offline.js +80 -0
  95. package/node_modules/@hexcore/shared/dist/cjs/offline.js.map +1 -0
  96. package/node_modules/@hexcore/shared/dist/cjs/protocol-params.d.ts +79 -0
  97. package/node_modules/@hexcore/shared/dist/cjs/protocol-params.d.ts.map +1 -0
  98. package/node_modules/@hexcore/shared/dist/cjs/protocol-params.js +223 -0
  99. package/node_modules/@hexcore/shared/dist/cjs/protocol-params.js.map +1 -0
  100. package/node_modules/@hexcore/shared/dist/esm/api.js +355 -0
  101. package/node_modules/@hexcore/shared/dist/esm/api.js.map +1 -0
  102. package/node_modules/@hexcore/shared/dist/esm/domain.js +46 -0
  103. package/node_modules/@hexcore/shared/dist/esm/domain.js.map +1 -0
  104. package/node_modules/@hexcore/shared/dist/esm/hydra-versions.js +441 -0
  105. package/node_modules/@hexcore/shared/dist/esm/hydra-versions.js.map +1 -0
  106. package/node_modules/@hexcore/shared/dist/esm/index.js +7 -0
  107. package/node_modules/@hexcore/shared/dist/esm/index.js.map +1 -0
  108. package/node_modules/@hexcore/shared/dist/esm/naming.js +95 -0
  109. package/node_modules/@hexcore/shared/dist/esm/naming.js.map +1 -0
  110. package/node_modules/@hexcore/shared/dist/esm/offline.js +75 -0
  111. package/node_modules/@hexcore/shared/dist/esm/offline.js.map +1 -0
  112. package/node_modules/@hexcore/shared/dist/esm/package.json +3 -0
  113. package/node_modules/@hexcore/shared/dist/esm/protocol-params.js +217 -0
  114. package/node_modules/@hexcore/shared/dist/esm/protocol-params.js.map +1 -0
  115. package/node_modules/@hexcore/shared/package.json +15 -0
  116. package/package.json +67 -0
  117. package/web/200.html +23 -0
  118. package/web/404.html +23 -0
  119. package/web/_nuxt/2MxohCD-.js +1 -0
  120. package/web/_nuxt/4pFXjB_u.js +1 -0
  121. package/web/_nuxt/B-v0dEQX.js +1 -0
  122. package/web/_nuxt/B4yE3U25.js +1 -0
  123. package/web/_nuxt/BFh8Ai0L.js +1 -0
  124. package/web/_nuxt/BgPn4NJH.js +1 -0
  125. package/web/_nuxt/Bj1xviSh.js +1 -0
  126. package/web/_nuxt/BnotlrL7.js +1 -0
  127. package/web/_nuxt/C1YRg2ic.js +1 -0
  128. package/web/_nuxt/CGD7MYQH.js +1 -0
  129. package/web/_nuxt/CQcG7Bu4.js +1 -0
  130. package/web/_nuxt/CS3KqpH_.js +1 -0
  131. package/web/_nuxt/CT-yt694.js +1 -0
  132. package/web/_nuxt/CZK6xUH-.js +1 -0
  133. package/web/_nuxt/CcdyYRYz.js +1 -0
  134. package/web/_nuxt/CePNTU1S.js +1 -0
  135. package/web/_nuxt/CgPLsCeU.js +5 -0
  136. package/web/_nuxt/CkCrahXt.js +1 -0
  137. package/web/_nuxt/CnOqDT9k.js +3 -0
  138. package/web/_nuxt/CqsSss-D.js +1 -0
  139. package/web/_nuxt/Cr8dL64Q.js +1 -0
  140. package/web/_nuxt/D3CwzwU0.js +1 -0
  141. package/web/_nuxt/DDANn6-H.js +1 -0
  142. package/web/_nuxt/DDl9uKIA.js +1 -0
  143. package/web/_nuxt/DL9i0ayn.js +1 -0
  144. package/web/_nuxt/DLNoK9BC.js +1 -0
  145. package/web/_nuxt/DLztFeOQ.js +1 -0
  146. package/web/_nuxt/DPihKXdt.js +1 -0
  147. package/web/_nuxt/DXyr6Naa.js +1 -0
  148. package/web/_nuxt/DeDg5p0D.js +1 -0
  149. package/web/_nuxt/DgDlQiDU.js +1 -0
  150. package/web/_nuxt/DyPI7qJE.js +30 -0
  151. package/web/_nuxt/LGfPBi70.js +1 -0
  152. package/web/_nuxt/Onf26W-r.js +1 -0
  153. package/web/_nuxt/QZNQe_OX.js +1 -0
  154. package/web/_nuxt/Y8IJM-iz.js +1 -0
  155. package/web/_nuxt/YUGC0nt0.js +1 -0
  156. package/web/_nuxt/builds/latest.json +1 -0
  157. package/web/_nuxt/builds/meta/7e461629-93e2-4694-b237-6d5c6a85c97c.json +1 -0
  158. package/web/_nuxt/builds/meta/dev.json +1 -0
  159. package/web/_nuxt/entry.BxsAxZxf.css +1 -0
  160. package/web/_nuxt/error-404.XbtAw-qw.css +1 -0
  161. package/web/_nuxt/error-500.CNHVltWM.css +1 -0
  162. package/web/_nuxt/rS90pPZ_.js +1 -0
  163. package/web/_nuxt/rhEiP908.js +1 -0
  164. package/web/_nuxt/vSj9Ec0g.js +1 -0
  165. package/web/_nuxt/woNjBJMN.js +1 -0
  166. package/web/favicon.svg +28 -0
  167. package/web/heads/index.html +23 -0
  168. package/web/heads/new/index.html +23 -0
  169. package/web/index.html +23 -0
  170. package/web/login/index.html +23 -0
  171. package/web/logo.svg +56 -0
  172. package/web/settings/index.html +23 -0
  173. package/web/setup/index.html +23 -0
package/dist/auth.js ADDED
@@ -0,0 +1,151 @@
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 __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var AuthService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.AuthService = void 0;
17
+ exports.hashPassword = hashPassword;
18
+ exports.verifyPassword = verifyPassword;
19
+ /**
20
+ * Auth.
21
+ *
22
+ * v1 pulled in @nestjs/jwt + passport + bcrypt for a single admin login. v2
23
+ * signs its own HS256 token with node:crypto — no dependencies, same guarantee.
24
+ * The secret and the admin password hash are generated on first boot and stored
25
+ * in the state dir, so a fresh clone needs zero credential setup.
26
+ */
27
+ const common_1 = require("@nestjs/common");
28
+ const node_crypto_1 = require("node:crypto");
29
+ const node_fs_1 = require("node:fs");
30
+ const node_path_1 = require("node:path");
31
+ const config_module_1 = require("./config.module");
32
+ const b64url = (input) => Buffer.from(input).toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
33
+ const b64urlDecode = (input) => Buffer.from(input.replace(/-/g, '+').replace(/_/g, '/'), 'base64');
34
+ function hashPassword(password) {
35
+ const salt = (0, node_crypto_1.randomBytes)(16);
36
+ const key = (0, node_crypto_1.scryptSync)(password, salt, 32);
37
+ return `${salt.toString('hex')}:${key.toString('hex')}`;
38
+ }
39
+ function verifyPassword(password, stored) {
40
+ const [saltHex, keyHex] = stored.split(':');
41
+ if (!saltHex || !keyHex)
42
+ return false;
43
+ const key = (0, node_crypto_1.scryptSync)(password, Buffer.from(saltHex, 'hex'), 32);
44
+ const expected = Buffer.from(keyHex, 'hex');
45
+ return key.length === expected.length && (0, node_crypto_1.timingSafeEqual)(key, expected);
46
+ }
47
+ let AuthService = AuthService_1 = class AuthService {
48
+ config;
49
+ logger = new common_1.Logger(AuthService_1.name);
50
+ secrets;
51
+ constructor(config) {
52
+ this.config = config;
53
+ this.secrets = this.loadOrCreateSecrets();
54
+ }
55
+ loadOrCreateSecrets() {
56
+ const path = this.config.secretsPath;
57
+ if ((0, node_fs_1.existsSync)(path)) {
58
+ const parsed = JSON.parse((0, node_fs_1.readFileSync)(path, 'utf8'));
59
+ // Env always wins so operators can rotate without touching the file.
60
+ if (this.config.jwtSecret)
61
+ parsed.jwtSecret = this.config.jwtSecret;
62
+ if (this.config.adminPassword)
63
+ parsed.adminPasswordHash = hashPassword(this.config.adminPassword);
64
+ return parsed;
65
+ }
66
+ const generatedPassword = this.config.adminPassword || (0, node_crypto_1.randomBytes)(9).toString('base64url');
67
+ const secrets = {
68
+ jwtSecret: this.config.jwtSecret || (0, node_crypto_1.randomBytes)(32).toString('hex'),
69
+ adminUsername: this.config.adminUsername,
70
+ adminPasswordHash: hashPassword(generatedPassword),
71
+ generatedPassword: this.config.adminPassword ? undefined : generatedPassword,
72
+ };
73
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(path), { recursive: true });
74
+ (0, node_fs_1.writeFileSync)(path, JSON.stringify(secrets, null, 2), { encoding: 'utf8', mode: 0o600 });
75
+ if (secrets.generatedPassword) {
76
+ this.logger.warn(`generated admin credentials — username "${secrets.adminUsername}", ` +
77
+ `password "${secrets.generatedPassword}". Save it now, then set ADMIN_PASSWORD in .env to pin your own.`);
78
+ }
79
+ return secrets;
80
+ }
81
+ get adminUsername() {
82
+ return this.secrets.adminUsername;
83
+ }
84
+ /**
85
+ * Set the admin login, from setup.
86
+ *
87
+ * The password is hashed here and the plaintext goes no further — in
88
+ * particular it never reaches the settings file, which holds ordinary
89
+ * configuration and is read back by the API. `generatedPassword` is cleared
90
+ * because it exists only to be printed once on the boot that made it, and a
91
+ * password the operator has now chosen is not that.
92
+ */
93
+ setCredentials(username, password) {
94
+ this.secrets = {
95
+ ...this.secrets,
96
+ adminUsername: username,
97
+ adminPasswordHash: hashPassword(password),
98
+ generatedPassword: undefined,
99
+ };
100
+ this.persist();
101
+ }
102
+ persist() {
103
+ const path = this.config.secretsPath;
104
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(path), { recursive: true });
105
+ (0, node_fs_1.writeFileSync)(path, JSON.stringify(this.secrets, null, 2), { encoding: 'utf8', mode: 0o600 });
106
+ }
107
+ login(username, password) {
108
+ if (username !== this.secrets.adminUsername)
109
+ return null;
110
+ if (!verifyPassword(password, this.secrets.adminPasswordHash))
111
+ return null;
112
+ return this.sign({ sub: username, role: 'admin' });
113
+ }
114
+ sign(payload, ttlSeconds = 60 * 60 * 12) {
115
+ const header = b64url(JSON.stringify({ alg: 'HS256', typ: 'JWT' }));
116
+ const now = Math.floor(Date.now() / 1000);
117
+ const body = b64url(JSON.stringify({ ...payload, iat: now, exp: now + ttlSeconds }));
118
+ const sig = this.signature(`${header}.${body}`);
119
+ return `${header}.${body}.${sig}`;
120
+ }
121
+ verify(token) {
122
+ const parts = token.split('.');
123
+ if (parts.length !== 3)
124
+ return null;
125
+ const [header, body, sig] = parts;
126
+ const expected = this.signature(`${header}.${body}`);
127
+ const a = Buffer.from(sig);
128
+ const b = Buffer.from(expected);
129
+ if (a.length !== b.length || !(0, node_crypto_1.timingSafeEqual)(a, b))
130
+ return null;
131
+ try {
132
+ const payload = JSON.parse(b64urlDecode(body).toString('utf8'));
133
+ if (typeof payload.exp === 'number' && payload.exp < Math.floor(Date.now() / 1000))
134
+ return null;
135
+ return payload;
136
+ }
137
+ catch {
138
+ return null;
139
+ }
140
+ }
141
+ signature(data) {
142
+ return b64url((0, node_crypto_1.createHmac)('sha256', this.secrets.jwtSecret).update(data).digest());
143
+ }
144
+ };
145
+ exports.AuthService = AuthService;
146
+ exports.AuthService = AuthService = AuthService_1 = __decorate([
147
+ (0, common_1.Injectable)(),
148
+ __param(0, (0, common_1.Inject)(config_module_1.APP_CONFIG)),
149
+ __metadata("design:paramtypes", [Object])
150
+ ], AuthService);
151
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AA8BA,oCAIC;AAED,wCAMC;AA1CD;;;;;;;GAOG;AACH,2CAA4D;AAC5D,6CAAmF;AACnF,qCAA6E;AAC7E,yCAAoC;AACpC,mDAA6C;AAY7C,MAAM,MAAM,GAAG,CAAC,KAAsB,EAAU,EAAE,CAC9C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAErG,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAC3C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;AAEvE,SAAgB,YAAY,CAAC,QAAgB;IACzC,MAAM,IAAI,GAAG,IAAA,yBAAW,EAAC,EAAE,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAA,wBAAU,EAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC3C,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,SAAgB,cAAc,CAAC,QAAgB,EAAE,MAAc;IAC3D,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,GAAG,GAAG,IAAA,wBAAU,EAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,IAAA,6BAAe,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC5E,CAAC;AAGM,IAAM,WAAW,mBAAjB,MAAM,WAAW;IAI6B;IAHhC,MAAM,GAAG,IAAI,eAAM,CAAC,aAAW,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,CAAU;IAEzB,YAAiD,MAAiB;QAAjB,WAAM,GAAN,MAAM,CAAW;QAC9D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC9C,CAAC;IAEO,mBAAmB;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACrC,IAAI,IAAA,oBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAY,CAAC;YACjE,qEAAqE;YACrE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS;gBAAE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACpE,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa;gBAAE,MAAM,CAAC,iBAAiB,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAClG,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAA,yBAAW,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC5F,MAAM,OAAO,GAAY;YACrB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAA,yBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;YACnE,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;YACxC,iBAAiB,EAAE,YAAY,CAAC,iBAAiB,CAAC;YAClD,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB;SAC/E,CAAC;QAEF,IAAA,mBAAS,EAAC,IAAA,mBAAO,EAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAA,uBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAEzF,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CACZ,2CAA2C,OAAO,CAAC,aAAa,KAAK;gBACjE,aAAa,OAAO,CAAC,iBAAiB,kEAAkE,CAC/G,CAAC;QACN,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IACtC,CAAC;IAED;;;;;;;;OAQG;IACH,cAAc,CAAC,QAAgB,EAAE,QAAgB;QAC7C,IAAI,CAAC,OAAO,GAAG;YACX,GAAG,IAAI,CAAC,OAAO;YACf,aAAa,EAAE,QAAQ;YACvB,iBAAiB,EAAE,YAAY,CAAC,QAAQ,CAAC;YACzC,iBAAiB,EAAE,SAAS;SAC/B,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAEO,OAAO;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACrC,IAAA,mBAAS,EAAC,IAAA,mBAAO,EAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAA,uBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,KAAK,CAAC,QAAgB,EAAE,QAAgB;QACpC,IAAI,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QACzD,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3E,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,OAAgC,EAAE,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC;QACrF,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QAChD,OAAO,GAAG,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,KAAa;QAChB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,KAAiC,CAAC;QAE9D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,IAAA,6BAAe,EAAC,CAAC,EAAE,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAEjE,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAA4B,CAAC;YAC3F,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YAChG,OAAO,OAAO,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAEO,SAAS,CAAC,IAAY;QAC1B,OAAO,MAAM,CAAC,IAAA,wBAAU,EAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,CAAC;CACJ,CAAA;AAvGY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;IAKI,WAAA,IAAA,eAAM,EAAC,0BAAU,CAAC,CAAA;;GAJtB,WAAW,CAuGvB"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_COST_MODELS = void 0;
4
+ /**
5
+ * Plutus cost models for the current ledger era.
6
+ *
7
+ * They live beside the static protocol-parameter baseline rather than inside
8
+ * it: three arrays of a few hundred integers each would bury every other value
9
+ * in that function.
10
+ *
11
+ * They matter most where there is no chain to ask. An offline head builds its
12
+ * ledger config from the baseline, and a cost model that is an EMPTY array
13
+ * leaves hydra-node unable to cost any script in that language — so every
14
+ * Plutus transaction fails, inside the head whose usual purpose is script
15
+ * development. A head with a Blockfrost key overwrites these with live values.
16
+ *
17
+ * Source: preprod epoch parameters under protocol version 11. Refresh from
18
+ * Blockfrost `/epochs/latest/parameters` (`cost_models_raw`) after a hard fork
19
+ * that changes them.
20
+ */
21
+ exports.DEFAULT_COST_MODELS = {
22
+ PlutusV1: [
23
+ 100788, 420, 1, 1, 1000, 173, 0, 1, 1000, 59957, 4, 1, 11183, 32, 201305, 8356, 4, 16000, 100, 16000, 100,
24
+ 16000, 100, 16000, 100, 16000, 100, 16000, 100, 100, 100, 16000, 100, 94375, 32, 132994, 32, 61462, 4, 72010,
25
+ 178, 0, 1, 22151, 32, 91189, 769, 4, 2, 85848, 228465, 122, 0, 1, 1, 1000, 42921, 4, 2, 30623, 28755, 75, 1,
26
+ 898148, 27279, 1, 51775, 558, 1, 39184, 1000, 60594, 1, 141895, 32, 83150, 32, 15299, 32, 76049, 1, 13169, 4,
27
+ 22100, 10, 28999, 74, 1, 28999, 74, 1, 43285, 552, 1, 44749, 541, 1, 33852, 32, 68246, 32, 72362, 32, 7243, 32,
28
+ 7391, 32, 11546, 32, 85848, 228465, 122, 0, 1, 1, 90434, 519, 0, 1, 74433, 32, 85848, 228465, 122, 0, 1, 1,
29
+ 85848, 228465, 122, 0, 1, 1, 270652, 22588, 4, 1457325, 64566, 4, 20467, 1, 4, 0, 141992, 32, 100788, 420, 1, 1,
30
+ 81663, 32, 59498, 32, 20142, 32, 24588, 32, 20744, 32, 25933, 32, 24623, 32, 53384111, 14333, 10, 955506,
31
+ 213312, 0, 2, 43053543, 10, 43574283, 26308, 10, 16000, 100, 16000, 100, 962335, 18, 2780678, 6, 442008, 1,
32
+ 52538055, 3756, 18, 267929, 18, 76433006, 8868, 18, 52948122, 18, 1995836, 36, 3227919, 12, 901022, 1,
33
+ 166917843, 4307, 36, 284546, 36, 158221314, 26549, 36, 74698472, 36, 333849714, 1, 254006273, 72, 2174038, 72,
34
+ 2261318, 64571, 4, 207616, 8310, 4, 1293828, 28716, 63, 0, 1, 1006041, 43623, 251, 0, 1, 100181, 726, 719, 0, 1,
35
+ 100181, 726, 719, 0, 1, 100181, 726, 719, 0, 1, 107878, 680, 0, 1, 95336, 1, 281145, 18848, 0, 1, 180194, 159,
36
+ 1, 1, 158519, 8942, 0, 1, 159378, 8813, 0, 1, 107490, 3298, 1, 106057, 655, 1, 1964219, 24520, 3, 607153,
37
+ 231697, 53144, 0, 1, 116711, 1957, 4, 231883, 10, 1000, 24838, 7, 1, 232010, 32, 321837444, 25087669, 18,
38
+ 617887431, 67302824, 36, 356924, 18413, 45, 21, 219951, 9444, 1, 1000, 172116, 183150, 6, 24, 21, 213283,
39
+ 618401, 1998, 28258, 1, 1000, 38159, 2, 22, 1000, 95933, 1, 1, 11, 1000, 277577, 12, 21,
40
+ ],
41
+ PlutusV2: [
42
+ 100788, 420, 1, 1, 1000, 173, 0, 1, 1000, 59957, 4, 1, 11183, 32, 201305, 8356, 4, 16000, 100, 16000, 100,
43
+ 16000, 100, 16000, 100, 16000, 100, 16000, 100, 100, 100, 16000, 100, 94375, 32, 132994, 32, 61462, 4, 72010,
44
+ 178, 0, 1, 22151, 32, 91189, 769, 4, 2, 85848, 228465, 122, 0, 1, 1, 1000, 42921, 4, 2, 30623, 28755, 75, 1,
45
+ 898148, 27279, 1, 51775, 558, 1, 39184, 1000, 60594, 1, 141895, 32, 83150, 32, 15299, 32, 76049, 1, 13169, 4,
46
+ 22100, 10, 28999, 74, 1, 28999, 74, 1, 43285, 552, 1, 44749, 541, 1, 33852, 32, 68246, 32, 72362, 32, 7243, 32,
47
+ 7391, 32, 11546, 32, 85848, 228465, 122, 0, 1, 1, 90434, 519, 0, 1, 74433, 32, 85848, 228465, 122, 0, 1, 1,
48
+ 85848, 228465, 122, 0, 1, 1, 955506, 213312, 0, 2, 270652, 22588, 4, 1457325, 64566, 4, 20467, 1, 4, 0, 141992,
49
+ 32, 100788, 420, 1, 1, 81663, 32, 59498, 32, 20142, 32, 24588, 32, 20744, 32, 25933, 32, 24623, 32, 43053543,
50
+ 10, 53384111, 14333, 10, 43574283, 26308, 10, 1293828, 28716, 63, 0, 1, 1006041, 43623, 251, 0, 1, 16000, 100,
51
+ 16000, 100, 962335, 18, 2780678, 6, 442008, 1, 52538055, 3756, 18, 267929, 18, 76433006, 8868, 18, 52948122, 18,
52
+ 1995836, 36, 3227919, 12, 901022, 1, 166917843, 4307, 36, 284546, 36, 158221314, 26549, 36, 74698472, 36,
53
+ 333849714, 1, 254006273, 72, 2174038, 72, 2261318, 64571, 4, 207616, 8310, 4, 100181, 726, 719, 0, 1, 100181,
54
+ 726, 719, 0, 1, 100181, 726, 719, 0, 1, 107878, 680, 0, 1, 95336, 1, 281145, 18848, 0, 1, 180194, 159, 1, 1,
55
+ 158519, 8942, 0, 1, 159378, 8813, 0, 1, 107490, 3298, 1, 106057, 655, 1, 1964219, 24520, 3, 607153, 231697,
56
+ 53144, 0, 1, 116711, 1957, 4, 231883, 10, 1000, 24838, 7, 1, 232010, 32, 321837444, 25087669, 18, 617887431,
57
+ 67302824, 36, 356924, 18413, 45, 21, 219951, 9444, 1, 1000, 172116, 183150, 6, 24, 21, 213283, 618401, 1998,
58
+ 28258, 1, 1000, 38159, 2, 22, 1000, 95933, 1, 1, 11, 1000, 277577, 12, 21,
59
+ ],
60
+ PlutusV3: [
61
+ 100788, 420, 1, 1, 1000, 173, 0, 1, 1000, 59957, 4, 1, 11183, 32, 201305, 8356, 4, 16000, 100, 16000, 100,
62
+ 16000, 100, 16000, 100, 16000, 100, 16000, 100, 100, 100, 16000, 100, 94375, 32, 132994, 32, 61462, 4, 72010,
63
+ 178, 0, 1, 22151, 32, 91189, 769, 4, 2, 85848, 123203, 7305, -900, 1716, 960, 57, 85848, 0, 1, 1, 1000, 42921,
64
+ 4, 2, 30623, 28755, 75, 1, 898148, 27279, 1, 51775, 558, 1, 39184, 1000, 60594, 1, 141895, 32, 83150, 32, 15299,
65
+ 32, 76049, 1, 13169, 4, 22100, 10, 28999, 74, 1, 28999, 74, 1, 43285, 552, 1, 44749, 541, 1, 33852, 32, 68246,
66
+ 32, 72362, 32, 7243, 32, 7391, 32, 11546, 32, 85848, 123203, 7305, -900, 1716, 960, 57, 85848, 0, 1, 90434, 519,
67
+ 0, 1, 74433, 32, 85848, 123203, 7305, -900, 1716, 960, 57, 85848, 0, 1, 1, 85848, 123203, 7305, -900, 1716, 960,
68
+ 57, 85848, 0, 1, 955506, 213312, 0, 2, 270652, 22588, 4, 1457325, 64566, 4, 20467, 1, 4, 0, 141992, 32, 100788,
69
+ 420, 1, 1, 81663, 32, 59498, 32, 20142, 32, 24588, 32, 20744, 32, 25933, 32, 24623, 32, 43053543, 10, 53384111,
70
+ 14333, 10, 43574283, 26308, 10, 16000, 100, 16000, 100, 962335, 18, 2780678, 6, 442008, 1, 52538055, 3756, 18,
71
+ 267929, 18, 76433006, 8868, 18, 52948122, 18, 1995836, 36, 3227919, 12, 901022, 1, 166917843, 4307, 36, 284546,
72
+ 36, 158221314, 26549, 36, 74698472, 36, 333849714, 1, 254006273, 72, 2174038, 72, 2261318, 64571, 4, 207616,
73
+ 8310, 4, 1293828, 28716, 63, 0, 1, 1006041, 43623, 251, 0, 1, 100181, 726, 719, 0, 1, 100181, 726, 719, 0, 1,
74
+ 100181, 726, 719, 0, 1, 107878, 680, 0, 1, 95336, 1, 281145, 18848, 0, 1, 180194, 159, 1, 1, 158519, 8942, 0, 1,
75
+ 159378, 8813, 0, 1, 107490, 3298, 1, 106057, 655, 1, 1964219, 24520, 3, 607153, 231697, 53144, 0, 1, 116711,
76
+ 1957, 4, 231883, 10, 1000, 24838, 7, 1, 232010, 32, 321837444, 25087669, 18, 617887431, 67302824, 36, 356924,
77
+ 18413, 45, 21, 219951, 9444, 1, 1000, 172116, 183150, 6, 24, 21, 213283, 618401, 1998, 28258, 1, 1000, 38159, 2,
78
+ 22, 1000, 95933, 1, 1, 11, 1000, 277577, 12, 21,
79
+ ],
80
+ };
81
+ //# sourceMappingURL=cost-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-models.js","sourceRoot":"","sources":["../../src/chain/cost-models.ts"],"names":[],"mappings":"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AAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK;QAC7G,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK;QAC/G,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK;QAC7G,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG;QAC/G,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG;QAC/G,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;QAC9G,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ;QAC9G,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;QAC7G,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM;QAC9G,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM;QAC3G,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC5G,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/G,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM;QAC3G,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM;QAC5G,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC/G,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE;KAClD;CACJ,CAAC"}
@@ -0,0 +1,269 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BlockfrostProvider = exports.ChainProviderError = void 0;
4
+ exports.blockfrostToCliParams = blockfrostToCliParams;
5
+ exports.applyL2Defaults = applyL2Defaults;
6
+ exports.defaultProtocolParameters = defaultProtocolParameters;
7
+ exports.fetchProtocolParameters = fetchProtocolParameters;
8
+ /**
9
+ * Chain data provider — currently the protocol parameters hydra-node needs for
10
+ * its L2 ledger, fetched from Blockfrost and converted to cardano-cli shape.
11
+ *
12
+ * v2 additionally zeroes out fees by default: a Hydra L2 ledger normally runs
13
+ * fee-free, and forgetting to do this in v1 meant every L2 transaction was
14
+ * rejected for insufficient fee, a confusing failure far from its cause.
15
+ */
16
+ const shared_1 = require("@hexcore/shared");
17
+ const cost_models_1 = require("./cost-models");
18
+ class ChainProviderError extends Error {
19
+ constructor(message) {
20
+ super(message);
21
+ this.name = 'ChainProviderError';
22
+ }
23
+ }
24
+ exports.ChainProviderError = ChainProviderError;
25
+ class BlockfrostProvider {
26
+ projectId;
27
+ baseUrl;
28
+ constructor(projectId, baseUrl) {
29
+ this.projectId = projectId;
30
+ this.baseUrl = baseUrl;
31
+ }
32
+ async get(path) {
33
+ const res = await fetch(`${this.baseUrl}${path}`, { headers: { project_id: this.projectId } });
34
+ if (!res.ok) {
35
+ const body = await res.text().catch(() => '');
36
+ if (res.status === 403) {
37
+ throw new ChainProviderError('Blockfrost rejected the project id (403). Check BLOCKFROST_PROJECT_ID matches the ' +
38
+ 'network you configured (a preprod key will not work on preview/mainnet).');
39
+ }
40
+ throw new ChainProviderError(`Blockfrost ${path} failed: ${res.status} ${body.slice(0, 200)}`);
41
+ }
42
+ return (await res.json());
43
+ }
44
+ async health() {
45
+ const res = await this.get('/health');
46
+ return res.is_healthy;
47
+ }
48
+ async latestEpochParameters() {
49
+ return this.get('/epochs/latest/parameters');
50
+ }
51
+ /**
52
+ * Lovelace held at an address, and how many UTxOs hold it.
53
+ *
54
+ * Blockfrost answers 404 for an address it has never seen, which is the
55
+ * normal state of a freshly generated key — that is a zero balance, not an
56
+ * error, and treating it as one would make every new node look broken.
57
+ *
58
+ * Lovelace is summed as BigInt and returned as a string: a mainnet balance
59
+ * can exceed Number.MAX_SAFE_INTEGER, and silently rounding someone's
60
+ * balance is worse than not showing it.
61
+ */
62
+ async addressBalance(address) {
63
+ let utxos;
64
+ try {
65
+ utxos = await this.get(`/addresses/${address}/utxos`);
66
+ }
67
+ catch (err) {
68
+ if (err instanceof ChainProviderError && /: 404\b/.test(err.message)) {
69
+ return { lovelace: '0', utxoCount: 0 };
70
+ }
71
+ throw err;
72
+ }
73
+ let lovelace = 0n;
74
+ for (const utxo of utxos) {
75
+ for (const amount of utxo.amount) {
76
+ if (amount.unit === 'lovelace')
77
+ lovelace += BigInt(amount.quantity);
78
+ }
79
+ }
80
+ return { lovelace: lovelace.toString(), utxoCount: utxos.length };
81
+ }
82
+ }
83
+ exports.BlockfrostProvider = BlockfrostProvider;
84
+ const num = (v, fallback = 0) => {
85
+ const n = typeof v === 'string' ? Number(v) : typeof v === 'number' ? v : NaN;
86
+ return Number.isFinite(n) ? n : fallback;
87
+ };
88
+ /** Translate the Blockfrost snake_case payload into the cardano-cli JSON shape. */
89
+ function blockfrostToCliParams(p) {
90
+ const costModels = (p.cost_models_raw ?? {});
91
+ return {
92
+ collateralPercentage: num(p.collateral_percent, 150),
93
+ committeeMaxTermLength: num(p.committee_max_term_length),
94
+ committeeMinSize: num(p.committee_min_size),
95
+ // Falling back to the static models rather than to []: an empty cost
96
+ // model is not "no cost", it is a language hydra-node cannot cost at
97
+ // all, so every script in it fails. See cost-models.ts.
98
+ costModels: {
99
+ PlutusV1: costModels.PlutusV1 ?? cost_models_1.DEFAULT_COST_MODELS.PlutusV1 ?? [],
100
+ PlutusV2: costModels.PlutusV2 ?? cost_models_1.DEFAULT_COST_MODELS.PlutusV2 ?? [],
101
+ PlutusV3: costModels.PlutusV3 ?? cost_models_1.DEFAULT_COST_MODELS.PlutusV3 ?? [],
102
+ },
103
+ dRepActivity: num(p.drep_activity),
104
+ dRepDeposit: num(p.drep_deposit),
105
+ // Required by hydra-node's Conway decoder — see defaultProtocolParameters.
106
+ dRepVotingThresholds: {
107
+ committeeNoConfidence: num(p.dvt_committee_no_confidence, 0.6),
108
+ committeeNormal: num(p.dvt_committee_normal, 0.67),
109
+ hardForkInitiation: num(p.dvt_hard_fork_initiation, 0.6),
110
+ motionNoConfidence: num(p.dvt_motion_no_confidence, 0.67),
111
+ ppEconomicGroup: num(p.dvt_p_p_economic_group, 0.67),
112
+ ppGovGroup: num(p.dvt_p_p_gov_group, 0.75),
113
+ ppNetworkGroup: num(p.dvt_p_p_network_group, 0.67),
114
+ ppTechnicalGroup: num(p.dvt_p_p_technical_group, 0.67),
115
+ treasuryWithdrawal: num(p.dvt_treasury_withdrawal, 0.67),
116
+ updateToConstitution: num(p.dvt_update_to_constitution, 0.75),
117
+ },
118
+ poolVotingThresholds: {
119
+ committeeNoConfidence: num(p.pvt_committee_no_confidence, 0.51),
120
+ committeeNormal: num(p.pvt_committee_normal, 0.51),
121
+ hardForkInitiation: num(p.pvt_hard_fork_initiation, 0.51),
122
+ motionNoConfidence: num(p.pvt_motion_no_confidence, 0.51),
123
+ ppSecurityGroup: num(p.pvt_p_p_security_group, 0.51),
124
+ },
125
+ executionUnitPrices: {
126
+ priceSteps: num(p.price_step),
127
+ priceMemory: num(p.price_mem),
128
+ },
129
+ govActionDeposit: num(p.gov_action_deposit),
130
+ govActionLifetime: num(p.gov_action_lifetime),
131
+ maxBlockBodySize: num(p.max_block_size),
132
+ maxBlockExecutionUnits: {
133
+ memory: num(p.max_block_ex_mem),
134
+ steps: num(p.max_block_ex_steps),
135
+ },
136
+ maxBlockHeaderSize: num(p.max_block_header_size),
137
+ maxCollateralInputs: num(p.max_collateral_inputs, 3),
138
+ maxTxExecutionUnits: {
139
+ memory: num(p.max_tx_ex_mem),
140
+ steps: num(p.max_tx_ex_steps),
141
+ },
142
+ maxTxSize: num(p.max_tx_size, 16384),
143
+ maxValueSize: num(p.max_val_size, 5000),
144
+ minFeeRefScriptCostPerByte: num(p.min_fee_ref_script_cost_per_byte, 15),
145
+ minPoolCost: num(p.min_pool_cost),
146
+ monetaryExpansion: num(p.rho),
147
+ poolPledgeInfluence: num(p.a0),
148
+ poolRetireMaxEpoch: num(p.e_max),
149
+ protocolVersion: {
150
+ // The fallback only applies when Blockfrost omits the field; the
151
+ // live value wins. It tracks the current era for the same reason
152
+ // the static baseline does — see CURRENT_PROTOCOL_MAJOR.
153
+ major: num(p.protocol_major_ver, shared_1.CURRENT_PROTOCOL_MAJOR),
154
+ minor: num(p.protocol_minor_ver, 0),
155
+ },
156
+ stakeAddressDeposit: num(p.key_deposit),
157
+ stakePoolDeposit: num(p.pool_deposit),
158
+ stakePoolTargetNum: num(p.n_opt),
159
+ treasuryCut: num(p.tau),
160
+ txFeeFixed: num(p.min_fee_b),
161
+ txFeePerByte: num(p.min_fee_a),
162
+ utxoCostPerByte: num(p.coins_per_utxo_size, 4310),
163
+ };
164
+ }
165
+ /** Hydra L2 defaults: no fees, no deposits — the Head is not a chain. */
166
+ function applyL2Defaults(params) {
167
+ return {
168
+ ...params,
169
+ txFeeFixed: 0,
170
+ txFeePerByte: 0,
171
+ stakeAddressDeposit: 0,
172
+ stakePoolDeposit: 0,
173
+ govActionDeposit: 0,
174
+ dRepDeposit: 0,
175
+ utxoCostPerByte: 0,
176
+ };
177
+ }
178
+ /**
179
+ * Static protocol parameters, used when no Blockfrost key is available — the
180
+ * cardano-node backend, and every offline head. Hydra only needs these to bound
181
+ * its L2 ledger, and the fee-bearing fields are zeroed anyway, so a baseline is
182
+ * safe and removes the hard Blockfrost dependency v1 had even in cardano-node
183
+ * mode.
184
+ *
185
+ * Kept at the CURRENT era, not the era this file was written in: hydra-node's
186
+ * ledger validates against `protocolVersion`, and a baseline claiming an older
187
+ * major rejects transactions built for the live chain with an era mismatch that
188
+ * points nowhere near here.
189
+ */
190
+ function defaultProtocolParameters() {
191
+ return {
192
+ collateralPercentage: 150,
193
+ committeeMaxTermLength: 146,
194
+ committeeMinSize: 7,
195
+ // Real models, not empty arrays — an empty one leaves every Plutus
196
+ // script in that language uncostable. See cost-models.ts.
197
+ costModels: {
198
+ PlutusV1: cost_models_1.DEFAULT_COST_MODELS.PlutusV1 ?? [],
199
+ PlutusV2: cost_models_1.DEFAULT_COST_MODELS.PlutusV2 ?? [],
200
+ PlutusV3: cost_models_1.DEFAULT_COST_MODELS.PlutusV3 ?? [],
201
+ },
202
+ dRepActivity: 20,
203
+ dRepDeposit: 500000000,
204
+ // hydra-node's Conway ledger decoder requires BOTH voting threshold
205
+ // objects; omitting either aborts the node at startup with
206
+ // `key "poolVotingThresholds" not found`.
207
+ dRepVotingThresholds: {
208
+ committeeNoConfidence: 0.6,
209
+ committeeNormal: 0.67,
210
+ hardForkInitiation: 0.6,
211
+ motionNoConfidence: 0.67,
212
+ ppEconomicGroup: 0.67,
213
+ ppGovGroup: 0.75,
214
+ ppNetworkGroup: 0.67,
215
+ ppTechnicalGroup: 0.67,
216
+ treasuryWithdrawal: 0.67,
217
+ updateToConstitution: 0.75,
218
+ },
219
+ poolVotingThresholds: {
220
+ committeeNoConfidence: 0.51,
221
+ committeeNormal: 0.51,
222
+ hardForkInitiation: 0.51,
223
+ motionNoConfidence: 0.51,
224
+ ppSecurityGroup: 0.51,
225
+ },
226
+ executionUnitPrices: { priceSteps: 0.0000721, priceMemory: 0.0577 },
227
+ govActionDeposit: 100000000000,
228
+ govActionLifetime: 6,
229
+ maxBlockBodySize: 90112,
230
+ maxBlockExecutionUnits: { memory: 72000000, steps: 20000000000 },
231
+ maxBlockHeaderSize: 1100,
232
+ maxCollateralInputs: 3,
233
+ maxTxExecutionUnits: { memory: 16500000, steps: 10000000000 },
234
+ maxTxSize: 16384,
235
+ maxValueSize: 5000,
236
+ minFeeRefScriptCostPerByte: 15,
237
+ minPoolCost: 170000000,
238
+ monetaryExpansion: 0.003,
239
+ poolPledgeInfluence: 0.3,
240
+ poolRetireMaxEpoch: 18,
241
+ protocolVersion: { major: shared_1.CURRENT_PROTOCOL_MAJOR, minor: 0 },
242
+ stakeAddressDeposit: 2000000,
243
+ stakePoolDeposit: 500000000,
244
+ stakePoolTargetNum: 500,
245
+ treasuryCut: 0.2,
246
+ txFeeFixed: 155381,
247
+ txFeePerByte: 44,
248
+ utxoCostPerByte: 4310,
249
+ };
250
+ }
251
+ /**
252
+ * Fetch live parameters from Blockfrost when a key is configured; otherwise
253
+ * fall back to the static baseline. Previously this always hit Blockfrost,
254
+ * which broke head startup in cardano-node mode where no key exists.
255
+ */
256
+ async function fetchProtocolParameters(opts) {
257
+ let params;
258
+ if (opts.projectId) {
259
+ const provider = new BlockfrostProvider(opts.projectId, opts.baseUrl);
260
+ params = blockfrostToCliParams(await provider.latestEpochParameters());
261
+ }
262
+ else {
263
+ params = defaultProtocolParameters();
264
+ }
265
+ if (opts.zeroFees !== false)
266
+ params = applyL2Defaults(params);
267
+ return { ...params, ...(opts.overrides ?? {}) };
268
+ }
269
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/chain/provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkNodeSocket = checkNodeSocket;
4
+ /**
5
+ * Is the cardano-node socket usable right now?
6
+ *
7
+ * Asked in three places that must agree: preflight (report it), the system
8
+ * config endpoint (let the UI steer people away from a backend that cannot
9
+ * work), and head creation (refuse a head that could never boot). Checking
10
+ * rather than trusting the env var is the point — an unset path, a path that
11
+ * does not exist, and a path owned by root all fail the same way at container
12
+ * start, as a node that never becomes ready.
13
+ */
14
+ const promises_1 = require("node:fs/promises");
15
+ async function checkNodeSocket(socketPath) {
16
+ if (!socketPath) {
17
+ return { configured: false, available: false, reason: 'CARDANO_NODE_SOCKET is not set' };
18
+ }
19
+ try {
20
+ // hydra-node both reads and writes the socket, so R_OK alone would pass
21
+ // a path it still could not use.
22
+ await (0, promises_1.access)(socketPath, promises_1.constants.R_OK | promises_1.constants.W_OK);
23
+ }
24
+ catch (err) {
25
+ const code = err.code;
26
+ return {
27
+ configured: true,
28
+ available: false,
29
+ reason: code === 'ENOENT'
30
+ ? `${socketPath} does not exist`
31
+ : `${socketPath} is not readable and writable by this process (${code ?? 'error'})`,
32
+ };
33
+ }
34
+ try {
35
+ // A regular file at that path means someone pointed at the wrong thing;
36
+ // hydra-node would fail much later with a confusing connection error.
37
+ const info = await (0, promises_1.stat)(socketPath);
38
+ if (!info.isSocket()) {
39
+ return { configured: true, available: false, reason: `${socketPath} is not a unix socket` };
40
+ }
41
+ }
42
+ catch {
43
+ // Raced with a node restart replacing the socket; access() already
44
+ // proved the permissions, so do not fail on the follow-up stat.
45
+ }
46
+ return { configured: true, available: true };
47
+ }
48
+ //# sourceMappingURL=socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/chain/socket.ts"],"names":[],"mappings":";;AAqBA,0CAkCC;AAvDD;;;;;;;;;GASG;AACH,+CAA2D;AAWpD,KAAK,UAAU,eAAe,CAAC,UAAkB;IACpD,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC;IAC7F,CAAC;IAED,IAAI,CAAC;QACD,wEAAwE;QACxE,iCAAiC;QACjC,MAAM,IAAA,iBAAM,EAAC,UAAU,EAAE,oBAAS,CAAC,IAAI,GAAG,oBAAS,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,OAAO;YACH,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,KAAK;YAChB,MAAM,EACF,IAAI,KAAK,QAAQ;gBACb,CAAC,CAAC,GAAG,UAAU,iBAAiB;gBAChC,CAAC,CAAC,GAAG,UAAU,kDAAkD,IAAI,IAAI,OAAO,GAAG;SAC9F,CAAC;IACN,CAAC;IAED,IAAI,CAAC;QACD,wEAAwE;QACxE,sEAAsE;QACtE,MAAM,IAAI,GAAG,MAAM,IAAA,eAAI,EAAC,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACnB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,uBAAuB,EAAE,CAAC;QAChG,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,mEAAmE;QACnE,gEAAgE;IACpE,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACjD,CAAC"}
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ /**
5
+ * `pnpm doctor` — run the preflight checks without starting the server.
6
+ */
7
+ const config_1 = require("../config");
8
+ const preflight_1 = require("../preflight");
9
+ async function main() {
10
+ let config;
11
+ try {
12
+ config = (0, config_1.loadConfig)();
13
+ }
14
+ catch (err) {
15
+ if (err instanceof config_1.ConfigError) {
16
+ console.error(`\n${err.message}\n`);
17
+ process.exit(1);
18
+ }
19
+ throw err;
20
+ }
21
+ const report = await (0, preflight_1.runPreflight)(config);
22
+ console.log((0, preflight_1.formatReport)(report));
23
+ console.log(' Effective configuration');
24
+ console.log(' ───────────────────────');
25
+ for (const [k, v] of [
26
+ ['network', config.network],
27
+ ['chain backend', config.chainBackend],
28
+ ['hydra image', config.hydraNodeImage],
29
+ ['state dir', config.stateDir],
30
+ ['database', config.dbPath],
31
+ ['api port', String(config.port)],
32
+ ['auth', config.authEnabled ? 'enabled' : 'disabled'],
33
+ ]) {
34
+ console.log(` ${String(k).padEnd(16)} ${v}`);
35
+ }
36
+ console.log('');
37
+ process.exit(report.some(r => r.status === 'fail' && r.fatal) ? 1 : 0);
38
+ }
39
+ main().catch(err => {
40
+ console.error(err);
41
+ process.exit(1);
42
+ });
43
+ //# sourceMappingURL=doctor.js.map