@mainsail/consensus 0.0.1-alpha.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 (62) hide show
  1. package/LICENSE +623 -0
  2. package/distribution/aggregator.d.ts +11 -0
  3. package/distribution/aggregator.d.ts.map +1 -0
  4. package/distribution/aggregator.js +58 -0
  5. package/distribution/aggregator.js.map +1 -0
  6. package/distribution/bootstrapper.d.ts +8 -0
  7. package/distribution/bootstrapper.d.ts.map +1 -0
  8. package/distribution/bootstrapper.js +68 -0
  9. package/distribution/bootstrapper.js.map +1 -0
  10. package/distribution/commit-state.d.ts +19 -0
  11. package/distribution/commit-state.d.ts.map +1 -0
  12. package/distribution/commit-state.js +102 -0
  13. package/distribution/commit-state.js.map +1 -0
  14. package/distribution/consensus.d.ts +45 -0
  15. package/distribution/consensus.d.ts.map +1 -0
  16. package/distribution/consensus.js +445 -0
  17. package/distribution/consensus.js.map +1 -0
  18. package/distribution/index.d.ts +6 -0
  19. package/distribution/index.d.ts.map +1 -0
  20. package/distribution/index.js +59 -0
  21. package/distribution/index.js.map +1 -0
  22. package/distribution/processors/abstract-processor.d.ts +16 -0
  23. package/distribution/processors/abstract-processor.d.ts.map +1 -0
  24. package/distribution/processors/abstract-processor.js +52 -0
  25. package/distribution/processors/abstract-processor.js.map +1 -0
  26. package/distribution/processors/commit-processor.d.ts +14 -0
  27. package/distribution/processors/commit-processor.d.ts.map +1 -0
  28. package/distribution/processors/commit-processor.js +103 -0
  29. package/distribution/processors/commit-processor.js.map +1 -0
  30. package/distribution/processors/index.d.ts +5 -0
  31. package/distribution/processors/index.d.ts.map +1 -0
  32. package/distribution/processors/index.js +21 -0
  33. package/distribution/processors/index.js.map +1 -0
  34. package/distribution/processors/precommit-processor.d.ts +12 -0
  35. package/distribution/processors/precommit-processor.d.ts.map +1 -0
  36. package/distribution/processors/precommit-processor.js +81 -0
  37. package/distribution/processors/precommit-processor.js.map +1 -0
  38. package/distribution/processors/prevote-processor.d.ts +12 -0
  39. package/distribution/processors/prevote-processor.d.ts.map +1 -0
  40. package/distribution/processors/prevote-processor.js +81 -0
  41. package/distribution/processors/prevote-processor.js.map +1 -0
  42. package/distribution/processors/proposal-processor.d.ts +16 -0
  43. package/distribution/processors/proposal-processor.d.ts.map +1 -0
  44. package/distribution/processors/proposal-processor.js +148 -0
  45. package/distribution/processors/proposal-processor.js.map +1 -0
  46. package/distribution/round-state-repository.d.ts +9 -0
  47. package/distribution/round-state-repository.d.ts.map +1 -0
  48. package/distribution/round-state-repository.js +54 -0
  49. package/distribution/round-state-repository.js.map +1 -0
  50. package/distribution/round-state.d.ts +49 -0
  51. package/distribution/round-state.d.ts.map +1 -0
  52. package/distribution/round-state.js +315 -0
  53. package/distribution/round-state.js.map +1 -0
  54. package/distribution/scheduler.d.ts +13 -0
  55. package/distribution/scheduler.d.ts.map +1 -0
  56. package/distribution/scheduler.js +125 -0
  57. package/distribution/scheduler.js.map +1 -0
  58. package/distribution/storage.d.ts +19 -0
  59. package/distribution/storage.d.ts.map +1 -0
  60. package/distribution/storage.js +114 -0
  61. package/distribution/storage.js.map +1 -0
  62. package/package.json +41 -0
