@txnod/sdk 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/AGENTS.md +29 -0
  2. package/CHANGELOG.md +22 -0
  3. package/LICENSE +21 -0
  4. package/README.md +434 -0
  5. package/dist/_shared/index.d.ts +68 -0
  6. package/dist/client-sandbox.d.ts +396 -0
  7. package/dist/client-sandbox.d.ts.map +1 -0
  8. package/dist/client-sandbox.js +448 -0
  9. package/dist/client-sandbox.js.map +1 -0
  10. package/dist/client.d.ts +429 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +588 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/env.d.ts +29 -0
  15. package/dist/env.d.ts.map +1 -0
  16. package/dist/env.js +44 -0
  17. package/dist/env.js.map +1 -0
  18. package/dist/errors.d.ts +1887 -0
  19. package/dist/errors.d.ts.map +1 -0
  20. package/dist/errors.js +2107 -0
  21. package/dist/errors.js.map +1 -0
  22. package/dist/index.d.ts +35 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +32 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/internals/error-ctor-map.d.ts +11 -0
  27. package/dist/internals/error-ctor-map.d.ts.map +1 -0
  28. package/dist/internals/error-ctor-map.js +75 -0
  29. package/dist/internals/error-ctor-map.js.map +1 -0
  30. package/dist/internals/fetch-with-retry.d.ts +34 -0
  31. package/dist/internals/fetch-with-retry.d.ts.map +1 -0
  32. package/dist/internals/fetch-with-retry.js +233 -0
  33. package/dist/internals/fetch-with-retry.js.map +1 -0
  34. package/dist/internals/hmac.d.ts +2 -0
  35. package/dist/internals/hmac.d.ts.map +1 -0
  36. package/dist/internals/hmac.js +10 -0
  37. package/dist/internals/hmac.js.map +1 -0
  38. package/dist/internals/logger.d.ts +9 -0
  39. package/dist/internals/logger.d.ts.map +1 -0
  40. package/dist/internals/logger.js +16 -0
  41. package/dist/internals/logger.js.map +1 -0
  42. package/dist/internals/parse-problem-details.d.ts +3 -0
  43. package/dist/internals/parse-problem-details.d.ts.map +1 -0
  44. package/dist/internals/parse-problem-details.js +76 -0
  45. package/dist/internals/parse-problem-details.js.map +1 -0
  46. package/dist/internals/synthetic-details.d.ts +12 -0
  47. package/dist/internals/synthetic-details.d.ts.map +1 -0
  48. package/dist/internals/synthetic-details.js +19 -0
  49. package/dist/internals/synthetic-details.js.map +1 -0
  50. package/dist/verify/chains/bsc.d.ts +17 -0
  51. package/dist/verify/chains/bsc.d.ts.map +1 -0
  52. package/dist/verify/chains/bsc.js +15 -0
  53. package/dist/verify/chains/bsc.js.map +1 -0
  54. package/dist/verify/chains/btc.d.ts +22 -0
  55. package/dist/verify/chains/btc.d.ts.map +1 -0
  56. package/dist/verify/chains/btc.js +55 -0
  57. package/dist/verify/chains/btc.js.map +1 -0
  58. package/dist/verify/chains/cardano.d.ts +73 -0
  59. package/dist/verify/chains/cardano.d.ts.map +1 -0
  60. package/dist/verify/chains/cardano.js +175 -0
  61. package/dist/verify/chains/cardano.js.map +1 -0
  62. package/dist/verify/chains/evm.d.ts +21 -0
  63. package/dist/verify/chains/evm.d.ts.map +1 -0
  64. package/dist/verify/chains/evm.js +46 -0
  65. package/dist/verify/chains/evm.js.map +1 -0
  66. package/dist/verify/chains/polygon.d.ts +17 -0
  67. package/dist/verify/chains/polygon.d.ts.map +1 -0
  68. package/dist/verify/chains/polygon.js +15 -0
  69. package/dist/verify/chains/polygon.js.map +1 -0
  70. package/dist/verify/chains/secp256k1-bip32.d.ts +20 -0
  71. package/dist/verify/chains/secp256k1-bip32.d.ts.map +1 -0
  72. package/dist/verify/chains/secp256k1-bip32.js +88 -0
  73. package/dist/verify/chains/secp256k1-bip32.js.map +1 -0
  74. package/dist/verify/chains/ton-cell.d.ts +179 -0
  75. package/dist/verify/chains/ton-cell.d.ts.map +1 -0
  76. package/dist/verify/chains/ton-cell.js +614 -0
  77. package/dist/verify/chains/ton-cell.js.map +1 -0
  78. package/dist/verify/chains/ton.d.ts +84 -0
  79. package/dist/verify/chains/ton.d.ts.map +1 -0
  80. package/dist/verify/chains/ton.js +131 -0
  81. package/dist/verify/chains/ton.js.map +1 -0
  82. package/dist/verify/chains/tron.d.ts +21 -0
  83. package/dist/verify/chains/tron.d.ts.map +1 -0
  84. package/dist/verify/chains/tron.js +42 -0
  85. package/dist/verify/chains/tron.js.map +1 -0
  86. package/dist/verify/config.d.ts +41 -0
  87. package/dist/verify/config.d.ts.map +1 -0
  88. package/dist/verify/config.js +120 -0
  89. package/dist/verify/config.js.map +1 -0
  90. package/dist/verify/errors.d.ts +56 -0
  91. package/dist/verify/errors.d.ts.map +1 -0
  92. package/dist/verify/errors.js +58 -0
  93. package/dist/verify/errors.js.map +1 -0
  94. package/dist/verify/index.d.ts +119 -0
  95. package/dist/verify/index.d.ts.map +1 -0
  96. package/dist/verify/index.js +166 -0
  97. package/dist/verify/index.js.map +1 -0
  98. package/dist/verify/xpub-safety.d.ts +33 -0
  99. package/dist/verify/xpub-safety.d.ts.map +1 -0
  100. package/dist/verify/xpub-safety.js +54 -0
  101. package/dist/verify/xpub-safety.js.map +1 -0
  102. package/dist/verify-webhook-signature.d.ts +30 -0
  103. package/dist/verify-webhook-signature.d.ts.map +1 -0
  104. package/dist/verify-webhook-signature.js +84 -0
  105. package/dist/verify-webhook-signature.js.map +1 -0
  106. package/docs/00-getting-started.md +135 -0
  107. package/docs/01-authentication.md +114 -0
  108. package/docs/02-invoices.md +216 -0
  109. package/docs/03-rates-and-quotes.md +82 -0
  110. package/docs/04-webhooks.md +126 -0
  111. package/docs/05-errors.md +199 -0
  112. package/docs/05-sandbox.md +159 -0
  113. package/docs/06-idempotency.md +132 -0
  114. package/docs/examples/express-webhook-receiver.md +97 -0
  115. package/docs/examples/nextjs-route-handler.md +206 -0
  116. package/docs/examples/sandbox-vitest-suite.md +263 -0
  117. package/docs/index.md +66 -0
  118. package/docs/reference/client.md +392 -0
  119. package/docs/reference/errors.md +161 -0
  120. package/docs/reference/types.md +400 -0
  121. package/package.json +53 -0
