UNPKG

@tonkite/jest-tolk

Version:

<p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/tonkite/tonkite/main/assets/logo-dark.svg"> <img alt="tonkite logo" src="https://raw.githubusercontent.com/tonkite/tonkite/main/a

46 lines (45 loc) 1.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadSliceFromBOC = loadSliceFromBOC; const core_1 = require("@ton/core"); function getHashesCountFromMask(mask) { let n = 0; for (let i = 0; i < 3; i++) { n += mask & 1; mask = mask >> 1; } return n + 1; // 1 repr + up to 3 higher hashes } function getHashesCount(levelMask) { return getHashesCountFromMask(levelMask & 7); } function loadSliceFromBOC(buffer) { const reader = new core_1.BitReader(new core_1.BitString(buffer, 0, buffer.length * 8)); // D1 const d1 = reader.loadUint(8); const refsCount = d1 % 8; const exotic = !!(d1 & 8); // D2 const d2 = reader.loadUint(8); const dataBytesize = Math.ceil(d2 / 2); const paddingAdded = !!(d2 % 2); const levelMask = d1 >> 5; const hasHashes = (d1 & 16) != 0; const hash_bytes = 32; const hashesSize = hasHashes ? getHashesCount(levelMask) * hash_bytes : 0; const depthSize = hasHashes ? getHashesCount(levelMask) * 2 : 0; reader.skip(hashesSize * 8); reader.skip(depthSize * 8); // Bits let bits = core_1.BitString.EMPTY; if (dataBytesize > 0) { if (paddingAdded) { bits = reader.loadPaddedBits(dataBytesize * 8); } else { bits = reader.loadBits(dataBytesize * 8); } } // Result return new core_1.Slice(new core_1.BitReader(bits), []); }