@ton/blueprint 0.33.0 → 0.34.0
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/CHANGELOG.md +28 -0
- package/README.md +98 -12
- package/dist/cli/Runner.d.ts +2 -0
- package/dist/cli/Runner.js +9 -1
- package/dist/cli/build.d.ts +1 -2
- package/dist/cli/build.js +3 -6
- package/dist/cli/cli.js +8 -1
- package/dist/cli/constants.d.ts +4 -0
- package/dist/cli/constants.js +44 -6
- package/dist/cli/create.js +2 -13
- package/dist/cli/help.js +2 -1
- package/dist/cli/pack.d.ts +2 -0
- package/dist/cli/pack.js +98 -0
- package/dist/cli/rename.d.ts +6 -0
- package/dist/cli/rename.js +101 -0
- package/dist/cli/rename.spec.d.ts +1 -0
- package/dist/cli/rename.spec.js +59 -0
- package/dist/cli/run.js +2 -1
- package/dist/cli/snapshot.d.ts +6 -0
- package/dist/cli/snapshot.js +36 -0
- package/dist/cli/test.d.ts +4 -0
- package/dist/cli/test.js +20 -4
- package/dist/compile/compile.d.ts +16 -0
- package/dist/compile/compile.js +23 -7
- package/dist/compile/tact/compile.tact.d.ts +2 -1
- package/dist/compile/tact/compile.tact.js +9 -5
- package/dist/config/Config.d.ts +15 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -1
- package/dist/network/Network.d.ts +1 -0
- package/dist/network/Network.js +2 -0
- package/dist/network/createNetworkProvider.js +20 -6
- package/dist/network/send/DeeplinkProvider.d.ts +2 -1
- package/dist/network/send/DeeplinkProvider.js +6 -4
- package/dist/network/send/MnemonicProvider.d.ts +14 -7
- package/dist/network/send/MnemonicProvider.js +28 -8
- package/dist/network/send/TonConnectProvider.d.ts +2 -1
- package/dist/network/send/TonConnectProvider.js +10 -4
- package/dist/paths.d.ts +3 -0
- package/dist/paths.js +4 -1
- package/dist/templates/func/common/contracts/imports/stdlib.fc.template +8 -7
- package/dist/templates/func/not-separated-common/contracts/imports/stdlib.fc.template +8 -7
- package/dist/templates/tact/counter/scripts/deploy.ts.template +1 -1
- package/dist/templates/tact/counter/scripts/increment.ts.template +1 -1
- package/dist/templates/tact/empty/scripts/deploy.ts.template +1 -1
- package/dist/utils/selection.utils.js +9 -4
- package/dist/utils/string.utils.d.ts +3 -0
- package/dist/utils/string.utils.js +20 -0
- package/dist/utils/ton.utils.d.ts +2 -1
- package/dist/utils/ton.utils.js +3 -1
- package/package.json +1 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_test_1 = require("node:test");
|
|
7
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
8
|
+
const rename_1 = require("./rename");
|
|
9
|
+
(0, node_test_1.describe)('Rename', function () {
|
|
10
|
+
(0, node_test_1.it)('It should rename exact match', function () {
|
|
11
|
+
const replaces = {
|
|
12
|
+
a: 'b',
|
|
13
|
+
};
|
|
14
|
+
const result = (0, rename_1.renameExactIfRequired)('a a', replaces);
|
|
15
|
+
node_assert_1.default.strictEqual(result.isRenamed, true);
|
|
16
|
+
node_assert_1.default.strictEqual(result.newValue, 'b b');
|
|
17
|
+
});
|
|
18
|
+
(0, node_test_1.it)('It should not rename not exact match', function () {
|
|
19
|
+
const replaces = {
|
|
20
|
+
a: 'b',
|
|
21
|
+
};
|
|
22
|
+
const result = (0, rename_1.renameExactIfRequired)('and', replaces);
|
|
23
|
+
node_assert_1.default.strictEqual(result.isRenamed, false);
|
|
24
|
+
node_assert_1.default.strictEqual(result.newValue, 'and');
|
|
25
|
+
});
|
|
26
|
+
(0, node_test_1.it)('It should not rename another case', function () {
|
|
27
|
+
const replaces = {
|
|
28
|
+
a: 'b',
|
|
29
|
+
};
|
|
30
|
+
const result = (0, rename_1.renameExactIfRequired)('A', replaces);
|
|
31
|
+
node_assert_1.default.strictEqual(result.isRenamed, false);
|
|
32
|
+
node_assert_1.default.strictEqual(result.newValue, 'A');
|
|
33
|
+
});
|
|
34
|
+
(0, node_test_1.it)('It should rename contract name in brackets', function () {
|
|
35
|
+
const replaces = {
|
|
36
|
+
['MyContract']: 'NotMyContract',
|
|
37
|
+
};
|
|
38
|
+
const result = (0, rename_1.renameExactIfRequired)(`compile('MyContract')`, replaces);
|
|
39
|
+
node_assert_1.default.strictEqual(result.isRenamed, true);
|
|
40
|
+
node_assert_1.default.strictEqual(result.newValue, `compile('NotMyContract')`);
|
|
41
|
+
});
|
|
42
|
+
(0, node_test_1.it)('It should not rename contract name if not exact match', function () {
|
|
43
|
+
const replaces = {
|
|
44
|
+
['MyContract']: 'NotMyContract',
|
|
45
|
+
};
|
|
46
|
+
const result = (0, rename_1.renameExactIfRequired)(`compile('MyContract2')`, replaces);
|
|
47
|
+
node_assert_1.default.strictEqual(result.isRenamed, false);
|
|
48
|
+
node_assert_1.default.strictEqual(result.newValue, `compile('MyContract2')`);
|
|
49
|
+
});
|
|
50
|
+
(0, node_test_1.it)('It should do multiple replaces', function () {
|
|
51
|
+
const replaces = {
|
|
52
|
+
['myContract']: 'notMyContract',
|
|
53
|
+
['MyContract']: 'NotMyContract',
|
|
54
|
+
};
|
|
55
|
+
const result = (0, rename_1.renameExactIfRequired)(`let myContract: MyContract;`, replaces);
|
|
56
|
+
node_assert_1.default.strictEqual(result.isRenamed, true);
|
|
57
|
+
node_assert_1.default.strictEqual(result.newValue, `let notMyContract: NotMyContract;`);
|
|
58
|
+
});
|
|
59
|
+
});
|
package/dist/cli/run.js
CHANGED
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.run = void 0;
|
|
7
|
+
const Runner_1 = require("./Runner");
|
|
7
8
|
const createNetworkProvider_1 = require("../network/createNetworkProvider");
|
|
8
9
|
const utils_1 = require("../utils");
|
|
9
10
|
const arg_1 = __importDefault(require("arg"));
|
|
@@ -16,7 +17,7 @@ const run = async (args, ui, context) => {
|
|
|
16
17
|
}
|
|
17
18
|
const { module: mod } = await (0, utils_1.selectFile)(await (0, utils_1.findScripts)(), {
|
|
18
19
|
ui,
|
|
19
|
-
hint:
|
|
20
|
+
hint: (0, Runner_1.extractFirstArg)(localArgs),
|
|
20
21
|
});
|
|
21
22
|
if (typeof mod.run !== 'function') {
|
|
22
23
|
throw new Error('Function `run` is missing!');
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.snapshot = exports.argSpec = void 0;
|
|
7
|
+
const node_child_process_1 = require("node:child_process");
|
|
8
|
+
const arg_1 = __importDefault(require("arg"));
|
|
9
|
+
const constants_1 = require("./constants");
|
|
10
|
+
exports.argSpec = {
|
|
11
|
+
'--label': String,
|
|
12
|
+
'-l': '--label',
|
|
13
|
+
};
|
|
14
|
+
const snapshot = async (args, ui) => {
|
|
15
|
+
const localArgs = (0, arg_1.default)({ ...exports.argSpec, ...constants_1.helpArgs });
|
|
16
|
+
if (localArgs['--help']) {
|
|
17
|
+
ui.write(constants_1.helpMessages['snapshot']);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
let comment = localArgs['--label'];
|
|
21
|
+
let testArgs = args._.slice(1); // first argument is `snapshot`, need to get rid of it
|
|
22
|
+
if (typeof comment === 'undefined') {
|
|
23
|
+
comment = await ui.input('Enter comment:');
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
testArgs = testArgs.slice(2);
|
|
27
|
+
}
|
|
28
|
+
(0, node_child_process_1.execSync)(`npm test -- ${testArgs.join(' ')}`, {
|
|
29
|
+
stdio: 'inherit',
|
|
30
|
+
env: {
|
|
31
|
+
...process.env,
|
|
32
|
+
BENCH_NEW: comment,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
exports.snapshot = snapshot;
|
package/dist/cli/test.d.ts
CHANGED
package/dist/cli/test.js
CHANGED
|
@@ -3,17 +3,33 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.test = void 0;
|
|
6
|
+
exports.test = exports.argSpec = void 0;
|
|
7
7
|
const child_process_1 = require("child_process");
|
|
8
8
|
const arg_1 = __importDefault(require("arg"));
|
|
9
9
|
const constants_1 = require("./constants");
|
|
10
|
+
exports.argSpec = {
|
|
11
|
+
'--gas-report': Boolean,
|
|
12
|
+
'-g': '--gas-report',
|
|
13
|
+
};
|
|
10
14
|
const test = async (args, ui) => {
|
|
11
|
-
const localArgs = (0, arg_1.default)(
|
|
15
|
+
const localArgs = (0, arg_1.default)({
|
|
16
|
+
...constants_1.helpArgs,
|
|
17
|
+
...exports.argSpec,
|
|
18
|
+
});
|
|
12
19
|
if (localArgs['--help']) {
|
|
13
20
|
ui.write(constants_1.helpMessages['test']);
|
|
14
21
|
return;
|
|
15
22
|
}
|
|
16
|
-
|
|
17
|
-
|
|
23
|
+
let testArgs = args._.slice(1); // first argument is `test`, need to get rid of it
|
|
24
|
+
if (localArgs['--gas-report']) {
|
|
25
|
+
testArgs = testArgs.slice(1);
|
|
26
|
+
}
|
|
27
|
+
(0, child_process_1.execSync)(`npm test -- ${testArgs.join(' ')}`, {
|
|
28
|
+
stdio: 'inherit',
|
|
29
|
+
env: {
|
|
30
|
+
...process.env,
|
|
31
|
+
BENCH_DIFF: localArgs['--gas-report'] ? 'true' : 'false',
|
|
32
|
+
},
|
|
33
|
+
});
|
|
18
34
|
};
|
|
19
35
|
exports.test = test;
|
|
@@ -6,6 +6,22 @@ import { TolkCompileResult } from './tolk/compile.tolk';
|
|
|
6
6
|
export declare function getCompilablesDirectory(): Promise<string>;
|
|
7
7
|
export declare function extractCompilableConfig(path: string): CompilableConfig;
|
|
8
8
|
export declare const COMPILE_END = ".compile.ts";
|
|
9
|
+
/**
|
|
10
|
+
* Retrieves the compiler configuration for a specific contract.
|
|
11
|
+
*
|
|
12
|
+
* This function checks if a Tact configuration exists for the given contract
|
|
13
|
+
* `tact.config.json`. If found, it returns that configuration. Otherwise, it falls back
|
|
14
|
+
* to loading and extracting the `.compile.ts` configuration file from the appropriate
|
|
15
|
+
* compilables directory (`compilables/` or `wrappers/`).
|
|
16
|
+
*
|
|
17
|
+
* @param {string} name - The name of the contract
|
|
18
|
+
*
|
|
19
|
+
* @throws Error Throws if configuration is invalid or not found.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* const config = await getCompilerConfigForContract('MyContract');
|
|
23
|
+
* console.log('Compiler config:', config);
|
|
24
|
+
*/
|
|
9
25
|
export declare function getCompilerConfigForContract(name: string): Promise<CompilerConfig>;
|
|
10
26
|
export type CompileResult = TactCompileResult | FuncCompileResult | TolkCompileResult;
|
|
11
27
|
export declare function getCompilerOptions(config: CompilerConfig): Promise<{
|
package/dist/compile/compile.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.COMPILE_END = void 0;
|
|
7
4
|
exports.getCompilablesDirectory = getCompilablesDirectory;
|
|
@@ -11,13 +8,13 @@ exports.getCompilerOptions = getCompilerOptions;
|
|
|
11
8
|
exports.doCompile = doCompile;
|
|
12
9
|
exports.compile = compile;
|
|
13
10
|
const fs_1 = require("fs");
|
|
14
|
-
const path_1 = __importDefault(require("path"));
|
|
15
11
|
const paths_1 = require("../paths");
|
|
16
12
|
const CompilerConfig_1 = require("./CompilerConfig");
|
|
17
13
|
const utils_1 = require("../config/utils");
|
|
18
14
|
const compile_func_1 = require("./func/compile.func");
|
|
19
15
|
const compile_tact_1 = require("./tact/compile.tact");
|
|
20
16
|
const compile_tolk_1 = require("./tolk/compile.tolk");
|
|
17
|
+
const utils_2 = require("../utils");
|
|
21
18
|
async function getCompilablesDirectory() {
|
|
22
19
|
const config = await (0, utils_1.getConfig)();
|
|
23
20
|
if (config?.separateCompilables) {
|
|
@@ -34,14 +31,33 @@ function extractCompilableConfig(path) {
|
|
|
34
31
|
return mod.compile;
|
|
35
32
|
}
|
|
36
33
|
exports.COMPILE_END = '.compile.ts';
|
|
37
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Retrieves the compiler configuration for a specific contract.
|
|
36
|
+
*
|
|
37
|
+
* This function checks if a Tact configuration exists for the given contract
|
|
38
|
+
* `tact.config.json`. If found, it returns that configuration. Otherwise, it falls back
|
|
39
|
+
* to loading and extracting the `.compile.ts` configuration file from the appropriate
|
|
40
|
+
* compilables directory (`compilables/` or `wrappers/`).
|
|
41
|
+
*
|
|
42
|
+
* @param {string} name - The name of the contract
|
|
43
|
+
*
|
|
44
|
+
* @throws Error Throws if configuration is invalid or not found.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* const config = await getCompilerConfigForContract('MyContract');
|
|
48
|
+
* console.log('Compiler config:', config);
|
|
49
|
+
*/
|
|
38
50
|
async function getCompilerConfigForContract(name) {
|
|
39
51
|
const tactConfig = (0, compile_tact_1.getTactConfigForContract)(name);
|
|
40
52
|
if (tactConfig) {
|
|
41
53
|
return tactConfig;
|
|
42
54
|
}
|
|
43
|
-
const
|
|
44
|
-
|
|
55
|
+
const compilables = await (0, utils_2.findCompiles)();
|
|
56
|
+
const compilable = compilables.find((c) => c.name === name);
|
|
57
|
+
if (compilable === undefined) {
|
|
58
|
+
throw new Error(`Contract '${name}' not found`);
|
|
59
|
+
}
|
|
60
|
+
return extractCompilableConfig(compilable.path);
|
|
45
61
|
}
|
|
46
62
|
async function doCompileInner(name, config) {
|
|
47
63
|
if ((0, CompilerConfig_1.isCompilableConfig)(config)) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Options } from '@tact-lang/compiler';
|
|
1
|
+
import { Options, Project } from '@tact-lang/compiler';
|
|
2
2
|
import { Cell } from '@ton/core';
|
|
3
3
|
import { TactCompilerConfig, TactLegacyCompilerConfig } from './config';
|
|
4
4
|
export type TactCompileResult = {
|
|
@@ -10,4 +10,5 @@ export type TactCompileResult = {
|
|
|
10
10
|
};
|
|
11
11
|
export declare function getTactConfigForContract(name: string): TactCompilerConfig | undefined;
|
|
12
12
|
export declare function getTactVersion(): Promise<any>;
|
|
13
|
+
export declare function extractContractConfig(config: TactCompilerConfig, name: string): Project;
|
|
13
14
|
export declare function doCompileTact(config: TactLegacyCompilerConfig | TactCompilerConfig, name: string): Promise<TactCompileResult>;
|
|
@@ -38,6 +38,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.getTactConfigForContract = getTactConfigForContract;
|
|
40
40
|
exports.getTactVersion = getTactVersion;
|
|
41
|
+
exports.extractContractConfig = extractContractConfig;
|
|
41
42
|
exports.doCompileTact = doCompileTact;
|
|
42
43
|
const path_1 = __importDefault(require("path"));
|
|
43
44
|
const compiler_1 = require("@tact-lang/compiler");
|
|
@@ -85,6 +86,13 @@ async function getTactVersion() {
|
|
|
85
86
|
function isLegacyTactConfig(config) {
|
|
86
87
|
return 'lang' in config;
|
|
87
88
|
}
|
|
89
|
+
function extractContractConfig(config, name) {
|
|
90
|
+
const project = config.projects.find((p) => p.name === name);
|
|
91
|
+
if (!project) {
|
|
92
|
+
throw new Error(`Config for project ${name} not found`);
|
|
93
|
+
}
|
|
94
|
+
return project;
|
|
95
|
+
}
|
|
88
96
|
function getTactBuildProject(config, name) {
|
|
89
97
|
if (isLegacyTactConfig(config)) {
|
|
90
98
|
const rootConfigOptions = getRootTactConfigOptionsForContract(name);
|
|
@@ -95,11 +103,7 @@ function getTactBuildProject(config, name) {
|
|
|
95
103
|
options: { ...rootConfigOptions, ...config.options },
|
|
96
104
|
};
|
|
97
105
|
}
|
|
98
|
-
|
|
99
|
-
if (!project) {
|
|
100
|
-
throw new Error(`Config for project ${name} not found`);
|
|
101
|
-
}
|
|
102
|
-
return project;
|
|
106
|
+
return extractContractConfig(config, name);
|
|
103
107
|
}
|
|
104
108
|
async function doCompileTact(config, name) {
|
|
105
109
|
const fs = new OverwritableVirtualFileSystem_1.OverwritableVirtualFileSystem(process.cwd());
|
package/dist/config/Config.d.ts
CHANGED
|
@@ -37,4 +37,19 @@ export interface Config {
|
|
|
37
37
|
* @default false
|
|
38
38
|
*/
|
|
39
39
|
separateCompilables?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* HTTP request timeout in milliseconds.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* export const config: Config = {
|
|
45
|
+
* requestTimeout: 10000 // 10 seconds
|
|
46
|
+
* };
|
|
47
|
+
*/
|
|
48
|
+
requestTimeout?: number;
|
|
49
|
+
/**
|
|
50
|
+
* If true, the `wrappers`/`compilables` directory will be searched recursively for contracts.
|
|
51
|
+
*
|
|
52
|
+
* @default false
|
|
53
|
+
*/
|
|
54
|
+
recursiveWrappers?: boolean;
|
|
40
55
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,3 +10,4 @@ export { PluginRunner, Plugin } from './config/Plugin';
|
|
|
10
10
|
export { CustomNetwork } from './config/CustomNetwork';
|
|
11
11
|
export { buildOne, buildAll, buildAllTact } from './build';
|
|
12
12
|
export { SourceSnapshot } from "./compile/SourceSnapshot";
|
|
13
|
+
export { getCompilerConfigForContract } from './compile/compile';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.buildAllTact = exports.buildAll = exports.buildOne = exports.compile = exports.createNetworkProvider = exports.sleep = exports.tonDeepLink = void 0;
|
|
3
|
+
exports.getCompilerConfigForContract = exports.buildAllTact = exports.buildAll = exports.buildOne = exports.compile = exports.createNetworkProvider = exports.sleep = exports.tonDeepLink = void 0;
|
|
4
4
|
var utils_1 = require("./utils");
|
|
5
5
|
Object.defineProperty(exports, "tonDeepLink", { enumerable: true, get: function () { return utils_1.tonDeepLink; } });
|
|
6
6
|
Object.defineProperty(exports, "sleep", { enumerable: true, get: function () { return utils_1.sleep; } });
|
|
@@ -12,3 +12,5 @@ var build_1 = require("./build");
|
|
|
12
12
|
Object.defineProperty(exports, "buildOne", { enumerable: true, get: function () { return build_1.buildOne; } });
|
|
13
13
|
Object.defineProperty(exports, "buildAll", { enumerable: true, get: function () { return build_1.buildAll; } });
|
|
14
14
|
Object.defineProperty(exports, "buildAllTact", { enumerable: true, get: function () { return build_1.buildAllTact; } });
|
|
15
|
+
var compile_2 = require("./compile/compile");
|
|
16
|
+
Object.defineProperty(exports, "getCompilerConfigForContract", { enumerable: true, get: function () { return compile_2.getCompilerConfigForContract; } });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type Network = 'mainnet' | 'testnet' | 'custom';
|
|
@@ -148,9 +148,10 @@ class NetworkProviderImpl {
|
|
|
148
148
|
__classPrivateFieldGet(this, _NetworkProviderImpl_ui, "f").setActionPrompt(`Awaiting contract deployment... [Attempt ${i}/${attempts}]`);
|
|
149
149
|
const isDeployed = await this.isContractDeployed(address);
|
|
150
150
|
if (isDeployed) {
|
|
151
|
+
const formattedAddress = address.toString({ testOnly: __classPrivateFieldGet(this, _NetworkProviderImpl_network, "f") === 'testnet' });
|
|
151
152
|
__classPrivateFieldGet(this, _NetworkProviderImpl_ui, "f").clearActionPrompt();
|
|
152
|
-
__classPrivateFieldGet(this, _NetworkProviderImpl_ui, "f").write(`Contract deployed at address ${
|
|
153
|
-
__classPrivateFieldGet(this, _NetworkProviderImpl_ui, "f").write(`You can view it at ${(0, utils_1.getExplorerLink)(
|
|
153
|
+
__classPrivateFieldGet(this, _NetworkProviderImpl_ui, "f").write(`Contract deployed at address ${formattedAddress}`);
|
|
154
|
+
__classPrivateFieldGet(this, _NetworkProviderImpl_ui, "f").write(`You can view it at ${(0, utils_1.getExplorerLink)(formattedAddress, __classPrivateFieldGet(this, _NetworkProviderImpl_network, "f"), __classPrivateFieldGet(this, _NetworkProviderImpl_explorer, "f"))}`);
|
|
154
155
|
return;
|
|
155
156
|
}
|
|
156
157
|
await (0, utils_1.sleep)(sleepDuration);
|
|
@@ -189,18 +190,30 @@ class NetworkProviderImpl {
|
|
|
189
190
|
}
|
|
190
191
|
}
|
|
191
192
|
_NetworkProviderImpl_tc = new WeakMap(), _NetworkProviderImpl_sender = new WeakMap(), _NetworkProviderImpl_network = new WeakMap(), _NetworkProviderImpl_explorer = new WeakMap(), _NetworkProviderImpl_ui = new WeakMap();
|
|
192
|
-
|
|
193
|
+
function getOptionalNumberEnv(envName) {
|
|
194
|
+
const value = process.env[envName] ? Number(process.env[envName]) : undefined;
|
|
195
|
+
if (value !== undefined && Number.isNaN(value)) {
|
|
196
|
+
throw new Error(`Invalid ${envName} provided`);
|
|
197
|
+
}
|
|
198
|
+
return value;
|
|
199
|
+
}
|
|
200
|
+
async function createMnemonicProvider(client, network, ui) {
|
|
193
201
|
const mnemonic = process.env.WALLET_MNEMONIC ?? '';
|
|
194
202
|
const walletVersion = process.env.WALLET_VERSION ?? '';
|
|
195
203
|
if (mnemonic.length === 0 || walletVersion.length === 0) {
|
|
196
204
|
throw new Error('Mnemonic deployer was chosen, but env variables WALLET_MNEMONIC and WALLET_VERSION are not set');
|
|
197
205
|
}
|
|
206
|
+
const walletId = getOptionalNumberEnv('WALLET_ID');
|
|
207
|
+
const subwalletNumber = getOptionalNumberEnv('SUBWALLET_NUMBER');
|
|
198
208
|
const keyPair = await (0, crypto_1.mnemonicToPrivateKey)(mnemonic.split(' '));
|
|
199
209
|
return new MnemonicProvider_1.MnemonicProvider({
|
|
200
210
|
version: walletVersion.toLowerCase(),
|
|
201
211
|
client,
|
|
202
212
|
secretKey: keyPair.secretKey,
|
|
203
213
|
ui,
|
|
214
|
+
walletId,
|
|
215
|
+
subwalletNumber,
|
|
216
|
+
network,
|
|
204
217
|
});
|
|
205
218
|
}
|
|
206
219
|
class NetworkProviderBuilder {
|
|
@@ -265,15 +278,15 @@ class NetworkProviderBuilder {
|
|
|
265
278
|
let provider;
|
|
266
279
|
switch (deployUsing) {
|
|
267
280
|
case 'deeplink':
|
|
268
|
-
provider = new DeeplinkProvider_1.DeeplinkProvider(this.ui);
|
|
281
|
+
provider = new DeeplinkProvider_1.DeeplinkProvider(network, this.ui);
|
|
269
282
|
break;
|
|
270
283
|
case 'tonconnect':
|
|
271
284
|
if (network === 'custom')
|
|
272
285
|
throw new Error('Tonkeeper cannot work with custom network.');
|
|
273
|
-
provider = new TonConnectProvider_1.TonConnectProvider(new FSStorage_1.FSStorage(storagePath), this.ui);
|
|
286
|
+
provider = new TonConnectProvider_1.TonConnectProvider(new FSStorage_1.FSStorage(storagePath), this.ui, network);
|
|
274
287
|
break;
|
|
275
288
|
case 'mnemonic':
|
|
276
|
-
provider = await createMnemonicProvider(client, this.ui);
|
|
289
|
+
provider = await createMnemonicProvider(client, network, this.ui);
|
|
277
290
|
break;
|
|
278
291
|
default:
|
|
279
292
|
throw new Error('Unknown deploy option');
|
|
@@ -373,6 +386,7 @@ class NetworkProviderBuilder {
|
|
|
373
386
|
}
|
|
374
387
|
};
|
|
375
388
|
tc = new ton_1.TonClient({
|
|
389
|
+
timeout: this.config?.requestTimeout,
|
|
376
390
|
endpoint: network === 'mainnet'
|
|
377
391
|
? 'https://toncenter.com/api/v2/jsonRPC'
|
|
378
392
|
: 'https://testnet.toncenter.com/api/v2/jsonRPC',
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Address, Cell, StateInit } from '@ton/core';
|
|
2
2
|
import { SendProvider } from './SendProvider';
|
|
3
3
|
import { UIProvider } from '../../ui/UIProvider';
|
|
4
|
+
import { Network } from '../Network';
|
|
4
5
|
export declare class DeeplinkProvider implements SendProvider {
|
|
5
6
|
#private;
|
|
6
|
-
constructor(ui: UIProvider);
|
|
7
|
+
constructor(network: Network, ui: UIProvider);
|
|
7
8
|
connect(): Promise<void>;
|
|
8
9
|
sendTransaction(address: Address, amount: bigint, payload?: Cell, stateInit?: StateInit): Promise<void>;
|
|
9
10
|
address(): Address | undefined;
|
|
@@ -13,22 +13,24 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
13
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
15
|
};
|
|
16
|
-
var _DeeplinkProvider_ui;
|
|
16
|
+
var _DeeplinkProvider_network, _DeeplinkProvider_ui;
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.DeeplinkProvider = void 0;
|
|
19
19
|
const core_1 = require("@ton/core");
|
|
20
20
|
const utils_1 = require("../../utils");
|
|
21
21
|
const qrcode_terminal_1 = __importDefault(require("qrcode-terminal"));
|
|
22
22
|
class DeeplinkProvider {
|
|
23
|
-
constructor(ui) {
|
|
23
|
+
constructor(network, ui) {
|
|
24
|
+
_DeeplinkProvider_network.set(this, void 0);
|
|
24
25
|
_DeeplinkProvider_ui.set(this, void 0);
|
|
26
|
+
__classPrivateFieldSet(this, _DeeplinkProvider_network, network, "f");
|
|
25
27
|
__classPrivateFieldSet(this, _DeeplinkProvider_ui, ui, "f");
|
|
26
28
|
}
|
|
27
29
|
async connect() {
|
|
28
30
|
return;
|
|
29
31
|
}
|
|
30
32
|
async sendTransaction(address, amount, payload, stateInit) {
|
|
31
|
-
const deepLink = (0, utils_1.tonDeepLink)(address, amount, payload, stateInit ? (0, core_1.beginCell)().storeWritable((0, core_1.storeStateInit)(stateInit)).endCell() : undefined);
|
|
33
|
+
const deepLink = (0, utils_1.tonDeepLink)(address, amount, payload, stateInit ? (0, core_1.beginCell)().storeWritable((0, core_1.storeStateInit)(stateInit)).endCell() : undefined, __classPrivateFieldGet(this, _DeeplinkProvider_network, "f") === 'testnet');
|
|
32
34
|
try {
|
|
33
35
|
__classPrivateFieldGet(this, _DeeplinkProvider_ui, "f").write('\n');
|
|
34
36
|
qrcode_terminal_1.default.generate(deepLink, { small: true }, (qr) => __classPrivateFieldGet(this, _DeeplinkProvider_ui, "f").write(qr));
|
|
@@ -52,4 +54,4 @@ class DeeplinkProvider {
|
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
56
|
exports.DeeplinkProvider = DeeplinkProvider;
|
|
55
|
-
_DeeplinkProvider_ui = new WeakMap();
|
|
57
|
+
_DeeplinkProvider_network = new WeakMap(), _DeeplinkProvider_ui = new WeakMap();
|
|
@@ -2,17 +2,24 @@ import { Address, Cell, StateInit } from '@ton/core';
|
|
|
2
2
|
import { SendProvider } from './SendProvider';
|
|
3
3
|
import { UIProvider } from '../../ui/UIProvider';
|
|
4
4
|
import { BlueprintTonClient } from '../NetworkProvider';
|
|
5
|
+
import { Network } from '../Network';
|
|
5
6
|
export type WalletVersion = 'v1r1' | 'v1r2' | 'v1r3' | 'v2r1' | 'v2r2' | 'v3r1' | 'v3r2' | 'v4' | 'v5r1';
|
|
7
|
+
type MnemonicProviderParams = {
|
|
8
|
+
version: WalletVersion;
|
|
9
|
+
workchain?: number;
|
|
10
|
+
walletId?: number;
|
|
11
|
+
subwalletNumber?: number;
|
|
12
|
+
secretKey: Buffer;
|
|
13
|
+
client: BlueprintTonClient;
|
|
14
|
+
ui: UIProvider;
|
|
15
|
+
network: Network;
|
|
16
|
+
};
|
|
6
17
|
export declare class MnemonicProvider implements SendProvider {
|
|
7
18
|
#private;
|
|
8
|
-
constructor(params:
|
|
9
|
-
|
|
10
|
-
workchain?: number;
|
|
11
|
-
secretKey: Buffer;
|
|
12
|
-
client: BlueprintTonClient;
|
|
13
|
-
ui: UIProvider;
|
|
14
|
-
});
|
|
19
|
+
constructor(params: MnemonicProviderParams);
|
|
20
|
+
private createWallet;
|
|
15
21
|
connect(): Promise<void>;
|
|
16
22
|
sendTransaction(address: Address, amount: bigint, payload?: Cell | undefined, stateInit?: StateInit | undefined): Promise<void>;
|
|
17
23
|
address(): Address;
|
|
18
24
|
}
|
|
25
|
+
export {};
|
|
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
10
10
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
11
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
12
|
};
|
|
13
|
-
var _MnemonicProvider_wallet, _MnemonicProvider_secretKey, _MnemonicProvider_client, _MnemonicProvider_ui;
|
|
13
|
+
var _MnemonicProvider_wallet, _MnemonicProvider_secretKey, _MnemonicProvider_client, _MnemonicProvider_ui, _MnemonicProvider_network;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.MnemonicProvider = void 0;
|
|
16
16
|
const ton_1 = require("@ton/ton");
|
|
@@ -33,15 +33,14 @@ class MnemonicProvider {
|
|
|
33
33
|
_MnemonicProvider_secretKey.set(this, void 0);
|
|
34
34
|
_MnemonicProvider_client.set(this, void 0);
|
|
35
35
|
_MnemonicProvider_ui.set(this, void 0);
|
|
36
|
+
_MnemonicProvider_network.set(this, void 0);
|
|
36
37
|
if (!(params.version in wallets)) {
|
|
37
38
|
throw new Error(`Unknown wallet version ${params.version}`);
|
|
38
39
|
}
|
|
39
|
-
const kp = (0, crypto_1.keyPairFromSecretKey)(params.secretKey);
|
|
40
40
|
__classPrivateFieldSet(this, _MnemonicProvider_client, params.client, "f");
|
|
41
|
-
__classPrivateFieldSet(this,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}), (params) => __classPrivateFieldGet(this, _MnemonicProvider_client, "f").provider(params.address, params.init && {
|
|
41
|
+
__classPrivateFieldSet(this, _MnemonicProvider_network, params.network, "f");
|
|
42
|
+
const kp = (0, crypto_1.keyPairFromSecretKey)(params.secretKey);
|
|
43
|
+
__classPrivateFieldSet(this, _MnemonicProvider_wallet, (0, core_1.openContract)(this.createWallet(params, kp), (params) => __classPrivateFieldGet(this, _MnemonicProvider_client, "f").provider(params.address, params.init && {
|
|
45
44
|
...params.init,
|
|
46
45
|
data: params.init.data ?? undefined,
|
|
47
46
|
code: params.init.code ?? undefined,
|
|
@@ -49,8 +48,29 @@ class MnemonicProvider {
|
|
|
49
48
|
__classPrivateFieldSet(this, _MnemonicProvider_secretKey, kp.secretKey, "f");
|
|
50
49
|
__classPrivateFieldSet(this, _MnemonicProvider_ui, params.ui, "f");
|
|
51
50
|
}
|
|
51
|
+
createWallet(params, kp) {
|
|
52
|
+
if (params.version === 'v5r1') {
|
|
53
|
+
return wallets[params.version].create({
|
|
54
|
+
publicKey: kp.publicKey,
|
|
55
|
+
walletId: {
|
|
56
|
+
networkGlobalId: params.network === 'testnet' ? -3 : -239, // networkGlobalId: -3 for Testnet, -239 for Mainnet
|
|
57
|
+
context: {
|
|
58
|
+
workchain: params.workchain ?? 0,
|
|
59
|
+
subwalletNumber: params.subwalletNumber ?? 0,
|
|
60
|
+
walletVersion: 'v5r1',
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return wallets[params.version].create({
|
|
66
|
+
workchain: params.workchain ?? 0,
|
|
67
|
+
publicKey: kp.publicKey,
|
|
68
|
+
walletId: params.walletId,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
52
71
|
async connect() {
|
|
53
|
-
__classPrivateFieldGet(this,
|
|
72
|
+
const formattedAddress = this.address().toString({ testOnly: __classPrivateFieldGet(this, _MnemonicProvider_network, "f") === 'testnet', bounceable: false });
|
|
73
|
+
__classPrivateFieldGet(this, _MnemonicProvider_ui, "f").write(`Connected to wallet at address: ${formattedAddress}\n`);
|
|
54
74
|
}
|
|
55
75
|
async sendTransaction(address, amount, payload, stateInit) {
|
|
56
76
|
await __classPrivateFieldGet(this, _MnemonicProvider_wallet, "f").sendTransfer({
|
|
@@ -83,4 +103,4 @@ class MnemonicProvider {
|
|
|
83
103
|
}
|
|
84
104
|
}
|
|
85
105
|
exports.MnemonicProvider = MnemonicProvider;
|
|
86
|
-
_MnemonicProvider_wallet = new WeakMap(), _MnemonicProvider_secretKey = new WeakMap(), _MnemonicProvider_client = new WeakMap(), _MnemonicProvider_ui = new WeakMap();
|
|
106
|
+
_MnemonicProvider_wallet = new WeakMap(), _MnemonicProvider_secretKey = new WeakMap(), _MnemonicProvider_client = new WeakMap(), _MnemonicProvider_ui = new WeakMap(), _MnemonicProvider_network = new WeakMap();
|
|
@@ -2,9 +2,10 @@ import { Address, Cell, StateInit } from '@ton/core';
|
|
|
2
2
|
import { SendProvider } from './SendProvider';
|
|
3
3
|
import { Storage } from '../storage/Storage';
|
|
4
4
|
import { UIProvider } from '../../ui/UIProvider';
|
|
5
|
+
import { Network } from '../Network';
|
|
5
6
|
export declare class TonConnectProvider implements SendProvider {
|
|
6
7
|
#private;
|
|
7
|
-
constructor(storage: Storage, ui: UIProvider);
|
|
8
|
+
constructor(storage: Storage, ui: UIProvider, network: Network);
|
|
8
9
|
connect(): Promise<void>;
|
|
9
10
|
address(): Address | undefined;
|
|
10
11
|
private connectWallet;
|
|
@@ -13,7 +13,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
13
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
15
|
};
|
|
16
|
-
var _TonConnectStorage_inner, _TonConnectProvider_connector, _TonConnectProvider_ui;
|
|
16
|
+
var _TonConnectStorage_inner, _TonConnectProvider_connector, _TonConnectProvider_ui, _TonConnectProvider_network;
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.TonConnectProvider = void 0;
|
|
19
19
|
const qrcode_terminal_1 = __importDefault(require("qrcode-terminal"));
|
|
@@ -39,18 +39,24 @@ function isRemote(walletInfo) {
|
|
|
39
39
|
return 'universalLink' in walletInfo && 'bridgeUrl' in walletInfo;
|
|
40
40
|
}
|
|
41
41
|
class TonConnectProvider {
|
|
42
|
-
constructor(storage, ui) {
|
|
42
|
+
constructor(storage, ui, network) {
|
|
43
43
|
_TonConnectProvider_connector.set(this, void 0);
|
|
44
44
|
_TonConnectProvider_ui.set(this, void 0);
|
|
45
|
+
_TonConnectProvider_network.set(this, void 0);
|
|
45
46
|
__classPrivateFieldSet(this, _TonConnectProvider_connector, new sdk_1.default({
|
|
46
47
|
storage: new TonConnectStorage(storage),
|
|
47
48
|
manifestUrl: 'https://raw.githubusercontent.com/ton-org/blueprint/main/tonconnect/manifest.json',
|
|
48
49
|
}), "f");
|
|
49
50
|
__classPrivateFieldSet(this, _TonConnectProvider_ui, ui, "f");
|
|
51
|
+
__classPrivateFieldSet(this, _TonConnectProvider_network, network, "f");
|
|
50
52
|
}
|
|
51
53
|
async connect() {
|
|
52
54
|
await this.connectWallet();
|
|
53
|
-
|
|
55
|
+
const formattedAddress = core_1.Address.parse(__classPrivateFieldGet(this, _TonConnectProvider_connector, "f").wallet.account.address).toString({
|
|
56
|
+
testOnly: __classPrivateFieldGet(this, _TonConnectProvider_network, "f") === 'testnet',
|
|
57
|
+
bounceable: false,
|
|
58
|
+
});
|
|
59
|
+
__classPrivateFieldGet(this, _TonConnectProvider_ui, "f").write(`Connected to wallet at address: ${formattedAddress}\n`);
|
|
54
60
|
}
|
|
55
61
|
address() {
|
|
56
62
|
if (!__classPrivateFieldGet(this, _TonConnectProvider_connector, "f").wallet)
|
|
@@ -105,4 +111,4 @@ class TonConnectProvider {
|
|
|
105
111
|
}
|
|
106
112
|
}
|
|
107
113
|
exports.TonConnectProvider = TonConnectProvider;
|
|
108
|
-
_TonConnectProvider_connector = new WeakMap(), _TonConnectProvider_ui = new WeakMap();
|
|
114
|
+
_TonConnectProvider_connector = new WeakMap(), _TonConnectProvider_ui = new WeakMap(), _TonConnectProvider_network = new WeakMap();
|
package/dist/paths.d.ts
CHANGED
|
@@ -12,5 +12,8 @@ export declare const BUILD_DIR: string;
|
|
|
12
12
|
export declare const TEMP_DIR: string;
|
|
13
13
|
export declare const CONTRACTS_DIR: string;
|
|
14
14
|
export declare const TESTS_DIR: string;
|
|
15
|
+
export declare const PACKAGE_ENTRY_POINT: string;
|
|
15
16
|
export declare const BLUEPRINT_CONFIG: string;
|
|
16
17
|
export declare const TACT_ROOT_CONFIG: string;
|
|
18
|
+
export declare const TYPESCRIPT_CONFIG: string;
|
|
19
|
+
export declare const PACKAGE_JSON: string;
|