@ton-community/ton-ledger 7.1.0-pre.1 → 7.2.0-pre.2
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 +70 -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,36 @@ 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
|
+
{
|
|
44
|
+
symbol: 'STAKED',
|
|
45
|
+
masterAddress: core_1.Address.parse('EQCqC6EhRJ_tpWngKxL6dV0k6DSnRUrs9GSVkLbfdCqsj6TE'),
|
|
46
|
+
},
|
|
47
|
+
];
|
|
18
48
|
const dnsWalletKey = Buffer.from([0xe8, 0xd4, 0x40, 0x50, 0x87, 0x3d, 0xba, 0x86, 0x5a, 0xa7, 0xc1, 0x70, 0xab, 0x4c, 0xce, 0x64,
|
|
19
49
|
0xd9, 0x08, 0x39, 0xa3, 0x4d, 0xcf, 0xd6, 0xcf, 0x71, 0xd1, 0x4e, 0x02, 0x05, 0x44, 0x3b, 0x1b]);
|
|
20
50
|
function normalizeQueryId(qid) {
|
|
@@ -81,6 +111,7 @@ function parseMessage(cell, opts) {
|
|
|
81
111
|
customPayload,
|
|
82
112
|
forwardAmount,
|
|
83
113
|
forwardPayload,
|
|
114
|
+
knownJetton: null,
|
|
84
115
|
};
|
|
85
116
|
}
|
|
86
117
|
case 0x5fcc3d14: {
|
|
@@ -331,6 +362,9 @@ function processAddressFlags(opts) {
|
|
|
331
362
|
const bounceable = opts?.bounceable ?? true;
|
|
332
363
|
const testOnly = opts?.testOnly ?? false;
|
|
333
364
|
const chain = opts?.chain ?? 0;
|
|
365
|
+
const subwalletId = opts?.subwalletId ?? 698983191;
|
|
366
|
+
const walletVersion = opts?.walletVersion ?? 'v3r2';
|
|
367
|
+
let specifiers = undefined;
|
|
334
368
|
let flags = 0x00;
|
|
335
369
|
if (testOnly) {
|
|
336
370
|
flags |= 0x01;
|
|
@@ -338,7 +372,14 @@ function processAddressFlags(opts) {
|
|
|
338
372
|
if (chain === -1) {
|
|
339
373
|
flags |= 0x02;
|
|
340
374
|
}
|
|
341
|
-
|
|
375
|
+
if (subwalletId !== 698983191 || walletVersion !== 'v4') {
|
|
376
|
+
flags |= 0x04;
|
|
377
|
+
specifiers = {
|
|
378
|
+
subwalletId,
|
|
379
|
+
isV3R2: walletVersion === 'v3r2',
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
return { bounceable, testOnly, chain, flags, specifiers };
|
|
342
383
|
}
|
|
343
384
|
function convertPayload(input) {
|
|
344
385
|
let payload = null;
|
|
@@ -376,15 +417,25 @@ function convertPayload(input) {
|
|
|
376
417
|
let b = (0, core_1.beginCell)()
|
|
377
418
|
.storeUint(input.type === 'jetton-transfer' ? 0x0f8a7ea5 : 0x5fcc3d14, 32);
|
|
378
419
|
let d = Buffer.alloc(0);
|
|
420
|
+
let flags = 0;
|
|
379
421
|
if (input.queryId !== null) {
|
|
380
|
-
|
|
422
|
+
flags |= 1;
|
|
423
|
+
}
|
|
424
|
+
if (input.type === 'jetton-transfer' && input.knownJetton !== null) {
|
|
425
|
+
flags |= 2;
|
|
426
|
+
}
|
|
427
|
+
d = Buffer.concat([d, (0, ledgerWriter_1.writeUint8)(flags)]);
|
|
428
|
+
if (input.queryId !== null) {
|
|
429
|
+
d = Buffer.concat([d, (0, ledgerWriter_1.writeUint64)(input.queryId)]);
|
|
381
430
|
b = b.storeUint(input.queryId, 64);
|
|
382
431
|
}
|
|
383
432
|
else {
|
|
384
|
-
d = Buffer.concat([d, (0, ledgerWriter_1.writeUint8)(0)]);
|
|
385
433
|
b = b.storeUint(0, 64);
|
|
386
434
|
}
|
|
387
435
|
if (input.type === 'jetton-transfer') {
|
|
436
|
+
if (input.knownJetton !== null) {
|
|
437
|
+
d = Buffer.concat([d, (0, ledgerWriter_1.writeUint16)(input.knownJetton.jettonId), (0, ledgerWriter_1.writeUint8)(input.knownJetton.workchain)]);
|
|
438
|
+
}
|
|
388
439
|
d = Buffer.concat([d, (0, ledgerWriter_1.writeVarUInt)(input.amount)]);
|
|
389
440
|
b = b.storeCoins(input.amount);
|
|
390
441
|
d = Buffer.concat([d, (0, ledgerWriter_1.writeAddress)(input.destination)]);
|
|
@@ -702,14 +753,14 @@ class TonTransport {
|
|
|
702
753
|
// Check path
|
|
703
754
|
validatePath(path);
|
|
704
755
|
// Resolve flags
|
|
705
|
-
const { bounceable, testOnly, chain } = processAddressFlags(opts);
|
|
756
|
+
const { bounceable, testOnly, chain, specifiers } = processAddressFlags(opts);
|
|
706
757
|
// Get public key
|
|
707
758
|
let response = await this.#doRequest(INS_ADDRESS, 0x00, 0x00, pathElementsToBuffer(path.map((v) => v + 0x80000000)));
|
|
708
759
|
if (response.length !== 32) {
|
|
709
760
|
throw Error('Invalid response');
|
|
710
761
|
}
|
|
711
762
|
// Contract
|
|
712
|
-
const contract = (0, getInit_1.getInit)(
|
|
763
|
+
const contract = (0, getInit_1.getInit)(response, specifiers?.subwalletId ?? 698983191, specifiers?.isV3R2 ?? false);
|
|
713
764
|
const address = (0, core_1.contractAddress)(chain, contract);
|
|
714
765
|
return { address: address.toString({ bounceable, testOnly }), publicKey: response };
|
|
715
766
|
}
|
|
@@ -717,14 +768,18 @@ class TonTransport {
|
|
|
717
768
|
// Check path
|
|
718
769
|
validatePath(path);
|
|
719
770
|
// Resolve flags
|
|
720
|
-
const { bounceable, testOnly, chain, flags } = processAddressFlags(opts);
|
|
771
|
+
const { bounceable, testOnly, chain, flags, specifiers } = processAddressFlags(opts);
|
|
772
|
+
let r = pathElementsToBuffer(path.map((v) => v + 0x80000000));
|
|
773
|
+
if (specifiers !== undefined) {
|
|
774
|
+
r = Buffer.concat([r, (0, ledgerWriter_1.writeUint8)(specifiers.isV3R2 ? 1 : 0), (0, ledgerWriter_1.writeUint32)(specifiers.subwalletId)]);
|
|
775
|
+
}
|
|
721
776
|
// Get public key
|
|
722
|
-
let response = await this.#doRequest(INS_ADDRESS, 0x01, flags,
|
|
777
|
+
let response = await this.#doRequest(INS_ADDRESS, 0x01, flags, r);
|
|
723
778
|
if (response.length !== 32) {
|
|
724
779
|
throw Error('Invalid response');
|
|
725
780
|
}
|
|
726
781
|
// Contract
|
|
727
|
-
const contract = (0, getInit_1.getInit)(
|
|
782
|
+
const contract = (0, getInit_1.getInit)(response, specifiers?.subwalletId ?? 698983191, specifiers?.isV3R2 ?? false);
|
|
728
783
|
const address = (0, core_1.contractAddress)(chain, contract);
|
|
729
784
|
return { address: address.toString({ bounceable, testOnly }), publicKey: response };
|
|
730
785
|
}
|
|
@@ -733,10 +788,15 @@ class TonTransport {
|
|
|
733
788
|
validatePath(path);
|
|
734
789
|
let publicKey = (await this.getAddress(path)).publicKey;
|
|
735
790
|
// Resolve flags
|
|
736
|
-
const { flags } = processAddressFlags(opts);
|
|
791
|
+
const { flags, specifiers } = processAddressFlags(opts);
|
|
792
|
+
let specifiersBuf = Buffer.alloc(0);
|
|
793
|
+
if (specifiers !== undefined) {
|
|
794
|
+
specifiersBuf = Buffer.concat([(0, ledgerWriter_1.writeUint8)(specifiers.isV3R2 ? 1 : 0), (0, ledgerWriter_1.writeUint32)(specifiers.subwalletId)]);
|
|
795
|
+
}
|
|
737
796
|
const domainBuf = Buffer.from(params.domain, 'utf-8');
|
|
738
797
|
const reqBuf = Buffer.concat([
|
|
739
798
|
pathElementsToBuffer(path.map((v) => v + 0x80000000)),
|
|
799
|
+
specifiersBuf,
|
|
740
800
|
(0, ledgerWriter_1.writeUint8)(domainBuf.length),
|
|
741
801
|
domainBuf,
|
|
742
802
|
(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;
|