@freedomofpress/cometbft 0.1.0 → 0.1.2

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 (64) hide show
  1. package/dist/commit.d.ts +7 -0
  2. package/dist/commit.js +175 -0
  3. package/dist/commit.js.map +1 -0
  4. package/dist/encoding.d.ts +4 -0
  5. package/dist/encoding.js +31 -0
  6. package/dist/encoding.js.map +1 -0
  7. package/dist/lightclient.d.ts +17 -0
  8. package/dist/lightclient.js +275 -0
  9. package/dist/lightclient.js.map +1 -0
  10. package/dist/proto/cometbft/crypto/v1/keys.d.ts +28 -0
  11. package/dist/proto/cometbft/crypto/v1/keys.js +110 -0
  12. package/dist/proto/cometbft/crypto/v1/keys.js.map +1 -0
  13. package/dist/proto/cometbft/crypto/v1/proof.d.ts +60 -0
  14. package/dist/proto/cometbft/crypto/v1/proof.js +416 -0
  15. package/dist/proto/cometbft/crypto/v1/proof.js.map +1 -0
  16. package/dist/proto/cometbft/types/v1/canonical.d.ts +85 -0
  17. package/dist/proto/cometbft/types/v1/canonical.js +586 -0
  18. package/dist/proto/cometbft/types/v1/canonical.js.map +1 -0
  19. package/dist/proto/cometbft/types/v1/types.d.ts +206 -0
  20. package/dist/proto/cometbft/types/v1/types.js +1794 -0
  21. package/dist/proto/cometbft/types/v1/types.js.map +1 -0
  22. package/dist/proto/cometbft/types/v1/validator.d.ts +64 -0
  23. package/dist/proto/cometbft/types/v1/validator.js +382 -0
  24. package/dist/proto/cometbft/types/v1/validator.js.map +1 -0
  25. package/dist/proto/cometbft/version/v1/types.d.ts +41 -0
  26. package/dist/proto/cometbft/version/v1/types.js +154 -0
  27. package/dist/proto/cometbft/version/v1/types.js.map +1 -0
  28. package/dist/proto/gogoproto/gogo.d.ts +1 -0
  29. package/dist/proto/gogoproto/gogo.js +8 -0
  30. package/dist/proto/gogoproto/gogo.js.map +1 -0
  31. package/dist/proto/google/protobuf/descriptor.d.ts +1228 -0
  32. package/dist/proto/google/protobuf/descriptor.js +5056 -0
  33. package/dist/proto/google/protobuf/descriptor.js.map +1 -0
  34. package/dist/proto/google/protobuf/timestamp.d.ts +128 -0
  35. package/dist/proto/google/protobuf/timestamp.js +83 -0
  36. package/dist/proto/google/protobuf/timestamp.js.map +1 -0
  37. package/dist/tests/commit.test.d.ts +1 -0
  38. package/dist/tests/commit.test.js +219 -0
  39. package/dist/tests/commit.test.js.map +1 -0
  40. package/dist/tests/encoding.test.d.ts +1 -0
  41. package/dist/tests/encoding.test.js +31 -0
  42. package/dist/tests/encoding.test.js.map +1 -0
  43. package/dist/tests/fixtures/commit-12.json +64 -0
  44. package/dist/tests/fixtures/validators-12.json +41 -0
  45. package/dist/tests/fixtures/webcat.json +71 -0
  46. package/dist/tests/lightclient.test.d.ts +1 -0
  47. package/dist/tests/lightclient.test.js +234 -0
  48. package/dist/tests/lightclient.test.js.map +1 -0
  49. package/dist/tests/validators.test.d.ts +1 -0
  50. package/dist/tests/validators.test.js +184 -0
  51. package/dist/tests/validators.test.js.map +1 -0
  52. package/dist/tests/webcat.test.d.ts +1 -0
  53. package/dist/tests/webcat.test.js +52 -0
  54. package/dist/tests/webcat.test.js.map +1 -0
  55. package/dist/types.d.ts +62 -0
  56. package/dist/types.js +2 -0
  57. package/dist/types.js.map +1 -0
  58. package/dist/validators.d.ts +6 -0
  59. package/dist/validators.js +55 -0
  60. package/dist/validators.js.map +1 -0
  61. package/package.json +5 -5
  62. package/src/lightclient.ts +176 -0
  63. package/src/tests/lightclient.test.ts +20 -5
  64. package/src/tests/webcat.test.ts +17 -47
