为了更方便测试,我们需要在脚本中加入一些调整使其在 testnet 和 mainnet 之间灵活切换,并且加入将合约部署到 mainnet的部分。
添加环境变量
首先就要更新script section。从添加mainnet到script开始:
"deploy:mainnet": "yarn compile && ts-node ./scripts/deploy.ts"
我们需要将测试网设置为默认的环境变量,所以需要将testnet variable设置为true。
"deploy": "TESTNET=true yarn compile && ts-node ./scripts/deploy.ts"
我们还要添加用于测试的 mainnet:
"onchaintest:mainnet": "ts-node ./scripts/onchaintest.ts"
整个的scripts脚本应该如下所示:
"scripts": "compile": "ts-node ./scripts/compile.ts" "test": "yarn compile 66 yarn jest", "deploy"; "TESTNET=true yarn compile && ts-node ./scripts/deploy.ts" "deploy:mainnet": "yarn compile && ts-node ./scripts/deploy.ts" "onchaintest": "ts-node ./scripts/onchaintest.ts", "onchaintest:mainnet": "ts-node ./scripts/onchaintest.ts"
接下来安装并设置dotenv变量:
//先在终端安装dotenv库 yarn add dotenv
再设置dotenv变量:
import dotenv from "dotenv" dotenv.config();
找到需要修改代码的地方,也就是依赖 testnet 的地方。其中包括了deploy.ts 的子域:
let link = `https://tonhub.com/transfer/` + address.toString({ testOnly: true, })
将它改成:
let link = `https://tonhub.com/transfer/` + address.toString({ testOnly: process.env.TESTNET ? true : false, })
这是用于部署的。对于 onchaintest.ts,也要做同样的事情。首先,配置 dotenv,方法与上述相同。
然后选择正确的网络。如果 process.env 使用 testnet,我们也将使用 testnet;否则,我们将使用 mainnet:
const endpoint = await getHttpV4Endpoint({ network: process.env.TESTNET ? 'testnet' : 'mainnet', });
此外还需要搜索项目中的其他环境依赖项,并以同样的方式对其进行更改,这样连接才会正常。
修改日志
可以在部署时更新控制台日志,以显示项目将部署到哪个网络。如果 process.env 是 testnet,我们就说 testnet,否则就说 mainnet:
console.log( `The address of the contract is following: $address. toString()}*`, ); console.log( `Please scan the QR code below to deploy the contract to ${ process.env.network === 'testnet' ? 'testnet' : process.env.network === 'mainnet' ? 'mainnet' : 'unknown' }:`, ); console.log(process.env.network);
要把环境变量添加到运行脚本之前,而不是编译脚本之前。
"scripts": { "1": "yarn jest ./tests/1.spec.ts", "compile": "ts-node ./scripts/compile.ts", "test": "yarn compile && yarn jest ./main.spec.ts", "deploy": "yarn compile && network=testnet ts-node ./scripts/deploy.ts", "deploy:mainnet": "yarn compile && network=mainnet ts-node ./scripts/deploy.ts", "onchaintest": "ts-node ./scripts/onchaintest.ts", "onchaintest:mainnet": "ts-node ./scripts/onchaintest.ts" }
再次运行默认部署到 testnet。如果想部署到 mainnet,可以使用:
yarn deploy:mainnet
日志现在会返回对应的网络了。
通过 Tonhub 将其部署到主网上需要扫描二维码,并用真钱在 Tonhub 上确认部署交易。之后就可以使用 Tonscan 找到我们的交易了。