UNPKG

@ton/core

Version:

Core TypeScript library that implements low level primitives for TON blockchain.

66 lines (57 loc) 1.84 kB
/** * Copyright (c) Whales Corp. * All Rights Reserved. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { beginCell, Builder } from "../Builder"; import { Cell } from "../Cell"; import { Slice } from "../Slice"; function readBuffer(slice: Slice) { // Check consistency if (slice.remainingBits % 8 !== 0) { throw new Error(`Invalid string length: ${slice.remainingBits}`); } if (slice.remainingRefs !== 0 && slice.remainingRefs !== 1) { throw new Error(`invalid number of refs: ${slice.remainingRefs}`); } // Read string let res: Buffer if (slice.remainingBits === 0) { res = Buffer.alloc(0); } else { res = slice.loadBuffer(slice.remainingBits / 8); } // Read tail if (slice.remainingRefs === 1) { res = Buffer.concat([res, readBuffer(slice.loadRef().beginParse())]); } return res; } export function readString(slice: Slice) { return readBuffer(slice).toString(); } function writeBuffer(src: Buffer, builder: Builder) { if (src.length > 0) { let bytes = Math.floor(builder.availableBits / 8); if (src.length > bytes) { let a = src.subarray(0, bytes); let t = src.subarray(bytes); builder = builder.storeBuffer(a); let bb = beginCell(); writeBuffer(t, bb); builder = builder.storeRef(bb.endCell()); } else { builder = builder.storeBuffer(src); } } } export function stringToCell(src: string): Cell { let builder = beginCell(); writeBuffer(Buffer.from(src), builder); return builder.endCell(); } export function writeString(src: string, builder: Builder) { writeBuffer(Buffer.from(src), builder); }