@degenerate/sharedata 0.4.0 → 0.7.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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/library/apply-library-function-transaction.d.ts +60 -0
- package/dist/library/apply-library-function-transaction.d.ts.map +1 -0
- package/dist/library/apply-library-function-transaction.js +73 -0
- package/dist/manager/share-data-manager.d.ts +6 -2
- package/dist/manager/share-data-manager.d.ts.map +1 -1
- package/dist/manager/share-data-manager.js +7 -3
- package/dist/persistence/deserialize-share-data.d.ts +8 -1
- package/dist/persistence/deserialize-share-data.d.ts.map +1 -1
- package/dist/persistence/deserialize-share-data.js +14 -2
- package/dist/persistence/file-share-data-repository.d.ts +8 -2
- package/dist/persistence/file-share-data-repository.d.ts.map +1 -1
- package/dist/persistence/file-share-data-repository.js +9 -3
- package/dist/persistence/firestore-share-data-repository.d.ts +3 -2
- package/dist/persistence/firestore-share-data-repository.d.ts.map +1 -1
- package/dist/persistence/firestore-share-data-repository.js +4 -3
- package/dist/persistence/in-memory-share-data-repository.d.ts +8 -1
- package/dist/persistence/in-memory-share-data-repository.d.ts.map +1 -1
- package/dist/persistence/in-memory-share-data-repository.js +9 -3
- package/dist/share-data/creation/create-share-data-initial-crypto.d.ts +4 -5
- package/dist/share-data/creation/create-share-data-initial-crypto.d.ts.map +1 -1
- package/dist/share-data/creation/create-share-data-initial-crypto.js +6 -7
- package/dist/share-data/helpers/config/default-share-data-string.config.d.ts.map +1 -1
- package/dist/share-data/helpers/config/default-share-data-string.config.js +5 -0
- package/dist/share-data/proofs/creation/build-transaction-proposal-signer.d.ts +5 -10
- package/dist/share-data/proofs/creation/build-transaction-proposal-signer.d.ts.map +1 -1
- package/dist/share-data/proofs/creation/build-transaction-proposal-signer.js +1 -3
- package/dist/share-data/proofs/creation/create-share-data-proposal-proof.d.ts +3 -4
- package/dist/share-data/proofs/creation/create-share-data-proposal-proof.d.ts.map +1 -1
- package/dist/share-data/proofs/creation/create-share-data-proposal-proof.js +5 -6
- package/dist/share-data/proofs/creation/create-transaction-proposal-proof.d.ts +3 -4
- package/dist/share-data/proofs/creation/create-transaction-proposal-proof.d.ts.map +1 -1
- package/dist/share-data/proofs/creation/create-transaction-proposal-proof.js +5 -6
- package/dist/share-data/proofs/testing/test-proof-signer.d.ts +8 -8
- package/dist/share-data/proofs/testing/test-proof-signer.d.ts.map +1 -1
- package/dist/share-data/proofs/testing/test-proof-signer.js +17 -19
- package/dist/share-data/proofs/verification/verify-share-data-proposal-proof.d.ts +4 -6
- package/dist/share-data/proofs/verification/verify-share-data-proposal-proof.d.ts.map +1 -1
- package/dist/share-data/proofs/verification/verify-share-data-proposal-proof.js +8 -57
- package/dist/share-data/proofs/verification/verify-transaction-proposal-proof.d.ts +4 -4
- package/dist/share-data/proofs/verification/verify-transaction-proposal-proof.d.ts.map +1 -1
- package/dist/share-data/proofs/verification/verify-transaction-proposal-proof.js +8 -54
- package/dist/share-data/share-data.d.ts +41 -7
- package/dist/share-data/share-data.d.ts.map +1 -1
- package/dist/share-data/share-data.js +93 -11
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -15,4 +15,5 @@ export * from './share-data/proofs/creation/build-transaction-proposal-signer';
|
|
|
15
15
|
export * from './share-data/proofs/verification/verify-share-data-proposal-proof';
|
|
16
16
|
export * from './share-data/proofs/verification/verify-transaction-proposal-proof';
|
|
17
17
|
export * from './share-data/proofs/testing/test-proof-signer';
|
|
18
|
+
export * from './library/apply-library-function-transaction';
|
|
18
19
|
//# 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,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,yBAAyB,CAAC;AACxC,cAAc,wDAAwD,CAAC;AACvE,cAAc,+DAA+D,CAAC;AAC9E,cAAc,gEAAgE,CAAC;AAC/E,cAAc,gEAAgE,CAAC;AAC/E,cAAc,mEAAmE,CAAC;AAClF,cAAc,oEAAoE,CAAC;AAKnF,cAAc,+CAA+C,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,yBAAyB,CAAC;AACxC,cAAc,wDAAwD,CAAC;AACvE,cAAc,+DAA+D,CAAC;AAC9E,cAAc,gEAAgE,CAAC;AAC/E,cAAc,gEAAgE,CAAC;AAC/E,cAAc,mEAAmE,CAAC;AAClF,cAAc,oEAAoE,CAAC;AAKnF,cAAc,+CAA+C,CAAC;AAC9D,cAAc,8CAA8C,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -35,3 +35,4 @@ __exportStar(require("./share-data/proofs/verification/verify-transaction-propos
|
|
|
35
35
|
// production use. Production wiring lives in
|
|
36
36
|
// `buildEllipticalCurvesProofFor` from `@degenerate/shareblock`.
|
|
37
37
|
__exportStar(require("./share-data/proofs/testing/test-proof-signer"), exports);
|
|
38
|
+
__exportStar(require("./library/apply-library-function-transaction"), exports);
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { FunctionExecutionFailure, FunctionExecutor, IShareFunction, LibraryReference, LibraryRuleReferenceResult, LibraryStore, RuleEvaluator } from '@degenerate/generic';
|
|
2
|
+
import { ShareData } from '../share-data/share-data';
|
|
3
|
+
export interface ApplyLibraryFunctionResult {
|
|
4
|
+
/** Whether the rule engine accepted the proposal. */
|
|
5
|
+
accepted: boolean;
|
|
6
|
+
/** Transaction id assigned by ShareData; empty when nothing was submitted. */
|
|
7
|
+
transactionId: string;
|
|
8
|
+
/** True when the function produced no change (content-equal proposal). */
|
|
9
|
+
noOp: boolean;
|
|
10
|
+
/** Set when the sandbox run failed (the proposal was never produced/submitted). */
|
|
11
|
+
executionFailure?: FunctionExecutionFailure;
|
|
12
|
+
error?: string;
|
|
13
|
+
/** Gas consumed by the sandbox run. */
|
|
14
|
+
gasUsed?: number;
|
|
15
|
+
/** True when library rule references rejected the proposed transition. */
|
|
16
|
+
ruleRejected?: boolean;
|
|
17
|
+
/** Which rule references failed (the diagnostics) when `ruleRejected`. */
|
|
18
|
+
ruleFailures?: LibraryRuleReferenceResult[];
|
|
19
|
+
}
|
|
20
|
+
export interface ApplyLibraryFunctionArgs {
|
|
21
|
+
shareData: ShareData;
|
|
22
|
+
/**
|
|
23
|
+
* A function registered on the block. It supplies the rule-engine identity
|
|
24
|
+
* for the proposed transition; the library reference supplies the actual
|
|
25
|
+
* logic (its source computes the proposed state). The registered function's
|
|
26
|
+
* own `func` is not invoked here.
|
|
27
|
+
*/
|
|
28
|
+
transactionFunction: IShareFunction<any, (...args: any[]) => any, any>;
|
|
29
|
+
/** The library function whose pinned version computes the proposed state. */
|
|
30
|
+
reference: LibraryReference;
|
|
31
|
+
store: LibraryStore;
|
|
32
|
+
input: unknown;
|
|
33
|
+
executor?: FunctionExecutor;
|
|
34
|
+
/**
|
|
35
|
+
* Optional library rule references that gate the proposed transition. If any
|
|
36
|
+
* fails, the transaction is not submitted. This is the additive ledger rule
|
|
37
|
+
* gate — it runs alongside (does not replace) the block's inline rule engine.
|
|
38
|
+
*/
|
|
39
|
+
ruleReferences?: LibraryReference[];
|
|
40
|
+
ruleEvaluator?: RuleEvaluator;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The ledger-backed, async analogue of `safeSubmitTransaction`. Instead of
|
|
44
|
+
* calling a live `fn.func({ current, input })`, it resolves a library function
|
|
45
|
+
* reference, runs its stored source in the sandbox executor to compute the
|
|
46
|
+
* proposed state, then submits that state through the ShareData's existing
|
|
47
|
+
* unsigned apply path (`addTransactionNotValidated`).
|
|
48
|
+
*
|
|
49
|
+
* Outcomes:
|
|
50
|
+
* - sandbox failure (gas-exceeded / threw / invalid-output): nothing is
|
|
51
|
+
* submitted; `executionFailure` is set and `noOp` is false.
|
|
52
|
+
* - content-equal proposal: the engine rejects a no-change transaction, which
|
|
53
|
+
* is reported as `noOp: true` (mirrors `safeSubmitTransaction`).
|
|
54
|
+
* - otherwise: the rule engine's verdict is returned via `accepted`.
|
|
55
|
+
*
|
|
56
|
+
* This is the additive ledger path; the existing live-`func` `safeSubmitTransaction`
|
|
57
|
+
* is unchanged. The signed analogue (the manager proposer) follows the same shape.
|
|
58
|
+
*/
|
|
59
|
+
export declare const applyLibraryFunctionTransaction: (args: ApplyLibraryFunctionArgs) => Promise<ApplyLibraryFunctionResult>;
|
|
60
|
+
//# sourceMappingURL=apply-library-function-transaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-library-function-transaction.d.ts","sourceRoot":"","sources":["../../src/library/apply-library-function-transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,wBAAwB,EACxB,gBAAgB,EAEhB,cAAc,EACd,gBAAgB,EAChB,0BAA0B,EAC1B,YAAY,EACZ,aAAa,EAEhB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,MAAM,WAAW,0BAA0B;IACvC,qDAAqD;IACrD,QAAQ,EAAE,OAAO,CAAC;IAClB,8EAA8E;IAC9E,aAAa,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,wBAAwB,CAAC;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,0BAA0B,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,wBAAwB;IACrC,SAAS,EAAE,SAAS,CAAC;IACrB;;;;;OAKG;IACH,mBAAmB,EAAE,cAAc,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;IACvE,6EAA6E;IAC7E,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B;;;;OAIG;IACH,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,+BAA+B,GACxC,MAAM,wBAAwB,KAC/B,OAAO,CAAC,0BAA0B,CAqDpC,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyLibraryFunctionTransaction = void 0;
|
|
4
|
+
const generic_1 = require("@degenerate/generic");
|
|
5
|
+
/**
|
|
6
|
+
* The ledger-backed, async analogue of `safeSubmitTransaction`. Instead of
|
|
7
|
+
* calling a live `fn.func({ current, input })`, it resolves a library function
|
|
8
|
+
* reference, runs its stored source in the sandbox executor to compute the
|
|
9
|
+
* proposed state, then submits that state through the ShareData's existing
|
|
10
|
+
* unsigned apply path (`addTransactionNotValidated`).
|
|
11
|
+
*
|
|
12
|
+
* Outcomes:
|
|
13
|
+
* - sandbox failure (gas-exceeded / threw / invalid-output): nothing is
|
|
14
|
+
* submitted; `executionFailure` is set and `noOp` is false.
|
|
15
|
+
* - content-equal proposal: the engine rejects a no-change transaction, which
|
|
16
|
+
* is reported as `noOp: true` (mirrors `safeSubmitTransaction`).
|
|
17
|
+
* - otherwise: the rule engine's verdict is returned via `accepted`.
|
|
18
|
+
*
|
|
19
|
+
* This is the additive ledger path; the existing live-`func` `safeSubmitTransaction`
|
|
20
|
+
* is unchanged. The signed analogue (the manager proposer) follows the same shape.
|
|
21
|
+
*/
|
|
22
|
+
const applyLibraryFunctionTransaction = async (args) => {
|
|
23
|
+
const execution = await (0, generic_1.executeFunctionReference)(args.reference, args.store, {
|
|
24
|
+
current: args.shareData.currentState,
|
|
25
|
+
input: args.input,
|
|
26
|
+
executor: args.executor,
|
|
27
|
+
});
|
|
28
|
+
if (!execution.ok) {
|
|
29
|
+
return {
|
|
30
|
+
accepted: false,
|
|
31
|
+
transactionId: '',
|
|
32
|
+
noOp: false,
|
|
33
|
+
executionFailure: execution.failure,
|
|
34
|
+
error: execution.error,
|
|
35
|
+
gasUsed: execution.gasUsed,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const proposed = execution.output;
|
|
39
|
+
// Optional ledger rule gate: resolve + sandbox-evaluate the rule references
|
|
40
|
+
// against this transition. Fail-closed — a failing or unresolved rule blocks
|
|
41
|
+
// submission. Runs alongside the block's inline rule engine.
|
|
42
|
+
if (args.ruleReferences && args.ruleReferences.length > 0) {
|
|
43
|
+
const verdict = await (0, generic_1.evaluateLibraryRuleReferences)(args.ruleReferences, {
|
|
44
|
+
current: args.shareData.currentState,
|
|
45
|
+
proposed,
|
|
46
|
+
store: args.store,
|
|
47
|
+
evaluator: args.ruleEvaluator,
|
|
48
|
+
});
|
|
49
|
+
if (!verdict.passed) {
|
|
50
|
+
return {
|
|
51
|
+
accepted: false,
|
|
52
|
+
transactionId: '',
|
|
53
|
+
noOp: false,
|
|
54
|
+
ruleRejected: true,
|
|
55
|
+
ruleFailures: verdict.failures,
|
|
56
|
+
gasUsed: execution.gasUsed,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
const outcome = await args.shareData.addTransactionNotValidated(proposed, args.transactionFunction);
|
|
62
|
+
return { accepted: outcome.accepted, transactionId: outcome.transactionId, noOp: false, gasUsed: execution.gasUsed };
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
// The function produced a content-equal proposal; the engine rejects a
|
|
66
|
+
// no-change transaction. Treat as a no-op rather than surfacing the error.
|
|
67
|
+
if (err instanceof generic_1.ShareDataCurrentAndProposalDataMatchesError) {
|
|
68
|
+
return { accepted: false, transactionId: '', noOp: true, gasUsed: execution.gasUsed };
|
|
69
|
+
}
|
|
70
|
+
throw err;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
exports.applyLibraryFunctionTransaction = applyLibraryFunctionTransaction;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IShareData, IShareDataCryptoProof, IShareFunction, ShareDataCreationRecord } from '@degenerate/generic';
|
|
1
|
+
import { IShareData, IShareDataCryptoProof, IShareFunction, LibraryStore, ShareDataCreationRecord } from '@degenerate/generic';
|
|
2
2
|
import { ShareData } from '../share-data/share-data';
|
|
3
3
|
import { ShareDataRepository } from '../persistence/share-data-repository';
|
|
4
4
|
import { ShareDataManagerEventType, ShareDataManagerListener } from './share-data-manager-events';
|
|
@@ -6,6 +6,7 @@ export declare class ShareDataManager {
|
|
|
6
6
|
private _shareDataObjects;
|
|
7
7
|
private _emitter;
|
|
8
8
|
private readonly _repository?;
|
|
9
|
+
private readonly _libraryStore?;
|
|
9
10
|
private _persistence;
|
|
10
11
|
/**
|
|
11
12
|
* @param repository optional durable store. When supplied, blocks added
|
|
@@ -13,8 +14,11 @@ export declare class ShareDataManager {
|
|
|
13
14
|
* writes through; call {@link hydrate} once at startup to reload them.
|
|
14
15
|
* The no-arg form stays purely in-memory, so existing callers/tests are
|
|
15
16
|
* untouched.
|
|
17
|
+
* @param libraryStore optional rule library store injected onto reloaded
|
|
18
|
+
* blocks so their rule references resolve from a deployment store
|
|
19
|
+
* (DB/rules-server). Omitted → blocks use the factory's default store.
|
|
16
20
|
*/
|
|
17
|
-
constructor(repository?: ShareDataRepository);
|
|
21
|
+
constructor(repository?: ShareDataRepository, libraryStore?: LibraryStore);
|
|
18
22
|
/**
|
|
19
23
|
* Loads every durably-stored block into memory, re-verifying each through
|
|
20
24
|
* the trust gate, and recovers its per-block persistence state so later
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"share-data-manager.d.ts","sourceRoot":"","sources":["../../src/manager/share-data-manager.ts"],"names":[],"mappings":"AACA,OAAO,EACH,UAAU,EACV,qBAAqB,EACrB,cAAc,
|
|
1
|
+
{"version":3,"file":"share-data-manager.d.ts","sourceRoot":"","sources":["../../src/manager/share-data-manager.ts"],"names":[],"mappings":"AACA,OAAO,EACH,UAAU,EACV,qBAAqB,EACrB,cAAc,EACd,YAAY,EAGZ,uBAAuB,EAG1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAEH,yBAAyB,EACzB,wBAAwB,EAC3B,MAAM,6BAA6B,CAAC;AAmBrC,qBAAa,gBAAgB;IACzB,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAe;IAC9C,OAAO,CAAC,YAAY,CAAgC;IAEpD;;;;;;;;;OASG;gBACS,UAAU,CAAC,EAAE,mBAAmB,EAAE,YAAY,CAAC,EAAE,YAAY;IAQzE;;;;;;;OAOG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB9B;;;;;;;;;;OAUG;IACG,YAAY,CACd,SAAS,EAAE,SAAS,EACpB,cAAc,CAAC,EAAE,uBAAuB,GACzC,OAAO,CAAC,IAAI,CAAC;IA+BhB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAInD,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAkB3C;;;OAGG;IACG,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBpD,YAAY,IAAI,SAAS,EAAE;IAI3B,gBAAgB,IAAI,UAAU,EAAE;IAIhC;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU;IAQhD;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,gBAAgB,CAClB,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,UAAU,EACxB,mBAAmB,EAAE,cAAc,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,GAAG,CAAC,EACtE,KAAK,EAAE,qBAAqB,GAC7B,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAmDxD,EAAE,CAAC,IAAI,EAAE,yBAAyB,EAAE,QAAQ,EAAE,wBAAwB,GAAG,IAAI;IAI7E,GAAG,CAAC,IAAI,EAAE,yBAAyB,EAAE,QAAQ,EAAE,wBAAwB,GAAG,IAAI;IAI9E,OAAO,CAAC,KAAK;CAGhB"}
|
|
@@ -12,11 +12,15 @@ class ShareDataManager {
|
|
|
12
12
|
* writes through; call {@link hydrate} once at startup to reload them.
|
|
13
13
|
* The no-arg form stays purely in-memory, so existing callers/tests are
|
|
14
14
|
* untouched.
|
|
15
|
+
* @param libraryStore optional rule library store injected onto reloaded
|
|
16
|
+
* blocks so their rule references resolve from a deployment store
|
|
17
|
+
* (DB/rules-server). Omitted → blocks use the factory's default store.
|
|
15
18
|
*/
|
|
16
|
-
constructor(repository) {
|
|
19
|
+
constructor(repository, libraryStore) {
|
|
17
20
|
this._shareDataObjects = [];
|
|
18
21
|
this._emitter = new events_1.EventEmitter();
|
|
19
22
|
this._repository = repository;
|
|
23
|
+
this._libraryStore = libraryStore;
|
|
20
24
|
this._persistence = new Map();
|
|
21
25
|
}
|
|
22
26
|
/**
|
|
@@ -36,7 +40,7 @@ class ShareDataManager {
|
|
|
36
40
|
// The trust gate: a tampered snapshot throws here rather than being
|
|
37
41
|
// loaded. The executable block and the recovered persistence state
|
|
38
42
|
// are rebuilt from the same bytes.
|
|
39
|
-
const block = (0, deserialize_share_data_1.deserializeShareData)(snapshot);
|
|
43
|
+
const block = (0, deserialize_share_data_1.deserializeShareData)(snapshot, this._libraryStore);
|
|
40
44
|
if (this.getShareDataById(block.id)) {
|
|
41
45
|
throw new generic_1.ShareDataAlreadyExistsError(block.id);
|
|
42
46
|
}
|
|
@@ -164,7 +168,7 @@ class ShareDataManager {
|
|
|
164
168
|
if (!shareData) {
|
|
165
169
|
throw new generic_1.ShareDataNotFoundError(id);
|
|
166
170
|
}
|
|
167
|
-
const outcome = shareData.addTransaction(proposedData, transactionFunction, proof);
|
|
171
|
+
const outcome = await shareData.addTransaction(proposedData, transactionFunction, proof);
|
|
168
172
|
const persistence = this._persistence.get(id);
|
|
169
173
|
if (this._repository && persistence) {
|
|
170
174
|
if (transactionFunction.id === undefined) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { LibraryStore } from '@degenerate/generic';
|
|
1
2
|
import { ShareData } from '../share-data/share-data';
|
|
2
3
|
/**
|
|
3
4
|
* Replays a {@link PersistedShareData} snapshot back into a live, executable
|
|
@@ -13,6 +14,12 @@ import { ShareData } from '../share-data/share-data';
|
|
|
13
14
|
* if the structural-proof chain does not verify.
|
|
14
15
|
* - {@link ShareDataIntegrityError} if the replayed block diverges from the
|
|
15
16
|
* snapshot's `expected*` cross-checks.
|
|
17
|
+
*
|
|
18
|
+
* `libraryStore`, when provided, is injected onto the rebuilt block so its rule
|
|
19
|
+
* references resolve from that store (a DB- or rules-server-backed store) for
|
|
20
|
+
* future transactions. Replay itself does not resolve rules — it replays the
|
|
21
|
+
* recorded outcomes — so omitting it leaves the block on the factory's default
|
|
22
|
+
* self-seeding store.
|
|
16
23
|
*/
|
|
17
|
-
export declare const deserializeShareData: (snapshot: unknown) => ShareData;
|
|
24
|
+
export declare const deserializeShareData: (snapshot: unknown, libraryStore?: LibraryStore) => ShareData;
|
|
18
25
|
//# sourceMappingURL=deserialize-share-data.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deserialize-share-data.d.ts","sourceRoot":"","sources":["../../src/persistence/deserialize-share-data.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deserialize-share-data.d.ts","sourceRoot":"","sources":["../../src/persistence/deserialize-share-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,YAAY,EAQf,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAYrD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,oBAAoB,GAAI,UAAU,OAAO,EAAE,eAAe,YAAY,KAAG,SA2HrF,CAAC"}
|
|
@@ -25,8 +25,14 @@ const block_factory_registry_1 = require("./block-factory-registry");
|
|
|
25
25
|
* if the structural-proof chain does not verify.
|
|
26
26
|
* - {@link ShareDataIntegrityError} if the replayed block diverges from the
|
|
27
27
|
* snapshot's `expected*` cross-checks.
|
|
28
|
+
*
|
|
29
|
+
* `libraryStore`, when provided, is injected onto the rebuilt block so its rule
|
|
30
|
+
* references resolve from that store (a DB- or rules-server-backed store) for
|
|
31
|
+
* future transactions. Replay itself does not resolve rules — it replays the
|
|
32
|
+
* recorded outcomes — so omitting it leaves the block on the factory's default
|
|
33
|
+
* self-seeding store.
|
|
28
34
|
*/
|
|
29
|
-
const deserializeShareData = (snapshot) => {
|
|
35
|
+
const deserializeShareData = (snapshot, libraryStore) => {
|
|
30
36
|
// Read id + schemaVersion defensively *before* full validation so an
|
|
31
37
|
// unsupported version yields a precise persistence error (naming the id)
|
|
32
38
|
// rather than a raw Zod failure on the `schemaVersion` literal.
|
|
@@ -57,6 +63,12 @@ const deserializeShareData = (snapshot) => {
|
|
|
57
63
|
structuralProofs: parsed.structuralProofs,
|
|
58
64
|
authorizedSigners: parsed.authorizedSigners,
|
|
59
65
|
});
|
|
66
|
+
// Override the factory's default resolver store with the injected one, so
|
|
67
|
+
// future transactions on the reloaded block resolve rule references from the
|
|
68
|
+
// deployment's store. Replay below records stored outcomes and needs no store.
|
|
69
|
+
if (libraryStore) {
|
|
70
|
+
block.setLibraryStore(libraryStore);
|
|
71
|
+
}
|
|
60
72
|
// Replay the transaction log in recorded order.
|
|
61
73
|
for (const entry of parsed.transactionLog) {
|
|
62
74
|
const transactionFunction = block.functions.find((fn) => fn.id === entry.functionId);
|
|
@@ -84,7 +96,7 @@ const deserializeShareData = (snapshot) => {
|
|
|
84
96
|
// throws ShareDataTransactionProofFailedError here rather than being
|
|
85
97
|
// loaded. Verifying before the apply keeps the recomputed current hash
|
|
86
98
|
// aligned with what the signer signed over.
|
|
87
|
-
(0, verify_transaction_proposal_proof_1.verifyTransactionProposalProof)(entry.proof, block, entry.proposedState
|
|
99
|
+
(0, verify_transaction_proposal_proof_1.verifyTransactionProposalProof)(entry.proof, block, entry.proposedState);
|
|
88
100
|
// addTransactionAlreadyValidated derives its accept/reject outcome
|
|
89
101
|
// from (proposedResult && currentResult). Setting both to the stored
|
|
90
102
|
// boolean replays the original outcome exactly: currentState is
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PersistedShareData } from '@degenerate/generic';
|
|
1
|
+
import { LibraryStore, PersistedShareData } from '@degenerate/generic';
|
|
2
2
|
import { ShareData } from '../share-data/share-data';
|
|
3
3
|
import { ShareDataRepository } from './share-data-repository';
|
|
4
4
|
/**
|
|
@@ -10,7 +10,13 @@ import { ShareDataRepository } from './share-data-repository';
|
|
|
10
10
|
*/
|
|
11
11
|
export declare class FileShareDataRepository implements ShareDataRepository {
|
|
12
12
|
private readonly directory;
|
|
13
|
-
|
|
13
|
+
private readonly libraryStore?;
|
|
14
|
+
/**
|
|
15
|
+
* @param directory where snapshot JSON files live.
|
|
16
|
+
* @param libraryStore optional rule library store injected onto reloaded
|
|
17
|
+
* blocks (passed to {@link deserializeShareData}).
|
|
18
|
+
*/
|
|
19
|
+
constructor(directory: string, libraryStore?: LibraryStore | undefined);
|
|
14
20
|
save(snapshot: PersistedShareData): Promise<void>;
|
|
15
21
|
load(id: string): Promise<ShareData | undefined>;
|
|
16
22
|
loadAll(): Promise<ShareData[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-share-data-repository.d.ts","sourceRoot":"","sources":["../../src/persistence/file-share-data-repository.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,kBAAkB,EAGrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAS9D;;;;;;GAMG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;
|
|
1
|
+
{"version":3,"file":"file-share-data-repository.d.ts","sourceRoot":"","sources":["../../src/persistence/file-share-data-repository.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,YAAY,EACZ,kBAAkB,EAGrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAS9D;;;;;;GAMG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IAMnD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAAU,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAL9E;;;;OAIG;gBAC0B,SAAS,EAAE,MAAM,EAAmB,YAAY,CAAC,EAAE,YAAY,YAAA;IAEtF,IAAI,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBjD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAchD,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAK/B,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAuBjD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvC;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;CAY1B"}
|
|
@@ -52,8 +52,14 @@ const deserialize_share_data_1 = require("./deserialize-share-data");
|
|
|
52
52
|
* verification instead of loading silently.
|
|
53
53
|
*/
|
|
54
54
|
class FileShareDataRepository {
|
|
55
|
-
|
|
55
|
+
/**
|
|
56
|
+
* @param directory where snapshot JSON files live.
|
|
57
|
+
* @param libraryStore optional rule library store injected onto reloaded
|
|
58
|
+
* blocks (passed to {@link deserializeShareData}).
|
|
59
|
+
*/
|
|
60
|
+
constructor(directory, libraryStore) {
|
|
56
61
|
this.directory = directory;
|
|
62
|
+
this.libraryStore = libraryStore;
|
|
57
63
|
}
|
|
58
64
|
async save(snapshot) {
|
|
59
65
|
await fs_1.promises.mkdir(this.directory, { recursive: true });
|
|
@@ -84,11 +90,11 @@ class FileShareDataRepository {
|
|
|
84
90
|
}
|
|
85
91
|
throw err;
|
|
86
92
|
}
|
|
87
|
-
return (0, deserialize_share_data_1.deserializeShareData)(JSON.parse(raw));
|
|
93
|
+
return (0, deserialize_share_data_1.deserializeShareData)(JSON.parse(raw), this.libraryStore);
|
|
88
94
|
}
|
|
89
95
|
async loadAll() {
|
|
90
96
|
const snapshots = await this.loadAllSnapshots();
|
|
91
|
-
return snapshots.map((snapshot) => (0, deserialize_share_data_1.deserializeShareData)(snapshot));
|
|
97
|
+
return snapshots.map((snapshot) => (0, deserialize_share_data_1.deserializeShareData)(snapshot, this.libraryStore));
|
|
92
98
|
}
|
|
93
99
|
async loadAllSnapshots() {
|
|
94
100
|
let entries;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { firestore } from 'firebase-admin';
|
|
2
|
-
import { PersistedShareData } from '@degenerate/generic';
|
|
2
|
+
import { LibraryStore, PersistedShareData } from '@degenerate/generic';
|
|
3
3
|
import { ShareData } from '../share-data/share-data';
|
|
4
4
|
import { ShareDataRepository } from './share-data-repository';
|
|
5
5
|
/**
|
|
@@ -13,7 +13,8 @@ import { ShareDataRepository } from './share-data-repository';
|
|
|
13
13
|
export declare class FirestoreShareDataRepository implements ShareDataRepository {
|
|
14
14
|
private readonly firestore;
|
|
15
15
|
private readonly collectionName;
|
|
16
|
-
|
|
16
|
+
private readonly libraryStore?;
|
|
17
|
+
constructor(firestore: firestore.Firestore, collectionName?: string, libraryStore?: LibraryStore | undefined);
|
|
17
18
|
save(snapshot: PersistedShareData): Promise<void>;
|
|
18
19
|
load(id: string): Promise<ShareData | undefined>;
|
|
19
20
|
loadAll(): Promise<ShareData[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestore-share-data-repository.d.ts","sourceRoot":"","sources":["../../src/persistence/firestore-share-data-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EAEH,kBAAkB,EAGrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAU9D;;;;;;;GAOG;AACH,qBAAa,4BAA6B,YAAW,mBAAmB;IAEhE,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"firestore-share-data-repository.d.ts","sourceRoot":"","sources":["../../src/persistence/firestore-share-data-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EAEH,YAAY,EACZ,kBAAkB,EAGrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAU9D;;;;;;;GAOG;AACH,qBAAa,4BAA6B,YAAW,mBAAmB;IAEhE,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAFb,SAAS,EAAE,SAAS,CAAC,SAAS,EAC9B,cAAc,GAAE,MAAuD,EACvE,YAAY,CAAC,EAAE,YAAY,YAAA;IAG1C,IAAI,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAQhD,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAK/B,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAOjD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,OAAO,CAAC,MAAM;IAId;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAIvB;;;;;;OAMG;IACH,OAAO,CAAC,KAAK;CAYhB"}
|
|
@@ -19,9 +19,10 @@ const deserialize_share_data_1 = require("./deserialize-share-data");
|
|
|
19
19
|
* document edited out-of-band fails verification instead of loading silently.
|
|
20
20
|
*/
|
|
21
21
|
class FirestoreShareDataRepository {
|
|
22
|
-
constructor(firestore, collectionName = generic_1.DatabaseSettingsFirestore.ShareData.Collection) {
|
|
22
|
+
constructor(firestore, collectionName = generic_1.DatabaseSettingsFirestore.ShareData.Collection, libraryStore) {
|
|
23
23
|
this.firestore = firestore;
|
|
24
24
|
this.collectionName = collectionName;
|
|
25
|
+
this.libraryStore = libraryStore;
|
|
25
26
|
}
|
|
26
27
|
async save(snapshot) {
|
|
27
28
|
await this.docRef(snapshot.id).set(this.toFirestoreData(snapshot));
|
|
@@ -31,11 +32,11 @@ class FirestoreShareDataRepository {
|
|
|
31
32
|
if (!doc.exists) {
|
|
32
33
|
return undefined;
|
|
33
34
|
}
|
|
34
|
-
return (0, deserialize_share_data_1.deserializeShareData)(generic_1.PersistedShareDataSchema.parse(doc.data()));
|
|
35
|
+
return (0, deserialize_share_data_1.deserializeShareData)(generic_1.PersistedShareDataSchema.parse(doc.data()), this.libraryStore);
|
|
35
36
|
}
|
|
36
37
|
async loadAll() {
|
|
37
38
|
const snapshots = await this.loadAllSnapshots();
|
|
38
|
-
return snapshots.map((snapshot) => (0, deserialize_share_data_1.deserializeShareData)(snapshot));
|
|
39
|
+
return snapshots.map((snapshot) => (0, deserialize_share_data_1.deserializeShareData)(snapshot, this.libraryStore));
|
|
39
40
|
}
|
|
40
41
|
async loadAllSnapshots() {
|
|
41
42
|
const query = await this.firestore.collection(this.collectionName).get();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PersistedShareData } from '@degenerate/generic';
|
|
1
|
+
import { LibraryStore, PersistedShareData } from '@degenerate/generic';
|
|
2
2
|
import { ShareData } from '../share-data/share-data';
|
|
3
3
|
import { ShareDataRepository } from './share-data-repository';
|
|
4
4
|
/**
|
|
@@ -9,7 +9,14 @@ import { ShareDataRepository } from './share-data-repository';
|
|
|
9
9
|
* through {@link deserializeShareData} on the way out.
|
|
10
10
|
*/
|
|
11
11
|
export declare class InMemoryShareDataRepository implements ShareDataRepository {
|
|
12
|
+
private readonly libraryStore?;
|
|
12
13
|
private readonly snapshots;
|
|
14
|
+
/**
|
|
15
|
+
* @param libraryStore optional rule library store injected onto reloaded
|
|
16
|
+
* blocks (passed to {@link deserializeShareData}). Omit to use the
|
|
17
|
+
* factory's default self-seeding store.
|
|
18
|
+
*/
|
|
19
|
+
constructor(libraryStore?: LibraryStore | undefined);
|
|
13
20
|
save(snapshot: PersistedShareData): Promise<void>;
|
|
14
21
|
load(id: string): Promise<ShareData | undefined>;
|
|
15
22
|
loadAll(): Promise<ShareData[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory-share-data-repository.d.ts","sourceRoot":"","sources":["../../src/persistence/in-memory-share-data-repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAA4B,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"in-memory-share-data-repository.d.ts","sourceRoot":"","sources":["../../src/persistence/in-memory-share-data-repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAA4B,MAAM,qBAAqB,CAAC;AAEjG,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAU9D;;;;;;GAMG;AACH,qBAAa,2BAA4B,YAAW,mBAAmB;IAQvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAP1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyC;IAEnE;;;;OAIG;gBAC0B,YAAY,CAAC,EAAE,YAAY,YAAA;IAElD,IAAI,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAQhD,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAK/B,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAMjD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG1C"}
|
|
@@ -18,7 +18,13 @@ const deserialize_share_data_1 = require("./deserialize-share-data");
|
|
|
18
18
|
* through {@link deserializeShareData} on the way out.
|
|
19
19
|
*/
|
|
20
20
|
class InMemoryShareDataRepository {
|
|
21
|
-
|
|
21
|
+
/**
|
|
22
|
+
* @param libraryStore optional rule library store injected onto reloaded
|
|
23
|
+
* blocks (passed to {@link deserializeShareData}). Omit to use the
|
|
24
|
+
* factory's default self-seeding store.
|
|
25
|
+
*/
|
|
26
|
+
constructor(libraryStore) {
|
|
27
|
+
this.libraryStore = libraryStore;
|
|
22
28
|
this.snapshots = new Map();
|
|
23
29
|
}
|
|
24
30
|
async save(snapshot) {
|
|
@@ -32,11 +38,11 @@ class InMemoryShareDataRepository {
|
|
|
32
38
|
if (!snapshot) {
|
|
33
39
|
return undefined;
|
|
34
40
|
}
|
|
35
|
-
return (0, deserialize_share_data_1.deserializeShareData)(generic_1.PersistedShareDataSchema.parse(snapshot));
|
|
41
|
+
return (0, deserialize_share_data_1.deserializeShareData)(generic_1.PersistedShareDataSchema.parse(snapshot), this.libraryStore);
|
|
36
42
|
}
|
|
37
43
|
async loadAll() {
|
|
38
44
|
const snapshots = await this.loadAllSnapshots();
|
|
39
|
-
return snapshots.map((snapshot) => (0, deserialize_share_data_1.deserializeShareData)(snapshot));
|
|
45
|
+
return snapshots.map((snapshot) => (0, deserialize_share_data_1.deserializeShareData)(snapshot, this.libraryStore));
|
|
40
46
|
}
|
|
41
47
|
async loadAllSnapshots() {
|
|
42
48
|
return [...this.snapshots.values()].map((snapshot) => generic_1.PersistedShareDataSchema.parse(snapshot));
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IShareDataInitialCryptoData } from '@degenerate/generic';
|
|
2
2
|
import { ShareData } from '../share-data';
|
|
3
3
|
/**
|
|
4
4
|
* This function creates the initial crypto data for the share data.
|
|
5
5
|
*
|
|
6
|
-
* @param
|
|
6
|
+
* @param privateKey the 32-byte Ed25519 secret seed (hex) to sign with
|
|
7
|
+
* @param shareData the share data to create the initial crypto for
|
|
7
8
|
*/
|
|
8
|
-
export declare const createShareDataInitialCrypto: (privateKey: string,
|
|
9
|
-
shareData: ShareData, // the share data to create the initial crypto for
|
|
10
|
-
signingCurve?: EllipticalCurvesSigning) => IShareDataInitialCryptoData;
|
|
9
|
+
export declare const createShareDataInitialCrypto: (privateKey: string, shareData: ShareData) => IShareDataInitialCryptoData;
|
|
11
10
|
//# sourceMappingURL=create-share-data-initial-crypto.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-share-data-initial-crypto.d.ts","sourceRoot":"","sources":["../../../src/share-data/creation/create-share-data-initial-crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,
|
|
1
|
+
{"version":3,"file":"create-share-data-initial-crypto.d.ts","sourceRoot":"","sources":["../../../src/share-data/creation/create-share-data-initial-crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,2BAA2B,EAC9B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,GACrC,YAAY,MAAM,EAClB,WAAW,SAAS,KACrB,2BAYF,CAAA"}
|
|
@@ -6,17 +6,16 @@ const calculate_share_data_string_1 = require("../helpers/calculate-share-data-s
|
|
|
6
6
|
/**
|
|
7
7
|
* This function creates the initial crypto data for the share data.
|
|
8
8
|
*
|
|
9
|
-
* @param
|
|
9
|
+
* @param privateKey the 32-byte Ed25519 secret seed (hex) to sign with
|
|
10
|
+
* @param shareData the share data to create the initial crypto for
|
|
10
11
|
*/
|
|
11
|
-
const createShareDataInitialCrypto = (privateKey,
|
|
12
|
-
|
|
13
|
-
signingCurve = generic_1.EllipticalCurvesSigning.Curve25519) => {
|
|
14
|
-
const keyPair = (0, generic_1.createKeyPairFromPrivateKey)(signingCurve, privateKey);
|
|
12
|
+
const createShareDataInitialCrypto = (privateKey, shareData) => {
|
|
13
|
+
const publicKey = (0, generic_1.getEd25519PublicKeyFromPrivateKey)(privateKey);
|
|
15
14
|
const shareDataString = (0, calculate_share_data_string_1.calculateShareDataString)(shareData);
|
|
16
15
|
const shareDataHash = (0, generic_1.calculateHash)(shareDataString);
|
|
17
|
-
const shareDataSignature = (0, generic_1.
|
|
16
|
+
const shareDataSignature = (0, generic_1.createEd25519Signature)(privateKey, shareDataHash);
|
|
18
17
|
const initialCryptoData = {
|
|
19
|
-
publicKey
|
|
18
|
+
publicKey,
|
|
20
19
|
shareDataHash,
|
|
21
20
|
shareDataSignature,
|
|
22
21
|
timestamp: Date.now(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-share-data-string.config.d.ts","sourceRoot":"","sources":["../../../../src/share-data/helpers/config/default-share-data-string.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAIvD;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,
|
|
1
|
+
{"version":3,"file":"default-share-data-string.config.d.ts","sourceRoot":"","sources":["../../../../src/share-data/helpers/config/default-share-data-string.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAIvD;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,gBAyB1C,CAAC"}
|
|
@@ -24,6 +24,11 @@ exports.defaultShareDataStringConfig = [
|
|
|
24
24
|
{ key: 'events', process: get_array_string_1.getArrayString },
|
|
25
25
|
{ key: 'functions', process: get_array_string_1.getArrayString },
|
|
26
26
|
{ key: 'rules', process: get_array_string_1.getArrayString },
|
|
27
|
+
// Library rule references, folded into the signed structure the same way as
|
|
28
|
+
// `authorizedSigners`/`rules`. `getArrayString([])` returns '', so a block
|
|
29
|
+
// with no rule references hashes identically to before this field existed —
|
|
30
|
+
// existing proofs stay valid.
|
|
31
|
+
{ key: 'ruleReferences', process: get_array_string_1.getArrayString },
|
|
27
32
|
{ key: 'transactionHistory', process: get_array_string_1.getArrayString },
|
|
28
33
|
{ key: 'creationHash' },
|
|
29
34
|
{ key: 'creationSignature' },
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IShareData, IShareDataCryptoProof } from '@degenerate/generic';
|
|
2
2
|
import { ShareData } from '../../share-data';
|
|
3
3
|
/**
|
|
4
4
|
* Configuration for the production transaction-proposal signer returned by
|
|
@@ -6,18 +6,13 @@ import { ShareData } from '../../share-data';
|
|
|
6
6
|
*/
|
|
7
7
|
export interface ITransactionProposalSignerConfig {
|
|
8
8
|
/**
|
|
9
|
-
* Hex-encoded
|
|
10
|
-
* (must correspond to its `creationPublicKey`). Captured in the
|
|
11
|
-
* closure and never leaves it. In production this should come from
|
|
12
|
-
* secure key manager (KMS / HSM / encrypted environment value), not a
|
|
9
|
+
* Hex-encoded 32-byte Ed25519 secret seed authorized to mutate the target
|
|
10
|
+
* share-data (must correspond to its `creationPublicKey`). Captured in the
|
|
11
|
+
* returned closure and never leaves it. In production this should come from
|
|
12
|
+
* a secure key manager (KMS / HSM / encrypted environment value), not a
|
|
13
13
|
* literal string in code.
|
|
14
14
|
*/
|
|
15
15
|
privateKey: string;
|
|
16
|
-
/**
|
|
17
|
-
* Elliptical curve to sign with. Defaults to `Curve25519`, matching the
|
|
18
|
-
* `ShareData` constructor default.
|
|
19
|
-
*/
|
|
20
|
-
curve?: EllipticalCurvesSigning;
|
|
21
16
|
}
|
|
22
17
|
/**
|
|
23
18
|
* A bound signer that mints a transaction proposal proof authorizing one
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-transaction-proposal-signer.d.ts","sourceRoot":"","sources":["../../../../src/share-data/proofs/creation/build-transaction-proposal-signer.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,
|
|
1
|
+
{"version":3,"file":"build-transaction-proposal-signer.d.ts","sourceRoot":"","sources":["../../../../src/share-data/proofs/creation/build-transaction-proposal-signer.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,UAAU,EACV,qBAAqB,EACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C;;;GAGG;AACH,MAAM,WAAW,gCAAgC;IAC7C;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,yBAAyB,GAAG,CACpC,aAAa,EAAE,UAAU,EACzB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,SAAS,KACnB,qBAAqB,CAAC;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,8BAA8B,GACvC,QAAQ,gCAAgC,KACzC,yBAQF,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.buildTransactionProposalSigner = void 0;
|
|
4
|
-
const generic_1 = require("@degenerate/generic");
|
|
5
4
|
const create_transaction_proposal_proof_1 = require("./create-transaction-proposal-proof");
|
|
6
5
|
/**
|
|
7
6
|
* Returns a production-ready {@link TransactionProposalSigner} that signs each
|
|
@@ -30,7 +29,6 @@ const create_transaction_proposal_proof_1 = require("./create-transaction-propos
|
|
|
30
29
|
* replayed for a different amount or a different function.
|
|
31
30
|
*/
|
|
32
31
|
const buildTransactionProposalSigner = (config) => {
|
|
33
|
-
|
|
34
|
-
return (proposedState, functionId, shareData) => (0, create_transaction_proposal_proof_1.createTransactionProposalProof)(config.privateKey, shareData, proposedState, functionId, curve);
|
|
32
|
+
return (proposedState, functionId, shareData) => (0, create_transaction_proposal_proof_1.createTransactionProposalProof)(config.privateKey, shareData, proposedState, functionId);
|
|
35
33
|
};
|
|
36
34
|
exports.buildTransactionProposalSigner = buildTransactionProposalSigner;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IShareDataAdditionalValuesToInclude, IShareDataCryptoProof } from '@degenerate/generic';
|
|
2
2
|
import { ShareData } from '../../share-data';
|
|
3
3
|
/**
|
|
4
4
|
* This function creates a share data proposal proof.
|
|
5
|
-
* @param privateKey the
|
|
5
|
+
* @param privateKey the 32-byte Ed25519 secret seed (hex) to sign the proof with
|
|
6
6
|
* @param shareData the share data object
|
|
7
7
|
* @param additionalValuesToInclude the additional values to include in the share data string
|
|
8
|
-
* @param ellipticalCurve the elliptical curve to use for signing
|
|
9
8
|
* @returns
|
|
10
9
|
*/
|
|
11
|
-
export declare const createShareDataProposalProof: (privateKey: string, shareData: ShareData, additionalValuesToInclude: IShareDataAdditionalValuesToInclude
|
|
10
|
+
export declare const createShareDataProposalProof: (privateKey: string, shareData: ShareData, additionalValuesToInclude: IShareDataAdditionalValuesToInclude) => IShareDataCryptoProof;
|
|
12
11
|
//# sourceMappingURL=create-share-data-proposal-proof.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-share-data-proposal-proof.d.ts","sourceRoot":"","sources":["../../../../src/share-data/proofs/creation/create-share-data-proposal-proof.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,
|
|
1
|
+
{"version":3,"file":"create-share-data-proposal-proof.d.ts","sourceRoot":"","sources":["../../../../src/share-data/proofs/creation/create-share-data-proposal-proof.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,mCAAmC,EACnC,qBAAqB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAI7C;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,GACrC,YAAY,MAAM,EAClB,WAAW,SAAS,EACpB,2BAA2B,mCAAmC,KAC/D,qBA0BF,CAAC"}
|