Skip to main content

Data Hasher

The @coinweb/data-hasher is an in-house smart contract created for storing, hashing and linking supplied file contents. It is adequately simple to reconstruct the @coinweb/data-hasher from the underlying @coinweb/contract-kit.

function dataHasherLogic(
issuer: ClaimIssuer,
encodedFiles: Uint8Array[]
): NewTx {
const storeOps = encodedFiles.map((file) => {
const body = uint8ToBase64(file);
const hash = hashV0(file);
return store(genericClaim(claimKey(hash, null), body, toHex(0)));
});

return continueTx([
passCwebFrom(issuer, 100 * storeOps.length + 100),
...storeOps,
]);
}

function logic(context: TxContext, _callInfo: CallContext): NewTx[] {
const self = contractIssuer(getContractId(context));
const files = getMethodArguments(context)[1].map((encodedFile) =>
base64ToUint8(encodedFile)
);
return [dataHasherLogic(self, files)];
}

The dataHasherLogic function takes an array of the encoded files contents and creates StoreOps with the explicit file content for each file. The logic function is the default method contract handler, that is executed when the contract is being called.

note

The example of how the @coinweb/data-hasher is integrated can be helpful.