@freedomofpress/cometbft 0.1.0 → 0.1.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.
- package/dist/commit.d.ts +7 -0
- package/dist/commit.js +175 -0
- package/dist/commit.js.map +1 -0
- package/dist/encoding.d.ts +4 -0
- package/dist/encoding.js +31 -0
- package/dist/encoding.js.map +1 -0
- package/dist/lightclient.d.ts +17 -0
- package/dist/lightclient.js +141 -0
- package/dist/lightclient.js.map +1 -0
- package/dist/proto/cometbft/crypto/v1/keys.d.ts +28 -0
- package/dist/proto/cometbft/crypto/v1/keys.js +110 -0
- package/dist/proto/cometbft/crypto/v1/keys.js.map +1 -0
- package/dist/proto/cometbft/crypto/v1/proof.d.ts +60 -0
- package/dist/proto/cometbft/crypto/v1/proof.js +416 -0
- package/dist/proto/cometbft/crypto/v1/proof.js.map +1 -0
- package/dist/proto/cometbft/types/v1/canonical.d.ts +85 -0
- package/dist/proto/cometbft/types/v1/canonical.js +586 -0
- package/dist/proto/cometbft/types/v1/canonical.js.map +1 -0
- package/dist/proto/cometbft/types/v1/types.d.ts +206 -0
- package/dist/proto/cometbft/types/v1/types.js +1794 -0
- package/dist/proto/cometbft/types/v1/types.js.map +1 -0
- package/dist/proto/cometbft/types/v1/validator.d.ts +64 -0
- package/dist/proto/cometbft/types/v1/validator.js +382 -0
- package/dist/proto/cometbft/types/v1/validator.js.map +1 -0
- package/dist/proto/cometbft/version/v1/types.d.ts +41 -0
- package/dist/proto/cometbft/version/v1/types.js +154 -0
- package/dist/proto/cometbft/version/v1/types.js.map +1 -0
- package/dist/proto/gogoproto/gogo.d.ts +1 -0
- package/dist/proto/gogoproto/gogo.js +8 -0
- package/dist/proto/gogoproto/gogo.js.map +1 -0
- package/dist/proto/google/protobuf/descriptor.d.ts +1228 -0
- package/dist/proto/google/protobuf/descriptor.js +5056 -0
- package/dist/proto/google/protobuf/descriptor.js.map +1 -0
- package/dist/proto/google/protobuf/timestamp.d.ts +128 -0
- package/dist/proto/google/protobuf/timestamp.js +83 -0
- package/dist/proto/google/protobuf/timestamp.js.map +1 -0
- package/dist/tests/commit.test.d.ts +1 -0
- package/dist/tests/commit.test.js +219 -0
- package/dist/tests/commit.test.js.map +1 -0
- package/dist/tests/encoding.test.d.ts +1 -0
- package/dist/tests/encoding.test.js +31 -0
- package/dist/tests/encoding.test.js.map +1 -0
- package/dist/tests/fixtures/commit-12.json +64 -0
- package/dist/tests/fixtures/validators-12.json +41 -0
- package/dist/tests/fixtures/webcat.json +71 -0
- package/dist/tests/lightclient.test.d.ts +1 -0
- package/dist/tests/lightclient.test.js +227 -0
- package/dist/tests/lightclient.test.js.map +1 -0
- package/dist/tests/validators.test.d.ts +1 -0
- package/dist/tests/validators.test.js +184 -0
- package/dist/tests/validators.test.js.map +1 -0
- package/dist/tests/webcat.test.d.ts +1 -0
- package/dist/tests/webcat.test.js +86 -0
- package/dist/tests/webcat.test.js.map +1 -0
- package/dist/types.d.ts +62 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/validators.d.ts +6 -0
- package/dist/validators.js +55 -0
- package/dist/validators.js.map +1 -0
- package/package.json +1 -1
package/dist/commit.d.ts
ADDED
|
@@ -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;
|
package/dist/encoding.js
ADDED
|
@@ -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,141 @@
|
|
|
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
|
+
function encodeUvarint(value) {
|
|
6
|
+
if (!Number.isSafeInteger(value) || value < 0)
|
|
7
|
+
throw new Error("encodeUvarint expects a non-negative safe integer");
|
|
8
|
+
const bytes = [];
|
|
9
|
+
let v = value;
|
|
10
|
+
while (v >= 0x80) {
|
|
11
|
+
bytes.push((v & 0x7f) | 0x80);
|
|
12
|
+
v >>>= 7;
|
|
13
|
+
}
|
|
14
|
+
bytes.push(v);
|
|
15
|
+
return new Uint8Array(bytes);
|
|
16
|
+
}
|
|
17
|
+
function makePrecommitSignBytesProto(chainId, height, round, blockIdHash, partsTotal, partsHash, timestamp) {
|
|
18
|
+
const psh = { total: partsTotal, hash: partsHash };
|
|
19
|
+
const bid = { hash: blockIdHash, partSetHeader: psh };
|
|
20
|
+
const vote = {
|
|
21
|
+
type: SignedMsgType.SIGNED_MSG_TYPE_PRECOMMIT,
|
|
22
|
+
height, // fixed64
|
|
23
|
+
round, // fixed64 (encoder omits 0)
|
|
24
|
+
blockId: bid,
|
|
25
|
+
timestamp, // omitted if undefined
|
|
26
|
+
chainId,
|
|
27
|
+
};
|
|
28
|
+
const body = CanonicalVote.encode(vote).finish();
|
|
29
|
+
// Go's protoio.MarshalDelimited length-prefixes the canonical vote. Using
|
|
30
|
+
// the same varint prefix keeps signatures compatible with both v0.34.x and
|
|
31
|
+
// v1.0.x chains.
|
|
32
|
+
const prefix = encodeUvarint(body.length);
|
|
33
|
+
const out = new Uint8Array(prefix.length + body.length);
|
|
34
|
+
out.set(prefix, 0);
|
|
35
|
+
out.set(body, prefix.length);
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
function hasTwoThirds(signed, total) {
|
|
39
|
+
return signed * 3n > total * 2n;
|
|
40
|
+
}
|
|
41
|
+
export async function verifyCommit(sh, vset, cryptoIndex) {
|
|
42
|
+
if (!sh?.header || !sh?.commit) {
|
|
43
|
+
throw new Error("SignedHeader missing header/commit");
|
|
44
|
+
}
|
|
45
|
+
const header = sh.header;
|
|
46
|
+
const commit = sh.commit;
|
|
47
|
+
if (header.height !== commit.height) {
|
|
48
|
+
throw new Error(`Header/commit height mismatch: ${header.height} vs ${commit.height}`);
|
|
49
|
+
}
|
|
50
|
+
const totalPower = vset?.totalVotingPower ?? 0n;
|
|
51
|
+
if (!Array.isArray(vset?.validators) || vset.validators.length === 0) {
|
|
52
|
+
throw new Error("ValidatorSet has no validators");
|
|
53
|
+
}
|
|
54
|
+
if (totalPower <= 0n) {
|
|
55
|
+
throw new Error("ValidatorSet total power must be positive");
|
|
56
|
+
}
|
|
57
|
+
// Build address -> validator map
|
|
58
|
+
const setByAddrHex = new Map();
|
|
59
|
+
for (const v of vset.validators) {
|
|
60
|
+
const hex = Uint8ArrayToHex(v.address).toUpperCase();
|
|
61
|
+
if (setByAddrHex.has(hex))
|
|
62
|
+
throw new Error(`Duplicate validator address in set: ${hex}`);
|
|
63
|
+
setByAddrHex.set(hex, v);
|
|
64
|
+
}
|
|
65
|
+
if (!commit.blockId)
|
|
66
|
+
throw new Error("Commit missing BlockID");
|
|
67
|
+
const bid = commit.blockId;
|
|
68
|
+
if (!bid.hash || bid.hash.length === 0)
|
|
69
|
+
throw new Error("Commit BlockID hash is missing");
|
|
70
|
+
if (!bid.partSetHeader)
|
|
71
|
+
throw new Error("Commit PartSetHeader is missing");
|
|
72
|
+
if (!bid.partSetHeader.hash || bid.partSetHeader.hash.length === 0) {
|
|
73
|
+
throw new Error("Commit PartSetHeader hash is missing");
|
|
74
|
+
}
|
|
75
|
+
if (!Number.isInteger(bid.partSetHeader.total) ||
|
|
76
|
+
bid.partSetHeader.total < 0) {
|
|
77
|
+
throw new Error("Commit PartSetHeader total is invalid");
|
|
78
|
+
}
|
|
79
|
+
const chainId = header.chainId;
|
|
80
|
+
const heightBig = header.height;
|
|
81
|
+
const roundBig = BigInt(commit.round);
|
|
82
|
+
const blockIdHash = bid.hash;
|
|
83
|
+
const partsHash = bid.partSetHeader.hash;
|
|
84
|
+
const partsTotal = bid.partSetHeader.total;
|
|
85
|
+
let signedPower = 0n;
|
|
86
|
+
const unknown = [];
|
|
87
|
+
const invalid = [];
|
|
88
|
+
let counted = 0;
|
|
89
|
+
for (let idx = 0; idx < commit.signatures.length; idx++) {
|
|
90
|
+
const s = commit.signatures[idx];
|
|
91
|
+
// Only COMMIT votes (BLOCK_ID_FLAG_COMMIT == 2)
|
|
92
|
+
if (s.blockIdFlag !== 2)
|
|
93
|
+
continue;
|
|
94
|
+
const addrHex = Uint8ArrayToHex(s.validatorAddress).toUpperCase();
|
|
95
|
+
const v = setByAddrHex.get(addrHex);
|
|
96
|
+
if (!v) {
|
|
97
|
+
unknown.push(addrHex);
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (!s.signature || s.signature.length === 0) {
|
|
101
|
+
invalid.push(addrHex);
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
// Count this COMMIT vote (known validator + non-empty signature)
|
|
105
|
+
counted++;
|
|
106
|
+
// Canonical sign-bytes
|
|
107
|
+
const signBytes = makePrecommitSignBytesProto(chainId, heightBig, roundBig, blockIdHash, partsTotal, partsHash, s.timestamp);
|
|
108
|
+
const key = cryptoIndex.get(addrHex);
|
|
109
|
+
if (!key) {
|
|
110
|
+
invalid.push(addrHex);
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
// Verify signature
|
|
114
|
+
let ok = false;
|
|
115
|
+
try {
|
|
116
|
+
ok = await crypto.subtle.verify({ name: "Ed25519" }, key, new Uint8Array(s.signature), new Uint8Array(signBytes));
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
ok = false;
|
|
120
|
+
}
|
|
121
|
+
if (!ok) {
|
|
122
|
+
invalid.push(addrHex);
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
signedPower += v.votingPower ?? 0n;
|
|
126
|
+
}
|
|
127
|
+
const quorum = hasTwoThirds(signedPower, totalPower);
|
|
128
|
+
return {
|
|
129
|
+
ok: quorum,
|
|
130
|
+
quorum,
|
|
131
|
+
signedPower,
|
|
132
|
+
totalPower,
|
|
133
|
+
headerTime: header.time,
|
|
134
|
+
appHash: header.appHash,
|
|
135
|
+
blockIdHash,
|
|
136
|
+
unknownValidators: unknown,
|
|
137
|
+
invalidSignatures: invalid,
|
|
138
|
+
countedSignatures: counted,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
//# 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 {};
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
|
2
|
+
// versions:
|
|
3
|
+
// protoc-gen-ts_proto v2.6.1
|
|
4
|
+
// protoc unknown
|
|
5
|
+
// source: cometbft/crypto/v1/keys.proto
|
|
6
|
+
/* eslint-disable */
|
|
7
|
+
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
|
|
8
|
+
export const protobufPackage = "cometbft.crypto.v1";
|
|
9
|
+
function createBasePublicKey() {
|
|
10
|
+
return { ed25519: undefined, secp256k1: undefined, bls12381: undefined };
|
|
11
|
+
}
|
|
12
|
+
export const PublicKey = {
|
|
13
|
+
encode(message, writer = new BinaryWriter()) {
|
|
14
|
+
if (message.ed25519 !== undefined) {
|
|
15
|
+
writer.uint32(10).bytes(message.ed25519);
|
|
16
|
+
}
|
|
17
|
+
if (message.secp256k1 !== undefined) {
|
|
18
|
+
writer.uint32(18).bytes(message.secp256k1);
|
|
19
|
+
}
|
|
20
|
+
if (message.bls12381 !== undefined) {
|
|
21
|
+
writer.uint32(26).bytes(message.bls12381);
|
|
22
|
+
}
|
|
23
|
+
return writer;
|
|
24
|
+
},
|
|
25
|
+
decode(input, length) {
|
|
26
|
+
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
|
|
27
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
28
|
+
const message = createBasePublicKey();
|
|
29
|
+
while (reader.pos < end) {
|
|
30
|
+
const tag = reader.uint32();
|
|
31
|
+
switch (tag >>> 3) {
|
|
32
|
+
case 1: {
|
|
33
|
+
if (tag !== 10) {
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
message.ed25519 = reader.bytes();
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
case 2: {
|
|
40
|
+
if (tag !== 18) {
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
message.secp256k1 = reader.bytes();
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
case 3: {
|
|
47
|
+
if (tag !== 26) {
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
message.bls12381 = reader.bytes();
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
reader.skip(tag & 7);
|
|
58
|
+
}
|
|
59
|
+
return message;
|
|
60
|
+
},
|
|
61
|
+
fromJSON(object) {
|
|
62
|
+
return {
|
|
63
|
+
ed25519: isSet(object.ed25519) ? bytesFromBase64(object.ed25519) : undefined,
|
|
64
|
+
secp256k1: isSet(object.secp256k1) ? bytesFromBase64(object.secp256k1) : undefined,
|
|
65
|
+
bls12381: isSet(object.bls12381) ? bytesFromBase64(object.bls12381) : undefined,
|
|
66
|
+
};
|
|
67
|
+
},
|
|
68
|
+
toJSON(message) {
|
|
69
|
+
const obj = {};
|
|
70
|
+
if (message.ed25519 !== undefined) {
|
|
71
|
+
obj.ed25519 = base64FromBytes(message.ed25519);
|
|
72
|
+
}
|
|
73
|
+
if (message.secp256k1 !== undefined) {
|
|
74
|
+
obj.secp256k1 = base64FromBytes(message.secp256k1);
|
|
75
|
+
}
|
|
76
|
+
if (message.bls12381 !== undefined) {
|
|
77
|
+
obj.bls12381 = base64FromBytes(message.bls12381);
|
|
78
|
+
}
|
|
79
|
+
return obj;
|
|
80
|
+
},
|
|
81
|
+
create(base) {
|
|
82
|
+
return PublicKey.fromPartial(base ?? {});
|
|
83
|
+
},
|
|
84
|
+
fromPartial(object) {
|
|
85
|
+
const message = createBasePublicKey();
|
|
86
|
+
message.ed25519 = object.ed25519 ?? undefined;
|
|
87
|
+
message.secp256k1 = object.secp256k1 ?? undefined;
|
|
88
|
+
message.bls12381 = object.bls12381 ?? undefined;
|
|
89
|
+
return message;
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
function bytesFromBase64(b64) {
|
|
93
|
+
const bin = globalThis.atob(b64);
|
|
94
|
+
const arr = new Uint8Array(bin.length);
|
|
95
|
+
for (let i = 0; i < bin.length; ++i) {
|
|
96
|
+
arr[i] = bin.charCodeAt(i);
|
|
97
|
+
}
|
|
98
|
+
return arr;
|
|
99
|
+
}
|
|
100
|
+
function base64FromBytes(arr) {
|
|
101
|
+
const bin = [];
|
|
102
|
+
arr.forEach((byte) => {
|
|
103
|
+
bin.push(globalThis.String.fromCharCode(byte));
|
|
104
|
+
});
|
|
105
|
+
return globalThis.btoa(bin.join(""));
|
|
106
|
+
}
|
|
107
|
+
function isSet(value) {
|
|
108
|
+
return value !== null && value !== undefined;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../../../src/proto/cometbft/crypto/v1/keys.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,YAAY;AACZ,gCAAgC;AAChC,iCAAiC;AACjC,wCAAwC;AAExC,oBAAoB;AACpB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAErE,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AASpD,SAAS,mBAAmB;IAC1B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAC3E,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAA0B;IAC9C,MAAM,CAAC,OAAkB,EAAE,SAAuB,IAAI,YAAY,EAAE;QAClE,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,KAAgC,EAAE,MAAe;QACtD,MAAM,MAAM,GAAG,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;QAC/E,IAAI,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;gBAClB,KAAK,CAAC,CAAC,CAAC,CAAC;oBACP,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;wBACf,MAAM;oBACR,CAAC;oBAED,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjC,SAAS;gBACX,CAAC;gBACD,KAAK,CAAC,CAAC,CAAC,CAAC;oBACP,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;wBACf,MAAM;oBACR,CAAC;oBAED,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBACnC,SAAS;gBACX,CAAC;gBACD,KAAK,CAAC,CAAC,CAAC,CAAC;oBACP,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;wBACf,MAAM;oBACR,CAAC;oBAED,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBAClC,SAAS;gBACX,CAAC;YACH,CAAC;YACD,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM;YACR,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,QAAQ,CAAC,MAAW;QAClB,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5E,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;YAClF,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;SAChF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,OAAkB;QACvB,MAAM,GAAG,GAAQ,EAAE,CAAC;QACpB,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAClC,GAAG,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,GAAG,CAAC,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnC,GAAG,CAAC,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,CAA6C,IAAQ;QACzD,OAAO,SAAS,CAAC,WAAW,CAAC,IAAI,IAAK,EAAU,CAAC,CAAC;IACpD,CAAC;IACD,WAAW,CAA6C,MAAS;QAC/D,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;QACtC,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;QAC9C,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC;QAClD,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC;QAChD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC;AAEF,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,GAAe;IACtC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACnB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAcD,SAAS,KAAK,CAAC,KAAU;IACvB,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
|
|
2
|
+
export declare const protobufPackage = "cometbft.crypto.v1";
|
|
3
|
+
/** Proof is a Merkle proof. */
|
|
4
|
+
export interface Proof {
|
|
5
|
+
total: bigint;
|
|
6
|
+
index: bigint;
|
|
7
|
+
leafHash: Uint8Array;
|
|
8
|
+
aunts: Uint8Array[];
|
|
9
|
+
}
|
|
10
|
+
/** ValueOp is a Merkle proof for a single key. */
|
|
11
|
+
export interface ValueOp {
|
|
12
|
+
/** Encoded in ProofOp.Key. */
|
|
13
|
+
key: Uint8Array;
|
|
14
|
+
/** To encode in ProofOp.Data */
|
|
15
|
+
proof?: Proof | undefined;
|
|
16
|
+
}
|
|
17
|
+
/** DominoOp always returns the given output. */
|
|
18
|
+
export interface DominoOp {
|
|
19
|
+
key: string;
|
|
20
|
+
input: string;
|
|
21
|
+
output: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* ProofOp defines an operation used for calculating Merkle root
|
|
25
|
+
* The data could be arbitrary format, providing necessary data
|
|
26
|
+
* for example neighbouring node hash
|
|
27
|
+
*/
|
|
28
|
+
export interface ProofOp {
|
|
29
|
+
type: string;
|
|
30
|
+
key: Uint8Array;
|
|
31
|
+
data: Uint8Array;
|
|
32
|
+
}
|
|
33
|
+
/** ProofOps is Merkle proof defined by the list of ProofOps */
|
|
34
|
+
export interface ProofOps {
|
|
35
|
+
ops: ProofOp[];
|
|
36
|
+
}
|
|
37
|
+
export declare const Proof: MessageFns<Proof>;
|
|
38
|
+
export declare const ValueOp: MessageFns<ValueOp>;
|
|
39
|
+
export declare const DominoOp: MessageFns<DominoOp>;
|
|
40
|
+
export declare const ProofOp: MessageFns<ProofOp>;
|
|
41
|
+
export declare const ProofOps: MessageFns<ProofOps>;
|
|
42
|
+
type Builtin = Date | Function | Uint8Array | string | number | boolean | bigint | undefined;
|
|
43
|
+
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 {} ? {
|
|
44
|
+
[K in keyof T]?: DeepPartial<T[K]>;
|
|
45
|
+
} : Partial<T>;
|
|
46
|
+
type KeysOfUnion<T> = T extends T ? keyof T : never;
|
|
47
|
+
export type Exact<P, I extends P> = P extends Builtin ? P : P & {
|
|
48
|
+
[K in keyof P]: Exact<P[K], I[K]>;
|
|
49
|
+
} & {
|
|
50
|
+
[K in Exclude<keyof I, KeysOfUnion<P>>]: never;
|
|
51
|
+
};
|
|
52
|
+
export interface MessageFns<T> {
|
|
53
|
+
encode(message: T, writer?: BinaryWriter): BinaryWriter;
|
|
54
|
+
decode(input: BinaryReader | Uint8Array, length?: number): T;
|
|
55
|
+
fromJSON(object: any): T;
|
|
56
|
+
toJSON(message: T): unknown;
|
|
57
|
+
create<I extends Exact<DeepPartial<T>, I>>(base?: I): T;
|
|
58
|
+
fromPartial<I extends Exact<DeepPartial<T>, I>>(object: I): T;
|
|
59
|
+
}
|
|
60
|
+
export {};
|