@openrai/nano-core 2.1.0 → 2.4.0
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/README.md +45 -53
- package/dist/client.d.ts +8 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +1 -1
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/signing/noms.d.ts +30 -0
- package/dist/signing/noms.d.ts.map +1 -0
- package/dist/signing/noms.js +53 -0
- package/dist/signing/noms.js.map +1 -0
- package/dist/work/WorkProvider.d.ts +64 -25
- package/dist/work/WorkProvider.d.ts.map +1 -1
- package/dist/work/WorkProvider.js +259 -50
- package/dist/work/WorkProvider.js.map +1 -1
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
<h1>@openrai/nano-core</h1>
|
|
3
|
-
<p><b>
|
|
3
|
+
<p><b>Typed Nano primitives plus practical client utilities for RPC, WebSocket, and work generation.</b></p>
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@openrai/nano-core)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
@@ -9,20 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
**`@openrai/nano-core`** aims to be the canonical TypeScript Nano package: typed primitives, sane defaults, transport failover, endpoint normalization, auth handling, and a stable first-party API surface even when the internals wrap other best-of-breed libraries.
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## 🚀 Key Features
|
|
19
|
-
|
|
20
|
-
* **Bypassing the "Frontier Dilemma":** Nano is a state-based block-lattice where each block depends strictly on the exact final state of the previous frontier. This strong design choise is one of the main reasons why Nano can be feeless and energy efficient, but it often becomes a stumbling block for integrations. `@openrai/nano-core` provides internal concurrent Mutex queuing to perfectly sequentialize blocks even under heavy asynchronous loads, eliminating "Fork" or "Gap" errors.
|
|
21
|
-
* **Isomorphic Proof-of-Work (JIT Profiling):** Wraps `nano-pow-with-fallback` in a Just-In-Time (JIT) environment profiler via `WorkProvider.auto()`. What it means is that whether running on an Apple Silicon Node.js server (jumping straight to local WebGPU) or on an aging mobile browser (delegating safely to remote servers by default), which generation method to use can be decided dynamically, without UI blocking or interfering with the current user flow.
|
|
22
|
-
* **No Primitive-Obsession:** Heavily-typed, precision-safe wrappers for `NanoAmount` and `NanoAddress` entirely eliminate the "Stringly-Typed Money" programming anti-pattern.
|
|
23
|
-
* **Resilient RPC / WS / Work Fallbacks:** Endpoint pools validate eagerly, deduplicate, apply endpoint-local exponential backoff, and only fail once all viable options are exhausted.
|
|
24
|
-
* **Secret-Safe Endpoint Normalization:** API keys from query params or URL userinfo are converted into structured auth metadata and redacted from canonical URLs and audit output.
|
|
25
|
-
* **Cross-Language FFI Preparation**: The TypeScript architecture strictly follows Domain-Driven Design (DDD) to promote close API compatibility across different eventual programming language ports of the library.
|
|
12
|
+
`@openrai/nano-core` provides typed Nano primitives and a small transport layer for applications that need reliable RPC, WebSocket, and work generation behavior without rebuilding endpoint parsing, auth handling, failover, or audit visibility. It is designed for direct use in services, scripts, and browser-capable clients, with explicit defaults and observable transport state.
|
|
26
13
|
|
|
27
14
|
## 📦 Installation
|
|
28
15
|
|
|
@@ -34,30 +21,36 @@ npm install @openrai/nano-core
|
|
|
34
21
|
## 🛠 Quick Start
|
|
35
22
|
|
|
36
23
|
### 1. Minimal Client
|
|
37
|
-
|
|
24
|
+
`nano-core` handles endpoint selection, auth redaction, and precision-safe math so you can focus on the task at hand:
|
|
38
25
|
|
|
39
26
|
```typescript
|
|
40
|
-
import { NanoClient } from '@openrai/nano-core';
|
|
27
|
+
import { NanoClient, NanoAddress, NanoAmount } from '@openrai/nano-core';
|
|
41
28
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
'https://work.primary.example.com?key=secret-work',
|
|
53
|
-
'https://rpc.nano.to',
|
|
54
|
-
], // [Optional] Defaults to `https://rpc.nano.to` as the current public work endpoint
|
|
55
|
-
warn: (message) => console.warn(message), // [Optional] Defaults to console.warn with nano-core prefix
|
|
56
|
-
});
|
|
29
|
+
// Start with built-in public endpoints — no config required
|
|
30
|
+
const client = NanoClient.initialize();
|
|
31
|
+
|
|
32
|
+
// Validate a destination address (checksum-verified, throws on bad input)
|
|
33
|
+
const destination = NanoAddress.parse(
|
|
34
|
+
'nano_3arg3asgtigae3xckabaaewkx3bzsh7nwz7jkmjos79ihyaxwphhm6qgjps4',
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
// Express value in human-readable NANO — stored as precision-safe raw internally
|
|
38
|
+
const amount = NanoAmount.fromNano('1.25');
|
|
57
39
|
|
|
58
|
-
|
|
40
|
+
// Hydrate a wallet from a seed (keep your seed in an env var, never hard-code it)
|
|
41
|
+
const wallet = await client.hydrateWallet(process.env.NANO_SEED!, { index: 0 });
|
|
42
|
+
const hash = await wallet.send(destination, amount);
|
|
43
|
+
|
|
44
|
+
console.log(`Sent ${amount} NANO → ${destination}`);
|
|
45
|
+
console.log(`Block hash: ${hash}`);
|
|
59
46
|
```
|
|
60
47
|
|
|
48
|
+
Under the hood, `nano-core` has already:
|
|
49
|
+
- Selected a live RPC from the built-in April 2026 public pool
|
|
50
|
+
- Validated the address checksum and derived the public key
|
|
51
|
+
- Stored `1.25 NANO` as `1250000000000000000000000000000` raw — no float drift
|
|
52
|
+
- Redacted any API keys from audit output
|
|
53
|
+
|
|
61
54
|
### 1.1 Observe Endpoint Selection
|
|
62
55
|
|
|
63
56
|
Long-running services can observe which upstream endpoint became active without
|
|
@@ -156,12 +149,14 @@ const client = NanoClient.initialize({
|
|
|
156
149
|
```
|
|
157
150
|
|
|
158
151
|
### 4. Isomorphic Work Calibration
|
|
159
|
-
|
|
152
|
+
`nano-core` can probe remote and local work capabilities asynchronously, then build an execution plan without doing any heavyweight work in constructors. When `profiler.mode` is `auto`, call `probe()` or `calibrate()` explicitly during startup and reuse the resulting plan for later work generation.
|
|
160
153
|
|
|
161
154
|
```typescript
|
|
162
|
-
|
|
155
|
+
const plan = await client.workProvider.probe();
|
|
156
|
+
console.log(plan.steps);
|
|
157
|
+
|
|
163
158
|
const profile = await client.workProvider.calibrate();
|
|
164
|
-
console.log(
|
|
159
|
+
console.log(profile.activeStrategy);
|
|
165
160
|
```
|
|
166
161
|
|
|
167
162
|
### 5. Precision-Safe Execution
|
|
@@ -206,29 +201,26 @@ For collaboration, please refer to the `github.com/OpenRai/nano-core` issues boa
|
|
|
206
201
|
|
|
207
202
|
---
|
|
208
203
|
|
|
209
|
-
|
|
204
|
+
See `docs/architecture/transport-auth.md` for the transport/auth design. More advanced local-vs-remote work profiling is planned but not implemented in the current release.
|
|
210
205
|
|
|
211
|
-
|
|
206
|
+
## Release Flow
|
|
212
207
|
|
|
213
|
-
|
|
208
|
+
`@openrai/nano-core` is a single-package repo, so versioning is manual and publishing is automated.
|
|
214
209
|
|
|
215
|
-
|
|
210
|
+
Typical release steps:
|
|
216
211
|
|
|
217
|
-
|
|
218
|
-
WebGPU is highly unpredictable in the browser.
|
|
219
|
-
* **The Burst:** On low-difficulty thresholds (e.g., `Open/Receive`), browsers allow WebGPU to run at maximum voltage, completing the task in milliseconds (bursting up to ~2,000 MH/s in Safari).
|
|
220
|
-
* **The Throttle:** [Inference] On high-difficulty thresholds (e.g., `Send/Change`), the task takes longer. Once the compute shader runs past a specific time budget (often 1-2 seconds), browser watchdogs classify it as a runaway script or a crypto-miner. The engine violently throttles the GPU context to protect the UI thread, causing HashRates to collapse by up to 98% (e.g., dropping from 336 MH/s to 7.5 MH/s in Chromium).
|
|
212
|
+
1. Bump the package version:
|
|
221
213
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
214
|
+
```bash
|
|
215
|
+
pnpm version patch
|
|
216
|
+
```
|
|
225
217
|
|
|
226
|
-
|
|
227
|
-
Across all tested engines, WebGL is the most consistently paced API. Because it taps into the legacy rendering pipeline, browsers are less likely to violently throttle it mid-task. It maintains a slow but predictable ~15 MH/s regardless of the threshold difficulty.
|
|
218
|
+
or, without git side effects:
|
|
228
219
|
|
|
229
|
-
|
|
220
|
+
```bash
|
|
221
|
+
pnpm version patch --no-git-tag-version
|
|
222
|
+
```
|
|
230
223
|
|
|
231
|
-
|
|
224
|
+
2. Push the version commit and tag to `main`.
|
|
232
225
|
|
|
233
|
-
|
|
234
|
-
See `docs/architecture/transport-auth.md` for the full transport/auth design.
|
|
226
|
+
GitHub Actions then builds, tests, and publishes from `.github/workflows/release.yml` using npm Trusted Publisher.
|
package/dist/client.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { HttpEndpointPool } from './transport/http.js';
|
|
2
2
|
import { WsEndpointPool } from './transport/ws.js';
|
|
3
3
|
import { WorkProvider } from './work/WorkProvider.js';
|
|
4
|
-
import type { EndpointActivityEvent } from './transport/types.js';
|
|
4
|
+
import type { EndpointActivityEvent, EndpointAuditRecord } from './transport/types.js';
|
|
5
5
|
export interface TransportFallback {
|
|
6
6
|
urls: string[];
|
|
7
7
|
}
|
|
@@ -22,6 +22,12 @@ export interface NanoClientActiveEndpoints {
|
|
|
22
22
|
ws?: string;
|
|
23
23
|
work?: string;
|
|
24
24
|
}
|
|
25
|
+
export interface NanoClientAuditReport {
|
|
26
|
+
network: 'mainnet' | 'testnet' | 'beta';
|
|
27
|
+
rpc: EndpointAuditRecord[];
|
|
28
|
+
ws: EndpointAuditRecord[];
|
|
29
|
+
workProvider: ReturnType<WorkProvider['getAuditReport']>;
|
|
30
|
+
}
|
|
25
31
|
export declare class NanoClient {
|
|
26
32
|
workProvider: WorkProvider;
|
|
27
33
|
rpcPool: HttpEndpointPool;
|
|
@@ -37,7 +43,7 @@ export declare class NanoClient {
|
|
|
37
43
|
* Generates a minimal JSON-serializable report of the active configuration.
|
|
38
44
|
* Useful for deploy-time auditing and startup logs to detect misconfigurations.
|
|
39
45
|
*/
|
|
40
|
-
getAuditReport():
|
|
46
|
+
getAuditReport(): NanoClientAuditReport;
|
|
41
47
|
hydrateWallet(seed: string, options?: {
|
|
42
48
|
index?: number;
|
|
43
49
|
}): Promise<{
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAwB,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAsB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,YAAY,EAA4B,MAAM,wBAAwB,CAAC;AAChF,OAAO,KAAK,EAAE,qBAAqB,EAAgB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAwB,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAsB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,YAAY,EAA4B,MAAM,wBAAwB,CAAC;AAChF,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAgB,MAAM,sBAAsB,CAAC;AAErG,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,eAAO,MAAM,iBAAiB;eACjB,MAAM,EAAE,KAAG,iBAAiB;CACxC,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACzC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,yBAAyB;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACxC,GAAG,EAAE,mBAAmB,EAAE,CAAC;IAC3B,EAAE,EAAE,mBAAmB,EAAE,CAAC;IAC1B,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC;CAC1D;AAED,qBAAa,UAAU;IACd,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,EAAE,cAAc,CAAC;IAC9B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA8C;IAChF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwC;IAExE,OAAO;WAsDO,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU;IAI9D,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,MAAM,IAAI;IAK9E,kBAAkB,IAAI,yBAAyB;IAQtD;;;OAGG;IACI,cAAc,IAAI,qBAAqB;IASjC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO;wBAG/C,GAAG,UAAU,GAAG;;CAK3C"}
|
package/dist/client.js
CHANGED
|
@@ -89,7 +89,7 @@ export class NanoClient {
|
|
|
89
89
|
network: this.options.network ?? 'mainnet',
|
|
90
90
|
rpc: this.rpcPool.getAuditReport(),
|
|
91
91
|
ws: this.wsPool.getAuditReport(),
|
|
92
|
-
workProvider: this.workProvider.getAuditReport()
|
|
92
|
+
workProvider: this.workProvider.getAuditReport(),
|
|
93
93
|
};
|
|
94
94
|
}
|
|
95
95
|
async hydrateWallet(seed, options = {}) {
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAwB,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAsB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,YAAY,EAA4B,MAAM,wBAAwB,CAAC;AAOhF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,EAAE,EAAE,CAAC,IAAc,EAAqB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;CACtD,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export { NanoAddress } from './primitives/NanoAddress.js';
|
|
2
2
|
export { NanoAmount } from './primitives/NanoAmount.js';
|
|
3
|
+
export { NOMS } from './signing/noms.js';
|
|
3
4
|
export { WorkProvider, RemoteWorkServer, LocalCompute, type WorkProviderOptions } from './work/WorkProvider.js';
|
|
4
|
-
export { NanoClient, TransportFallback, type NanoClientOptions, type NanoClientActiveEndpoints } from './client.js';
|
|
5
|
+
export { NanoClient, TransportFallback, type NanoClientOptions, type NanoClientActiveEndpoints, type NanoClientAuditReport } from './client.js';
|
|
5
6
|
export { EndpointPool, HttpEndpointPool, NanoTransportConfigError, WsEndpointPool, normalizeEndpoints, } from './transport/index.js';
|
|
6
7
|
export type { AuthSource, EndpointActivityEvent, EndpointAuditRecord, EndpointAuth, EndpointKind, EndpointPoolOptions, EndpointState, NormalizedEndpoint, TransportPolicy, } from './transport/index.js';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAChH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,KAAK,yBAAyB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAChH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,KAAK,yBAAyB,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAChJ,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,EACd,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,UAAU,EACV,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,eAAe,GAChB,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { NanoAddress } from './primitives/NanoAddress.js';
|
|
2
2
|
export { NanoAmount } from './primitives/NanoAmount.js';
|
|
3
|
+
export { NOMS } from './signing/noms.js';
|
|
3
4
|
export { WorkProvider, RemoteWorkServer, LocalCompute } from './work/WorkProvider.js';
|
|
4
5
|
export { NanoClient, TransportFallback } from './client.js';
|
|
5
6
|
export { EndpointPool, HttpEndpointPool, NanoTransportConfigError, WsEndpointPool, normalizeEndpoints, } from './transport/index.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAA4B,MAAM,wBAAwB,CAAC;AAChH,OAAO,EAAE,UAAU,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAA4B,MAAM,wBAAwB,CAAC;AAChH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAsF,MAAM,aAAa,CAAC;AAChJ,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,EACd,kBAAkB,GACnB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nano Off-chain Message Signing (NOMS) implementation (ORIS-001).
|
|
3
|
+
*/
|
|
4
|
+
export declare const NOMS: {
|
|
5
|
+
/**
|
|
6
|
+
* Constructs the binary payload for an off-chain message as per ORIS-001.
|
|
7
|
+
* Format: MAGIC_HEADER (25 bytes) || MESSAGE_LENGTH (4 bytes uint32be) || MESSAGE (UTF-8)
|
|
8
|
+
*/
|
|
9
|
+
createPayload(message: string): Uint8Array;
|
|
10
|
+
/**
|
|
11
|
+
* Computes the 32-byte Blake2b hash of the NOMS payload.
|
|
12
|
+
*/
|
|
13
|
+
hashMessage(message: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Signs an off-chain message using standard Nano Ed25519 behavior.
|
|
16
|
+
* @param message The UTF-8 string message to sign.
|
|
17
|
+
* @param secretKey The 32-byte private key in hexadecimal format.
|
|
18
|
+
* @returns The 64-byte signature in hexadecimal format (128 characters).
|
|
19
|
+
*/
|
|
20
|
+
signMessage(message: string, secretKey: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Verifies an off-chain message signature against a public key.
|
|
23
|
+
* @param message The UTF-8 string message that was signed.
|
|
24
|
+
* @param signature The 64-byte signature in hexadecimal format.
|
|
25
|
+
* @param publicKey The 32-byte public key in hexadecimal format.
|
|
26
|
+
* @returns True if the signature is valid for the given message and public key.
|
|
27
|
+
*/
|
|
28
|
+
verifyMessage(message: string, signature: string, publicKey: string): boolean;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=noms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noms.d.ts","sourceRoot":"","sources":["../../src/signing/noms.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,eAAO,MAAM,IAAI;IACf;;;OAGG;2BACoB,MAAM,GAAG,UAAU;IAa1C;;OAEG;yBACkB,MAAM,GAAG,MAAM;IAKpC;;;;;OAKG;yBACkB,MAAM,aAAa,MAAM,GAAG,MAAM;IAKvD;;;;;;OAMG;2BACoB,MAAM,aAAa,MAAM,aAAa,MAAM,GAAG,OAAO;CAI9E,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import blake from 'blakejs';
|
|
2
|
+
import * as nanocurrency from 'nanocurrency';
|
|
3
|
+
const { blake2bHex } = blake;
|
|
4
|
+
const MAGIC_HEADER_TEXT = '\x18Nano Off-chain Message:\n';
|
|
5
|
+
const MAGIC_HEADER_BYTES = new TextEncoder().encode(MAGIC_HEADER_TEXT);
|
|
6
|
+
/**
|
|
7
|
+
* Nano Off-chain Message Signing (NOMS) implementation (ORIS-001).
|
|
8
|
+
*/
|
|
9
|
+
export const NOMS = {
|
|
10
|
+
/**
|
|
11
|
+
* Constructs the binary payload for an off-chain message as per ORIS-001.
|
|
12
|
+
* Format: MAGIC_HEADER (25 bytes) || MESSAGE_LENGTH (4 bytes uint32be) || MESSAGE (UTF-8)
|
|
13
|
+
*/
|
|
14
|
+
createPayload(message) {
|
|
15
|
+
const messageBytes = new TextEncoder().encode(message);
|
|
16
|
+
const lengthBytes = new Uint8Array(4);
|
|
17
|
+
new DataView(lengthBytes.buffer).setUint32(0, messageBytes.length, false);
|
|
18
|
+
const payload = new Uint8Array(MAGIC_HEADER_BYTES.length + lengthBytes.length + messageBytes.length);
|
|
19
|
+
payload.set(MAGIC_HEADER_BYTES, 0);
|
|
20
|
+
payload.set(lengthBytes, MAGIC_HEADER_BYTES.length);
|
|
21
|
+
payload.set(messageBytes, MAGIC_HEADER_BYTES.length + lengthBytes.length);
|
|
22
|
+
return payload;
|
|
23
|
+
},
|
|
24
|
+
/**
|
|
25
|
+
* Computes the 32-byte Blake2b hash of the NOMS payload.
|
|
26
|
+
*/
|
|
27
|
+
hashMessage(message) {
|
|
28
|
+
const payload = this.createPayload(message);
|
|
29
|
+
return blake2bHex(payload, undefined, 32);
|
|
30
|
+
},
|
|
31
|
+
/**
|
|
32
|
+
* Signs an off-chain message using standard Nano Ed25519 behavior.
|
|
33
|
+
* @param message The UTF-8 string message to sign.
|
|
34
|
+
* @param secretKey The 32-byte private key in hexadecimal format.
|
|
35
|
+
* @returns The 64-byte signature in hexadecimal format (128 characters).
|
|
36
|
+
*/
|
|
37
|
+
signMessage(message, secretKey) {
|
|
38
|
+
const hash = this.hashMessage(message);
|
|
39
|
+
return nanocurrency.signBlock({ hash, secretKey }).toLowerCase();
|
|
40
|
+
},
|
|
41
|
+
/**
|
|
42
|
+
* Verifies an off-chain message signature against a public key.
|
|
43
|
+
* @param message The UTF-8 string message that was signed.
|
|
44
|
+
* @param signature The 64-byte signature in hexadecimal format.
|
|
45
|
+
* @param publicKey The 32-byte public key in hexadecimal format.
|
|
46
|
+
* @returns True if the signature is valid for the given message and public key.
|
|
47
|
+
*/
|
|
48
|
+
verifyMessage(message, signature, publicKey) {
|
|
49
|
+
const hash = this.hashMessage(message);
|
|
50
|
+
return nanocurrency.verifyBlock({ hash, signature, publicKey });
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=noms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noms.js","sourceRoot":"","sources":["../../src/signing/noms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,KAAK,YAAY,MAAM,cAAc,CAAC;AAE7C,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;AAE7B,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AAC1D,MAAM,kBAAkB,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEvE;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB;;;OAGG;IACH,aAAa,CAAC,OAAe;QAC3B,MAAM,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAE1E,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,kBAAkB,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACrG,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,kBAAkB,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAE1E,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAAe;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,OAAe,EAAE,SAAiB;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,YAAY,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACnE,CAAC;IAED;;;;;;OAMG;IACH,aAAa,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAiB;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IAClE,CAAC;CACF,CAAC"}
|
|
@@ -1,16 +1,38 @@
|
|
|
1
|
-
import type { EndpointActivityEvent } from '../transport/types.js';
|
|
2
|
-
|
|
3
|
-
* Local compute engines available.
|
|
4
|
-
*/
|
|
1
|
+
import type { EndpointActivityEvent, EndpointAuditRecord } from '../transport/types.js';
|
|
2
|
+
import { PowBackendName } from 'nano-pow-with-fallback';
|
|
5
3
|
export declare enum LocalCompute {
|
|
6
4
|
WEBGPU = "webgpu",
|
|
7
5
|
WEBGL = "webgl",
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
WASM = "wasm"
|
|
7
|
+
}
|
|
8
|
+
type PowBackendNameValue = typeof PowBackendName[keyof typeof PowBackendName];
|
|
9
|
+
type WorkPlanStepKind = 'remote' | 'webgpu' | 'webgl' | 'wasm';
|
|
10
|
+
export interface WorkCalibrationProfile {
|
|
11
|
+
measuredMhs: number;
|
|
12
|
+
activeStrategy: 'remote-first' | 'planned';
|
|
13
|
+
}
|
|
14
|
+
export interface WorkGenerationTrace {
|
|
15
|
+
mode: 'remote' | 'local';
|
|
16
|
+
backend?: PowBackendNameValue;
|
|
17
|
+
}
|
|
18
|
+
export interface WorkProbeResult {
|
|
19
|
+
kind: WorkPlanStepKind;
|
|
20
|
+
available: boolean;
|
|
21
|
+
durationMs?: number;
|
|
22
|
+
reason?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface WorkPlanStep {
|
|
25
|
+
kind: WorkPlanStepKind;
|
|
26
|
+
}
|
|
27
|
+
export interface WorkExecutionPlan {
|
|
28
|
+
source: 'default' | 'probe';
|
|
29
|
+
steps: WorkPlanStep[];
|
|
30
|
+
disabledLocalBackends: PowBackendNameValue[];
|
|
31
|
+
probeResults: WorkProbeResult[];
|
|
10
32
|
}
|
|
11
33
|
export declare class RemoteWorkServer {
|
|
12
|
-
private _url;
|
|
13
|
-
private _timeoutMs;
|
|
34
|
+
private readonly _url;
|
|
35
|
+
private readonly _timeoutMs;
|
|
14
36
|
constructor(url: string, timeoutMs: number);
|
|
15
37
|
get url(): string;
|
|
16
38
|
get timeoutMs(): number;
|
|
@@ -25,6 +47,7 @@ export interface WorkProviderOptions {
|
|
|
25
47
|
defaults?: string[];
|
|
26
48
|
warn?: (message: string) => void;
|
|
27
49
|
onActiveEndpointChange?: (event: EndpointActivityEvent) => void;
|
|
50
|
+
timeoutMs?: number;
|
|
28
51
|
remotes?: RemoteWorkServer[];
|
|
29
52
|
localChain?: LocalCompute[];
|
|
30
53
|
profiler?: {
|
|
@@ -34,25 +57,41 @@ export interface WorkProviderOptions {
|
|
|
34
57
|
};
|
|
35
58
|
}
|
|
36
59
|
export declare class WorkProvider {
|
|
37
|
-
private options;
|
|
38
|
-
private remotePool;
|
|
60
|
+
private readonly options;
|
|
61
|
+
private readonly remotePool;
|
|
62
|
+
private readonly warn;
|
|
63
|
+
private readonly localTimeoutMs;
|
|
64
|
+
private lastGenerationTrace;
|
|
65
|
+
private lastProbeResults;
|
|
66
|
+
private executionPlan;
|
|
67
|
+
private probePromise;
|
|
39
68
|
private constructor();
|
|
40
69
|
static auto(options: WorkProviderOptions): WorkProvider;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
70
|
+
getRemoteAuditReport(): EndpointAuditRecord[];
|
|
71
|
+
getAuditReport(): {
|
|
72
|
+
remotePool: EndpointAuditRecord[];
|
|
73
|
+
remotes: Array<{
|
|
74
|
+
url: string;
|
|
75
|
+
timeoutMs: number;
|
|
76
|
+
}>;
|
|
77
|
+
localChain: LocalCompute[];
|
|
78
|
+
profiler: WorkProviderOptions['profiler'] | 'default';
|
|
79
|
+
localBackend: PowBackendNameValue | null;
|
|
80
|
+
lastGenerationTrace: WorkGenerationTrace | null;
|
|
81
|
+
executionPlan: WorkExecutionPlan;
|
|
82
|
+
};
|
|
83
|
+
calibrate(): Promise<WorkCalibrationProfile>;
|
|
84
|
+
probe(): Promise<WorkExecutionPlan>;
|
|
85
|
+
private buildDefaultPlan;
|
|
86
|
+
private createLocalPowService;
|
|
87
|
+
private probeRemote;
|
|
88
|
+
private probeLocalBackend;
|
|
89
|
+
private buildPlanFromProbeResults;
|
|
90
|
+
private runProbe;
|
|
91
|
+
private generateRemote;
|
|
92
|
+
private generateLocalWithBackend;
|
|
93
|
+
private executePlan;
|
|
56
94
|
generate(hash: string, difficulty: string): Promise<string>;
|
|
57
95
|
}
|
|
96
|
+
export {};
|
|
58
97
|
//# sourceMappingURL=WorkProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkProvider.d.ts","sourceRoot":"","sources":["../../src/work/WorkProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"WorkProvider.d.ts","sourceRoot":"","sources":["../../src/work/WorkProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
import { HttpEndpointPool } from '../transport/http.js';
|
|
2
|
-
|
|
3
|
-
* Local compute engines available.
|
|
4
|
-
*/
|
|
2
|
+
import { PowBackendName, PowService } from 'nano-pow-with-fallback';
|
|
5
3
|
export var LocalCompute;
|
|
6
4
|
(function (LocalCompute) {
|
|
7
5
|
LocalCompute["WEBGPU"] = "webgpu";
|
|
8
6
|
LocalCompute["WEBGL"] = "webgl";
|
|
9
|
-
LocalCompute["
|
|
10
|
-
LocalCompute["CPU"] = "cpu";
|
|
7
|
+
LocalCompute["WASM"] = "wasm";
|
|
11
8
|
})(LocalCompute || (LocalCompute = {}));
|
|
12
9
|
export class RemoteWorkServer {
|
|
13
10
|
_url;
|
|
@@ -22,73 +19,285 @@ export class RemoteWorkServer {
|
|
|
22
19
|
return new RemoteWorkServer(url, options.timeoutMs ?? 5000);
|
|
23
20
|
}
|
|
24
21
|
}
|
|
22
|
+
const DEFAULT_LOCAL_CHAIN = [LocalCompute.WEBGPU, LocalCompute.WEBGL, LocalCompute.WASM];
|
|
23
|
+
const DEFAULT_LOCAL_TIMEOUT_MS = 10_000;
|
|
24
|
+
const PROBE_HASH = 'ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789';
|
|
25
|
+
const PROBE_DIFFICULTY = 'fffffe0000000000';
|
|
26
|
+
function localComputeToBackendName(compute) {
|
|
27
|
+
switch (compute) {
|
|
28
|
+
case LocalCompute.WEBGPU:
|
|
29
|
+
return PowBackendName.WEBGPU;
|
|
30
|
+
case LocalCompute.WEBGL:
|
|
31
|
+
return PowBackendName.WEBGL;
|
|
32
|
+
case LocalCompute.WASM:
|
|
33
|
+
return PowBackendName.WASM;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function localComputeToPlanStep(compute) {
|
|
37
|
+
switch (compute) {
|
|
38
|
+
case LocalCompute.WEBGPU:
|
|
39
|
+
return 'webgpu';
|
|
40
|
+
case LocalCompute.WEBGL:
|
|
41
|
+
return 'webgl';
|
|
42
|
+
case LocalCompute.WASM:
|
|
43
|
+
return 'wasm';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function planStepToBackendName(kind) {
|
|
47
|
+
switch (kind) {
|
|
48
|
+
case 'webgpu':
|
|
49
|
+
return PowBackendName.WEBGPU;
|
|
50
|
+
case 'webgl':
|
|
51
|
+
return PowBackendName.WEBGL;
|
|
52
|
+
case 'wasm':
|
|
53
|
+
return PowBackendName.WASM;
|
|
54
|
+
case 'remote':
|
|
55
|
+
throw new Error('remote plan step does not map to a local backend');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function isLocalStepKind(kind) {
|
|
59
|
+
return kind !== 'remote';
|
|
60
|
+
}
|
|
61
|
+
function withTimeout(promise, timeoutMs, onTimeout) {
|
|
62
|
+
return new Promise((resolve, reject) => {
|
|
63
|
+
const timer = setTimeout(() => {
|
|
64
|
+
onTimeout?.();
|
|
65
|
+
reject(new Error(`Timed out after ${timeoutMs}ms`));
|
|
66
|
+
}, timeoutMs);
|
|
67
|
+
promise.then((value) => {
|
|
68
|
+
clearTimeout(timer);
|
|
69
|
+
resolve(value);
|
|
70
|
+
}, (error) => {
|
|
71
|
+
clearTimeout(timer);
|
|
72
|
+
reject(error);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
|
25
76
|
export class WorkProvider {
|
|
26
77
|
options;
|
|
27
78
|
remotePool;
|
|
79
|
+
warn;
|
|
80
|
+
localTimeoutMs;
|
|
81
|
+
lastGenerationTrace = null;
|
|
82
|
+
lastProbeResults = [];
|
|
83
|
+
executionPlan;
|
|
84
|
+
probePromise = null;
|
|
28
85
|
constructor(options) {
|
|
29
86
|
this.options = options;
|
|
87
|
+
this.warn = options.warn ?? ((message) => console.warn(`[nano-core] ${message}`));
|
|
88
|
+
this.localTimeoutMs = DEFAULT_LOCAL_TIMEOUT_MS;
|
|
30
89
|
const hasRemotePool = (options.urls && options.urls.length > 0) || options.env || (options.defaults && options.defaults.length > 0);
|
|
31
90
|
if (!hasRemotePool) {
|
|
32
91
|
this.remotePool = null;
|
|
33
|
-
return;
|
|
34
92
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
93
|
+
else {
|
|
94
|
+
const remotePoolOptions = {
|
|
95
|
+
kind: 'work',
|
|
96
|
+
defaults: options.defaults ?? [],
|
|
97
|
+
transportPolicy: 'bearer-and-json-body-key',
|
|
98
|
+
...(options.timeoutMs ? { timeoutMs: options.timeoutMs } : {}),
|
|
99
|
+
};
|
|
100
|
+
if (options.urls && options.urls.length > 0)
|
|
101
|
+
remotePoolOptions.urls = options.urls;
|
|
102
|
+
if (options.env)
|
|
103
|
+
remotePoolOptions.env = options.env;
|
|
104
|
+
if (options.warn)
|
|
105
|
+
remotePoolOptions.warn = options.warn;
|
|
106
|
+
if (options.onActiveEndpointChange)
|
|
107
|
+
remotePoolOptions.onActiveEndpointChange = options.onActiveEndpointChange;
|
|
108
|
+
this.remotePool = new HttpEndpointPool(remotePoolOptions);
|
|
109
|
+
}
|
|
110
|
+
this.executionPlan = this.buildDefaultPlan();
|
|
49
111
|
}
|
|
50
112
|
static auto(options) {
|
|
51
113
|
return new WorkProvider(options);
|
|
52
114
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
115
|
+
getRemoteAuditReport() {
|
|
116
|
+
return this.remotePool?.getAuditReport() ?? [];
|
|
117
|
+
}
|
|
56
118
|
getAuditReport() {
|
|
119
|
+
const localStep = this.lastGenerationTrace?.mode === 'local' ? this.lastGenerationTrace.backend ?? null : null;
|
|
57
120
|
return {
|
|
58
|
-
remotePool: this.
|
|
59
|
-
remotes: this.options.remotes?.map(
|
|
60
|
-
localChain: this.options.localChain
|
|
61
|
-
profiler: this.options.profiler
|
|
121
|
+
remotePool: this.getRemoteAuditReport(),
|
|
122
|
+
remotes: this.options.remotes?.map((remote) => ({ url: remote.url, timeoutMs: remote.timeoutMs })) ?? [],
|
|
123
|
+
localChain: this.options.localChain ?? DEFAULT_LOCAL_CHAIN,
|
|
124
|
+
profiler: this.options.profiler ?? 'default',
|
|
125
|
+
localBackend: localStep,
|
|
126
|
+
lastGenerationTrace: this.lastGenerationTrace,
|
|
127
|
+
executionPlan: this.executionPlan,
|
|
62
128
|
};
|
|
63
129
|
}
|
|
64
|
-
/**
|
|
65
|
-
* Calibrates the work provider based on the environment.
|
|
66
|
-
* Runs a dummy hash to determine optimal strategy.
|
|
67
|
-
*/
|
|
68
130
|
async calibrate() {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
131
|
+
const plan = await this.probe();
|
|
132
|
+
const localProbeDurations = plan.probeResults
|
|
133
|
+
.filter((result) => result.available && result.kind !== 'remote' && typeof result.durationMs === 'number')
|
|
134
|
+
.map((result) => result.durationMs);
|
|
135
|
+
const bestLocalDuration = localProbeDurations.length > 0 ? Math.min(...localProbeDurations) : 0;
|
|
136
|
+
const measuredMhs = bestLocalDuration > 0 ? Number((1_000 / bestLocalDuration).toFixed(2)) : 0;
|
|
72
137
|
return {
|
|
73
|
-
measuredMhs
|
|
74
|
-
activeStrategy: '
|
|
138
|
+
measuredMhs,
|
|
139
|
+
activeStrategy: plan.source === 'probe' ? 'planned' : 'remote-first',
|
|
75
140
|
};
|
|
76
141
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
142
|
+
async probe() {
|
|
143
|
+
if (this.probePromise) {
|
|
144
|
+
return this.probePromise;
|
|
145
|
+
}
|
|
146
|
+
this.probePromise = this.runProbe();
|
|
147
|
+
try {
|
|
148
|
+
const plan = await this.probePromise;
|
|
149
|
+
this.executionPlan = plan;
|
|
150
|
+
return plan;
|
|
151
|
+
}
|
|
152
|
+
finally {
|
|
153
|
+
this.probePromise = null;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
buildDefaultPlan() {
|
|
157
|
+
const localChain = this.options.localChain ?? DEFAULT_LOCAL_CHAIN;
|
|
158
|
+
const steps = [];
|
|
81
159
|
if (this.remotePool) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
160
|
+
steps.push({ kind: 'remote' });
|
|
161
|
+
}
|
|
162
|
+
for (const compute of localChain) {
|
|
163
|
+
steps.push({ kind: localComputeToPlanStep(compute) });
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
source: 'default',
|
|
167
|
+
steps,
|
|
168
|
+
disabledLocalBackends: [],
|
|
169
|
+
probeResults: [],
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
createLocalPowService(backend) {
|
|
173
|
+
const disabledBackends = Object.values(PowBackendName).filter((candidate) => candidate !== backend);
|
|
174
|
+
return new PowService({ disabledBackends });
|
|
175
|
+
}
|
|
176
|
+
async probeRemote() {
|
|
177
|
+
if (!this.remotePool) {
|
|
178
|
+
return { kind: 'remote', available: false, reason: 'remote pool not configured' };
|
|
179
|
+
}
|
|
180
|
+
const startedAt = performance.now();
|
|
181
|
+
try {
|
|
182
|
+
await this.remotePool.postJson({ action: 'version' });
|
|
183
|
+
return {
|
|
184
|
+
kind: 'remote',
|
|
185
|
+
available: true,
|
|
186
|
+
durationMs: performance.now() - startedAt,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
return {
|
|
191
|
+
kind: 'remote',
|
|
192
|
+
available: false,
|
|
193
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
async probeLocalBackend(compute) {
|
|
198
|
+
const backend = localComputeToBackendName(compute);
|
|
199
|
+
const startedAt = performance.now();
|
|
200
|
+
const powService = this.createLocalPowService(backend);
|
|
201
|
+
try {
|
|
202
|
+
await powService.ready;
|
|
203
|
+
await withTimeout(powService.getProofOfWork({ hash: PROBE_HASH, threshold: PROBE_DIFFICULTY }), this.localTimeoutMs, () => powService.cancel());
|
|
204
|
+
return {
|
|
205
|
+
kind: localComputeToPlanStep(compute),
|
|
206
|
+
available: true,
|
|
207
|
+
durationMs: performance.now() - startedAt,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
return {
|
|
212
|
+
kind: localComputeToPlanStep(compute),
|
|
213
|
+
available: false,
|
|
214
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
buildPlanFromProbeResults(results) {
|
|
219
|
+
const remote = results.find((result) => result.kind === 'remote');
|
|
220
|
+
const locals = results.filter((result) => isLocalStepKind(result.kind));
|
|
221
|
+
const availableLocals = locals
|
|
222
|
+
.filter((result) => result.available)
|
|
223
|
+
.sort((a, b) => (a.durationMs ?? Number.POSITIVE_INFINITY) - (b.durationMs ?? Number.POSITIVE_INFINITY));
|
|
224
|
+
const disabledLocalBackends = locals
|
|
225
|
+
.filter((result) => !result.available)
|
|
226
|
+
.map((result) => planStepToBackendName(result.kind));
|
|
227
|
+
const steps = [];
|
|
228
|
+
if (availableLocals.length > 0) {
|
|
229
|
+
steps.push({ kind: availableLocals[0].kind });
|
|
230
|
+
if (remote?.available) {
|
|
231
|
+
steps.push({ kind: 'remote' });
|
|
232
|
+
}
|
|
233
|
+
for (const local of availableLocals.slice(1)) {
|
|
234
|
+
steps.push({ kind: local.kind });
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
else if (remote?.available) {
|
|
238
|
+
steps.push({ kind: 'remote' });
|
|
239
|
+
}
|
|
240
|
+
if (steps.length === 0) {
|
|
241
|
+
return this.buildDefaultPlan();
|
|
242
|
+
}
|
|
243
|
+
return {
|
|
244
|
+
source: 'probe',
|
|
245
|
+
steps,
|
|
246
|
+
disabledLocalBackends,
|
|
247
|
+
probeResults: results,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
async runProbe() {
|
|
251
|
+
const localChain = this.options.localChain ?? DEFAULT_LOCAL_CHAIN;
|
|
252
|
+
const results = [];
|
|
253
|
+
results.push(await this.probeRemote());
|
|
254
|
+
for (const compute of localChain) {
|
|
255
|
+
results.push(await this.probeLocalBackend(compute));
|
|
256
|
+
}
|
|
257
|
+
this.lastProbeResults = results;
|
|
258
|
+
return this.buildPlanFromProbeResults(results);
|
|
259
|
+
}
|
|
260
|
+
async generateRemote(hash, difficulty) {
|
|
261
|
+
if (!this.remotePool) {
|
|
262
|
+
throw new Error('Remote work pool is not configured');
|
|
263
|
+
}
|
|
264
|
+
const response = await this.remotePool.postJson({
|
|
265
|
+
action: 'work_generate',
|
|
266
|
+
hash,
|
|
267
|
+
difficulty,
|
|
268
|
+
});
|
|
269
|
+
if (!response.work || response.work === '0000000000000000') {
|
|
270
|
+
throw new Error('Remote work provider returned invalid/zero nonce');
|
|
271
|
+
}
|
|
272
|
+
this.lastGenerationTrace = { mode: 'remote' };
|
|
273
|
+
return response.work;
|
|
274
|
+
}
|
|
275
|
+
async generateLocalWithBackend(hash, difficulty, backend) {
|
|
276
|
+
const powService = this.createLocalPowService(backend);
|
|
277
|
+
await powService.ready;
|
|
278
|
+
const result = await withTimeout(powService.getProofOfWork({ hash, threshold: difficulty }), this.localTimeoutMs, () => powService.cancel());
|
|
279
|
+
this.lastGenerationTrace = { mode: 'local', backend: result.backend };
|
|
280
|
+
return result.proofOfWork;
|
|
281
|
+
}
|
|
282
|
+
async executePlan(hash, difficulty, plan) {
|
|
283
|
+
let lastError;
|
|
284
|
+
for (const step of plan.steps) {
|
|
285
|
+
try {
|
|
286
|
+
if (step.kind === 'remote') {
|
|
287
|
+
return await this.generateRemote(hash, difficulty);
|
|
288
|
+
}
|
|
289
|
+
return await this.generateLocalWithBackend(hash, difficulty, planStepToBackendName(step.kind));
|
|
290
|
+
}
|
|
291
|
+
catch (error) {
|
|
292
|
+
lastError = error;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
throw lastError instanceof Error ? lastError : new Error('No work generation strategy succeeded');
|
|
296
|
+
}
|
|
297
|
+
async generate(hash, difficulty) {
|
|
298
|
+
const shouldProbe = this.options.profiler?.mode === 'auto';
|
|
299
|
+
const plan = shouldProbe ? await this.probe() : this.executionPlan;
|
|
300
|
+
return await this.executePlan(hash, difficulty, plan);
|
|
92
301
|
}
|
|
93
302
|
}
|
|
94
303
|
//# sourceMappingURL=WorkProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkProvider.js","sourceRoot":"","sources":["../../src/work/WorkProvider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WorkProvider.js","sourceRoot":"","sources":["../../src/work/WorkProvider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openrai/nano-core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "Protocol engine for Nano integration ecosystem",
|
|
5
|
+
"repository": "https://github.com/OpenRai/nano-core",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"main": "./dist/index.js",
|
|
7
8
|
"types": "./dist/index.d.ts",
|
|
@@ -25,7 +26,8 @@
|
|
|
25
26
|
},
|
|
26
27
|
"scripts": {
|
|
27
28
|
"build": "tsc",
|
|
28
|
-
"test": "vitest run"
|
|
29
|
+
"test": "vitest run",
|
|
30
|
+
"release": "pnpm publish --access public --no-git-checks"
|
|
29
31
|
},
|
|
30
32
|
"keywords": [
|
|
31
33
|
"nano",
|
|
@@ -41,6 +43,7 @@
|
|
|
41
43
|
"dist"
|
|
42
44
|
],
|
|
43
45
|
"dependencies": {
|
|
46
|
+
"blakejs": "^1.2.1",
|
|
44
47
|
"nano-pow-with-fallback": "^1.1.2",
|
|
45
48
|
"nanocurrency": "^2.5.0"
|
|
46
49
|
},
|