在本课中,我们将调整脚本,使其在测试网和主网之间灵活运用。然后,我们还将学习如何将合约部署到主网。 这将包括一个新的环境变量 testnet。我们将在脚本中设置这个变量,这样它就能知道必须使用哪个网络。根据这个新变量,我们还将调整代码. + b; E7 q6 w9 c% F5 Y- ]
3 x: y7 N3 o" y& T- |添加环境变量首先,让我们更新脚本部分。我们将首先添加 mainnet到脚本中: - "deploy:mainnet": "yarn compile && ts-node ./scripts/deploy.ts"( Y, j8 e! q' ~7 X& s4 Z5 h9 t
复制代码不过,我们还是希望将 testnet 设置为默认环境变量。因此,我们要让 testnet 变量为 true: ) k5 F) k, f6 C+ L
- "deploy": "TESTNET=true yarn compile && ts-node ./scripts/deploy.ts"- M2 s8 c; S& S' M# [0 N. h( ?
复制代码现在,要使用 mainnet 进行部署,就必须明确声明它。我们还要添加 mainnet 进行测试:
. ^8 H2 l; i- L+ S- "onchaintest:mainnet": "ts-node ./scripts/onchaintest.ts"! e0 K, j L9 d8 c! t0 S
复制代码这就是整个脚本部分的样子: 4 a3 C/ D! h0 C7 Z& p `
- "scripts":
* T# `1 z r- W! @! t& F* P - "compile": "ts-node ./scripts/compile.ts"+ V) N3 U. X6 ]. W3 |4 @1 K
- "test": "yarn compile 66 yarn jest",5 g6 x7 L9 q! U/ P/ s3 y
- "deploy"; "TESTNET=true yarn compile && ts-node ./scripts/deploy.ts"
& T8 r# w6 l# l2 L. H- m8 u - "deploy:mainnet": "yarn compile && ts-node ./scripts/deploy.ts"5 I7 W( @8 {) E1 t
- "onchaintest": "ts-node ./scripts/onchaintest.ts",3 p" X+ Y, R( U1 {& o
- , Y: b: E7 h7 v+ t; K: Q: s2 d
- "onchaintest:mainnet": "ts-node ./scripts/onchaintest.ts"
复制代码接下来,我们需要配置 dotenv 变量: / P) \/ r8 U; t- F9 @
- import dotenv from "dotenv"
: H" E6 S9 e+ U: M5 G! J - dotenv.config();
复制代码为此,我们需要安装这个库:
3 g8 v; M( U8 e' F2 g" _; j" W- yarn add dotenv* ^: B- C; x: ~, j# j, ]7 O$ z: y
复制代码让我们找到需要修改代码的地方,也就是需要依赖测试网的地方。很明显,这个子域在 deploy.ts: 2 ]$ n/ n; k- \* ?
- let link =5 i3 E: U( \+ m; Q+ r8 m, d7 }
- `https://tonhub.com/transfer/` +
, I- T9 q8 i. ?! F8 B" w, e4 ] - address.toString({
* C( @4 [& O" j0 N6 R - testOnly: true,
1 X1 K4 ~8 T# w! i& O% \* i' \ - })
复制代码更新它,如果设置为 "true",我们就把测试放在这里。否则,我们就在这里放一个空字符串: 6 Z' A4 n5 B( y8 I
- let link =
6 c5 x3 z8 w; U; i* C/ V0 x5 ~ - `https://tonhub.com/transfer/` +) R+ x5 D8 [9 l! ^1 d
- address.toString({+ t7 z1 ], |% L
- testOnly: process.env.TESTNET ? true : false,/ Z% n& l$ k/ T9 p' P
- })
复制代码这是为了部署。和 onchaintest.ts 我们将做同样的事情。首先,按照上述方法配置 dotenv。 然后再加上选择合适的网络。如果 process.env 则我们也将使用 testnet,否则我们将使用 mainnet: - const endpoint = await getHttV4Endpoint({
1 {( r# j& R2 c2 q3 a - network: process.env.TESTNET ? "testnet": "mainnet",
, p( I/ {+ x( D - });
复制代码此外,我们还需要搜索项目中的其他环境依赖项,并以同样的方式对其进行更改,这样连接才会正常。 修改日志
0 @9 E! c& C5 y4 x" s, i0 m我们可以在部署时更新控制台日志,以显示项目将部署到哪个网络。如果 process.env 是 testnet,我们就说 testnet,否则就说 mainnet: 7 e1 Y- `9 o% L3 v9 r
- console. log (; i' d3 r4 H, L! m
- `The address of the contract is following: $address. toString()}*
' a) |* T+ l9 A6 i5 Y' i! z4 t" M - );4 m1 o: W3 G$ m/ _
- console. log (; b' L4 ~4 y- y
- Please scan the QR code below to deploy the contract to ${
X7 r. i0 s" x: k+ Z, l7 ? - process.env.TESTET ? "tesnet" : "mainnet"4 c: t" Q' G3 ^2 I
- }:`) b, D4 T1 ~: E! N
- )
复制代码现在,我们要把环境变量添加到它应该在的位置:运行脚本之前,而不是编译脚本之前。
4 K" ]* O& I# n4 T3 {5 X, v- "scripts": {
1 g) n) F- N3 L, e, d# G# b: _ - "compile": "ts-node ./scripts/compile.ts",- }- W3 m8 a" S, ]8 p
- "test": "yarn compile && yarn jest"
" B) C. L6 L6 s" J2 ?' ~ - "deploy": "yarn compile && TESTNET=true ts-node ./scripts/deploy.ts"
& u" h R ^6 E6 ?" }5 q* N- M! } - "deploy:mainnet": "yarn compile && ts-node ./scripts/deploy.ts". d8 K& ?6 ?- i) P* P
- "onchaintest": "TESTNET=true ts-node ./scripts/deploy.ts"
/ b) W2 n7 ?' k+ w - "onchaintest:mainnet": "ts-node ./scripts/deploy.ts"
复制代码让我们再次运行它。现在默认部署到 testnet。如果我们想部署到 mainnet,可以使用命令
" ~" z$ j/ F: F! R9 j1 I- yarn deploy:mainnet2 F- m0 x4 j4 }% ~9 b% F
复制代码现在,我们改善过的日志会显示我们是部署到 testnet 还是 mainnet。 % L2 l0 n. Z2 Z3 h
部署到主网现在,我要通过 Tonhub 将它部署到主网上,这样我们就能在浏览器上看到它了。我需要扫描二维码,并在 Tonhub 上用真钱确认部署交易. 之后,我们就可以使用 Tonscan 查找交易了。 我们还调整了链上测试的脚本,以同样的方式在 testnet 或 mainnet 上运行。至此,您已经完成了合约开发的整个生命周期。恭喜您!
& w3 O. P# L% } 结论我们只是建立了一个自定义设置,你不必这样使用它。我们经历了编译、测试、部署等每一个步骤,这样你就能更好地了解它是如何工作的。你会发现越来越多的工具会将你置于更高层次。这样做很好:即使是了解所有细节的顶级开发人员也喜欢摆脱低层次的手动工作。大多数时候,你可能会使用 Blueprint。 在下一章中,我们将编写更多的 FunC 逻辑、更多的测试,并修改我们的脚本,使其与 Blueprint 完全相同。我们将开始在底层大量使用 Blueprint。 在接下来的章节中,你所学到的知识将非常有用。不过,你也可以直接使用 Blueprint,简单地生成包含所有必要文件的空项目。现在你已经知道如何使用它们,了解了编译和部署自己的合约的过程和要求。 感谢您参与本章的学习!我期待着在下一章与您见面。我真的为你感到高兴,因为你有这么多的动力来学习编程。 : ~" q- S8 K$ e# o* e
$ I" c+ G7 ~. ]9 B. L& l
% w! x, ~1 s2 k/ ?
) {! I* L# l/ \
# P Z5 x" I& Q. N l4 y
e0 b, s, P$ ~" p' X2 U0 o3 U5 l) u2 _2 C& t7 `$ a( v
9 T2 D8 h4 k0 ~' A2 D; H. g( G# \6 f- H
0 S) S" U% U6 {) C) g5 F$ w$ _9 }) @( u8 x/ o' `$ t# |' X
|