@ton.js/core
Version:
TonWeb - JavaScript API for TON blockchain
65 lines • 2.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseAddress = exports.parseOffchainUriCell = exports.createOffchainUriCell = exports.parseUri = exports.serializeUri = exports.OFFCHAIN_CONTENT_PREFIX = exports.ONCHAIN_CONTENT_PREFIX = exports.CHUNK_DATA_PREFIX = exports.SNAKE_DATA_PREFIX = void 0;
const cell_1 = require("../../../boc/cell");
const text_encoding_1 = require("../../../utils/text-encoding");
const address_1 = require("../../../utils/address");
exports.SNAKE_DATA_PREFIX = 0x00;
exports.CHUNK_DATA_PREFIX = 0x01;
exports.ONCHAIN_CONTENT_PREFIX = 0x00;
exports.OFFCHAIN_CONTENT_PREFIX = 0x01;
function serializeUri(uri) {
return text_encoding_1.textEncoder.encode(encodeURI(uri));
}
exports.serializeUri = serializeUri;
function parseUri(bytes) {
return new TextDecoder().decode(bytes);
}
exports.parseUri = parseUri;
function createOffchainUriCell(uri) {
const cell = new cell_1.Cell();
cell.bits.writeUint(exports.OFFCHAIN_CONTENT_PREFIX, 8);
cell.bits.writeBytes(serializeUri(uri));
return cell;
}
exports.createOffchainUriCell = createOffchainUriCell;
function parseOffchainUriCell(cell) {
let length = 0;
let c = cell;
while (c) {
length += c.bits.array.length;
c = c.refs[0];
}
const bytes = new Uint8Array(length);
length = 0;
c = cell;
while (c) {
bytes.set(c.bits.array, length);
length += c.bits.array.length;
c = c.refs[0];
}
return parseUri(bytes.slice(1)); // slice OFFCHAIN_CONTENT_PREFIX
}
exports.parseOffchainUriCell = parseOffchainUriCell;
function parseAddress(cell) {
let n = readIntFromBitString(cell.bits, 3, 8);
if (n > BigInt(127)) {
n -= BigInt(256);
}
const hashPart = readIntFromBitString(cell.bits, 3 + 8, 256);
if (n.toString(10) + ":" + hashPart.toString(16) === '0:0') {
return undefined;
}
const address = n.toString(10) + ":" + hashPart.toString(16).padStart(64, '0');
return new address_1.Address(address);
}
exports.parseAddress = parseAddress;
function readIntFromBitString(bitString, cursor, bits) {
let n = BigInt(0);
for (let i = 0; i < bits; i++) {
n *= BigInt(2);
n += BigInt(bitString.get(cursor + i));
}
return n;
}
//# sourceMappingURL=utils.js.map