@hugomrdias/commp-wasm 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.
- package/CHANGELOG.md +14 -0
- package/dist/index.d.ts +135 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/types.d.ts +36 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/varint.d.ts +17 -0
- package/dist/varint.d.ts.map +1 -0
- package/package.json +10 -7
- package/src/index.js +16 -17
- package/src/inline/commp.d.ts +67 -0
- package/src/inline/commp_bg.js +7 -7
- package/src/inline/commp_bg.wasm.js +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.1.2](https://github.com/hugomrdias/commp/compare/commp-wasm-v0.1.1...commp-wasm-v0.1.2) (2026-10-01)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* publish type declarations generated from JSDoc ([#32](https://github.com/hugomrdias/commp/issues/32)) ([4b7654e](https://github.com/hugomrdias/commp/commit/4b7654e9f793477f2b237f826bfdbdb937d56d98))
|
|
9
|
+
|
|
10
|
+
## [0.1.1](https://github.com/hugomrdias/commp/compare/commp-wasm-v0.1.0...commp-wasm-v0.1.1) (2026-09-30)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **commp-wasm:** regenerate inline wasm ([85f0e1d](https://github.com/hugomrdias/commp/commit/85f0e1d16d2488b214f5e509703b7c87160e405a))
|
|
16
|
+
|
|
3
17
|
## 0.1.0 (2026-09-30)
|
|
4
18
|
|
|
5
19
|
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fast CommP (Filecoin Piece Commitment) WASM implementation
|
|
3
|
+
*
|
|
4
|
+
* This module provides a high-performance CommP calculation using
|
|
5
|
+
* Rust/WASM with inline base64 encoding - no async init required.
|
|
6
|
+
*
|
|
7
|
+
* @module @hugomrdias/commp-wasm
|
|
8
|
+
*/
|
|
9
|
+
export type PieceDigest = import('./types.js').PieceDigest;
|
|
10
|
+
export type StreamingHasher = import('./types.js').StreamingHasher;
|
|
11
|
+
/** Multihash code for fr32-sha2-256-trunc254-padded-binary-tree */
|
|
12
|
+
export declare const code = 4113;
|
|
13
|
+
/** Multihash name */
|
|
14
|
+
export declare const name: 'fr32-sha2-256-trunc254-padded-binary-tree';
|
|
15
|
+
/**
|
|
16
|
+
* Streaming CommP hasher
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts twoslash
|
|
20
|
+
* import { create } from '@hugomrdias/commp-wasm'
|
|
21
|
+
*
|
|
22
|
+
* const hasher = create()
|
|
23
|
+
* hasher.write(new Uint8Array(1024).fill(0x42))
|
|
24
|
+
* hasher.write(new Uint8Array(1024).fill(0x43))
|
|
25
|
+
* const digest = hasher.digest()
|
|
26
|
+
* console.log(digest.root) // 32-byte root hash
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @implements {StreamingHasher}
|
|
30
|
+
*/
|
|
31
|
+
declare class Hasher implements StreamingHasher {
|
|
32
|
+
#private;
|
|
33
|
+
/**
|
|
34
|
+
* Get the total number of bytes written
|
|
35
|
+
*
|
|
36
|
+
* @returns {bigint}
|
|
37
|
+
*/
|
|
38
|
+
count(): bigint;
|
|
39
|
+
/**
|
|
40
|
+
* Write bytes into the hasher
|
|
41
|
+
*
|
|
42
|
+
* @param {Uint8Array} bytes - Bytes to write
|
|
43
|
+
* @returns {this}
|
|
44
|
+
* @throws {RangeError} If the total would exceed `MAX_PAYLOAD_SIZE`; the
|
|
45
|
+
* hasher is left unchanged
|
|
46
|
+
*/
|
|
47
|
+
write(bytes: Uint8Array): this;
|
|
48
|
+
/**
|
|
49
|
+
* Compute the digest
|
|
50
|
+
*
|
|
51
|
+
* @returns {PieceDigest}
|
|
52
|
+
*/
|
|
53
|
+
digest(): PieceDigest;
|
|
54
|
+
/**
|
|
55
|
+
* Reset the hasher to initial state
|
|
56
|
+
*
|
|
57
|
+
* @returns {this}
|
|
58
|
+
*/
|
|
59
|
+
reset(): this;
|
|
60
|
+
/**
|
|
61
|
+
* Dispose of resources
|
|
62
|
+
*/
|
|
63
|
+
dispose(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Free WASM resources (alias for dispose)
|
|
66
|
+
*/
|
|
67
|
+
free(): void;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Creates a new streaming CommP hasher
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```ts twoslash
|
|
74
|
+
* import { create, digest } from '@hugomrdias/commp-wasm'
|
|
75
|
+
*
|
|
76
|
+
* // Streaming API
|
|
77
|
+
* const hasher = create()
|
|
78
|
+
* hasher.write(chunk1)
|
|
79
|
+
* hasher.write(chunk2)
|
|
80
|
+
* const result = hasher.digest()
|
|
81
|
+
*
|
|
82
|
+
* // One-shot API
|
|
83
|
+
* const result2 = digest(fullData)
|
|
84
|
+
* ```
|
|
85
|
+
*
|
|
86
|
+
* @returns {Hasher}
|
|
87
|
+
*/
|
|
88
|
+
export declare function create(): Hasher;
|
|
89
|
+
/**
|
|
90
|
+
* Computes CommP digest of a complete payload (one-shot)
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```ts twoslash
|
|
94
|
+
* import { digest } from '@hugomrdias/commp-wasm'
|
|
95
|
+
*
|
|
96
|
+
* const data = new Uint8Array(1024 * 1024).fill(0x42)
|
|
97
|
+
* const result = digest(data)
|
|
98
|
+
* console.log(result.root) // 32-byte piece commitment
|
|
99
|
+
* ```
|
|
100
|
+
*
|
|
101
|
+
* @param {Uint8Array} payload - Data to compute CommP for
|
|
102
|
+
* @returns {PieceDigest}
|
|
103
|
+
*/
|
|
104
|
+
export declare function digest(payload: Uint8Array): PieceDigest;
|
|
105
|
+
/**
|
|
106
|
+
* Computes just the 32-byte root hash (faster, less allocations)
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```ts twoslash
|
|
110
|
+
* import { root } from '@hugomrdias/commp-wasm'
|
|
111
|
+
*
|
|
112
|
+
* const data = new Uint8Array(1024 * 1024).fill(0x42)
|
|
113
|
+
* const rootHash = root(data)
|
|
114
|
+
* console.log(rootHash) // 32-byte Uint8Array
|
|
115
|
+
* ```
|
|
116
|
+
*
|
|
117
|
+
* @param {Uint8Array} payload - Data to compute CommP for
|
|
118
|
+
* @returns {Uint8Array}
|
|
119
|
+
*/
|
|
120
|
+
export declare function root(payload: Uint8Array): Uint8Array;
|
|
121
|
+
export declare const NODE_SIZE = 32;
|
|
122
|
+
export declare const IN_BYTES_PER_QUAD = 127;
|
|
123
|
+
export declare const MIN_PAYLOAD_SIZE = 65;
|
|
124
|
+
/**
|
|
125
|
+
* Largest payload accepted, in bytes: 127 * 2^47 (~15.9 PiB)
|
|
126
|
+
*
|
|
127
|
+
* data-segment allows up to tree height 255, far beyond 64 bits. This is the
|
|
128
|
+
* largest payload for which every derived size (padding, piece size) stays
|
|
129
|
+
* below 2^53, so the digest fields are exact as JS numbers.
|
|
130
|
+
*/
|
|
131
|
+
export declare const MAX_PAYLOAD_SIZE: bigint;
|
|
132
|
+
export declare const HEIGHT_SIZE = 1;
|
|
133
|
+
export declare const ROOT_SIZE = 32;
|
|
134
|
+
export {};
|
|
135
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMA,YAA4C,WAAW,GAA7C,OAAO,YAAY,EAAE,WAAW,CAAa;AACvD,YAAgD,eAAe,GAArD,OAAO,YAAY,EAAE,eAAe,CAAiB;AASlE,mEAAmE;AACnE,eAAO,MAAM,IAAI,OAAS,CAAA;AAE1B,qBAAqB;AACrB,eAAO,MAAM,IAAI,EACf,2CACD,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,cAAM,MAAM,AAFI,YAAA,eAAe;;IAK7B;;;;OAIG;IACH,KAAK,IAFQ,MAAM,CAIlB;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,EALA,UAKA,GAJE,IAAI,CAmBhB;IAED;;;;OAIG;IACH,MAAM,IAFO,WAAW,CAmBvB;IAED;;;;OAIG;IACH,KAAK,IAFQ,IAAI,CAKhB;IAED;;OAEG;IACH,OAAO,SAEN;IAED;;OAEG;IACH,IAAI,SAEH;CACF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,MAAM,IAFT,MAAM,CAIlB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAHnB,UAGmB,GAFjB,WAAW,CASvB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAHjB,UAGiB,GAFf,UAAU,CAetB;AAGD,eAAO,MAAM,SAAS,KAAK,CAAA;AAC3B,eAAO,MAAM,iBAAiB,MAAM,CAAA;AACpC,eAAO,MAAM,gBAAgB,KAAK,CAAA;AAElC;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,QAAc,CAAA;AAC3C,eAAO,MAAM,WAAW,IAAI,CAAA;AAC5B,eAAO,MAAM,SAAS,KAAK,CAAA"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for CommP WASM implementation
|
|
3
|
+
*/
|
|
4
|
+
/** Streaming hasher interface */
|
|
5
|
+
export interface StreamingHasher {
|
|
6
|
+
/** Write bytes into the hasher */
|
|
7
|
+
write(bytes: Uint8Array): this;
|
|
8
|
+
/** Get the total bytes written */
|
|
9
|
+
count(): bigint;
|
|
10
|
+
/** Compute the digest without consuming the hasher */
|
|
11
|
+
digest(): PieceDigest;
|
|
12
|
+
/** Reset the hasher to initial state */
|
|
13
|
+
reset(): this;
|
|
14
|
+
/** Free resources */
|
|
15
|
+
dispose(): void;
|
|
16
|
+
/** Free WASM resources (alias for dispose) */
|
|
17
|
+
free(): void;
|
|
18
|
+
}
|
|
19
|
+
/** Piece digest result */
|
|
20
|
+
export interface PieceDigest {
|
|
21
|
+
/** Multihash code */
|
|
22
|
+
code: 0x1011;
|
|
23
|
+
/** Multihash name */
|
|
24
|
+
name: 'fr32-sha2-256-trunc254-padded-binary-tree';
|
|
25
|
+
/** Raw digest bytes (padding + height + root) */
|
|
26
|
+
digest: Uint8Array;
|
|
27
|
+
/** Full multihash bytes (code + size + digest) */
|
|
28
|
+
bytes: Uint8Array;
|
|
29
|
+
/** Tree height */
|
|
30
|
+
height: number;
|
|
31
|
+
/** 32-byte root hash */
|
|
32
|
+
root: Uint8Array;
|
|
33
|
+
/** Zero padding applied */
|
|
34
|
+
padding: number;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iCAAiC;AACjC,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;IAC9B,kCAAkC;IAClC,KAAK,IAAI,MAAM,CAAA;IACf,sDAAsD;IACtD,MAAM,IAAI,WAAW,CAAA;IACrB,wCAAwC;IACxC,KAAK,IAAI,IAAI,CAAA;IACb,qBAAqB;IACrB,OAAO,IAAI,IAAI,CAAA;IACf,8CAA8C;IAC9C,IAAI,IAAI,IAAI,CAAA;CACb;AAED,0BAA0B;AAC1B,MAAM,WAAW,WAAW;IAC1B,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,qBAAqB;IACrB,IAAI,EAAE,2CAA2C,CAAA;IACjD,iDAAiD;IACjD,MAAM,EAAE,UAAU,CAAA;IAClB,kDAAkD;IAClD,KAAK,EAAE,UAAU,CAAA;IACjB,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,wBAAwB;IACxB,IAAI,EAAE,UAAU,CAAA;IAChB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAA;CAChB"}
|
package/dist/varint.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unsigned varint (LEB128) decoding
|
|
3
|
+
*
|
|
4
|
+
* Uses arithmetic instead of 32-bit bitwise operators so values up to
|
|
5
|
+
* `Number.MAX_SAFE_INTEGER` decode correctly.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Decodes a varint from the buffer at the given offset
|
|
11
|
+
*
|
|
12
|
+
* @param {Uint8Array} buf - Buffer to read from
|
|
13
|
+
* @param {number} offset - Offset to start reading
|
|
14
|
+
* @returns {[value: number, length: number]} - Decoded value and bytes read
|
|
15
|
+
*/
|
|
16
|
+
export declare function decode(buf: Uint8Array, offset: number): [value: number, length: number];
|
|
17
|
+
//# sourceMappingURL=varint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"varint.d.ts","sourceRoot":"","sources":["../src/varint.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAJf,UAIe,EAAE,MAAM,EAHvB,MAGuB,GAFrB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAa3C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hugomrdias/commp-wasm",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Fast CommP (Filecoin Piece Commitment) WASM implementation with inline base64",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"filecoin",
|
|
@@ -18,28 +18,31 @@
|
|
|
18
18
|
},
|
|
19
19
|
"type": "module",
|
|
20
20
|
"main": "./src/index.js",
|
|
21
|
-
"types": "./
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
22
|
"exports": {
|
|
23
23
|
".": {
|
|
24
|
-
"types": "./
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
25
|
"import": "./src/index.js"
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
"files": [
|
|
29
29
|
"src",
|
|
30
|
+
"dist",
|
|
30
31
|
"CHANGELOG.md"
|
|
31
32
|
],
|
|
32
33
|
"devDependencies": {
|
|
33
|
-
"@hugomrdias/commp-js": "0.1.
|
|
34
|
+
"@hugomrdias/commp-js": "0.1.1",
|
|
34
35
|
"@web3-storage/data-segment": "^5.3.0",
|
|
35
|
-
"mocha": "^12.0.2"
|
|
36
|
+
"mocha": "^12.0.2",
|
|
37
|
+
"typescript": "^7.0.2"
|
|
36
38
|
},
|
|
37
39
|
"scripts": {
|
|
40
|
+
"build": "tsc -p tsconfig.json",
|
|
38
41
|
"build:rust": "cd ../../rs/commp && RUSTFLAGS=\"-C target-feature=+simd128 --remap-path-prefix=${CARGO_HOME:-$HOME/.cargo}=/cargo\" wasm-pack build --target bundler --out-dir ../../packages/commp-wasm/pkg-bundler --release",
|
|
39
42
|
"build:inline": "node scripts/build-inline-wasm.js",
|
|
40
43
|
"build:wasm": "pnpm build:rust && pnpm build:inline",
|
|
41
|
-
"clean": "rm -rf pkg-bundler",
|
|
42
|
-
"test": "mocha \"tests/**/*.test.js\"",
|
|
44
|
+
"clean": "rm -rf pkg-bundler dist",
|
|
45
|
+
"test": "tsc -p tests && mocha \"tests/**/*.test.js\"",
|
|
43
46
|
"lint": "biome check ."
|
|
44
47
|
}
|
|
45
48
|
}
|
package/src/index.js
CHANGED
|
@@ -10,7 +10,10 @@
|
|
|
10
10
|
import { CommPHasher as WasmHasher, root as wasmRoot } from './inline/commp.js'
|
|
11
11
|
import { decode as varintDecode } from './varint.js'
|
|
12
12
|
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* @typedef {import('./types.js').PieceDigest} PieceDigest
|
|
15
|
+
* @typedef {import('./types.js').StreamingHasher} StreamingHasher
|
|
16
|
+
*/
|
|
14
17
|
|
|
15
18
|
/**
|
|
16
19
|
* Largest slice passed to WASM per call. wasm-bindgen copies each input into
|
|
@@ -43,13 +46,7 @@ export const name = /** @type {const} */ (
|
|
|
43
46
|
* @implements {StreamingHasher}
|
|
44
47
|
*/
|
|
45
48
|
class Hasher {
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* @private
|
|
49
|
-
* @type {WasmHasher}
|
|
50
|
-
*/
|
|
51
|
-
this.inner = new WasmHasher()
|
|
52
|
-
}
|
|
49
|
+
#inner = new WasmHasher()
|
|
53
50
|
|
|
54
51
|
/**
|
|
55
52
|
* Get the total number of bytes written
|
|
@@ -57,7 +54,7 @@ class Hasher {
|
|
|
57
54
|
* @returns {bigint}
|
|
58
55
|
*/
|
|
59
56
|
count() {
|
|
60
|
-
return BigInt(this
|
|
57
|
+
return BigInt(this.#inner.count())
|
|
61
58
|
}
|
|
62
59
|
|
|
63
60
|
/**
|
|
@@ -80,7 +77,7 @@ class Hasher {
|
|
|
80
77
|
)
|
|
81
78
|
}
|
|
82
79
|
for (let offset = 0; offset < bytes.length; offset += CHUNK_SIZE) {
|
|
83
|
-
this
|
|
80
|
+
this.#inner.write(bytes.subarray(offset, offset + CHUNK_SIZE))
|
|
84
81
|
}
|
|
85
82
|
return this
|
|
86
83
|
}
|
|
@@ -92,7 +89,7 @@ class Hasher {
|
|
|
92
89
|
*/
|
|
93
90
|
digest() {
|
|
94
91
|
// Format: code (varint) | size (varint) | padding (varint) | height | root
|
|
95
|
-
const bytes = this
|
|
92
|
+
const bytes = this.#inner.digest()
|
|
96
93
|
const [, codeLength] = varintDecode(bytes, 0)
|
|
97
94
|
const [, sizeLength] = varintDecode(bytes, codeLength)
|
|
98
95
|
const digestStart = codeLength + sizeLength
|
|
@@ -115,7 +112,7 @@ class Hasher {
|
|
|
115
112
|
* @returns {this}
|
|
116
113
|
*/
|
|
117
114
|
reset() {
|
|
118
|
-
this
|
|
115
|
+
this.#inner.reset()
|
|
119
116
|
return this
|
|
120
117
|
}
|
|
121
118
|
|
|
@@ -123,14 +120,14 @@ class Hasher {
|
|
|
123
120
|
* Dispose of resources
|
|
124
121
|
*/
|
|
125
122
|
dispose() {
|
|
126
|
-
this
|
|
123
|
+
this.#inner.free()
|
|
127
124
|
}
|
|
128
125
|
|
|
129
126
|
/**
|
|
130
127
|
* Free WASM resources (alias for dispose)
|
|
131
128
|
*/
|
|
132
129
|
free() {
|
|
133
|
-
this
|
|
130
|
+
this.#inner.free()
|
|
134
131
|
}
|
|
135
132
|
}
|
|
136
133
|
|
|
@@ -200,10 +197,12 @@ export function root(payload) {
|
|
|
200
197
|
if (payload.length <= CHUNK_SIZE) {
|
|
201
198
|
return wasmRoot(payload)
|
|
202
199
|
}
|
|
203
|
-
const hasher =
|
|
200
|
+
const hasher = new WasmHasher()
|
|
204
201
|
try {
|
|
205
|
-
|
|
206
|
-
|
|
202
|
+
for (let offset = 0; offset < payload.length; offset += CHUNK_SIZE) {
|
|
203
|
+
hasher.write(payload.subarray(offset, offset + CHUNK_SIZE))
|
|
204
|
+
}
|
|
205
|
+
return hasher.root()
|
|
207
206
|
} finally {
|
|
208
207
|
hasher.free()
|
|
209
208
|
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/* tslint:disable */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
|
|
4
|
+
export class CommPHasher {
|
|
5
|
+
free(): void;
|
|
6
|
+
[Symbol.dispose](): void;
|
|
7
|
+
/**
|
|
8
|
+
* Create a new hasher
|
|
9
|
+
*/
|
|
10
|
+
constructor();
|
|
11
|
+
/**
|
|
12
|
+
* Get just the 32-byte CommP root hash
|
|
13
|
+
*
|
|
14
|
+
* Returns the raw Merkle root without multihash encoding.
|
|
15
|
+
* Use `digest()` if you need the full multihash with metadata.
|
|
16
|
+
*/
|
|
17
|
+
root(): Uint8Array;
|
|
18
|
+
/**
|
|
19
|
+
* Get bytes written count
|
|
20
|
+
*/
|
|
21
|
+
count(): bigint;
|
|
22
|
+
/**
|
|
23
|
+
* Reset the hasher for reuse
|
|
24
|
+
*/
|
|
25
|
+
reset(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Write bytes into the hasher
|
|
28
|
+
*
|
|
29
|
+
* Throws a `RangeError` (without changing the hasher) if the total would
|
|
30
|
+
* exceed `MAX_PAYLOAD_SIZE`.
|
|
31
|
+
*/
|
|
32
|
+
write(bytes: Uint8Array): void;
|
|
33
|
+
/**
|
|
34
|
+
* Get the full multihash-encoded digest
|
|
35
|
+
*
|
|
36
|
+
* Returns: [code (varint 0x1011), size (varint), padding (varint), height (u8), root (32 bytes)]
|
|
37
|
+
*
|
|
38
|
+
* - `code`: 0x1011 = "fr32-sha256-trunc254-padded-binary-tree" multihash identifier
|
|
39
|
+
* - `size`: total digest size (padding_len + 1 + 32)
|
|
40
|
+
* - `padding`: bytes of zero-padding added to reach next power-of-two piece size
|
|
41
|
+
* - `height`: tree height (log2 of piece size / 32)
|
|
42
|
+
* - `root`: 32-byte Merkle root
|
|
43
|
+
*/
|
|
44
|
+
digest(): Uint8Array;
|
|
45
|
+
/**
|
|
46
|
+
* Get the tree height
|
|
47
|
+
*/
|
|
48
|
+
height(): number;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* One-shot digest: returns full multihash-encoded CommP
|
|
53
|
+
*
|
|
54
|
+
* Format: [code (varint 0x1011), size (varint), padding (varint), height (u8), root (32 bytes)]
|
|
55
|
+
*
|
|
56
|
+
* Use this when you need the complete Filecoin piece commitment with metadata.
|
|
57
|
+
* The multihash code 0x1011 identifies this as "fr32-sha256-trunc254-padded-binary-tree".
|
|
58
|
+
*/
|
|
59
|
+
export function digest(data: Uint8Array): Uint8Array;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* One-shot root: returns just the 32-byte CommP root hash
|
|
63
|
+
*
|
|
64
|
+
* Use this when you only need the raw hash without multihash encoding.
|
|
65
|
+
* This is the Merkle root of the FR32-padded, SHA256-hashed binary tree.
|
|
66
|
+
*/
|
|
67
|
+
export function root(data: Uint8Array): Uint8Array;
|
package/src/inline/commp_bg.js
CHANGED
|
@@ -121,7 +121,7 @@ export class CommPHasher {
|
|
|
121
121
|
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
122
122
|
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
123
123
|
var v1 = getArrayU8FromWasm0(r0, r1).slice();
|
|
124
|
-
wasm.
|
|
124
|
+
wasm.__wbindgen_export2(r0, r1 * 1, 1);
|
|
125
125
|
return v1;
|
|
126
126
|
} finally {
|
|
127
127
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
@@ -151,7 +151,7 @@ export class CommPHasher {
|
|
|
151
151
|
write(bytes) {
|
|
152
152
|
try {
|
|
153
153
|
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
154
|
-
const ptr0 = passArray8ToWasm0(bytes, wasm.
|
|
154
|
+
const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_export);
|
|
155
155
|
const len0 = WASM_VECTOR_LEN;
|
|
156
156
|
wasm.commphasher_write(retptr, this.__wbg_ptr, ptr0, len0);
|
|
157
157
|
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
@@ -182,7 +182,7 @@ export class CommPHasher {
|
|
|
182
182
|
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
183
183
|
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
184
184
|
var v1 = getArrayU8FromWasm0(r0, r1).slice();
|
|
185
|
-
wasm.
|
|
185
|
+
wasm.__wbindgen_export2(r0, r1 * 1, 1);
|
|
186
186
|
return v1;
|
|
187
187
|
} finally {
|
|
188
188
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
@@ -212,7 +212,7 @@ if (Symbol.dispose) CommPHasher.prototype[Symbol.dispose] = CommPHasher.prototyp
|
|
|
212
212
|
export function digest(data) {
|
|
213
213
|
try {
|
|
214
214
|
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
215
|
-
const ptr0 = passArray8ToWasm0(data, wasm.
|
|
215
|
+
const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export);
|
|
216
216
|
const len0 = WASM_VECTOR_LEN;
|
|
217
217
|
wasm.digest(retptr, ptr0, len0);
|
|
218
218
|
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
@@ -223,7 +223,7 @@ export function digest(data) {
|
|
|
223
223
|
throw takeObject(r2);
|
|
224
224
|
}
|
|
225
225
|
var v2 = getArrayU8FromWasm0(r0, r1).slice();
|
|
226
|
-
wasm.
|
|
226
|
+
wasm.__wbindgen_export2(r0, r1 * 1, 1);
|
|
227
227
|
return v2;
|
|
228
228
|
} finally {
|
|
229
229
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
@@ -241,7 +241,7 @@ export function digest(data) {
|
|
|
241
241
|
export function root(data) {
|
|
242
242
|
try {
|
|
243
243
|
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
244
|
-
const ptr0 = passArray8ToWasm0(data, wasm.
|
|
244
|
+
const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export);
|
|
245
245
|
const len0 = WASM_VECTOR_LEN;
|
|
246
246
|
wasm.root(retptr, ptr0, len0);
|
|
247
247
|
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
@@ -252,7 +252,7 @@ export function root(data) {
|
|
|
252
252
|
throw takeObject(r2);
|
|
253
253
|
}
|
|
254
254
|
var v2 = getArrayU8FromWasm0(r0, r1).slice();
|
|
255
|
-
wasm.
|
|
255
|
+
wasm.__wbindgen_export2(r0, r1 * 1, 1);
|
|
256
256
|
return v2;
|
|
257
257
|
} finally {
|
|
258
258
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
import * as commp_bg from './commp_bg.js';
|
|
5
5
|
|
|
6
|
-
const wasmBase64 = "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";
|
|
6
|
+
const wasmBase64 = "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";
|
|
7
7
|
|
|
8
8
|
// Decode base64 to Uint8Array, fastest available method first
|
|
9
9
|
function base64ToBytes(base64) {
|