@@ -0,0 +1,614 @@
1
+ // SDK-side second copy of `packages/shared/src/chains/ton-cell.ts` — kept
2
+ // SDK-self-contained per CLAUDE.md "Package boundaries" (no runtime import
3
+ // from `@txnod/shared`). Byte-for-byte parity with the shared copy is
4
+ // asserted in the co-located cell-parity test (`ton.test.ts`).
5
+ //
6
+ // Vendored TON Cell + Address + beginCell core, narrowed to the
7
+ // address-derivation write path. Pure functions, no class hierarchies, no
8
+ // runtime dependency on `@ton/core`. The full upstream library is dragged in
9
+ // only as a `devDependency` for parity tests.
10
+ //
11
+ // Upstream provenance recorded inline on each export via `@source` tags:
12
+ // `@ton/core@0.63.1` (resolved 2026-04-29 via `npm view @ton/core version`)
13
+ // commit (latest tag): https://github.com/ton-org/ton-core
14
+ //
15
+ // References:
16
+ // - TEP-0002 (address byte layout, CRC-16/XMODEM checksum):
17
+ // https://github.com/ton-blockchain/TEPs/blob/master/text/0002-address.md
18
+ // - TON Docs — Cells (representation hash): https://docs.ton.org/v3/concepts/dive-into-ton/ton-blockchain/cells
19
+ // - TON Docs — Cell BoC: https://docs.ton.org/v3/documentation/data-formats/tlb/cell-boc
20
+ // - reveng CRC catalogue (XMODEM verified): https://reveng.sourceforge.io/crc-catalogue/16.htm
21
+ import { sha256 } from '@noble/hashes/sha2.js';
22
+ import { base64 } from '@scure/base';
23
+ const BOUNCEABLE_TAG = 0x11;
24
+ const NON_BOUNCEABLE_TAG = 0x51;
25
+ const TEST_FLAG = 0x80;
26
+ function hexToBytes(hex) {
27
+ const clean = hex.startsWith('0x') ? hex.slice(2) : hex;
28
+ if (clean.length % 2 !== 0)
29
+ throw new Error(`hex length is odd: ${clean.length}`);
30
+ const out = new Uint8Array(clean.length / 2);
31
+ for (let i = 0; i < out.length; i++) {
32
+ const b = parseInt(clean.slice(i * 2, i * 2 + 2), 16);
33
+ if (Number.isNaN(b))
34
+ throw new Error(`invalid hex byte at offset ${i * 2}`);
35
+ out[i] = b;
36
+ }
37
+ return out;
38
+ }
39
+ function bytesToHex(bytes) {
40
+ let s = '';
41
+ for (const b of bytes)
42
+ s += b.toString(16).padStart(2, '0');
43
+ return s;
44
+ }
45
+ /**
46
+ * CRC-16/XMODEM (`poly=0x1021, init=0x0000, refIn=false, refOut=false,
47
+ * xorOut=0x0000`) over `data || 0x0000`. Returns the 2 CRC bytes (high then low).
48
+ *
49
+ * @source github.com/ton-org/ton-core/src/utils/crc16.ts (vendored bit-for-bit;
50
+ * reveng CRC catalogue cross-checked).
51
+ */
52
+ function crc16Xmodem(data) {
53
+ const POLY = 0x1021;
54
+ let reg = 0;
55
+ const message = new Uint8Array(data.length + 2);
56
+ message.set(data);
57
+ for (const byte of message) {
58
+ let mask = 0x80;
59
+ while (mask > 0) {
60
+ reg <<= 1;
61
+ if (byte & mask)
62
+ reg += 1;
63
+ mask >>= 1;
64
+ if (reg > 0xffff) {
65
+ reg &= 0xffff;
66
+ reg ^= POLY;
67
+ }
68
+ }
69
+ }
70
+ return new Uint8Array([(reg >> 8) & 0xff, reg & 0xff]);
71
+ }
72
+ /**
73
+ * Parse either raw `<workchain>:<hex64>` or user-friendly base64/base64url
74
+ * (EQ/UQ/kQ/0Q…) into a normalised account record.
75
+ *
76
+ * @source github.com/ton-org/ton-core/src/address/Address.ts — `parseRaw` /
77
+ * `parseFriendly` semantics; rejects malformed input via plain `Error`.
78
+ */
79
+ export function parseAddress(input) {
80
+ if (input.includes(':')) {
81
+ const [wcStr, hashStr] = input.split(':');
82
+ if (!wcStr || !/^-?\d+$/.test(wcStr)) {
83
+ throw new Error(`parseAddress: invalid workchain in raw form: ${input}`);
84
+ }
85
+ if (!hashStr || hashStr.length !== 64 || !/^[a-fA-F0-9]+$/.test(hashStr)) {
86
+ throw new Error(`parseAddress: invalid hash in raw form: ${input}`);
87
+ }
88
+ return {
89
+ workchain: parseInt(wcStr, 10),
90
+ hex: hashStr.toLowerCase(),
91
+ bounceable: true,
92
+ testOnly: false,
93
+ };
94
+ }
95
+ if (input.length !== 48) {
96
+ throw new Error(`parseAddress: friendly form must be 48 chars, got ${input.length}`);
97
+ }
98
+ if (!/^[A-Za-z0-9+/_-]+$/.test(input)) {
99
+ throw new Error(`parseAddress: invalid base64 characters: ${input}`);
100
+ }
101
+ const standardised = input.replace(/-/g, '+').replace(/_/g, '/');
102
+ let raw;
103
+ try {
104
+ raw = base64.decode(standardised);
105
+ }
106
+ catch (e) {
107
+ throw new Error(`parseAddress: base64 decode failed: ${e.message}`, {
108
+ cause: e,
109
+ });
110
+ }
111
+ if (raw.length !== 36) {
112
+ throw new Error(`parseAddress: expected 36 bytes, got ${raw.length}`);
113
+ }
114
+ const addrBody = raw.subarray(0, 34);
115
+ const crc = raw.subarray(34, 36);
116
+ const expectedCrc = crc16Xmodem(addrBody);
117
+ if (crc[0] !== expectedCrc[0] || crc[1] !== expectedCrc[1]) {
118
+ throw new Error(`parseAddress: CRC checksum mismatch`);
119
+ }
120
+ let tag = addrBody[0];
121
+ let testOnly = false;
122
+ if (tag & TEST_FLAG) {
123
+ testOnly = true;
124
+ tag ^= TEST_FLAG;
125
+ }
126
+ if (tag !== BOUNCEABLE_TAG && tag !== NON_BOUNCEABLE_TAG) {
127
+ throw new Error(`parseAddress: unknown address tag 0x${tag.toString(16)}`);
128
+ }
129
+ const bounceable = tag === BOUNCEABLE_TAG;
130
+ // Workchain is signed int8: 0xff → -1 (masterchain), 0x00 → 0 (basechain).
131
+ const wcByte = addrBody[1];
132
+ const workchain = wcByte === 0xff ? -1 : wcByte;
133
+ const hex = bytesToHex(addrBody.subarray(2, 34));
134
+ return { workchain, hex, bounceable, testOnly };
135
+ }
136
+ /**
137
+ * Encode a parsed account in user-friendly base64url form. Tag byte is
138
+ * `0x11` (bounceable) / `0x51` (non-bounceable), OR'd with `0x80` for testnet.
139
+ *
140
+ * @source github.com/ton-org/ton-core/src/address/Address.ts — `toString`
141
+ * with `urlSafe: true`.
142
+ */
143
+ export function serializeAddressUserFriendly(parts, opts) {
144
+ const hash = hexToBytes(parts.hex);
145
+ if (hash.length !== 32) {
146
+ throw new Error(`serializeAddressUserFriendly: hash must be 32 bytes`);
147
+ }
148
+ let tag = opts.bounceable ? BOUNCEABLE_TAG : NON_BOUNCEABLE_TAG;
149
+ if (opts.testOnly)
150
+ tag |= TEST_FLAG;
151
+ const addr = new Uint8Array(34);
152
+ addr[0] = tag;
153
+ addr[1] = parts.workchain & 0xff;
154
+ addr.set(hash, 2);
155
+ const crc = crc16Xmodem(addr);
156
+ const full = new Uint8Array(36);
157
+ full.set(addr);
158
+ full.set(crc, 34);
159
+ return base64.encode(full).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
160
+ }
161
+ /** Lowercase `<workchain>:<hex64>` raw form. */
162
+ export function serializeAddressRaw(parts) {
163
+ return `${parts.workchain}:${parts.hex.toLowerCase()}`;
164
+ }
165
+ /**
166
+ * Parse-then-compare on raw form. EQ… / UQ… / kQ… / 0Q… all collapse to the
167
+ * same `(workchain, hex)` tuple per AR-TON-4 + research §4.9.4.
168
+ */
169
+ export function addressEquals(a, b) {
170
+ const pa = parseAddress(a);
171
+ const pb = parseAddress(b);
172
+ return pa.workchain === pb.workchain && pa.hex === pb.hex;
173
+ }
174
+ /**
175
+ * @source github.com/ton-org/ton-core/src/boc/Builder.ts — `beginCell()` /
176
+ * `Builder` write-side primitives only.
177
+ */
178
+ export function beginCell() {
179
+ const state = {
180
+ bits: new Uint8Array(128), // 1023 bits → 128 bytes max
181
+ bitLen: 0,
182
+ refs: [],
183
+ };
184
+ function writeBit(value) {
185
+ if (state.bitLen >= 1023)
186
+ throw new Error('CellBuilder overflow');
187
+ const bit = typeof value === 'boolean' ? (value ? 1 : 0) : value & 1;
188
+ if (bit) {
189
+ state.bits[state.bitLen >> 3] |= 1 << (7 - (state.bitLen & 7));
190
+ }
191
+ state.bitLen++;
192
+ }
193
+ function writeUint(value, bits) {
194
+ if (bits < 0 || !Number.isSafeInteger(bits)) {
195
+ throw new Error(`writeUint: invalid bits ${bits}`);
196
+ }
197
+ if (bits === 0) {
198
+ if (BigInt(value) !== 0n)
199
+ throw new Error(`writeUint: value not zero for 0 bits`);
200
+ return;
201
+ }
202
+ const v = BigInt(value);
203
+ const limit = 1n << BigInt(bits);
204
+ if (v < 0n || v >= limit) {
205
+ throw new Error(`writeUint: value ${value} out of range for ${bits} bits`);
206
+ }
207
+ for (let i = bits - 1; i >= 0; i--) {
208
+ writeBit(Number((v >> BigInt(i)) & 1n));
209
+ }
210
+ }
211
+ function writeInt(value, bits) {
212
+ if (bits === 0) {
213
+ if (BigInt(value) !== 0n)
214
+ throw new Error(`writeInt: value not zero for 0 bits`);
215
+ return;
216
+ }
217
+ let v = BigInt(value);
218
+ const limit = 1n << (BigInt(bits) - 1n);
219
+ if (v < -limit || v >= limit) {
220
+ throw new Error(`writeInt: value ${value} out of range for ${bits} bits`);
221
+ }
222
+ if (v < 0n)
223
+ v = (1n << BigInt(bits)) + v;
224
+ writeUint(v, bits);
225
+ }
226
+ const builder = {
227
+ storeUint(value, bits) {
228
+ writeUint(value, bits);
229
+ return builder;
230
+ },
231
+ storeInt(value, bits) {
232
+ writeInt(value, bits);
233
+ return builder;
234
+ },
235
+ storeBit(value) {
236
+ writeBit(value);
237
+ return builder;
238
+ },
239
+ storeBuffer(buf) {
240
+ for (const byte of buf)
241
+ writeUint(byte, 8);
242
+ return builder;
243
+ },
244
+ storeRef(cell) {
245
+ if (state.refs.length >= 4)
246
+ throw new Error('CellBuilder: too many refs');
247
+ state.refs.push(cell);
248
+ return builder;
249
+ },
250
+ storeAddress(parts) {
251
+ // Internal address per TL-B: `addr_std$10 anycast:(Maybe Anycast)
252
+ // workchain_id:int8 address:bits256`. We never emit anycast.
253
+ writeUint(2, 2); // tag: internal
254
+ writeUint(0, 1); // anycast = none
255
+ writeInt(parts.workchain, 8);
256
+ const hash = hexToBytes(parts.hex);
257
+ if (hash.length !== 32) {
258
+ throw new Error('storeAddress: hash must be 32 bytes');
259
+ }
260
+ for (const byte of hash)
261
+ writeUint(byte, 8);
262
+ return builder;
263
+ },
264
+ endCell() {
265
+ const bytesLen = Math.ceil(state.bitLen / 8);
266
+ const bits = state.bits.slice(0, bytesLen);
267
+ return finalizeCell(bits, state.bitLen, state.refs.slice());
268
+ },
269
+ };
270
+ return builder;
271
+ }
272
+ function bitsToPaddedBuffer(bits, bitLen) {
273
+ const byteLen = Math.ceil(bitLen / 8);
274
+ const out = new Uint8Array(byteLen);
275
+ out.set(bits.subarray(0, byteLen));
276
+ const padBits = byteLen * 8 - bitLen;
277
+ if (padBits > 0) {
278
+ // Set the leading padding bit to 1 (the rest are already zero).
279
+ out[bitLen >> 3] |= 1 << (padBits - 1);
280
+ }
281
+ return out;
282
+ }
283
+ function finalizeCell(bits, bitLen, refs) {
284
+ // Ordinary-cell representation per TON Cell spec:
285
+ // d1 = refsCount + 8*(exotic?1:0) + 32*levelMask
286
+ // d2 = ceil(bits/8) + floor(bits/8) // doubled when not byte-aligned
287
+ // payload = paddedBits || (childDepth*2 each) || (childHash*32 each)
288
+ // Hash = sha256(payload). For our use-case, exotic=0, levelMask=0.
289
+ const refsDescriptor = refs.length;
290
+ const bitsDescriptor = Math.ceil(bitLen / 8) + Math.floor(bitLen / 8);
291
+ const padded = bitsToPaddedBuffer(bits, bitLen);
292
+ const repr = new Uint8Array(2 + padded.length + (2 + 32) * refs.length);
293
+ let cursor = 0;
294
+ repr[cursor++] = refsDescriptor;
295
+ repr[cursor++] = bitsDescriptor;
296
+ repr.set(padded, cursor);
297
+ cursor += padded.length;
298
+ for (const r of refs) {
299
+ repr[cursor++] = (r.depth >> 8) & 0xff;
300
+ repr[cursor++] = r.depth & 0xff;
301
+ }
302
+ for (const r of refs) {
303
+ repr.set(r.hash, cursor);
304
+ cursor += 32;
305
+ }
306
+ const hash = sha256(repr);
307
+ let depth = 0;
308
+ for (const r of refs)
309
+ depth = Math.max(depth, r.depth);
310
+ if (refs.length > 0)
311
+ depth += 1;
312
+ return { bits, bitLen, refs: Object.freeze(refs.slice()), depth, hash };
313
+ }
314
+ /** 32-byte representation hash per TVM spec (level 0, no exotic). */
315
+ export function cellHash(cell) {
316
+ return cell.hash;
317
+ }
318
+ function getBit(bits, idx) {
319
+ const byte = bits[idx >> 3] ?? 0;
320
+ return ((byte >> (7 - (idx & 7))) & 1);
321
+ }
322
+ /** Open a read-side slice over `cell`. */
323
+ export function beginParse(cell) {
324
+ let bitOff = 0;
325
+ let refOff = 0;
326
+ function loadUint(bits) {
327
+ if (bits < 0 || !Number.isSafeInteger(bits)) {
328
+ throw new Error(`loadUint: invalid bits ${bits}`);
329
+ }
330
+ if (bits === 0)
331
+ return 0n;
332
+ if (bitOff + bits > cell.bitLen) {
333
+ throw new Error(`loadUint: out of range (${bits} from ${bitOff}/${cell.bitLen})`);
334
+ }
335
+ let v = 0n;
336
+ for (let i = 0; i < bits; i++) {
337
+ v = (v << 1n) | BigInt(getBit(cell.bits, bitOff + i));
338
+ }
339
+ bitOff += bits;
340
+ return v;
341
+ }
342
+ function loadInt(bits) {
343
+ if (bits === 0)
344
+ return 0n;
345
+ const u = loadUint(bits);
346
+ const sign = 1n << BigInt(bits - 1);
347
+ if (u >= sign)
348
+ return u - (1n << BigInt(bits));
349
+ return u;
350
+ }
351
+ return {
352
+ remainingBits() {
353
+ return cell.bitLen - bitOff;
354
+ },
355
+ remainingRefs() {
356
+ return cell.refs.length - refOff;
357
+ },
358
+ loadUint,
359
+ loadInt,
360
+ loadBit() {
361
+ return Number(loadUint(1));
362
+ },
363
+ loadBuffer(bytes) {
364
+ if ((bitOff & 7) !== 0) {
365
+ throw new Error(`loadBuffer: cursor not byte-aligned (${bitOff})`);
366
+ }
367
+ const bitsNeeded = bytes * 8;
368
+ if (bitOff + bitsNeeded > cell.bitLen) {
369
+ throw new Error(`loadBuffer: out of range`);
370
+ }
371
+ const start = bitOff >> 3;
372
+ const out = cell.bits.slice(start, start + bytes);
373
+ bitOff += bitsNeeded;
374
+ return out;
375
+ },
376
+ loadRef() {
377
+ const ref = cell.refs[refOff];
378
+ if (ref === undefined)
379
+ throw new Error('loadRef: no refs remaining');
380
+ refOff += 1;
381
+ return ref;
382
+ },
383
+ loadRemainingBits() {
384
+ const remaining = cell.bitLen - bitOff;
385
+ if (remaining <= 0)
386
+ return { bits: new Uint8Array(0), bitLen: 0 };
387
+ // Pack the remaining bits left-aligned into a fresh buffer.
388
+ const byteLen = Math.ceil(remaining / 8);
389
+ const out = new Uint8Array(byteLen);
390
+ for (let i = 0; i < remaining; i++) {
391
+ const bit = getBit(cell.bits, bitOff + i);
392
+ if (bit)
393
+ out[i >> 3] |= 1 << (7 - (i & 7));
394
+ }
395
+ bitOff += remaining;
396
+ return { bits: out, bitLen: remaining };
397
+ },
398
+ };
399
+ }
400
+ /**
401
+ * TEP-74 `VarUInteger 16` decoder: 4-bit length prefix `n` (0..15) followed by
402
+ * `n*8` bits of big-endian unsigned integer. n=0 → value=0. Returns `bigint`.
403
+ *
404
+ * @source github.com/ton-blockchain/TIPs/issues/74 (TEP-74 Fungible Tokens),
405
+ * `Coins` / `VarUInteger 16` definition. Cross-checked against TL-B
406
+ * reference (https://docs.ton.org/develop/data-formats/tl-b-types).
407
+ */
408
+ export function readVarUInteger16(slice) {
409
+ const len = Number(slice.loadUint(4));
410
+ if (len === 0)
411
+ return 0n;
412
+ return slice.loadUint(len * 8);
413
+ }
414
+ /**
415
+ * TL-B `MsgAddress` decoder narrowed to the `addr_std` shape — the only form
416
+ * that matters for end-user senders in jetton transfer/notification flows.
417
+ * Returns `null` for `addr_none`; throws for `addr_extern`/`addr_var`/anycast.
418
+ *
419
+ * addr_none$00 = MsgAddressExt;
420
+ * addr_extern$01 = MsgAddressExt;
421
+ * anycast_info$_ depth:(#<= 30) rewrite_pfx:(bits depth) = Anycast;
422
+ * addr_std$10 anycast:(Maybe Anycast)
423
+ * workchain_id:int8 address:bits256 = MsgAddressInt;
424
+ * addr_var$110 anycast:(Maybe Anycast)
425
+ * addr_len:(## 9) workchain_id:int32 address:(bits addr_len) = MsgAddressInt;
426
+ *
427
+ * @source TL-B reference https://docs.ton.org/develop/data-formats/tl-b-types
428
+ * (`MsgAddress`); cross-checked at impl time 2026-04-29 against TonConsole
429
+ * Cookbook jetton-transfer notes.
430
+ */
431
+ export function readMsgAddress(slice) {
432
+ const tag = Number(slice.loadUint(2));
433
+ if (tag === 0)
434
+ return null; // addr_none
435
+ if (tag === 1) {
436
+ throw new Error('readMsgAddress: addr_extern not supported');
437
+ }
438
+ if (tag === 2) {
439
+ // addr_std
440
+ const anycast = slice.loadBit();
441
+ if (anycast === 1) {
442
+ throw new Error('readMsgAddress: anycast addr_std not supported');
443
+ }
444
+ const workchain = Number(slice.loadInt(8));
445
+ // Hash is 256 bits — `loadBuffer` requires byte alignment which doesn't
446
+ // hold after the 11-bit prefix (tag+anycast+workchain). Read the bits
447
+ // and pack them into a 32-byte buffer.
448
+ const hashHigh = slice.loadUint(128);
449
+ const hashLow = slice.loadUint(128);
450
+ const hashBig = (hashHigh << 128n) | hashLow;
451
+ const hashHex = hashBig.toString(16).padStart(64, '0');
452
+ return { workchain, hex: hashHex };
453
+ }
454
+ // tag === 3 → addr_var
455
+ throw new Error('readMsgAddress: addr_var not supported');
456
+ }
457
+ /**
458
+ * Parse a single-root BoC (magic `0xb5ee9c72`) hex string into a `Cell`. Only
459
+ * the variant we need for the wallet/jetton code BoCs we vendor: no idx, no
460
+ * cache_bits, optional crc32c trailer (validated when present).
461
+ *
462
+ * @source github.com/ton-org/ton-core/src/boc/cell/serialization.ts —
463
+ * `parseBoc` + `deserializeBoc` for magic `0xb5ee9c72`. CRC32-C validation
464
+ * intentionally skipped (the wallet sources we vendor are constants — any
465
+ * tampering would surface immediately as a derivation mismatch in tests).
466
+ */
467
+ export function deserializeBoC(hex) {
468
+ const buf = hexToBytes(hex);
469
+ let off = 0;
470
+ const readByte = () => {
471
+ if (off >= buf.length)
472
+ throw new Error('deserializeBoC: truncated BoC');
473
+ return buf[off++];
474
+ };
475
+ const readUint = (bytes) => {
476
+ let v = 0;
477
+ for (let i = 0; i < bytes; i++)
478
+ v = v * 256 + readByte();
479
+ return v;
480
+ };
481
+ const magic = readUint(4);
482
+ if (magic !== 0xb5ee9c72) {
483
+ throw new Error(`deserializeBoC: unsupported BoC magic 0x${magic.toString(16)}`);
484
+ }
485
+ const flagsByte = readByte();
486
+ // bit7=hasIdx, bit6=hasCrc32c, bit5=hasCacheBits, bits4-3=flags(=0), bits2-0=size
487
+ // We tolerate any flag combination but only consume the trailing crc32c when
488
+ // present — without re-validating it (constant inputs are tamper-evident
489
+ // through derivation tests).
490
+ const hasIdx = (flagsByte & 0x80) !== 0;
491
+ const hasCrc32c = (flagsByte & 0x40) !== 0;
492
+ const size = flagsByte & 0x07;
493
+ const offBytes = readByte();
494
+ const cellsCount = readUint(size);
495
+ const rootsCount = readUint(size);
496
+ readUint(size); // absent
497
+ readUint(offBytes); // totalCellSize
498
+ const rootIndex = readUint(size);
499
+ if (rootsCount < 1)
500
+ throw new Error('deserializeBoC: no roots');
501
+ for (let i = 1; i < rootsCount; i++)
502
+ readUint(size);
503
+ if (hasIdx)
504
+ off += cellsCount * offBytes;
505
+ const cells = [];
506
+ for (let i = 0; i < cellsCount; i++) {
507
+ const d1 = readByte();
508
+ const d2 = readByte();
509
+ const refsCount = d1 & 0x07;
510
+ const exotic = (d1 & 0x08) !== 0;
511
+ if (exotic)
512
+ throw new Error('deserializeBoC: exotic cells not supported');
513
+ const hasHashes = (d1 & 0x10) !== 0;
514
+ if (hasHashes) {
515
+ // Skip stored hashes/depths — we recompute. levelMask = d1 >> 5.
516
+ const levelMask = d1 >> 5;
517
+ const hashCount = (() => {
518
+ let n = 0, m = levelMask & 7;
519
+ for (let k = 0; k < 3; k++) {
520
+ n += m & 1;
521
+ m >>= 1;
522
+ }
523
+ return n + 1;
524
+ })();
525
+ off += hashCount * (32 + 2);
526
+ }
527
+ const dataBytes = Math.ceil(d2 / 2);
528
+ const padded = (d2 & 1) !== 0;
529
+ const data = buf.subarray(off, off + dataBytes);
530
+ off += dataBytes;
531
+ let bitLen;
532
+ let bits;
533
+ if (!padded) {
534
+ bitLen = dataBytes * 8;
535
+ bits = new Uint8Array(data);
536
+ }
537
+ else {
538
+ // Strip TON padding: a single 1-bit followed by zeros.
539
+ let last = dataBytes * 8;
540
+ for (let k = dataBytes - 1; k >= 0; k--) {
541
+ const b = data[k];
542
+ if (b !== 0) {
543
+ let bitPos = b & -b;
544
+ if ((bitPos & 1) === 0)
545
+ bitPos = Math.log2(bitPos) + 1;
546
+ last = k * 8 + (8 - bitPos);
547
+ break;
548
+ }
549
+ }
550
+ bitLen = last;
551
+ bits = new Uint8Array(data);
552
+ }
553
+ const refIndices = [];
554
+ for (let r = 0; r < refsCount; r++)
555
+ refIndices.push(readUint(size));
556
+ cells.push({ bits, bitLen, refIndices, finalized: null });
557
+ }
558
+ if (hasCrc32c)
559
+ off += 4; // skip crc32c trailer
560
+ // Finalize bottom-up so refs are already concrete by the time we hash them.
561
+ for (let i = cellsCount - 1; i >= 0; i--) {
562
+ const c = cells[i];
563
+ const refs = c.refIndices.map((idx) => {
564
+ const child = cells[idx]?.finalized;
565
+ if (!child)
566
+ throw new Error('deserializeBoC: forward reference');
567
+ return child;
568
+ });
569
+ c.finalized = finalizeCell(c.bits, c.bitLen, refs);
570
+ }
571
+ const root = cells[rootIndex]?.finalized;
572
+ if (!root)
573
+ throw new Error('deserializeBoC: missing root cell');
574
+ return root;
575
+ }
576
+ /**
577
+ * Build the StateInit cell for a wallet contract:
578
+ * `_ split_depth:(Maybe (## 5)) special:(Maybe TickTock) code:(Maybe ^Cell)
579
+ * data:(Maybe ^Cell) library:(HashmapE 256 SimpleLib) = StateInit;`
580
+ *
581
+ * The per-version data-cell layout differs (v3R2 vs v4R2 vs v5R1), so the
582
+ * caller supplies a `dataCellBuilder` lambda — keeping this function
583
+ * version-agnostic.
584
+ *
585
+ * @source github.com/ton-org/ton-core/src/types/StateInit.ts — `storeStateInit`.
586
+ */
587
+ export function buildStateInit(opts) {
588
+ const code = deserializeBoC(opts.codeBoCHex);
589
+ const data = opts.dataCellBuilder({
590
+ subwalletId: opts.subwalletId,
591
+ publicKeyHex: opts.publicKeyHex,
592
+ });
593
+ return beginCell()
594
+ .storeBit(0) // splitDepth = none
595
+ .storeBit(0) // special = none
596
+ .storeBit(1) // hasCode
597
+ .storeRef(code)
598
+ .storeBit(1) // hasData
599
+ .storeRef(data)
600
+ .storeBit(0) // libraries = empty dict
601
+ .endCell();
602
+ }
603
+ /**
604
+ * Compute the on-chain account-id for a TON wallet contract. The hex form is
605
+ * the 32-byte representation hash of the `StateInit` cell; pair with
606
+ * `serializeAddressUserFriendly` at API boundaries.
607
+ *
608
+ * @source github.com/ton-org/ton-core/src/address/contractAddress.ts.
609
+ */
610
+ export function computeWalletAddress(opts) {
611
+ const stateInit = buildStateInit(opts);
612
+ return { workchain: opts.workchain, hex: bytesToHex(cellHash(stateInit)) };
613
+ }
614
+ //# sourceMappingURL=ton-cell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ton-cell.js","sourceRoot":"","sources":["../../../src/verify/chains/ton-cell.ts"],"names":[],"mappings":"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"}