在本课中,我们将调整脚本,使其在测试网和主网之间灵活运用。然后,我们还将学习如何将合约部署到主网。 这将包括一个新的环境变量 testnet。我们将在脚本中设置这个变量,这样它就能知道必须使用哪个网络。根据这个新变量,我们还将调整代码.
7 r' N7 B# n2 L! f, O ~) l( S( I& M5 U# v) h, m! S" o% F9 Y
添加环境变量首先,让我们更新脚本部分。我们将首先添加 mainnet到脚本中: - "deploy:mainnet": "yarn compile && ts-node ./scripts/deploy.ts": t; d+ @1 D# i
复制代码不过,我们还是希望将 testnet 设置为默认环境变量。因此,我们要让 testnet 变量为 true:
2 M* G8 D& o8 m O# V- "deploy": "TESTNET=true yarn compile && ts-node ./scripts/deploy.ts"' @& d0 w# ^& O. \- [' J
复制代码现在,要使用 mainnet 进行部署,就必须明确声明它。我们还要添加 mainnet 进行测试:
1 n3 P! X i3 f6 D; |3 q0 O8 y- "onchaintest:mainnet": "ts-node ./scripts/onchaintest.ts"
9 ]% t! }- D: i- L
复制代码这就是整个脚本部分的样子: 5 g! p1 v2 a B6 z+ c. D9 D
- "scripts":
% D* ?: K$ F/ Y, Z( x6 { - "compile": "ts-node ./scripts/compile.ts"( B+ m1 a; a5 G6 j) H( M
- "test": "yarn compile 66 yarn jest",4 k8 W0 F C# R
- "deploy"; "TESTNET=true yarn compile && ts-node ./scripts/deploy.ts"* ]3 K9 p3 w; @2 }1 b) |
- "deploy:mainnet": "yarn compile && ts-node ./scripts/deploy.ts"
6 b, U5 |- d, l4 [3 s9 K - "onchaintest": "ts-node ./scripts/onchaintest.ts",
9 Y. w6 E$ ^' J3 m5 I
* o# z4 h: B4 e( L- "onchaintest:mainnet": "ts-node ./scripts/onchaintest.ts"
复制代码接下来,我们需要配置 dotenv 变量: & O, K$ y. n6 W( w4 s; W
- import dotenv from "dotenv"3 I5 B- M9 T! Z S/ R7 B
- dotenv.config();
复制代码为此,我们需要安装这个库: $ T5 ]; n% u. A+ l6 Q1 d( ?$ G# f- l
- yarn add dotenv& }+ u5 ?- h6 y" P
复制代码让我们找到需要修改代码的地方,也就是需要依赖测试网的地方。很明显,这个子域在 deploy.ts: v* I5 f1 p6 V7 x) D* j0 ~
- let link =+ X- I, }& B5 v: J
- `https://tonhub.com/transfer/` +
2 d) ~+ h* j. ^+ @& l. I6 k3 @, ?0 X - address.toString({
" X" t" V8 a: d/ |' @1 [0 j1 n) _ - testOnly: true,7 H. K3 q8 B' u* l
- })
复制代码更新它,如果设置为 "true",我们就把测试放在这里。否则,我们就在这里放一个空字符串: - M/ ]/ ~! o+ g4 y+ H' f
- let link = : y- d2 p8 a. y5 q6 T" P6 b% O
- `https://tonhub.com/transfer/` +: T8 {- p2 B; K1 m* m5 |, ?
- address.toString({. x' K0 @1 P( _& p: D1 _8 J
- testOnly: process.env.TESTNET ? true : false,
* O* k5 r$ T& Z7 t% @; z - })
复制代码这是为了部署。和 onchaintest.ts 我们将做同样的事情。首先,按照上述方法配置 dotenv。 然后再加上选择合适的网络。如果 process.env 则我们也将使用 testnet,否则我们将使用 mainnet: - const endpoint = await getHttV4Endpoint({0 p( c9 d5 i6 X6 _) R4 g
- network: process.env.TESTNET ? "testnet": "mainnet",
: @1 h6 |" q; n2 B; B. \5 p1 J - });
复制代码此外,我们还需要搜索项目中的其他环境依赖项,并以同样的方式对其进行更改,这样连接才会正常。 修改日志
( B' H& y' C1 ]# g% |我们可以在部署时更新控制台日志,以显示项目将部署到哪个网络。如果 process.env 是 testnet,我们就说 testnet,否则就说 mainnet:
5 H$ \; g: W, e C1 M- console. log (* {% |3 [* a: e% h( e
- `The address of the contract is following: $address. toString()}*
; z; v9 O! _. g - );
7 A/ l4 ?. L0 c! ]) I; w - console. log (
7 H( A3 J( N G: _5 f. T- u5 E - Please scan the QR code below to deploy the contract to ${. k, G0 g' l- k) i0 H2 j1 Y2 ?
- process.env.TESTET ? "tesnet" : "mainnet"# D0 X0 t* ?! f( {. N3 k8 C
- }:`
. D' y! @' p' S: y# W2 k. l- v; } - )
复制代码现在,我们要把环境变量添加到它应该在的位置:运行脚本之前,而不是编译脚本之前。 S- {- H$ H ~% P; M+ t- }0 A
- "scripts": {5 N( k" y2 \/ [6 p/ {
- "compile": "ts-node ./scripts/compile.ts",# C" g; }2 w* {2 `% Q1 y8 C* M4 a
- "test": "yarn compile && yarn jest"7 v1 K- f' \: h8 U+ g3 [
- "deploy": "yarn compile && TESTNET=true ts-node ./scripts/deploy.ts"
3 ~6 }% P' ^+ k2 U2 O - "deploy:mainnet": "yarn compile && ts-node ./scripts/deploy.ts"
* k- l0 r1 q3 T0 S+ S; h* t0 M+ P - "onchaintest": "TESTNET=true ts-node ./scripts/deploy.ts"
. J/ d% G6 D9 P# a4 q1 } - "onchaintest:mainnet": "ts-node ./scripts/deploy.ts"
复制代码让我们再次运行它。现在默认部署到 testnet。如果我们想部署到 mainnet,可以使用命令
& z& U5 x+ k! a3 f y3 f- yarn deploy:mainnet
$ E* ?+ A! n+ w& x- _( C: e
复制代码现在,我们改善过的日志会显示我们是部署到 testnet 还是 mainnet。
& ~* _' h Y) ~4 c" E( `部署到主网现在,我要通过 Tonhub 将它部署到主网上,这样我们就能在浏览器上看到它了。我需要扫描二维码,并在 Tonhub 上用真钱确认部署交易. 之后,我们就可以使用 Tonscan 查找交易了。 我们还调整了链上测试的脚本,以同样的方式在 testnet 或 mainnet 上运行。至此,您已经完成了合约开发的整个生命周期。恭喜您!
. l( G- ?9 f/ |' b; Z+ }; p9 V 结论我们只是建立了一个自定义设置,你不必这样使用它。我们经历了编译、测试、部署等每一个步骤,这样你就能更好地了解它是如何工作的。你会发现越来越多的工具会将你置于更高层次。这样做很好:即使是了解所有细节的顶级开发人员也喜欢摆脱低层次的手动工作。大多数时候,你可能会使用 Blueprint。 在下一章中,我们将编写更多的 FunC 逻辑、更多的测试,并修改我们的脚本,使其与 Blueprint 完全相同。我们将开始在底层大量使用 Blueprint。 在接下来的章节中,你所学到的知识将非常有用。不过,你也可以直接使用 Blueprint,简单地生成包含所有必要文件的空项目。现在你已经知道如何使用它们,了解了编译和部署自己的合约的过程和要求。 感谢您参与本章的学习!我期待着在下一章与您见面。我真的为你感到高兴,因为你有这么多的动力来学习编程。
/ o$ Q4 s, h/ }! f& J4 h3 W6 g# I. ^! I8 M& k( V' s2 m) n
- I; L5 s0 U* l$ [' s" b5 S
7 R9 r* b- R; P5 d! Q
) w& @' U' k: {" U. Z) b4 [0 |
/ Y0 |' K# E2 W3 ?% N# m, b' r- g; t" g! E& ?
0 g6 u$ {! U. i+ L: h \* A8 Z
. d; }9 ^' B( F C4 j0 R: {% s# T: t
: l7 L. [5 h7 m; Q& H% Y# h! Z& U/ a& X" l1 k) ~
|