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

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

post image

一、往期教程

二、教程前

1、安装前需要使用VPS服务器,最低配置如下:

CPU:4vCore

内存:6GB

硬盘:100GB

操作系统:Ubuntu 20.04

2、云主机+SSH工具

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

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

三、如何连接到 VPS

MacOs:如果你用的是这个操作系统,你只需要用自己的设备与 SSH 连接;

Windows:如果你是Win,有很多工具可以用,比如puttyMobaXtermXshell

1、下载一个应用(本教程以putty为例,小白用户建议使用Xshell或Finalshell)

2、复制云服务器IP链接

post image

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

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

post image

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

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

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

cd /home/ubuntu

6、root

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

post image

三、服务器设置

1、输入如下指令

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

2、安装CURL

apt install curl -y
post image
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
post image

4、安装VIM :

sudo apt-get install vim
post image

5、部署TIME

npm init -y
post image
npm install --save-dev hardhat
post image

6、继续**:**

npm install -g npm@9.6.2
post image
post image
  • 点击箭头标记的地方,按ENTER

  • 按三下回车键

post image

7、创建目录并进入目录

mkdir greeter
cd greeter
npm init -y
post image
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
post image

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}`);
  }
}
post image
  • ESC

  • 输入 :wq

  • ENTER

四、部署

npx hardhat deploy-zksync
post image

这是你的合约地址

复制合约地址,粘贴到EXPLORER查看:

post image

五、验证合约

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

post image

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

post image
  • 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”;

post image

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

post image

六、运行合约

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

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

第2步、选择read部分,点击Query按钮,应出现以下消息:Hey guys!

post image

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

post image

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

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

post image

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