# 加密狗整编空投第221篇：用VPS在 zkSync 网络上部署合约 - 加密狗 - Medium

By [no1space](https://paragraph.com/@no1space) · 2023-06-08

---

  

之前写了篇不用VPS部署智能合约的教程，很多人会遇到各种各样的问题，那今天我们就来用VPS部署，一般情况下不会出现跑不通的问题了。

![](https://storage.googleapis.com/papyrus_images/096fdc23e9940ac64a3ded859f7c436d5836df095effe45ec0c6ed070e19df41.webp)

一、往期教程
------

二、教程前
-----

1、安装前需要使用VPS服务器，最低配置如下：
-----------------------

CPU：4vCore

内存：6GB

硬盘：100GB

操作系统：Ubuntu 20.04

2、云主机+SSH工具
-----------

需要你使用VPS或者你的机场做为云主机，云主机请切换成Ubuntu系统；

SSH工具：小白用户建议使用Xshell或Finalshell。

三、如何连接到 VPS
-----------

**MacOs**：如果你用的是这个操作系统，你只需要用自己的设备与 SSH 连接；

**Windows：如果你是Win，有很多工具可以用，比如**[**putty**](https://www.putty.org/) **、**[**MobaXterm**](https://mobaxterm.mobatek.net/)、[**Xshell**](https://www.netsarang.com/en/xshell/)

1、下载一个应用（本教程以**putty**为例，小白用户建议使用Xshell或Finalshell）

2、复制云服务器IP链接

![](https://storage.googleapis.com/papyrus_images/2105daa31ff5ce825d926cd4e543ce829ba34fed208855525d882d63b96d9c0d.webp)

3、点击“接受”，输入云服务器的用户名和密码

**注意：要粘贴你已经复制的任何命令，只需右键单击要粘贴命令即可**

![](https://storage.googleapis.com/papyrus_images/e5475c29b6500996da721351496aa18370ee052620bb22d61a9b8ccea7e1dffb.webp)

4、再次输入密码，并输入新密码。

以上就是云服务器+SSH组合的步骤，下文所有步骤都在SSH工具中进行（小白用户建议使用Xshell或Finalshell）

5、使用Ubuntu，因此将目录更改为 /home/ubuntu

    cd /home/ubuntu
    

6、root

每个VPS都需要root，如果你用的是PuTTY，就按如下方式root，其他工具基础都差不了多少。

![](https://storage.googleapis.com/papyrus_images/e9c3bd2dc52b66f5fee9ef55b7a7b4ae76d0155a1ac63dd745721872e816103a.png)

三、服务器设置
-------

1、输入如下指令

    sudo apt-get update && sudo apt-get install -y
    

![](https://storage.googleapis.com/papyrus_images/165b0b078d5d3eac7c92e5b2f818acf9bde35396f3e80f631a0a8e473d94a81c.webp)

**2、安装CURL**

    apt install curl -y
    

![](https://storage.googleapis.com/papyrus_images/d1611031f127a2bce894561c878d490a5a55bfeb60f78db444cbd827cdce2e53.webp)

    curl -sL https://deb.nodesource.com/setup_16.x -o /tmp/nodesource_setup.sh
    

    sudo bash /tmp/nodesource_setup.sh
    

3、安装**NODEJS**

    sudo apt-get install -y nodejs
    

![](https://storage.googleapis.com/papyrus_images/3d4b5cacf89308479480805cbdc487b9da21f44c5556c4bd5e783ebb1ae5ca47.webp)

**4、安装VIM :**

    sudo apt-get install vim
    

![](https://storage.googleapis.com/papyrus_images/fed6055ab03ce3b4c8d282c4a93b33ce19e0b6c87ed19c1eccb13a98c1cfa7c5.webp)

5、部署**TIME**

    npm init -y
    

![](https://storage.googleapis.com/papyrus_images/dfab845b8e0446c3455f57abeca46bc7451c97d48f5af32f5b4697c7dc045285.webp)

    npm install --save-dev hardhat
    

![](https://storage.googleapis.com/papyrus_images/6d22b64718cc0ddb7843cc9d736529c2466ff4ae04a3213b3be2161d58755069.webp)

6、继续\*\*:\*\*

    npm install -g npm@9.6.2
    

![](https://storage.googleapis.com/papyrus_images/8132d75b3f81ce73faa29a44605c27f4978797d206bdb415aa1ab6b14f4f4db5.webp)

![](https://storage.googleapis.com/papyrus_images/11284b5cc2c96fe687cdf34e8e199ec29abc95c4a355cc4d1f67d7f3b3d5801a.webp)

*   点击箭头标记的地方，按ENTER
    
*   按三下回车键
    

![](https://storage.googleapis.com/papyrus_images/ae6a624cf19b3e4257000add590119fdb71c900b0ff7a334692d9f243305c739.webp)

7、创建目录并进入目录

    mkdir greeter
    

    cd greeter
    

    npm init -y
    

![](https://storage.googleapis.com/papyrus_images/9085d1d779c7cc94a7e30c9a920257bc9b71bf51a251272a00ace5c2714a3a8d.webp)

    npm add -D typescript ts-node @types/node ethers@^5.7.2 zksync-web3@^0.14.3 @ethersproject/hash @ethersproject/web hardhat @matterlabs/hardhat-zksync-solc @matterlabs/hardhat-zksync-deploy
    

8、编辑配置：

    vim hardhat.config.ts
    

插入次代码（这是官方代码，如果怕被女巫，可以用ai生成一个） :

    import "@matterlabs/hardhat-zksync-deploy";
    import "@matterlabs/hardhat-zksync-solc";
    

    module.exports = {
      zksolc: {
        version: "1.3.6",
        compilerSource: "binary",
        settings: {},
      },
    defaultNetwork: "zkSyncMainnet",
      networks: {
        zkSyncMainnet: {
          url: "https://zksync2-mainnet.zksync.io",
          ethNetwork: "mainnet", 
          zksync: true,
        },
      },
      solidity: {
        version: "0.8.17",
      },
    };
    

*   按**Esc**
    
*   输入:**wq**
    
*   **回车**
    

9、**创建两个目录：**

    mkdir contracts
    

    mkdir deploy
    

    vim contracts/Greeter.sol
    

10、继续**插入代码：**

    //SPDX-License-Identifier: Unlicensed
    pragma solidity ^0.8.0;
    

    contract Greeter {
        string private greeting;    constructor(string memory _greeting) {
            greeting = _greeting;
        }    function greet() public view returns (string memory) {
            return greeting;
        }    function setGreeting(string memory _greeting) public {
            greeting = _greeting;
        }
    }
    

*   按 **ESC**
    
*   输入 **:wq**
    
*   按 **ENTER**
    

    npx hardhat compile
    

![](https://storage.googleapis.com/papyrus_images/15ff9186d4c4c18a362f1c58ed269c116ab39249606745e8f7afa747b6ff6439.webp)

11、继续输入

    vim deploy/deploy.ts
    

12、输入下面的代码，将代码中的\*WALLET-PRIVATE-KEY\*改为你自己的私钥

    import { utils, Wallet } from "zksync-web3";
    import * as ethers from "ethers";
    import { HardhatRuntimeEnvironment } from "hardhat/types";
    import { Deployer } from "@matterlabs/hardhat-zksync-deploy";
    
    // An example of a deploy script that will deploy and call a simple contract.
    export default async function (hre: HardhatRuntimeEnvironment) {
      console.log(`Running deploy script for the Greeter contract`);
    
      // Initialize the wallet.
      const wallet = new Wallet(*<WALLET-PRIVATE-KEY*");
    
      // Create deployer object and load the artifact of the contract we want to deploy.
      const deployer = new Deployer(hre, wallet);
      const artifact = await deployer.loadArtifact("Greeter");
    
      // Deploy this contract. The returned object will be of a `Contract` type, similarly to ones in `ethers`.
      // `greeting` is an argument for contract constructor.
      const greeting = "Hi there!";
      const greeterContract = await deployer.deploy(artifact, [greeting]);
    
      // Show the contract info.
      const contractAddress = greeterContract.address;
      console.log(`${artifact.contractName} was deployed to ${contractAddress}`);
    
      // Call the deployed contract.
      const greetingFromContract = await greeterContract.greet();
      if (greetingFromContract == greeting) {
        console.log(`Contract greets us with ${greeting}!`);
      } else {
        console.error(`Contract said something unexpected: ${greetingFromContract}`);
      }
    
      // Edit the greeting of the contract
      const newGreeting = "Hey guys";
      const setNewGreetingHandle = await greeterContract.setGreeting(newGreeting);
      await setNewGreetingHandle.wait();
    
      const newGreetingFromContract = await greeterContract.greet();
      if (newGreetingFromContract == newGreeting) {
        console.log(`Contract greets us with ${newGreeting}!`);
      } else {
        console.error(`Contract said something unexpected: ${newGreetingFromContract}`);
      }
    }
    

![](https://storage.googleapis.com/papyrus_images/c2481835676c6294c6bf77fe0bb18e719932db54aedba4fff75636b21cc647e4.webp)

*   按 **ESC**
    
*   输入 **:wq**
    
*   按 **ENTER**
    

四、部署
----

    npx hardhat deploy-zksync
    

![](https://storage.googleapis.com/papyrus_images/bebcd7dc31d37d44f1583ce5a20903326e997fa1be9d7159ad28497f9caf636f.webp)

这是你的合约地址

复制合约地址，粘贴到[EXPLORER](https://explorer.zksync.io/)查看：

![](https://storage.googleapis.com/papyrus_images/d5b4fb8456b0d7825549ae536dc4e8df8b36b60ca5461d4d7f92683ff1a202a4.webp)

五、验证合约
------

第1步、在刚打开的区块链浏览器上，选择下方contract，点击Verify Smart Contract；

![](https://storage.googleapis.com/papyrus_images/305a62f182725a5f4b98974998453eb805bdd5991a8b91ea914efba2b00de3b7.webp)

第2步、填写智能合约，下图打箭头的部分都是要填写的：

![](https://storage.googleapis.com/papyrus_images/8a065d041f97ca3f94889ee7235e0096293c9f2ebeada78b24f62efb11d346e0.webp)

*   Contract Name 填Greeter
    
*   在`Enter the Solidy Contract Code`栏中，粘贴：
    

    //SPDX-License-Identifier: Unlicense
    pragma solidity ^0.8.0;
    

    contract Greeter {
        string private greeting;    constructor(string memory _greeting) {
            greeting = _greeting;
        }    function greet() public view returns (string memory) {
            return greeting;
        }    function setGreeting(string memory _greeting) public {
            greeting = _greeting;
        }
    }
    

*   在 Constructor Arguments 栏中，插入部署合约后出现的数据：
    

第3步、填写所有栏后，点击“Verify Smart Contract”；

![](https://storage.googleapis.com/papyrus_images/58e9049aa5da6b6afb02b2e370de36f5abbcadb023f5db949b169be7e580131f.webp)

出现如下界面，说明部署成功；如果报错，请降低版本。

![](https://storage.googleapis.com/papyrus_images/09ea7b99d5b9b2aed835cd795f0218d4194f46f55e573398d12ce4c6d27b1a67.webp)

六、运行合约
------

验证成功后，可以去检查智能合约的运行情况。

第1步、点击区块链浏览器中的Back to contract，并转到contract部分。

第2步、选择read部分，点击Query按钮，应出现以下消息：Hey guys！

![](https://storage.googleapis.com/papyrus_images/ccb81603bd1a9d993e03316a8f2f329db438881dae8c3a97e9bc213a2499c20a.webp)

第3步、转到Write，打开，写下任何短语，例如Hi ZkSync，然后点击Connect Write to write 确认交易（要确认2次）。

![](https://storage.googleapis.com/papyrus_images/83e16516ac5f08880dd9dad6ae29a4a8c2e71ca23b538c985ad2ff0d11dc0854.webp)

第4步、交易完成后，返回read部分，并按下Query按钮，我们应该会看到我们在上次操作中写入的短语。

如果像下图这样，恭喜你，你的智能合约已打开并成功运行。

![](https://storage.googleapis.com/papyrus_images/a36b5ee0f3df7baae4f73505a32ab8fb5db36991a6919151bef02fefdea51b83.webp)

如果没有出现，请返回Write部分，看看你是不是没有出现交易hash，如果没有出现，请在此点击Write。

---

*Originally published on [no1space](https://paragraph.com/@no1space/221-vps-zksync-medium)*
