Comparing version 9.9.0 to 10.0.0
@@ -208,1 +208,40 @@ /// <reference types="node" /> | ||
} | null; | ||
export declare type RawShardIdent = { | ||
shardPrefixBits: number; | ||
workchainId: number; | ||
shardPrefix: BN; | ||
}; | ||
export declare function parseShardIdent(cs: Slice): { | ||
shardPrefixBits: number; | ||
workchainId: number; | ||
shardPrefix: BN; | ||
}; | ||
export declare type RawShardAccount = { | ||
address: Address | null; | ||
lastTransHash: Buffer; | ||
lastTransLt: BN; | ||
}; | ||
export declare function parseShardAccount(cs: Slice): RawShardAccount; | ||
export declare type RawDepthBalanceInfo = { | ||
splitDepth: number; | ||
balance: RawCurrencyCollection; | ||
}; | ||
export declare function parseDepthBalanceInfo(cs: Slice): RawDepthBalanceInfo; | ||
export declare type RawShardAccountRef = { | ||
shardAccount: RawShardAccount; | ||
depthBalanceInfo: RawDepthBalanceInfo; | ||
}; | ||
export declare function parseShardAccounts(cs: Slice): Map<string, RawShardAccountRef>; | ||
export declare type RawShardStateUnsplit = { | ||
globalId: number; | ||
shardId: RawShardIdent; | ||
seqno: number; | ||
vertSeqNo: number; | ||
genUtime: number; | ||
genLt: BN; | ||
minRefSeqno: number; | ||
beforeSplit: boolean; | ||
accounts: Map<string, RawShardAccountRef>; | ||
custom: Cell | null; | ||
}; | ||
export declare function parseShardStateUnsplit(cs: Slice): RawShardStateUnsplit; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.parseAccount = exports.parseAccountStorage = exports.parseAccountState = exports.parseStorageInfo = exports.parseStorageUsed = exports.parseTransaction = exports.parseTransactionDescription = exports.parseBouncePhase = exports.parseActionPhase = exports.parseComputePhase = exports.parseCreditPhase = exports.parseStoragePhase = exports.parseStorageUsedShort = exports.parseAccountChange = exports.parseHashUpdate = exports.parseMessage = exports.parseStateInit = exports.parseRawTickTock = exports.parseCommonMsgInfo = exports.parseCurrencyCollection = exports.parseAccountStatus = void 0; | ||
exports.parseShardStateUnsplit = exports.parseShardAccounts = exports.parseDepthBalanceInfo = exports.parseShardAccount = exports.parseShardIdent = exports.parseAccount = exports.parseAccountStorage = exports.parseAccountState = exports.parseStorageInfo = exports.parseStorageUsed = exports.parseTransaction = exports.parseTransactionDescription = exports.parseBouncePhase = exports.parseActionPhase = exports.parseComputePhase = exports.parseCreditPhase = exports.parseStoragePhase = exports.parseStorageUsedShort = exports.parseAccountChange = exports.parseHashUpdate = exports.parseMessage = exports.parseStateInit = exports.parseRawTickTock = exports.parseCommonMsgInfo = exports.parseCurrencyCollection = exports.parseAccountStatus = void 0; | ||
const __1 = require(".."); | ||
const parseDict_1 = require("../boc/dict/parseDict"); | ||
function parseAccountStatus(slice) { | ||
@@ -19,3 +20,3 @@ const status = slice.readUintNumber(2); | ||
} | ||
throw Error('Unreachable'); | ||
throw Error('Invalid data'); | ||
} | ||
@@ -130,3 +131,3 @@ exports.parseAccountStatus = parseAccountStatus; | ||
if (slice.readUintNumber(8) !== 0x72) { | ||
throw Error('Invalid transaction'); | ||
throw Error('Invalid data'); | ||
} | ||
@@ -362,3 +363,3 @@ const oldHash = slice.readBuffer(32); | ||
if (slice.readUintNumber(4) !== 0x07) { | ||
throw Error('Invalid transaction'); | ||
throw Error('Invalid data'); | ||
} | ||
@@ -465,1 +466,82 @@ // Read address | ||
exports.parseAccount = parseAccount; | ||
function parseShardIdent(cs) { | ||
if (cs.readUintNumber(2) !== 0) { | ||
throw Error('Invalid data'); | ||
} | ||
let shardPrefixBits = cs.readUintNumber(6); | ||
let workchainId = cs.readIntNumber(32); | ||
let shardPrefix = cs.readUint(64); | ||
return { | ||
shardPrefixBits, | ||
workchainId, | ||
shardPrefix | ||
}; | ||
} | ||
exports.parseShardIdent = parseShardIdent; | ||
function parseShardAccount(cs) { | ||
let accountCell = cs.readCell(); | ||
let address = null; | ||
if (!accountCell.isExotic) { | ||
address = accountCell.beginParse().readAddress(); | ||
} | ||
return { | ||
address, | ||
lastTransHash: cs.readBuffer(32), | ||
lastTransLt: cs.readUint(64) | ||
}; | ||
} | ||
exports.parseShardAccount = parseShardAccount; | ||
function parseDepthBalanceInfo(cs) { | ||
return { | ||
splitDepth: cs.readUintNumber(5), | ||
balance: parseCurrencyCollection(cs) | ||
}; | ||
} | ||
exports.parseDepthBalanceInfo = parseDepthBalanceInfo; | ||
function parseShardAccounts(cs) { | ||
if (!cs.readBit()) { | ||
return new Map(); | ||
} | ||
return (0, parseDict_1.parseDict)(cs.readRef(), 256, (cs2) => { | ||
let depthBalanceInfo = parseDepthBalanceInfo(cs2); | ||
let shardAccount = parseShardAccount(cs2); | ||
return { | ||
depthBalanceInfo, | ||
shardAccount | ||
}; | ||
}); | ||
} | ||
exports.parseShardAccounts = parseShardAccounts; | ||
function parseShardStateUnsplit(cs) { | ||
if (cs.readUintNumber(32) !== 0x9023afe2) { | ||
throw Error('Invalid data'); | ||
} | ||
let globalId = cs.readIntNumber(32); | ||
let shardId = parseShardIdent(cs); | ||
let seqno = cs.readUintNumber(32); | ||
let vertSeqNo = cs.readUintNumber(32); | ||
let genUtime = cs.readUintNumber(32); | ||
let genLt = cs.readUint(64); | ||
let minRefSeqno = cs.readUintNumber(32); | ||
// Skip OutMsgQueueInfo | ||
cs.readCell(); | ||
let beforeSplit = cs.readBit(); | ||
let accounts = parseShardAccounts(cs.readRef()); | ||
// Skip | ||
cs.readCell(); | ||
let mcStateExtra = cs.readBit(); | ||
let custom = mcStateExtra ? cs.readCell() : null; | ||
return { | ||
globalId, | ||
shardId, | ||
seqno, | ||
vertSeqNo, | ||
genUtime, | ||
genLt, | ||
minRefSeqno, | ||
beforeSplit, | ||
accounts, | ||
custom | ||
}; | ||
} | ||
exports.parseShardStateUnsplit = parseShardStateUnsplit; |
@@ -27,2 +27,7 @@ "use strict"; | ||
}); | ||
it('should parse ShardState', () => { | ||
const state = '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'; | ||
const cell = __1.Cell.fromBoc(Buffer.from(state, 'base64'))[0]; | ||
console.warn((0, parse_1.parseShardStateUnsplit)(cell.beginParse())); | ||
}); | ||
}); |
@@ -222,6 +222,6 @@ "use strict"; | ||
const refNum = d1 % 8; | ||
const dataBytesize = Math.ceil(d2 / 2); | ||
let dataBytesize = Math.ceil(d2 / 2); | ||
const fullfilledBytes = !(d2 % 2); | ||
// Build Cell | ||
let cell = new __1.Cell(isExotic); | ||
let bits = __1.BitString.alloc(1023); | ||
let refs = []; | ||
@@ -232,3 +232,24 @@ if (cellData.length < dataBytesize + referenceIndexSize * refNum) { | ||
// Cell data | ||
cell.bits.setTopUppedArray(cellData.slice(0, dataBytesize), fullfilledBytes); | ||
let kind = 'ordinary'; | ||
if (isExotic) { | ||
let k = cellData.readUInt8(); | ||
if (k === 1) { | ||
kind = 'pruned'; | ||
} | ||
else if (k === 2) { | ||
kind = 'library_reference'; | ||
} | ||
else if (k === 3) { | ||
kind = 'merkle_proof'; | ||
} | ||
else if (k === 4) { | ||
kind = 'merkle_update'; | ||
} | ||
else { | ||
throw Error('Invalid cell type'); | ||
} | ||
cellData = cellData.slice(1); | ||
dataBytesize--; | ||
} | ||
bits.setTopUppedArray(cellData.slice(0, dataBytesize), fullfilledBytes); | ||
cellData = cellData.slice(dataBytesize); | ||
@@ -240,2 +261,4 @@ // References | ||
} | ||
// Resolve kind | ||
let cell = new __1.Cell(kind, bits); | ||
return { cell, refs, residue: cellData }; | ||
@@ -242,0 +265,0 @@ } |
@@ -103,3 +103,3 @@ "use strict"; | ||
this.ended = true; | ||
let res = new Cell_1.Cell(false, this.bits); | ||
let res = new Cell_1.Cell('ordinary', this.bits); | ||
for (let r of this.refs) { | ||
@@ -106,0 +106,0 @@ res.refs.push(r); |
@@ -6,2 +6,3 @@ /// <reference types="node" /> | ||
import { Slice } from '..'; | ||
import { CellType } from './CellType'; | ||
export declare class Cell { | ||
@@ -11,4 +12,5 @@ static fromBoc(src: Buffer | string): Cell[]; | ||
readonly refs: Cell[]; | ||
readonly isExotic: boolean; | ||
constructor(isExotic?: boolean, bits?: BitString); | ||
readonly kind: CellType; | ||
get isExotic(): boolean; | ||
constructor(kind?: CellType, bits?: BitString); | ||
beginParse(): Slice; | ||
@@ -15,0 +17,0 @@ writeCell(anotherCell: Cell): void; |
@@ -13,6 +13,6 @@ "use strict"; | ||
class Cell { | ||
constructor(isExotic = false, bits = BitString_1.BitString.alloc(1023)) { | ||
constructor(kind = 'ordinary', bits = BitString_1.BitString.alloc(1023)) { | ||
this.refs = []; | ||
this[_a] = () => this.toString(); | ||
this.isExotic = isExotic; | ||
this.kind = kind; | ||
this.bits = bits; | ||
@@ -23,3 +23,9 @@ } | ||
} | ||
get isExotic() { | ||
return this.kind !== 'ordinary'; | ||
} | ||
beginParse() { | ||
if (this.isExotic) { | ||
throw Error('Unable to parse exotic cell'); | ||
} | ||
return __1.Slice.fromCell(this); | ||
@@ -26,0 +32,0 @@ } |
@@ -41,7 +41,11 @@ "use strict"; | ||
else { | ||
let left = slice.readRef(); | ||
let right = slice.readRef(); | ||
let left = slice.readCell(); | ||
let right = slice.readCell(); | ||
// NOTE: Left and right branches are implicitly contain prefixes '0' and '1' | ||
doParse(pp + '0', left, n - prefixLength - 1, res, extractor); | ||
doParse(pp + '1', right, n - prefixLength - 1, res, extractor); | ||
if (!left.isExotic) { | ||
doParse(pp + '0', left.beginParse(), n - prefixLength - 1, res, extractor); | ||
} | ||
if (!right.isExotic) { | ||
doParse(pp + '1', right.beginParse(), n - prefixLength - 1, res, extractor); | ||
} | ||
} | ||
@@ -48,0 +52,0 @@ } |
@@ -26,2 +26,10 @@ "use strict"; | ||
}); | ||
it('should parse dict with exotics', () => { | ||
const dict = Buffer.from('te6cckECMQEABTYAAhOCCc7v0txVpwSwAQIDEwEE53fpbirTglgEAwIISAEBs+lknRDMs3k2joGjp+jknI61P2rMabC6L/qACC9w7jkAAQhIAQGcUdBjRLK2XTGk56evuoGpCTwBOhaNJ3gUFm8TAe0n5QAyAxMBAye9rIc4cIC4MAYFCEgBAW8xXyW0o5rBLIX+pOz+eoPl5Z0fBZeD+gw+8nlzCIBhAAADEwEBQI3GZN/+jNgvBwgDEwEATAHi3hq0fjgKCQgISAEB7X4mvTbvptXZtPaqq5gTrwdCqEJEl390/UB0ycmJCL4AAAhIAQH6TA1tA7w5MqlUZE/iIYZlmhFY/0nMfG9YEH4IA4oG9AAmAxEA/JVwvbaVd7guDAsISAEB16y7YCM4yG1hDzXPs2L9dvwYsYEkdrb8qZoGeOZl/PUAAAIRAOC+0jznnr0oLQ0CEQDgeIc2I3nB6A8OCEgBAe5bbwbC8lILAkcW7BvTGqfH7ackw/xrJ+4xJ9g0lay7ACICDwDcWf0tZ7wILBACDwDPXe4GVoRIEhEISAEBpqnx4FY+VMV5fZOCgk11aYemGilh+4jfDQXGfVnuO2QAHwIPAMwQLzuW7ygrEwIPAMGD4CnDLugVFAhIAQHhkmjGsVW1E//8jS7VtFUP/nG+13eBz2DH8b6lkRkfowATAg8AwL3BnpH5iCoWAg8AwFv9OrsVqBgXCEgBAUnJQzkhkkoQxP70VqQNlWC2ClDLq6thxGgnH+VDOUIdABICDwDAI9NSaezIKRkCDQC0EKoS2YgbGghIAQEUW2BGLrIxcR0xUglz9exM5sN90zhfxgdRBW0FkjOQBQAPAg0ApaMONrGIHRwISAEB20MCSueWmfetSar0Li+5Q8Ip7t01JoPqgAJhVAvv4PEADAINAKFiMLr7SCgeAg0AoV/mfAxIJx8CDQCgRMc88eghIAhIAQHFrdac2QaoB3A0l38UmVSRNUC4pYwh2FyGJ5Vl+MyhJgAJAgkAbRF4aCYiAgkAZzzR6CQjCEgBAax1zsp9u3C3amDOdSJD9mQdDCqhiDj+ZgliaFHwLgWgAAIBj7rR38jjeSour5CAiFzP5jBGI24SWg7B0O37+3W43agB1e+xhmG5Sli1Zv3ZU7LzkGnD7l80gqgY14NkUTcQu0YAAC5TRp8sgyUISAEBnuyDAqn2pYKXQ/wsg9nT0mXlzYlz/XD92d92SJgRWv8AAQhIAQHEi2bfoY75oVrUbsi8DucSPG1oWEcd3KHUGYp0M+RQMQACCEgBAWJ+cuHH5x28R42OXHVN6a1Jf7VXJHmTxS88Gp/rZs2wAAIISAEBOz2DLgJl9RiydhyAtaSVoJad3MYUNnANbILzFnfSgEkADQhIAQHMnAtnlPhbBcz2DH0IRfSKuD1YfeBVgFaujjkW+iHqDgAPCEgBAVyyY7T30fyOwTmieJ8TthLedj5loRH+lxKqP5GbivrBABcISAEBuusLuLgfE7diC4/aes/bPk0SUgkgruJUU+h2pBoayZwAFwhIAQFmUFOfgo2uUi6cXR4FvV6TYWbPc7i/d5MmEQOA4FGbgQAbCEgBAV7HcGhkdhUswzXpHOx7WG6dvrqJjJdLMlC+kTQaJBqhACMISAEBG14jhyXXJ7RLRZCnKyrvsoR9OsBOvnfdOdK6ADqrS88AIQhIAQFZ+0nqF8AuEf14qz7cSjcXQjasTFC5jvk1aLELPzNMHAAnCEgBAdzBkxtJradUwhDmKe2fCZCcreVUbqwio3hW3tN6N2dBAhTWF3cC', 'base64'); | ||
const cs = Cell_1.Cell.fromBoc(dict)[0].beginParse(); | ||
let d = (0, parseDict_1.parseDict)(cs.readRef(), 256, (slice) => { | ||
return slice.toCell(); | ||
}); | ||
console.warn(d); | ||
}); | ||
}); |
@@ -104,3 +104,3 @@ "use strict"; | ||
const remaining = reader.readRemaining(); | ||
let cell = new __1.Cell(false, remaining); | ||
let cell = new __1.Cell('ordinary', remaining); | ||
for (let r of this.refs) { | ||
@@ -116,2 +116,5 @@ cell.refs.push(r); | ||
static fromCell(cell) { | ||
if (cell.isExotic) { | ||
throw Error('Unable to create slice from exotic'); | ||
} | ||
return new Slice(cell.bits, cell.refs); | ||
@@ -118,0 +121,0 @@ } |
export { BitString } from './boc/BitString'; | ||
export { BitStringReader } from './boc/BitStringReader'; | ||
export { Cell } from './boc/Cell'; | ||
export { CellType } from './boc/CellType'; | ||
export { TonClient } from './client/TonClient'; | ||
@@ -5,0 +6,0 @@ export { Wallet, validateWalletType, WalletContractType } from './client/Wallet'; |
{ | ||
"name": "ton", | ||
"version": "9.9.0", | ||
"version": "10.0.0", | ||
"repository": "https://github.com/tonwhales/ton.git", | ||
@@ -5,0 +5,0 @@ "author": "Steve Korshakov <steve@korshakov.com>", |
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
337378
198
8707
5