English 简体中文 繁體中文 한국 사람 日本語 Deutsch русский بالعربية TÜRKÇE português คนไทย french

简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE คนไทย Français русский

回答

收藏

3.6 从测试网到主网的部署

开源社区 开源社区 9353 人阅读 | 0 人回复 | 2025-03-08

在本课中,我们将调整脚本,使其在测试网和主网之间灵活运用。然后,我们还将学习如何将合约部署到主网。
这将包括一个新的环境变量 testnet。我们将在脚本中设置这个变量,这样它就能知道必须使用哪个网络。根据这个新变量,我们还将调整代码.

7 r' N7 B# n2 L! f, O  ~) l( S( I& M5 U# v) h, m! S" o% F9 Y
添加环境变量
首先,让我们更新脚本部分。我们将首先添加 mainnet到脚本中:
  1. "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
  1. "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
  1. "onchaintest:mainnet": "ts-node ./scripts/onchaintest.ts"
    9 ]% t! }- D: i- L
复制代码
这就是整个脚本部分的样子:
5 g! p1 v2 a  B6 z+ c. D9 D
  1. "scripts":
    % D* ?: K$ F/ Y, Z( x6 {
  2.   "compile": "ts-node ./scripts/compile.ts"( B+ m1 a; a5 G6 j) H( M
  3.   "test": "yarn compile 66 yarn jest",4 k8 W0 F  C# R
  4.   "deploy"; "TESTNET=true yarn compile && ts-node ./scripts/deploy.ts"* ]3 K9 p3 w; @2 }1 b) |
  5.   "deploy:mainnet": "yarn compile && ts-node ./scripts/deploy.ts"
    6 b, U5 |- d, l4 [3 s9 K
  6.   "onchaintest": "ts-node ./scripts/onchaintest.ts",
    9 Y. w6 E$ ^' J3 m5 I

  7. * o# z4 h: B4 e( L
  8.   "onchaintest:mainnet": "ts-node ./scripts/onchaintest.ts"
复制代码
接下来,我们需要配置 dotenv 变量:
& O, K$ y. n6 W( w4 s; W
  1. import dotenv from "dotenv"3 I5 B- M9 T! Z  S/ R7 B
  2. dotenv.config();
复制代码
为此,我们需要安装这个库:
$ T5 ]; n% u. A+ l6 Q1 d( ?$ G# f- l
  1. yarn add dotenv& }+ u5 ?- h6 y" P
复制代码
让我们找到需要修改代码的地方,也就是需要依赖测试网的地方。很明显,这个子域在 deploy.ts:
  v* I5 f1 p6 V7 x) D* j0 ~
  1. let link =+ X- I, }& B5 v: J
  2.   `https://tonhub.com/transfer/` +
    2 d) ~+ h* j. ^+ @& l. I6 k3 @, ?0 X
  3.   address.toString({
    " X" t" V8 a: d/ |' @1 [0 j1 n) _
  4.     testOnly: true,7 H. K3 q8 B' u* l
  5.   })
复制代码
更新它,如果设置为 "true",我们就把测试放在这里。否则,我们就在这里放一个空字符串:
- M/ ]/ ~! o+ g4 y+ H' f
  1. let link = : y- d2 p8 a. y5 q6 T" P6 b% O
  2.   `https://tonhub.com/transfer/` +: T8 {- p2 B; K1 m* m5 |, ?
  3.   address.toString({. x' K0 @1 P( _& p: D1 _8 J
  4.     testOnly: process.env.TESTNET ? true : false,
    * O* k5 r$ T& Z7 t% @; z
  5.   })
复制代码
这是为了部署。和 onchaintest.ts 我们将做同样的事情。首先,按照上述方法配置 dotenv。
然后再加上选择合适的网络。如果 process.env 则我们也将使用 testnet,否则我们将使用 mainnet:
  1. const endpoint = await getHttV4Endpoint({0 p( c9 d5 i6 X6 _) R4 g
  2.   network: process.env.TESTNET ? "testnet": "mainnet",
    : @1 h6 |" q; n2 B; B. \5 p1 J
  3. });
复制代码
此外,我们还需要搜索项目中的其他环境依赖项,并以同样的方式对其进行更改,这样连接才会正常。
修改日志
( B' H& y' C1 ]# g% |
我们可以在部署时更新控制台日志,以显示项目将部署到哪个网络。如果 process.env 是 testnet,我们就说 testnet,否则就说 mainnet:

5 H$ \; g: W, e  C1 M
  1. console. log (* {% |3 [* a: e% h( e
  2.   `The address of the contract is following: $address. toString()}*
    ; z; v9 O! _. g
  3. );
    7 A/ l4 ?. L0 c! ]) I; w
  4. console. log (
    7 H( A3 J( N  G: _5 f. T- u5 E
  5.   Please scan the QR code below to deploy the contract to ${. k, G0 g' l- k) i0 H2 j1 Y2 ?
  6.     process.env.TESTET ? "tesnet" : "mainnet"# D0 X0 t* ?! f( {. N3 k8 C
  7.   }:`
    . D' y! @' p' S: y# W2 k. l- v; }
  8. )
复制代码
现在,我们要把环境变量添加到它应该在的位置:运行脚本之前,而不是编译脚本之前。
  S- {- H$ H  ~% P; M+ t- }0 A
  1. "scripts": {5 N( k" y2 \/ [6 p/ {
  2.   "compile": "ts-node ./scripts/compile.ts",# C" g; }2 w* {2 `% Q1 y8 C* M4 a
  3.   "test": "yarn compile && yarn jest"7 v1 K- f' \: h8 U+ g3 [
  4.   "deploy": "yarn compile && TESTNET=true ts-node ./scripts/deploy.ts"
    3 ~6 }% P' ^+ k2 U2 O
  5.   "deploy:mainnet": "yarn compile && ts-node ./scripts/deploy.ts"
    * k- l0 r1 q3 T0 S+ S; h* t0 M+ P
  6.   "onchaintest": "TESTNET=true ts-node ./scripts/deploy.ts"
    . J/ d% G6 D9 P# a4 q1 }
  7.   "onchaintest:mainnet": "ts-node ./scripts/deploy.ts"
复制代码
让我们再次运行它。现在默认部署到 testnet。如果我们想部署到 mainnet,可以使用命令

& z& U5 x+ k! a3 f  y3 f
  1. 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) ~
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则