@ton-community/ton-ledger 7.1.0-pre.1 → 7.2.0-pre.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.
- package/dist/TonTransport.d.ts +15 -0
- package/dist/TonTransport.js +66 -10
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -1
- package/dist/utils/getInit.d.ts +1 -1
- package/dist/utils/getInit.js +7 -7
- package/package.json +1 -1
package/dist/TonTransport.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import Transport from "@ledgerhq/hw-transport";
|
|
3
3
|
import { Address, Cell, SendMode, StateInit } from "@ton/core";
|
|
4
|
+
export type KnownJetton = {
|
|
5
|
+
symbol: string;
|
|
6
|
+
masterAddress: Address;
|
|
7
|
+
};
|
|
8
|
+
export declare const KNOWN_JETTONS: KnownJetton[];
|
|
4
9
|
export type TonPayloadFormat = {
|
|
5
10
|
type: 'unsafe';
|
|
6
11
|
message: Cell;
|
|
@@ -16,6 +21,10 @@ export type TonPayloadFormat = {
|
|
|
16
21
|
customPayload: Cell | null;
|
|
17
22
|
forwardAmount: bigint;
|
|
18
23
|
forwardPayload: Cell | null;
|
|
24
|
+
knownJetton: {
|
|
25
|
+
jettonId: number;
|
|
26
|
+
workchain: number;
|
|
27
|
+
} | null;
|
|
19
28
|
} | {
|
|
20
29
|
type: 'nft-transfer';
|
|
21
30
|
queryId: bigint | null;
|
|
@@ -99,6 +108,8 @@ export declare class TonTransport {
|
|
|
99
108
|
testOnly?: boolean;
|
|
100
109
|
bounceable?: boolean;
|
|
101
110
|
chain?: number;
|
|
111
|
+
subwalletId?: number;
|
|
112
|
+
walletVersion?: 'v3r2' | 'v4';
|
|
102
113
|
}): Promise<{
|
|
103
114
|
address: string;
|
|
104
115
|
publicKey: Buffer;
|
|
@@ -107,6 +118,8 @@ export declare class TonTransport {
|
|
|
107
118
|
testOnly?: boolean;
|
|
108
119
|
bounceable?: boolean;
|
|
109
120
|
chain?: number;
|
|
121
|
+
subwalletId?: number;
|
|
122
|
+
walletVersion?: 'v3r2' | 'v4';
|
|
110
123
|
}): Promise<{
|
|
111
124
|
address: string;
|
|
112
125
|
publicKey: Buffer;
|
|
@@ -119,6 +132,8 @@ export declare class TonTransport {
|
|
|
119
132
|
testOnly?: boolean;
|
|
120
133
|
bounceable?: boolean;
|
|
121
134
|
chain?: number;
|
|
135
|
+
subwalletId?: number;
|
|
136
|
+
walletVersion?: 'v3r2' | 'v4';
|
|
122
137
|
}): Promise<{
|
|
123
138
|
signature: Buffer;
|
|
124
139
|
hash: Buffer;
|
package/dist/TonTransport.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TonTransport = exports.parseMessage = void 0;
|
|
3
|
+
exports.TonTransport = exports.parseMessage = exports.KNOWN_JETTONS = void 0;
|
|
4
4
|
const core_1 = require("@ton/core");
|
|
5
5
|
const crypto_1 = require("@ton/crypto");
|
|
6
6
|
const teslabot_1 = require("teslabot");
|
|
@@ -15,6 +15,32 @@ const INS_PROOF = 0x08;
|
|
|
15
15
|
const INS_SIGN_DATA = 0x09;
|
|
16
16
|
const INS_SETTINGS = 0x0A;
|
|
17
17
|
const DEFAULT_SUBWALLET_ID = 698983191;
|
|
18
|
+
exports.KNOWN_JETTONS = [
|
|
19
|
+
{
|
|
20
|
+
symbol: 'USDT',
|
|
21
|
+
masterAddress: core_1.Address.parse('EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs'),
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
symbol: 'NOT',
|
|
25
|
+
masterAddress: core_1.Address.parse('EQAvlWFDxGF2lXm67y4yzC17wYKD9A0guwPkMs1gOsM__NOT'),
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
symbol: 'tsTON',
|
|
29
|
+
masterAddress: core_1.Address.parse('EQC98_qAmNEptUtPc7W6xdHh_ZHrBUFpw5Ft_IzNU20QAJav'),
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
symbol: 'wsTON',
|
|
33
|
+
masterAddress: core_1.Address.parse('EQB0SoxuGDx5qjVt0P_bPICFeWdFLBmVopHhjgfs0q-wsTON'),
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
symbol: 'hTON',
|
|
37
|
+
masterAddress: core_1.Address.parse('EQDPdq8xjAhytYqfGSX8KcFWIReCufsB9Wdg0pLlYSO_h76w'),
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
symbol: 'stTON',
|
|
41
|
+
masterAddress: core_1.Address.parse('EQDNhy-nxYFgUqzfUzImBEP67JqsyMIcyk2S5_RwNNEYku0k'),
|
|
42
|
+
},
|
|
43
|
+
];
|
|
18
44
|
const dnsWalletKey = Buffer.from([0xe8, 0xd4, 0x40, 0x50, 0x87, 0x3d, 0xba, 0x86, 0x5a, 0xa7, 0xc1, 0x70, 0xab, 0x4c, 0xce, 0x64,
|
|
19
45
|
0xd9, 0x08, 0x39, 0xa3, 0x4d, 0xcf, 0xd6, 0xcf, 0x71, 0xd1, 0x4e, 0x02, 0x05, 0x44, 0x3b, 0x1b]);
|
|
20
46
|
function normalizeQueryId(qid) {
|
|
@@ -81,6 +107,7 @@ function parseMessage(cell, opts) {
|
|
|
81
107
|
customPayload,
|
|
82
108
|
forwardAmount,
|
|
83
109
|
forwardPayload,
|
|
110
|
+
knownJetton: null,
|
|
84
111
|
};
|
|
85
112
|
}
|
|
86
113
|
case 0x5fcc3d14: {
|
|
@@ -331,6 +358,9 @@ function processAddressFlags(opts) {
|
|
|
331
358
|
const bounceable = opts?.bounceable ?? true;
|
|
332
359
|
const testOnly = opts?.testOnly ?? false;
|
|
333
360
|
const chain = opts?.chain ?? 0;
|
|
361
|
+
const subwalletId = opts?.subwalletId ?? 698983191;
|
|
362
|
+
const walletVersion = opts?.walletVersion ?? 'v3r2';
|
|
363
|
+
let specifiers = undefined;
|
|
334
364
|
let flags = 0x00;
|
|
335
365
|
if (testOnly) {
|
|
336
366
|
flags |= 0x01;
|
|
@@ -338,7 +368,14 @@ function processAddressFlags(opts) {
|
|
|
338
368
|
if (chain === -1) {
|
|
339
369
|
flags |= 0x02;
|
|
340
370
|
}
|
|
341
|
-
|
|
371
|
+
if (subwalletId !== 698983191 || walletVersion !== 'v4') {
|
|
372
|
+
flags |= 0x04;
|
|
373
|
+
specifiers = {
|
|
374
|
+
subwalletId,
|
|
375
|
+
isV3R2: walletVersion === 'v3r2',
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
return { bounceable, testOnly, chain, flags, specifiers };
|
|
342
379
|
}
|
|
343
380
|
function convertPayload(input) {
|
|
344
381
|
let payload = null;
|
|
@@ -376,15 +413,25 @@ function convertPayload(input) {
|
|
|
376
413
|
let b = (0, core_1.beginCell)()
|
|
377
414
|
.storeUint(input.type === 'jetton-transfer' ? 0x0f8a7ea5 : 0x5fcc3d14, 32);
|
|
378
415
|
let d = Buffer.alloc(0);
|
|
416
|
+
let flags = 0;
|
|
379
417
|
if (input.queryId !== null) {
|
|
380
|
-
|
|
418
|
+
flags |= 1;
|
|
419
|
+
}
|
|
420
|
+
if (input.type === 'jetton-transfer' && input.knownJetton !== null) {
|
|
421
|
+
flags |= 2;
|
|
422
|
+
}
|
|
423
|
+
d = Buffer.concat([d, (0, ledgerWriter_1.writeUint8)(flags)]);
|
|
424
|
+
if (input.queryId !== null) {
|
|
425
|
+
d = Buffer.concat([d, (0, ledgerWriter_1.writeUint64)(input.queryId)]);
|
|
381
426
|
b = b.storeUint(input.queryId, 64);
|
|
382
427
|
}
|
|
383
428
|
else {
|
|
384
|
-
d = Buffer.concat([d, (0, ledgerWriter_1.writeUint8)(0)]);
|
|
385
429
|
b = b.storeUint(0, 64);
|
|
386
430
|
}
|
|
387
431
|
if (input.type === 'jetton-transfer') {
|
|
432
|
+
if (input.knownJetton !== null) {
|
|
433
|
+
d = Buffer.concat([d, (0, ledgerWriter_1.writeUint16)(input.knownJetton.jettonId), (0, ledgerWriter_1.writeUint8)(input.knownJetton.workchain)]);
|
|
434
|
+
}
|
|
388
435
|
d = Buffer.concat([d, (0, ledgerWriter_1.writeVarUInt)(input.amount)]);
|
|
389
436
|
b = b.storeCoins(input.amount);
|
|
390
437
|
d = Buffer.concat([d, (0, ledgerWriter_1.writeAddress)(input.destination)]);
|
|
@@ -702,14 +749,14 @@ class TonTransport {
|
|
|
702
749
|
// Check path
|
|
703
750
|
validatePath(path);
|
|
704
751
|
// Resolve flags
|
|
705
|
-
const { bounceable, testOnly, chain } = processAddressFlags(opts);
|
|
752
|
+
const { bounceable, testOnly, chain, specifiers } = processAddressFlags(opts);
|
|
706
753
|
// Get public key
|
|
707
754
|
let response = await this.#doRequest(INS_ADDRESS, 0x00, 0x00, pathElementsToBuffer(path.map((v) => v + 0x80000000)));
|
|
708
755
|
if (response.length !== 32) {
|
|
709
756
|
throw Error('Invalid response');
|
|
710
757
|
}
|
|
711
758
|
// Contract
|
|
712
|
-
const contract = (0, getInit_1.getInit)(
|
|
759
|
+
const contract = (0, getInit_1.getInit)(response, specifiers?.subwalletId ?? 698983191, specifiers?.isV3R2 ?? false);
|
|
713
760
|
const address = (0, core_1.contractAddress)(chain, contract);
|
|
714
761
|
return { address: address.toString({ bounceable, testOnly }), publicKey: response };
|
|
715
762
|
}
|
|
@@ -717,14 +764,18 @@ class TonTransport {
|
|
|
717
764
|
// Check path
|
|
718
765
|
validatePath(path);
|
|
719
766
|
// Resolve flags
|
|
720
|
-
const { bounceable, testOnly, chain, flags } = processAddressFlags(opts);
|
|
767
|
+
const { bounceable, testOnly, chain, flags, specifiers } = processAddressFlags(opts);
|
|
768
|
+
let r = pathElementsToBuffer(path.map((v) => v + 0x80000000));
|
|
769
|
+
if (specifiers !== undefined) {
|
|
770
|
+
r = Buffer.concat([r, (0, ledgerWriter_1.writeUint8)(specifiers.isV3R2 ? 1 : 0), (0, ledgerWriter_1.writeUint32)(specifiers.subwalletId)]);
|
|
771
|
+
}
|
|
721
772
|
// Get public key
|
|
722
|
-
let response = await this.#doRequest(INS_ADDRESS, 0x01, flags,
|
|
773
|
+
let response = await this.#doRequest(INS_ADDRESS, 0x01, flags, r);
|
|
723
774
|
if (response.length !== 32) {
|
|
724
775
|
throw Error('Invalid response');
|
|
725
776
|
}
|
|
726
777
|
// Contract
|
|
727
|
-
const contract = (0, getInit_1.getInit)(
|
|
778
|
+
const contract = (0, getInit_1.getInit)(response, specifiers?.subwalletId ?? 698983191, specifiers?.isV3R2 ?? false);
|
|
728
779
|
const address = (0, core_1.contractAddress)(chain, contract);
|
|
729
780
|
return { address: address.toString({ bounceable, testOnly }), publicKey: response };
|
|
730
781
|
}
|
|
@@ -733,10 +784,15 @@ class TonTransport {
|
|
|
733
784
|
validatePath(path);
|
|
734
785
|
let publicKey = (await this.getAddress(path)).publicKey;
|
|
735
786
|
// Resolve flags
|
|
736
|
-
const { flags } = processAddressFlags(opts);
|
|
787
|
+
const { flags, specifiers } = processAddressFlags(opts);
|
|
788
|
+
let specifiersBuf = Buffer.alloc(0);
|
|
789
|
+
if (specifiers !== undefined) {
|
|
790
|
+
specifiersBuf = Buffer.concat([(0, ledgerWriter_1.writeUint8)(specifiers.isV3R2 ? 1 : 0), (0, ledgerWriter_1.writeUint32)(specifiers.subwalletId)]);
|
|
791
|
+
}
|
|
737
792
|
const domainBuf = Buffer.from(params.domain, 'utf-8');
|
|
738
793
|
const reqBuf = Buffer.concat([
|
|
739
794
|
pathElementsToBuffer(path.map((v) => v + 0x80000000)),
|
|
795
|
+
specifiersBuf,
|
|
740
796
|
(0, ledgerWriter_1.writeUint8)(domainBuf.length),
|
|
741
797
|
domainBuf,
|
|
742
798
|
(0, ledgerWriter_1.writeUint64)(BigInt(params.timestamp)),
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { TonPayloadFormat, TonTransport, SignDataRequest, parseMessage } from './TonTransport';
|
|
1
|
+
export { TonPayloadFormat, TonTransport, SignDataRequest, parseMessage, KNOWN_JETTONS } from './TonTransport';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseMessage = exports.TonTransport = void 0;
|
|
3
|
+
exports.KNOWN_JETTONS = exports.parseMessage = exports.TonTransport = void 0;
|
|
4
4
|
var TonTransport_1 = require("./TonTransport");
|
|
5
5
|
Object.defineProperty(exports, "TonTransport", { enumerable: true, get: function () { return TonTransport_1.TonTransport; } });
|
|
6
6
|
Object.defineProperty(exports, "parseMessage", { enumerable: true, get: function () { return TonTransport_1.parseMessage; } });
|
|
7
|
+
Object.defineProperty(exports, "KNOWN_JETTONS", { enumerable: true, get: function () { return TonTransport_1.KNOWN_JETTONS; } });
|
package/dist/utils/getInit.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { Cell } from '@ton/core';
|
|
3
|
-
export declare function getInit(
|
|
3
|
+
export declare function getInit(publicKey: Buffer, subwalletId: number, isV3R2: boolean): {
|
|
4
4
|
code: Cell;
|
|
5
5
|
data: Cell;
|
|
6
6
|
};
|
package/dist/utils/getInit.js
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getInit = void 0;
|
|
4
4
|
const core_1 = require("@ton/core");
|
|
5
|
-
function getInit(
|
|
6
|
-
let code = core_1.Cell.fromBoc(Buffer.from('te6ccgECFAEAAtQAART/APSkE/S88sgLAQIBIAIDAgFIBAUE+PKDCNcYINMf0x/THwL4I7vyZO1E0NMf0x/T//QE0VFDuvKhUVG68qIF+QFUEGT5EPKj+AAkpMjLH1JAyx9SMMv/UhD0AMntVPgPAdMHIcAAn2xRkyDXSpbTB9QC+wDoMOAhwAHjACHAAuMAAcADkTDjDQOkyMsfEssfy/8QERITAubQAdDTAyFxsJJfBOAi10nBIJJfBOAC0x8hghBwbHVnvSKCEGRzdHK9sJJfBeAD+kAwIPpEAcjKB8v/ydDtRNCBAUDXIfQEMFyBAQj0Cm+hMbOSXwfgBdM/yCWCEHBsdWe6kjgw4w0DghBkc3RyupJfBuMNBgcCASAICQB4AfoA9AQw+CdvIjBQCqEhvvLgUIIQcGx1Z4MesXCAGFAEywUmzxZY+gIZ9ADLaRfLH1Jgyz8gyYBA+wAGAIpQBIEBCPRZMO1E0IEBQNcgyAHPFvQAye1UAXKwjiOCEGRzdHKDHrFwgBhQBcsFUAPPFiP6AhPLassfyz/JgED7AJJfA+ICASAKCwBZvSQrb2omhAgKBrkPoCGEcNQICEekk30pkQzmkD6f+YN4EoAbeBAUiYcVnzGEAgFYDA0AEbjJftRNDXCx+AA9sp37UTQgQFA1yH0BDACyMoHy//J0AGBAQj0Cm+hMYAIBIA4PABmtznaiaEAga5Drhf/AABmvHfaiaEAQa5DrhY/AAG7SB/oA1NQi+QAFyMoHFcv/ydB3dIAYyMsFywIizxZQBfoCFMtrEszMyXP7AMhAFIEBCPRR8qcCAHCBAQjXGPoA0z/IVCBHgQEI9FHyp4IQbm90ZXB0gBjIywXLAlAGzxZQBPoCFMtqEssfyz/Jc/sAAgBsgQEI1xj6ANM/MFIkgQEI9Fnyp4IQZHN0cnB0gBjIywXLAlAFzxZQA/oCE8tqyx8Syz/Jc/sAAAr0AMntVA==', 'base64'))[0];
|
|
5
|
+
function getInit(publicKey, subwalletId, isV3R2) {
|
|
7
6
|
let data = (0, core_1.beginCell)()
|
|
8
7
|
.storeUint(0, 32) // Seqno
|
|
9
|
-
.storeUint(
|
|
10
|
-
.storeBuffer(publicKey)
|
|
11
|
-
|
|
12
|
-
.
|
|
13
|
-
|
|
8
|
+
.storeUint(subwalletId, 32)
|
|
9
|
+
.storeBuffer(publicKey);
|
|
10
|
+
return {
|
|
11
|
+
code: isV3R2 ? core_1.Cell.fromBase64('te6cckEBAQEAcQAA3v8AIN0gggFMl7ohggEznLqxn3Gw7UTQ0x/THzHXC//jBOCk8mCDCNcYINMf0x/TH/gjE7vyY+1E0NMf0x/T/9FRMrryoVFEuvKiBPkBVBBV+RDyo/gAkyDXSpbTB9QC+wDo0QGkyMsfyx/L/8ntVBC9ba0=') : core_1.Cell.fromBase64('te6ccgECFAEAAtQAART/APSkE/S88sgLAQIBIAIDAgFIBAUE+PKDCNcYINMf0x/THwL4I7vyZO1E0NMf0x/T//QE0VFDuvKhUVG68qIF+QFUEGT5EPKj+AAkpMjLH1JAyx9SMMv/UhD0AMntVPgPAdMHIcAAn2xRkyDXSpbTB9QC+wDoMOAhwAHjACHAAuMAAcADkTDjDQOkyMsfEssfy/8QERITAubQAdDTAyFxsJJfBOAi10nBIJJfBOAC0x8hghBwbHVnvSKCEGRzdHK9sJJfBeAD+kAwIPpEAcjKB8v/ydDtRNCBAUDXIfQEMFyBAQj0Cm+hMbOSXwfgBdM/yCWCEHBsdWe6kjgw4w0DghBkc3RyupJfBuMNBgcCASAICQB4AfoA9AQw+CdvIjBQCqEhvvLgUIIQcGx1Z4MesXCAGFAEywUmzxZY+gIZ9ADLaRfLH1Jgyz8gyYBA+wAGAIpQBIEBCPRZMO1E0IEBQNcgyAHPFvQAye1UAXKwjiOCEGRzdHKDHrFwgBhQBcsFUAPPFiP6AhPLassfyz/JgED7AJJfA+ICASAKCwBZvSQrb2omhAgKBrkPoCGEcNQICEekk30pkQzmkD6f+YN4EoAbeBAUiYcVnzGEAgFYDA0AEbjJftRNDXCx+AA9sp37UTQgQFA1yH0BDACyMoHy//J0AGBAQj0Cm+hMYAIBIA4PABmtznaiaEAga5Drhf/AABmvHfaiaEAQa5DrhY/AAG7SB/oA1NQi+QAFyMoHFcv/ydB3dIAYyMsFywIizxZQBfoCFMtrEszMyXP7AMhAFIEBCPRR8qcCAHCBAQjXGPoA0z/IVCBHgQEI9FHyp4IQbm90ZXB0gBjIywXLAlAGzxZQBPoCFMtqEssfyz/Jc/sAAgBsgQEI1xj6ANM/MFIkgQEI9Fnyp4IQZHN0cnB0gBjIywXLAlAFzxZQA/oCE8tqyx8Syz/Jc/sAAAr0AMntVA=='),
|
|
12
|
+
data: isV3R2 ? data.endCell() : data.storeBit(0).endCell(),
|
|
13
|
+
};
|
|
14
14
|
}
|
|
15
15
|
exports.getInit = getInit;
|