Create SHA256 hash in Stacks.js
Generate SHA-256 hashes that match Clarity's hashing output
import { sha256 } from "@noble/hashes/sha256";import { bytesToHex, hexToBytes, utf8ToBytes } from "@stacks/common";import { bufferCV, stringUtf8CV, serializeCV } from "@stacks/transactions";// Hash a string (matching Clarity's sha256 output)function hashString(text: string) {const clarityValue = stringUtf8CV(text);const serialized = serializeCV(clarityValue);return bytesToHex(sha256(serialized));}// Hash hex data (matching Clarity's sha256 output)function hashHexData(hexData: string) {const clarityValue = bufferCV(hexToBytes(hexData));const serialized = serializeCV(clarityValue);return bytesToHex(sha256(serialized));}// Example usageconst hash1 = hashString("Hello World");console.log("String hash:", hash1);const hash2 = hashHexData("0x1234567890abcdef");console.log("Hex hash:", hash2);
Use cases
- Creating deterministic identifiers
- Verifying data integrity between on-chain and off-chain
- Implementing commit-reveal schemes off-chain
- Building merkle trees compatible with Clarity
Key concepts
To match Clarity's SHA-256 output:
- 1Convert to Clarity value: Use appropriate CV type (
stringUtf8CV
,bufferCV
, etc.) - 2Serialize: Use
serializeCV
to match Clarity's encoding - 3Hash: Apply SHA-256 to the serialized bytes