@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,114 @@
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.Storage = void 0;
13
+ const container_1 = require("@mainsail/container");
14
+ const contracts_1 = require("@mainsail/contracts");
15
+ const lmdb_1 = require("lmdb");
16
+ let Storage = class Storage {
17
+ async getState() {
18
+ if (!this.stateStorage.doesExist("consensus-state")) {
19
+ return undefined;
20
+ }
21
+ const data = await this.stateStorage.get("consensus-state");
22
+ return {
23
+ height: data.height,
24
+ lockedRound: data.lockedRound,
25
+ round: data.round,
26
+ step: data.step,
27
+ validRound: data.validRound,
28
+ };
29
+ }
30
+ async saveState(state) {
31
+ // always overwrite existing state; we only care about state for uncommitted blocks
32
+ const data = {
33
+ height: state.height,
34
+ lockedRound: state.lockedRound,
35
+ round: state.round,
36
+ step: state.step,
37
+ validRound: state.validRound,
38
+ };
39
+ await this.stateStorage.put("consensus-state", data);
40
+ }
41
+ async saveProposals(proposals) {
42
+ await this.proposalStorage.transaction(async () => {
43
+ for (const proposal of proposals) {
44
+ const validator = this.validatorSet.getValidator(proposal.validatorIndex);
45
+ await this.proposalStorage.put(`${proposal.round}-${validator.getConsensusPublicKey()}`, proposal.toData());
46
+ }
47
+ });
48
+ }
49
+ async savePrevotes(prevotes) {
50
+ await this.prevoteStorage.transaction(async () => {
51
+ for (const prevote of prevotes) {
52
+ const validator = this.validatorSet.getValidator(prevote.validatorIndex);
53
+ await this.prevoteStorage.put(`${prevote.round}-${validator.getConsensusPublicKey()}`, prevote.toData());
54
+ }
55
+ });
56
+ }
57
+ async savePrecommits(precommits) {
58
+ await this.precommitStorage.transaction(async () => {
59
+ for (const precommit of precommits) {
60
+ const validator = this.validatorSet.getValidator(precommit.validatorIndex);
61
+ await this.precommitStorage.put(`${precommit.round}-${validator.getConsensusPublicKey()}`, precommit.toData());
62
+ }
63
+ });
64
+ }
65
+ async getProposals() {
66
+ const proposals = [...this.proposalStorage.getValues(undefined)];
67
+ return Promise.all(proposals.map((proposal) => this.messageFactory.makeProposalFromData(proposal)));
68
+ }
69
+ async getPrevotes() {
70
+ const prevotes = [...this.prevoteStorage.getValues(undefined)];
71
+ return Promise.all(prevotes.map((prevote) => this.messageFactory.makePrevoteFromData(prevote)));
72
+ }
73
+ async getPrecommits() {
74
+ const precommits = [...this.precommitStorage.getValues(undefined)];
75
+ return Promise.all(precommits.map((precommit) => this.messageFactory.makePrecommitFromData(precommit)));
76
+ }
77
+ async clear() {
78
+ await Promise.all([
79
+ this.proposalStorage.clearAsync(),
80
+ this.prevoteStorage.clearAsync(),
81
+ this.precommitStorage.clearAsync(),
82
+ this.stateStorage.clearAsync(),
83
+ ]);
84
+ }
85
+ };
86
+ exports.Storage = Storage;
87
+ __decorate([
88
+ (0, container_1.inject)(contracts_1.Identifiers.Database.Storage.Proposal),
89
+ __metadata("design:type", lmdb_1.Database)
90
+ ], Storage.prototype, "proposalStorage", void 0);
91
+ __decorate([
92
+ (0, container_1.inject)(contracts_1.Identifiers.Database.Storage.PreVote),
93
+ __metadata("design:type", lmdb_1.Database)
94
+ ], Storage.prototype, "prevoteStorage", void 0);
95
+ __decorate([
96
+ (0, container_1.inject)(contracts_1.Identifiers.Database.Storage.PreCommit),
97
+ __metadata("design:type", lmdb_1.Database)
98
+ ], Storage.prototype, "precommitStorage", void 0);
99
+ __decorate([
100
+ (0, container_1.inject)(contracts_1.Identifiers.Database.Storage.ConsensusState),
101
+ __metadata("design:type", lmdb_1.Database)
102
+ ], Storage.prototype, "stateStorage", void 0);
103
+ __decorate([
104
+ (0, container_1.inject)(contracts_1.Identifiers.ValidatorSet.Service),
105
+ __metadata("design:type", Object)
106
+ ], Storage.prototype, "validatorSet", void 0);
107
+ __decorate([
108
+ (0, container_1.inject)(contracts_1.Identifiers.Cryptography.Message.Factory),
109
+ __metadata("design:type", Object)
110
+ ], Storage.prototype, "messageFactory", void 0);
111
+ exports.Storage = Storage = __decorate([
112
+ (0, container_1.injectable)()
113
+ ], Storage);
114
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../source/storage.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@mainsail/consensus",
3
+ "version": "0.0.1-alpha.1",
4
+ "description": "Consensus for the Mainsail blockchain",
5
+ "license": "GPL-3.0-only",
6
+ "contributors": [],
7
+ "main": "distribution/index.js",
8
+ "types": "distribution/index.d.ts",
9
+ "files": [
10
+ "distribution"
11
+ ],
12
+ "dependencies": {
13
+ "dayjs": "1.11.10",
14
+ "delay": "5.0.0",
15
+ "lmdb": "2.9.2",
16
+ "@mainsail/container": "0.0.1-alpha.1",
17
+ "@mainsail/contracts": "0.0.1-alpha.1",
18
+ "@mainsail/kernel": "0.0.1-alpha.1",
19
+ "@mainsail/utils": "0.0.1-alpha.1"
20
+ },
21
+ "devDependencies": {
22
+ "@types/delay": "3.1.0",
23
+ "@types/seedrandom": "^3.0.8",
24
+ "rewiremock": "3.14.5",
25
+ "uvu": "^0.5.6",
26
+ "@mainsail/test-framework": "0.0.1-alpha.1"
27
+ },
28
+ "engines": {
29
+ "node": ">=20.x"
30
+ },
31
+ "scripts": {
32
+ "build": "pnpm run clean && tsc",
33
+ "build:watch": "pnpm run clean && tsc -w",
34
+ "clean": "del distribution",
35
+ "release": "pnpm publish --access public",
36
+ "test": "uvu -r tsm source .test.ts",
37
+ "test:coverage": "c8 pnpm run test",
38
+ "test:coverage:html": "c8 -r html --all pnpm run test",
39
+ "test:file": "uvu -r tsm source"
40
+ }
41
+ }