@@ -0,0 +1,58 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.Aggregator = void 0;
13
+ const container_1 = require("@mainsail/container");
14
+ const contracts_1 = require("@mainsail/contracts");
15
+ const kernel_1 = require("@mainsail/kernel");
16
+ let Aggregator = class Aggregator {
17
+ async aggregate(majority, activeValidators) {
18
+ if (!kernel_1.Utils.isMajority(majority.size, activeValidators)) {
19
+ throw new Error("Failed to aggregate signatures, because the majority is not reached.");
20
+ }
21
+ const signatures = [];
22
+ const validators = Array.from({ length: activeValidators }).fill(false);
23
+ for (const [key, { signature }] of majority) {
24
+ signatures.push(Buffer.from(signature, "hex"));
25
+ validators[key] = true;
26
+ }
27
+ const worker = await this.workerPool.getWorker();
28
+ const signature = await worker.consensusSignature("aggregate", signatures);
29
+ return {
30
+ signature,
31
+ validators,
32
+ };
33
+ }
34
+ async verify(signature, data, activeValidators) {
35
+ const validatorPublicKeys = signature.validators
36
+ .map((v, index) => v ? Buffer.from(this.validatorSet.getValidator(index).getConsensusPublicKey(), "hex") : undefined)
37
+ .filter((item) => !!item);
38
+ if (!kernel_1.Utils.isMajority(validatorPublicKeys.length, activeValidators)) {
39
+ return false;
40
+ }
41
+ const worker = await this.workerPool.getWorker();
42
+ const aggregatedPublicKey = await worker.publicKeyFactory("aggregate", validatorPublicKeys);
43
+ return await worker.consensusSignature("verify", Buffer.from(signature.signature, "hex"), data, Buffer.from(aggregatedPublicKey, "hex"));
44
+ }
45
+ };
46
+ exports.Aggregator = Aggregator;
47
+ __decorate([
48
+ (0, container_1.inject)(contracts_1.Identifiers.ValidatorSet.Service),
49
+ __metadata("design:type", Object)
50
+ ], Aggregator.prototype, "validatorSet", void 0);
51
+ __decorate([
52
+ (0, container_1.inject)(contracts_1.Identifiers.CryptoWorker.WorkerPool),
53
+ __metadata("design:type", Object)
54
+ ], Aggregator.prototype, "workerPool", void 0);
55
+ exports.Aggregator = Aggregator = __decorate([
56
+ (0, container_1.injectable)()
57
+ ], Aggregator);
58
+ //# sourceMappingURL=aggregator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregator.js","sourceRoot":"","sources":["../source/aggregator.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAAyD;AACzD,mDAA6D;AAC7D,6CAAoD;AAG7C,IAAM,UAAU,GAAhB,MAAM,UAAU;IAOf,KAAK,CAAC,SAAS,CACrB,QAA4C,EAC5C,gBAAwB;QAExB,IAAI,CAAC,cAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,MAAM,UAAU,GAAc,KAAK,CAAC,IAAI,CAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE5F,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC;YAC7C,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/C,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAE3E,OAAO;YACN,SAAS;YACT,UAAU;SACV,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CACX,SAA+C,EAC/C,IAAY,EACZ,gBAAwB;QAExB,MAAM,mBAAmB,GAAa,SAAS,CAAC,UAAU;aACxD,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CACjB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CACjG;aACA,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,CAAC,cAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACrE,OAAO,KAAK,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QAEjD,MAAM,mBAAmB,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;QAE5F,OAAO,MAAM,MAAM,CAAC,kBAAkB,CACrC,QAAQ,EACR,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,EACvC,IAAI,EACJ,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,CACvC,CAAC;IACH,CAAC;CACD,CAAA;AA3DY,gCAAU;AAEL;IADhB,IAAA,kBAAM,EAAC,uBAAW,CAAC,YAAY,CAAC,OAAO,CAAC;;gDACsB;AAG9C;IADhB,IAAA,kBAAM,EAAC,uBAAW,CAAC,YAAY,CAAC,UAAU,CAAC;;8CACO;qBALvC,UAAU;IADtB,IAAA,sBAAU,GAAE;GACA,UAAU,CA2DtB"}
@@ -0,0 +1,8 @@
1
+ import { Contracts } from "@mainsail/contracts";
2
+ export declare class Bootstrapper implements Contracts.Consensus.Bootstrapper {
3
+ private readonly logger;
4
+ private readonly roundStateRepo;
5
+ private readonly storage;
6
+ run(): Promise<Contracts.Consensus.ConsensusState | undefined>;
7
+ }
8
+ //# sourceMappingURL=bootstrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrapper.d.ts","sourceRoot":"","sources":["../source/bootstrapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAsB,MAAM,qBAAqB,CAAC;AAEpE,qBACa,YAAa,YAAW,SAAS,CAAC,SAAS,CAAC,YAAY;IAEpE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAGlD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4C;IAG3E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwC;IAEnD,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC;CA6C3E"}
@@ -0,0 +1,68 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.Bootstrapper = void 0;
13
+ const container_1 = require("@mainsail/container");
14
+ const contracts_1 = require("@mainsail/contracts");
15
+ let Bootstrapper = class Bootstrapper {
16
+ async run() {
17
+ const proposals = await this.storage.getProposals();
18
+ this.logger.info(`Consensus Bootstrap - Proposals: ${proposals.length}`);
19
+ for (const proposal of proposals) {
20
+ const roundState = this.roundStateRepo.getRoundState(proposal.height, proposal.round);
21
+ roundState.addProposal(proposal);
22
+ }
23
+ const prevotes = await this.storage.getPrevotes();
24
+ this.logger.info(`Consensus Bootstrap - Prevotes: ${prevotes.length}`);
25
+ for (const prevote of prevotes) {
26
+ const roundState = this.roundStateRepo.getRoundState(prevote.height, prevote.round);
27
+ roundState.addPrevote(prevote);
28
+ }
29
+ const precommits = await this.storage.getPrecommits();
30
+ this.logger.info(`Consensus Bootstrap - Precommits: ${precommits.length}`);
31
+ for (const precommit of precommits) {
32
+ const roundState = this.roundStateRepo.getRoundState(precommit.height, precommit.round);
33
+ roundState.addPrecommit(precommit);
34
+ }
35
+ const state = (await this.storage.getState());
36
+ if (!state) {
37
+ return undefined;
38
+ }
39
+ if (state.validRound !== undefined) {
40
+ // TODO: ensure validRound points to an existing round?
41
+ const roundState = this.roundStateRepo.getRoundState(state.height, state.validRound);
42
+ state.validValue = roundState;
43
+ }
44
+ if (state.lockedRound !== undefined) {
45
+ // TODO: ensure lockedRound points to an existing round?
46
+ const roundState = this.roundStateRepo.getRoundState(state.height, state.lockedRound);
47
+ state.lockedValue = roundState;
48
+ }
49
+ return state;
50
+ }
51
+ };
52
+ exports.Bootstrapper = Bootstrapper;
53
+ __decorate([
54
+ (0, container_1.inject)(contracts_1.Identifiers.Services.Log.Service),
55
+ __metadata("design:type", Object)
56
+ ], Bootstrapper.prototype, "logger", void 0);
57
+ __decorate([
58
+ (0, container_1.inject)(contracts_1.Identifiers.Consensus.RoundStateRepository),
59
+ __metadata("design:type", Object)
60
+ ], Bootstrapper.prototype, "roundStateRepo", void 0);
61
+ __decorate([
62
+ (0, container_1.inject)(contracts_1.Identifiers.Consensus.Storage),
63
+ __metadata("design:type", Object)
64
+ ], Bootstrapper.prototype, "storage", void 0);
65
+ exports.Bootstrapper = Bootstrapper = __decorate([
66
+ (0, container_1.injectable)()
67
+ ], Bootstrapper);
68
+ //# sourceMappingURL=bootstrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrapper.js","sourceRoot":"","sources":["../source/bootstrapper.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAAyD;AACzD,mDAAoE;AAG7D,IAAM,YAAY,GAAlB,MAAM,YAAY;IAUjB,KAAK,CAAC,GAAG;QACf,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAEpD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAEzE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YACtF,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAElD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACpF,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAEtD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3E,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;YACxF,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAkE,CAAC;QAC/G,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACpC,uDAAuD;YACvD,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YACrF,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;QAC/B,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,wDAAwD;YACxD,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;YACtF,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC;QAChC,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;CACD,CAAA;AAvDY,oCAAY;AAEP;IADhB,IAAA,kBAAM,EAAC,uBAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;;4CACS;AAGjC;IADhB,IAAA,kBAAM,EAAC,uBAAW,CAAC,SAAS,CAAC,oBAAoB,CAAC;;oDACwB;AAG1D;IADhB,IAAA,kBAAM,EAAC,uBAAW,CAAC,SAAS,CAAC,OAAO,CAAC;;6CAC0B;uBARpD,YAAY;IADxB,IAAA,sBAAU,GAAE;GACA,YAAY,CAuDxB"}
@@ -0,0 +1,19 @@
1
+ import { Contracts } from "@mainsail/contracts";
2
+ export declare class CommitState implements Contracts.Processor.ProcessableUnit {
3
+ #private;
4
+ private readonly stateService;
5
+ private readonly validatorSet;
6
+ initialize(): void;
7
+ get height(): number;
8
+ get round(): number;
9
+ get persist(): boolean;
10
+ get validators(): string[];
11
+ get store(): Contracts.State.Store;
12
+ configure(commit: Contracts.Crypto.Commit): CommitState;
13
+ getBlock(): Contracts.Crypto.Block;
14
+ setProcessorResult(processorResult: boolean): void;
15
+ hasProcessorResult(): boolean;
16
+ getProcessorResult(): boolean;
17
+ getCommit(): Promise<Contracts.Crypto.Commit>;
18
+ }
19
+ //# sourceMappingURL=commit-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit-state.d.ts","sourceRoot":"","sources":["../source/commit-state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAe,MAAM,qBAAqB,CAAC;AAE7D,qBACa,WAAY,YAAW,SAAS,CAAC,SAAS,CAAC,eAAe;;IAEtE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2B;IAGxD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAQxD,UAAU,IAAI,IAAI;IAIzB,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED,IAAW,UAAU,IAAI,MAAM,EAAE,CAEhC;IAED,IAAW,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAExC;IAEM,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,WAAW;IAYvD,QAAQ,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK;IAIlC,kBAAkB,CAAC,eAAe,EAAE,OAAO,GAAG,IAAI;IAIlD,kBAAkB,IAAI,OAAO;IAI7B,kBAAkB,IAAI,OAAO;IAQvB,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;CAG1D"}
@@ -0,0 +1,102 @@
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 __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
12
+ if (kind === "m") throw new TypeError("Private method is not writable");
13
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
14
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
15
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
16
+ };
17
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
18
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
19
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
20
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
21
+ };
22
+ var _CommitState_store, _CommitState_commit, _CommitState_processorResult, _CommitState_validators;
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.CommitState = void 0;
25
+ const container_1 = require("@mainsail/container");
26
+ const contracts_1 = require("@mainsail/contracts");
27
+ let CommitState = class CommitState {
28
+ constructor() {
29
+ _CommitState_store.set(this, void 0);
30
+ _CommitState_commit.set(this, void 0);
31
+ _CommitState_processorResult.set(this, void 0);
32
+ _CommitState_validators.set(this, new Map());
33
+ }
34
+ initialize() {
35
+ __classPrivateFieldSet(this, _CommitState_store, this.stateService.createStoreClone(), "f");
36
+ }
37
+ get height() {
38
+ return __classPrivateFieldGet(this, _CommitState_commit, "f").block.data.height;
39
+ }
40
+ get round() {
41
+ return __classPrivateFieldGet(this, _CommitState_commit, "f").proof.round;
42
+ }
43
+ get persist() {
44
+ return false; // Block downloader will store block in database, to improve performance
45
+ }
46
+ get validators() {
47
+ return [...__classPrivateFieldGet(this, _CommitState_validators, "f").keys()];
48
+ }
49
+ get store() {
50
+ return __classPrivateFieldGet(this, _CommitState_store, "f");
51
+ }
52
+ configure(commit) {
53
+ __classPrivateFieldSet(this, _CommitState_commit, commit, "f");
54
+ const validators = this.validatorSet.getActiveValidators();
55
+ for (const validator of validators) {
56
+ const consensusPublicKey = validator.getConsensusPublicKey();
57
+ __classPrivateFieldGet(this, _CommitState_validators, "f").set(consensusPublicKey, validator);
58
+ }
59
+ return this;
60
+ }
61
+ getBlock() {
62
+ return __classPrivateFieldGet(this, _CommitState_commit, "f").block;
63
+ }
64
+ setProcessorResult(processorResult) {
65
+ __classPrivateFieldSet(this, _CommitState_processorResult, processorResult, "f");
66
+ }
67
+ hasProcessorResult() {
68
+ return __classPrivateFieldGet(this, _CommitState_processorResult, "f") !== undefined;
69
+ }
70
+ getProcessorResult() {
71
+ if (__classPrivateFieldGet(this, _CommitState_processorResult, "f") == undefined) {
72
+ throw new Error("Processor result is undefined.");
73
+ }
74
+ return __classPrivateFieldGet(this, _CommitState_processorResult, "f");
75
+ }
76
+ async getCommit() {
77
+ return __classPrivateFieldGet(this, _CommitState_commit, "f");
78
+ }
79
+ };
80
+ exports.CommitState = CommitState;
81
+ _CommitState_store = new WeakMap();
82
+ _CommitState_commit = new WeakMap();
83
+ _CommitState_processorResult = new WeakMap();
84
+ _CommitState_validators = new WeakMap();
85
+ __decorate([
86
+ (0, container_1.inject)(contracts_1.Identifiers.State.Service),
87
+ __metadata("design:type", Object)
88
+ ], CommitState.prototype, "stateService", void 0);
89
+ __decorate([
90
+ (0, container_1.inject)(contracts_1.Identifiers.ValidatorSet.Service),
91
+ __metadata("design:type", Object)
92
+ ], CommitState.prototype, "validatorSet", void 0);
93
+ __decorate([
94
+ (0, container_1.postConstruct)(),
95
+ __metadata("design:type", Function),
96
+ __metadata("design:paramtypes", []),
97
+ __metadata("design:returntype", void 0)
98
+ ], CommitState.prototype, "initialize", null);
99
+ exports.CommitState = CommitState = __decorate([
100
+ (0, container_1.injectable)()
101
+ ], CommitState);
102
+ //# sourceMappingURL=commit-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit-state.js","sourceRoot":"","sources":["../source/commit-state.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAwE;AACxE,mDAA6D;AAGtD,IAAM,WAAW,GAAjB,MAAM,WAAW;IAAjB;QAON,qCAA+B;QAC/B,sCAAkC;QAClC,+CAA2B;QAC3B,kCAAc,IAAI,GAAG,EAA2C,EAAC;IA8DlE,CAAC;IA3DO,UAAU;QAChB,uBAAA,IAAI,sBAAU,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAA,CAAC;IACpD,CAAC;IAED,IAAW,MAAM;QAChB,OAAO,uBAAA,IAAI,2BAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IACvC,CAAC;IAED,IAAW,KAAK;QACf,OAAO,uBAAA,IAAI,2BAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;IACjC,CAAC;IAED,IAAW,OAAO;QACjB,OAAO,KAAK,CAAC,CAAC,wEAAwE;IACvF,CAAC;IAED,IAAW,UAAU;QACpB,OAAO,CAAC,GAAG,uBAAA,IAAI,+BAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,IAAW,KAAK;QACf,OAAO,uBAAA,IAAI,0BAAO,CAAC;IACpB,CAAC;IAEM,SAAS,CAAC,MAA+B;QAC/C,uBAAA,IAAI,uBAAW,MAAM,MAAA,CAAC;QAEtB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,CAAC;QAC3D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACpC,MAAM,kBAAkB,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;YAC7D,uBAAA,IAAI,+BAAY,CAAC,GAAG,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,QAAQ;QACd,OAAO,uBAAA,IAAI,2BAAQ,CAAC,KAAK,CAAC;IAC3B,CAAC;IAEM,kBAAkB,CAAC,eAAwB;QACjD,uBAAA,IAAI,gCAAoB,eAAe,MAAA,CAAC;IACzC,CAAC;IAEM,kBAAkB;QACxB,OAAO,uBAAA,IAAI,oCAAiB,KAAK,SAAS,CAAC;IAC5C,CAAC;IAEM,kBAAkB;QACxB,IAAI,uBAAA,IAAI,oCAAiB,IAAI,SAAS,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,uBAAA,IAAI,oCAAiB,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,SAAS;QACrB,OAAO,uBAAA,IAAI,2BAAQ,CAAC;IACrB,CAAC;CACD,CAAA;AAxEY,kCAAW;;;;;AAEN;IADhB,IAAA,kBAAM,EAAC,uBAAW,CAAC,KAAK,CAAC,OAAO,CAAC;;iDACsB;AAGvC;IADhB,IAAA,kBAAM,EAAC,uBAAW,CAAC,YAAY,CAAC,OAAO,CAAC;;iDACsB;AAQxD;IADN,IAAA,yBAAa,GAAE;;;;6CAGf;sBAfW,WAAW;IADvB,IAAA,sBAAU,GAAE;GACA,WAAW,CAwEvB"}
@@ -0,0 +1,45 @@
1
+ import { Contracts } from "@mainsail/contracts";
2
+ export declare class Consensus implements Contracts.Consensus.ConsensusService {
3
+ #private;
4
+ private readonly app;
5
+ private readonly bootstrapper;
6
+ private readonly configuration;
7
+ private readonly processor;
8
+ private readonly stateService;
9
+ private readonly proposalProcessor;
10
+ private readonly prevoteProcessor;
11
+ private readonly precommitProcessor;
12
+ private readonly scheduler;
13
+ private readonly validatorsRepository;
14
+ private readonly roundStateRepository;
15
+ private readonly commitLock;
16
+ private readonly validatorSet;
17
+ private readonly logger;
18
+ getHeight(): number;
19
+ getRound(): number;
20
+ setRound(round: number): void;
21
+ getStep(): Contracts.Consensus.Step;
22
+ setStep(step: Contracts.Consensus.Step): void;
23
+ getLockedRound(): number | undefined;
24
+ getValidRound(): number | undefined;
25
+ setValidRound(round: Contracts.Consensus.RoundState): void;
26
+ getState(): Contracts.Consensus.ConsensusState;
27
+ run(): Promise<void>;
28
+ dispose(): Promise<void>;
29
+ handle(roundState: Contracts.Consensus.RoundState): Promise<void>;
30
+ handleCommitState(commitState: Contracts.Processor.ProcessableUnit): Promise<void>;
31
+ startRound(round: number): Promise<void>;
32
+ onTimeoutStartRound(): Promise<void>;
33
+ protected onProposal(roundState: Contracts.Consensus.RoundState): Promise<void>;
34
+ protected onProposalLocked(roundState: Contracts.Consensus.RoundState): Promise<void>;
35
+ protected onMajorityPrevote(roundState: Contracts.Consensus.RoundState): Promise<void>;
36
+ protected onMajorityPrevoteAny(roundState: Contracts.Consensus.RoundState): Promise<void>;
37
+ protected onMajorityPrevoteNull(roundState: Contracts.Consensus.RoundState): Promise<void>;
38
+ protected onMajorityPrecommitAny(roundState: Contracts.Consensus.RoundState): Promise<void>;
39
+ protected onMajorityPrecommit(roundState: Contracts.Processor.ProcessableUnit): Promise<void>;
40
+ protected onMinorityWithHigherRound(roundState: Contracts.Processor.ProcessableUnit): Promise<void>;
41
+ onTimeoutPropose(height: number, round: number): Promise<void>;
42
+ onTimeoutPrevote(height: number, round: number): Promise<void>;
43
+ onTimeoutPrecommit(height: number, round: number): Promise<void>;
44
+ }
45
+ //# sourceMappingURL=consensus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consensus.d.ts","sourceRoot":"","sources":["../source/consensus.ts"],"names":[],"mappings":"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"}