@@ -0,0 +1,7 @@
1
+ import { SignedHeader } from "./proto/cometbft/types/v1/types";
2
+ import type { CommitJson } from "./types";
3
+ /**
4
+ * Parse and validate a /commit JSON and return a ts-proto SignedHeader
5
+ * (cometbft.types.v1.SignedHeader).
6
+ */
7
+ export declare function importCommit(resp: CommitJson): SignedHeader;
package/dist/commit.js ADDED
@@ -0,0 +1,175 @@
1
+ // src/commit.ts
2
+ import { base64ToUint8Array, hexToUint8Array } from "./encoding";
3
+ // ---- helpers ----
4
+ function assertLen(name, u8, expect) {
5
+ if (u8.length !== expect) {
6
+ throw new Error(`${name} must be ${expect} bytes, got ${u8.length}`);
7
+ }
8
+ }
9
+ function parseRFC3339ToTimestamp(s) {
10
+ const d = new Date(s);
11
+ if (Number.isNaN(d.getTime()))
12
+ throw new Error(`Invalid RFC3339 time: ${s}`);
13
+ // extract fractional seconds (up to 9 digits for nanos)
14
+ const fracMatch = s.match(/\.(\d+)Z$/i);
15
+ const frac = fracMatch ? fracMatch[1] : "";
16
+ const n = Math.min(frac.length, 9);
17
+ const nanos = n === 0 ? 0 : Number((frac + "0".repeat(9 - n)).slice(0, 9));
18
+ const seconds = BigInt(Math.floor(d.getTime() / 1000));
19
+ return { seconds, nanos };
20
+ }
21
+ /**
22
+ * Parse and validate a /commit JSON and return a ts-proto SignedHeader
23
+ * (cometbft.types.v1.SignedHeader).
24
+ */
25
+ export function importCommit(resp) {
26
+ const sh = resp.signed_header;
27
+ if (!sh)
28
+ throw new Error("Missing signed_header");
29
+ const h = sh.header;
30
+ const c = sh.commit;
31
+ if (!h)
32
+ throw new Error("Missing header");
33
+ if (!c)
34
+ throw new Error("Missing commit");
35
+ // Heights
36
+ if (!h.height)
37
+ throw new Error("Missing header.height");
38
+ if (c.height == null || c.height === "")
39
+ throw new Error("Missing commit.height");
40
+ const headerHeight = BigInt(h.height);
41
+ const commitHeight = BigInt(c.height);
42
+ if (headerHeight !== commitHeight) {
43
+ throw new Error(`height mismatch header=${h.height} commit=${c.height}`);
44
+ }
45
+ // Round
46
+ if (typeof c.round !== "number" ||
47
+ c.round < 0 ||
48
+ !Number.isInteger(c.round)) {
49
+ throw new Error("Invalid commit.round");
50
+ }
51
+ // version (optional)
52
+ const version = {
53
+ block: h.version?.block ? BigInt(h.version.block) : 0n,
54
+ app: h.version?.app ? BigInt(h.version.app) : 0n,
55
+ };
56
+ // last_block_id
57
+ if (!h.last_block_id || !h.last_block_id.hash || !h.last_block_id.parts) {
58
+ throw new Error("Invalid last_block_id");
59
+ }
60
+ const lastBlockIdHash = hexToUint8Array(h.last_block_id.hash);
61
+ assertLen("last_block_id.hash", lastBlockIdHash, 32);
62
+ const lastBlockPartsHash = hexToUint8Array(h.last_block_id.parts.hash);
63
+ assertLen("last_block_id.parts.hash", lastBlockPartsHash, 32);
64
+ const lastBlockId = {
65
+ hash: lastBlockIdHash,
66
+ partSetHeader: {
67
+ total: Number(h.last_block_id.parts.total),
68
+ hash: lastBlockPartsHash,
69
+ },
70
+ };
71
+ if (!lastBlockId.partSetHeader ||
72
+ !lastBlockId.partSetHeader.total ||
73
+ !Number.isInteger(lastBlockId.partSetHeader.total) ||
74
+ lastBlockId.partSetHeader.total < 0) {
75
+ throw new Error("Invalid last_block_id.parts.total");
76
+ }
77
+ // Hash fields (32 bytes unless app hash, which is app-defined length)
78
+ const lastCommitHash = hexToUint8Array(h.last_commit_hash);
79
+ assertLen("last_commit_hash", lastCommitHash, 32);
80
+ const dataHash = hexToUint8Array(h.data_hash);
81
+ assertLen("data_hash", dataHash, 32);
82
+ const validatorsHash = hexToUint8Array(h.validators_hash);
83
+ assertLen("validators_hash", validatorsHash, 32);
84
+ const nextValidatorsHash = hexToUint8Array(h.next_validators_hash);
85
+ assertLen("next_validators_hash", nextValidatorsHash, 32);
86
+ const consensusHash = hexToUint8Array(h.consensus_hash);
87
+ assertLen("consensus_hash", consensusHash, 32);
88
+ const appHash = hexToUint8Array(h.app_hash); // variable length accepted
89
+ const lastResultsHash = hexToUint8Array(h.last_results_hash);
90
+ assertLen("last_results_hash", lastResultsHash, 32);
91
+ const evidenceHash = hexToUint8Array(h.evidence_hash);
92
+ assertLen("evidence_hash", evidenceHash, 32);
93
+ // proposer_address (20 bytes)
94
+ if (!h.proposer_address)
95
+ throw new Error("Missing proposer_address");
96
+ const proposerAddress = hexToUint8Array(h.proposer_address);
97
+ assertLen("proposer_address", proposerAddress, 20);
98
+ // time
99
+ if (!h.time)
100
+ throw new Error("Missing header.time");
101
+ const time = parseRFC3339ToTimestamp(h.time);
102
+ // Commit BlockID
103
+ if (!c.block_id || !c.block_id.hash || !c.block_id.parts) {
104
+ throw new Error("Invalid commit.block_id");
105
+ }
106
+ const commitBlockHash = hexToUint8Array(c.block_id.hash);
107
+ assertLen("commit.block_id.hash", commitBlockHash, 32);
108
+ const commitPartsHash = hexToUint8Array(c.block_id.parts.hash);
109
+ assertLen("commit.block_id.parts.hash", commitPartsHash, 32);
110
+ const commitBlockId = {
111
+ hash: commitBlockHash,
112
+ partSetHeader: {
113
+ total: Number(c.block_id.parts.total),
114
+ hash: commitPartsHash,
115
+ },
116
+ };
117
+ if (!commitBlockId ||
118
+ !commitBlockId.partSetHeader ||
119
+ !Number.isInteger(commitBlockId.partSetHeader.total) ||
120
+ commitBlockId.partSetHeader.total < 0) {
121
+ throw new Error("Invalid commit.block_id.parts.total");
122
+ }
123
+ // Signatures
124
+ if (!Array.isArray(c.signatures) || c.signatures.length === 0) {
125
+ throw new Error("Commit has no signatures");
126
+ }
127
+ const signatures = c.signatures.map((s, i) => {
128
+ if (typeof s.block_id_flag !== "number") {
129
+ throw new Error(`signatures[${i}].block_id_flag must be a number`);
130
+ }
131
+ if (!s.validator_address) {
132
+ throw new Error(`signatures[${i}].validator_address missing`);
133
+ }
134
+ const validatorAddress = hexToUint8Array(s.validator_address);
135
+ assertLen(`signatures[${i}].validator_address`, validatorAddress, 20);
136
+ // bytes fields in proto3 are NOT optional -> use empty Uint8Array when absent
137
+ const sigBytes = s.signature
138
+ ? base64ToUint8Array(s.signature)
139
+ : new Uint8Array(0);
140
+ if (sigBytes.length !== 0) {
141
+ assertLen(`signatures[${i}].signature`, sigBytes, 64); // Ed25519
142
+ }
143
+ const ts = s.timestamp ? parseRFC3339ToTimestamp(s.timestamp) : undefined;
144
+ return {
145
+ blockIdFlag: s.block_id_flag,
146
+ validatorAddress,
147
+ timestamp: ts, // PbTimestamp | undefined (useDate=false)
148
+ signature: sigBytes, // always Uint8Array (maybe length 0)
149
+ };
150
+ });
151
+ const header = {
152
+ version,
153
+ chainId: h.chain_id,
154
+ height: headerHeight,
155
+ time,
156
+ lastBlockId,
157
+ lastCommitHash,
158
+ dataHash,
159
+ validatorsHash,
160
+ nextValidatorsHash,
161
+ consensusHash,
162
+ appHash,
163
+ lastResultsHash,
164
+ evidenceHash,
165
+ proposerAddress,
166
+ };
167
+ const commit = {
168
+ height: headerHeight,
169
+ round: c.round,
170
+ blockId: commitBlockId,
171
+ signatures,
172
+ };
173
+ return { header, commit };
174
+ }
175
+ //# sourceMappingURL=commit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit.js","sourceRoot":"","sources":["../src/commit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function Uint8ArrayToBase64(data: Uint8Array | ArrayBuffer): string;
2
+ export declare function hexToUint8Array(hex: string): Uint8Array;
3
+ export declare function Uint8ArrayToHex(uint8Array: Uint8Array): string;
4
+ export declare function base64ToUint8Array(base64: string): Uint8Array;
@@ -0,0 +1,31 @@
1
+ export function Uint8ArrayToBase64(data) {
2
+ const uint8 = data instanceof Uint8Array ? data : new Uint8Array(data);
3
+ const binary = String.fromCharCode(...uint8);
4
+ return btoa(binary);
5
+ }
6
+ export function hexToUint8Array(hex) {
7
+ if (!/^[0-9a-fA-F]*$/.test(hex)) {
8
+ throw new Error("Hex string contains invalid characters");
9
+ }
10
+ if (hex.length % 2 !== 0) {
11
+ throw new Error("Hex string must have an even length");
12
+ }
13
+ const uint8Array = new Uint8Array(hex.length / 2);
14
+ for (let i = 0; i < uint8Array.length; i++) {
15
+ uint8Array[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
16
+ }
17
+ return uint8Array;
18
+ }
19
+ export function Uint8ArrayToHex(uint8Array) {
20
+ return [...uint8Array].map((b) => b.toString(16).padStart(2, "0")).join("");
21
+ }
22
+ export function base64ToUint8Array(base64) {
23
+ const binaryString = atob(base64);
24
+ const length = binaryString.length;
25
+ const bytes = new Uint8Array(length);
26
+ for (let i = 0; i < length; i++) {
27
+ bytes[i] = binaryString.charCodeAt(i); // Convert binary string to byte array
28
+ }
29
+ return new Uint8Array(bytes);
30
+ }
31
+ //# sourceMappingURL=encoding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoding.js","sourceRoot":"","sources":["../src/encoding.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAAC,IAA8B;IAC/D,MAAM,KAAK,GAAG,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAsB;IACpD,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,sCAAsC;IAC/E,CAAC;IAED,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { SignedHeader } from "./proto/cometbft/types/v1/types";
2
+ import { ValidatorSet as ProtoValidatorSet } from "./proto/cometbft/types/v1/validator";
3
+ import { Timestamp as PbTimestamp } from "./proto/google/protobuf/timestamp";
4
+ export type CryptoIndex = Map<string, CryptoKey>;
5
+ export interface VerifyOutcome {
6
+ ok: boolean;
7
+ quorum: boolean;
8
+ signedPower: bigint;
9
+ totalPower: bigint;
10
+ headerTime?: PbTimestamp;
11
+ appHash: Uint8Array;
12
+ blockIdHash: Uint8Array;
13
+ unknownValidators: string[];
14
+ invalidSignatures: string[];
15
+ countedSignatures: number;
16
+ }
17
+ export declare function verifyCommit(sh: SignedHeader, vset: ProtoValidatorSet, cryptoIndex: CryptoIndex): Promise<VerifyOutcome>;
@@ -0,0 +1,275 @@
1
+ // src/lightclient.ts
2
+ import { Uint8ArrayToHex } from "./encoding";
3
+ import { CanonicalVote, } from "./proto/cometbft/types/v1/canonical";
4
+ import { SignedMsgType } from "./proto/cometbft/types/v1/types";
5
+ const LEAF_PREFIX = new Uint8Array([0]);
6
+ const INNER_PREFIX = new Uint8Array([1]);
7
+ function concatBytes(...parts) {
8
+ const totalLen = parts.reduce((acc, p) => acc + p.length, 0);
9
+ const out = new Uint8Array(totalLen);
10
+ let offset = 0;
11
+ for (const p of parts) {
12
+ out.set(p, offset);
13
+ offset += p.length;
14
+ }
15
+ return out;
16
+ }
17
+ async function sha256(input) {
18
+ const digest = await crypto.subtle.digest("SHA-256", new Uint8Array(input));
19
+ return new Uint8Array(digest);
20
+ }
21
+ function encodeVarint(value) {
22
+ if (value < 0n)
23
+ throw new Error("encodeVarint expects a non-negative bigint");
24
+ const bytes = [];
25
+ let v = value;
26
+ while (v >= 0x80n) {
27
+ bytes.push(Number((v & 0x7fn) | 0x80n));
28
+ v >>= 7n;
29
+ }
30
+ bytes.push(Number(v));
31
+ return new Uint8Array(bytes);
32
+ }
33
+ function encodeFieldTag(fieldNumber, wireType) {
34
+ return encodeVarint(BigInt((fieldNumber << 3) | wireType));
35
+ }
36
+ function encodeProtoBytes(fieldNumber, value) {
37
+ return concatBytes(encodeFieldTag(fieldNumber, 2), encodeVarint(BigInt(value.length)), value);
38
+ }
39
+ function encodeProtoUint64(fieldNumber, value) {
40
+ return concatBytes(encodeFieldTag(fieldNumber, 0), encodeVarint(value));
41
+ }
42
+ function encodeProtoInt64(fieldNumber, value) {
43
+ const v = value < 0n ? (1n << 64n) + value : value;
44
+ return concatBytes(encodeFieldTag(fieldNumber, 0), encodeVarint(v));
45
+ }
46
+ function cdcEncodeString(value) {
47
+ if (value.length === 0)
48
+ return undefined;
49
+ return encodeProtoBytes(1, new TextEncoder().encode(value));
50
+ }
51
+ function cdcEncodeInt64(value) {
52
+ return encodeProtoInt64(1, value);
53
+ }
54
+ function cdcEncodeBytes(value) {
55
+ if (value.length === 0)
56
+ return undefined;
57
+ return encodeProtoBytes(1, value);
58
+ }
59
+ function encodeTimestamp(ts) {
60
+ const seconds = encodeProtoInt64(1, ts.seconds ?? 0n);
61
+ const nanos = ts.nanos
62
+ ? concatBytes(encodeFieldTag(2, 0), encodeVarint(BigInt(ts.nanos)))
63
+ : new Uint8Array(0);
64
+ return concatBytes(seconds, nanos);
65
+ }
66
+ function encodePartSetHeader(total, hash) {
67
+ return concatBytes(encodeProtoUint64(1, BigInt(total)), encodeProtoBytes(2, hash));
68
+ }
69
+ function encodeBlockId(hash, partSetTotal, partSetHash) {
70
+ const psh = encodePartSetHeader(partSetTotal, partSetHash);
71
+ return concatBytes(encodeProtoBytes(1, hash), encodeProtoBytes(2, psh));
72
+ }
73
+ async function merkleLeafHash(leaf) {
74
+ return sha256(concatBytes(LEAF_PREFIX, leaf));
75
+ }
76
+ async function merkleInnerHash(left, right) {
77
+ return sha256(concatBytes(INNER_PREFIX, left, right));
78
+ }
79
+ function merkleSplitPoint(length) {
80
+ if (length < 1)
81
+ throw new Error("Trying to split a tree with size < 1");
82
+ const bitLen = Math.floor(Math.log2(length)) + 1;
83
+ let k = 1 << (bitLen - 1);
84
+ if (k === length)
85
+ k >>= 1;
86
+ return k;
87
+ }
88
+ async function merkleHashFromByteSlices(items) {
89
+ if (items.length === 0)
90
+ return sha256(new Uint8Array(0));
91
+ if (items.length === 1)
92
+ return merkleLeafHash(items[0]);
93
+ const k = merkleSplitPoint(items.length);
94
+ const left = await merkleHashFromByteSlices(items.slice(0, k));
95
+ const right = await merkleHashFromByteSlices(items.slice(k));
96
+ return merkleInnerHash(left, right);
97
+ }
98
+ async function computeHeaderHash(header) {
99
+ if (!header)
100
+ throw new Error("SignedHeader missing header");
101
+ if (!header.lastBlockId || !header.lastBlockId.partSetHeader) {
102
+ throw new Error("Header lastBlockId is missing");
103
+ }
104
+ if (!header.time)
105
+ throw new Error("Header time is missing");
106
+ const version = concatBytes(encodeProtoUint64(1, header.version?.block ?? 0n), encodeProtoUint64(2, header.version?.app ?? 0n));
107
+ const lastBlockId = encodeBlockId(header.lastBlockId.hash, header.lastBlockId.partSetHeader.total, header.lastBlockId.partSetHeader.hash);
108
+ const fields = [
109
+ version,
110
+ cdcEncodeString(header.chainId),
111
+ cdcEncodeInt64(header.height),
112
+ encodeTimestamp(header.time),
113
+ lastBlockId,
114
+ cdcEncodeBytes(header.lastCommitHash),
115
+ cdcEncodeBytes(header.dataHash),
116
+ cdcEncodeBytes(header.validatorsHash),
117
+ cdcEncodeBytes(header.nextValidatorsHash),
118
+ cdcEncodeBytes(header.consensusHash),
119
+ cdcEncodeBytes(header.appHash),
120
+ cdcEncodeBytes(header.lastResultsHash),
121
+ cdcEncodeBytes(header.evidenceHash),
122
+ cdcEncodeBytes(header.proposerAddress),
123
+ ].filter((x) => Boolean(x));
124
+ return merkleHashFromByteSlices(fields);
125
+ }
126
+ function bytesEqual(a, b) {
127
+ if (a.length !== b.length)
128
+ return false;
129
+ for (let i = 0; i < a.length; i++) {
130
+ if (a[i] !== b[i])
131
+ return false;
132
+ }
133
+ return true;
134
+ }
135
+ function encodeUvarint(value) {
136
+ if (!Number.isSafeInteger(value) || value < 0)
137
+ throw new Error("encodeUvarint expects a non-negative safe integer");
138
+ const bytes = [];
139
+ let v = value;
140
+ while (v >= 0x80) {
141
+ bytes.push((v & 0x7f) | 0x80);
142
+ v >>>= 7;
143
+ }
144
+ bytes.push(v);
145
+ return new Uint8Array(bytes);
146
+ }
147
+ function makePrecommitSignBytesProto(chainId, height, round, blockIdHash, partsTotal, partsHash, timestamp) {
148
+ const psh = { total: partsTotal, hash: partsHash };
149
+ const bid = { hash: blockIdHash, partSetHeader: psh };
150
+ const vote = {
151
+ type: SignedMsgType.SIGNED_MSG_TYPE_PRECOMMIT,
152
+ height, // fixed64
153
+ round, // fixed64 (encoder omits 0)
154
+ blockId: bid,
155
+ timestamp, // omitted if undefined
156
+ chainId,
157
+ };
158
+ const body = CanonicalVote.encode(vote).finish();
159
+ // Go's protoio.MarshalDelimited length-prefixes the canonical vote. Using
160
+ // the same varint prefix keeps signatures compatible with both v0.34.x and
161
+ // v1.0.x chains.
162
+ const prefix = encodeUvarint(body.length);
163
+ const out = new Uint8Array(prefix.length + body.length);
164
+ out.set(prefix, 0);
165
+ out.set(body, prefix.length);
166
+ return out;
167
+ }
168
+ function hasTwoThirds(signed, total) {
169
+ return signed * 3n > total * 2n;
170
+ }
171
+ export async function verifyCommit(sh, vset, cryptoIndex) {
172
+ if (!sh?.header || !sh?.commit) {
173
+ throw new Error("SignedHeader missing header/commit");
174
+ }
175
+ const header = sh.header;
176
+ const commit = sh.commit;
177
+ if (header.height !== commit.height) {
178
+ throw new Error(`Header/commit height mismatch: ${header.height} vs ${commit.height}`);
179
+ }
180
+ const totalPower = vset?.totalVotingPower ?? 0n;
181
+ if (!Array.isArray(vset?.validators) || vset.validators.length === 0) {
182
+ throw new Error("ValidatorSet has no validators");
183
+ }
184
+ if (totalPower <= 0n) {
185
+ throw new Error("ValidatorSet total power must be positive");
186
+ }
187
+ // Build address -> validator map
188
+ const setByAddrHex = new Map();
189
+ for (const v of vset.validators) {
190
+ const hex = Uint8ArrayToHex(v.address).toUpperCase();
191
+ if (setByAddrHex.has(hex))
192
+ throw new Error(`Duplicate validator address in set: ${hex}`);
193
+ setByAddrHex.set(hex, v);
194
+ }
195
+ if (!commit.blockId)
196
+ throw new Error("Commit missing BlockID");
197
+ const bid = commit.blockId;
198
+ if (!bid.hash || bid.hash.length === 0)
199
+ throw new Error("Commit BlockID hash is missing");
200
+ if (!bid.partSetHeader)
201
+ throw new Error("Commit PartSetHeader is missing");
202
+ if (!bid.partSetHeader.hash || bid.partSetHeader.hash.length === 0) {
203
+ throw new Error("Commit PartSetHeader hash is missing");
204
+ }
205
+ if (!Number.isInteger(bid.partSetHeader.total) ||
206
+ bid.partSetHeader.total < 0) {
207
+ throw new Error("Commit PartSetHeader total is invalid");
208
+ }
209
+ const chainId = header.chainId;
210
+ const heightBig = header.height;
211
+ const roundBig = BigInt(commit.round);
212
+ const blockIdHash = bid.hash;
213
+ const partsHash = bid.partSetHeader.hash;
214
+ const partsTotal = bid.partSetHeader.total;
215
+ const expectedBlockHash = await computeHeaderHash(header);
216
+ if (!bytesEqual(expectedBlockHash, blockIdHash)) {
217
+ throw new Error("Header hash does not match commit BlockID hash (header fields were tampered or inconsistent)");
218
+ }
219
+ let signedPower = 0n;
220
+ const unknown = [];
221
+ const invalid = [];
222
+ let counted = 0;
223
+ for (let idx = 0; idx < commit.signatures.length; idx++) {
224
+ const s = commit.signatures[idx];
225
+ // Only COMMIT votes (BLOCK_ID_FLAG_COMMIT == 2)
226
+ if (s.blockIdFlag !== 2)
227
+ continue;
228
+ const addrHex = Uint8ArrayToHex(s.validatorAddress).toUpperCase();
229
+ const v = setByAddrHex.get(addrHex);
230
+ if (!v) {
231
+ unknown.push(addrHex);
232
+ continue;
233
+ }
234
+ if (!s.signature || s.signature.length === 0) {
235
+ invalid.push(addrHex);
236
+ continue;
237
+ }
238
+ // Count this COMMIT vote (known validator + non-empty signature)
239
+ counted++;
240
+ // Canonical sign-bytes
241
+ const signBytes = makePrecommitSignBytesProto(chainId, heightBig, roundBig, blockIdHash, partsTotal, partsHash, s.timestamp);
242
+ const key = cryptoIndex.get(addrHex);
243
+ if (!key) {
244
+ invalid.push(addrHex);
245
+ continue;
246
+ }
247
+ // Verify signature
248
+ let ok = false;
249
+ try {
250
+ ok = await crypto.subtle.verify({ name: "Ed25519" }, key, new Uint8Array(s.signature), new Uint8Array(signBytes));
251
+ }
252
+ catch {
253
+ ok = false;
254
+ }
255
+ if (!ok) {
256
+ invalid.push(addrHex);
257
+ continue;
258
+ }
259
+ signedPower += v.votingPower ?? 0n;
260
+ }
261
+ const quorum = hasTwoThirds(signedPower, totalPower);
262
+ return {
263
+ ok: quorum,
264
+ quorum,
265
+ signedPower,
266
+ totalPower,
267
+ headerTime: header.time,
268
+ appHash: header.appHash,
269
+ blockIdHash,
270
+ unknownValidators: unknown,
271
+ invalidSignatures: invalid,
272
+ countedSignatures: counted,
273
+ };
274
+ }
275
+ //# sourceMappingURL=lightclient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightclient.js","sourceRoot":"","sources":["../src/lightclient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
2
+ export declare const protobufPackage = "cometbft.crypto.v1";
3
+ /** PublicKey is a ED25519 or a secp256k1 public key. */
4
+ export interface PublicKey {
5
+ ed25519?: Uint8Array | undefined;
6
+ secp256k1?: Uint8Array | undefined;
7
+ bls12381?: Uint8Array | undefined;
8
+ }
9
+ export declare const PublicKey: MessageFns<PublicKey>;
10
+ type Builtin = Date | Function | Uint8Array | string | number | boolean | bigint | undefined;
11
+ export type DeepPartial<T> = T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
12
+ [K in keyof T]?: DeepPartial<T[K]>;
13
+ } : Partial<T>;
14
+ type KeysOfUnion<T> = T extends T ? keyof T : never;
15
+ export type Exact<P, I extends P> = P extends Builtin ? P : P & {
16
+ [K in keyof P]: Exact<P[K], I[K]>;
17
+ } & {
18
+ [K in Exclude<keyof I, KeysOfUnion<P>>]: never;
19
+ };
20
+ export interface MessageFns<T> {
21
+ encode(message: T, writer?: BinaryWriter): BinaryWriter;
22
+ decode(input: BinaryReader | Uint8Array, length?: number): T;
23
+ fromJSON(object: any): T;
24
+ toJSON(message: T): unknown;
25
+ create<I extends Exact<DeepPartial<T>, I>>(base?: I): T;
26
+ fromPartial<I extends Exact<DeepPartial<T>, I>>(object: I): T;
27
+ }
28
+ export {};