zkSync Era 智能合约部署

Crypto Box|2023/05/25
如何在部署 zkSync Era 智能合约 保姆级教程

9bd712d41a112f4f65a11dceca8899b.png

Crypto Box致力于成为最专业的Web3投研信息、实用工具、教程百科平台!我们的愿景是以社区发掘+深入投研+技术工具帮助Web3投资者。

大家好,之前写过zkSync Era的交互教程,但是现在空投越来越卷,zkSync Era的地址已经快300万了,可能多做一点就

有意外的收获,今天给大家带来如何在zkSync Era上部署智能合约,增加获得空投的权重。

本教程是在不使用VPS的情况下,在任何平台(MacOs、Windows)上部署zkSync Era主网和测试网智能合约的教程。


一、准备工作

1、用Crypto Box添加 ZkSync Era 网络

https://www.cpbox.io/metamask/helper

也可以手动添加:

测试网:

网络名称:zkSync Era Testnet
RPC URL:
https://testnet.era.zksync.dev
链 ID:280
货币符号:ETH
Block Explorer URL:
https://goerli.explorer.zksync.io/
WebSocket URL:
wss://testnet.era.zksync.dev/ws

主网:

网络名称:zkSync Era Mainnet
RPC URL:
https://mainnet.era.zksync.io
链 ID:324
货币符号:ETH
Block Explorer URL:
https://explorer.zksync.io/
WebSocket URL:
wss://mainnet.era.zksync.io/ws

2、领取测试网代币

https: //portal.zksync.io/bridge

如果觉得太少了,可以在桥里面跨:
https://goerli.portal.zksync.io/bridge

3、下载Visual Studio Code:
https://code.visualstudio.com/

4、下载Node.Js,:
https://nodejs.org/en


下载安装后就可以关闭了,多数在VSC(Visual Studio Code)里面操作。


二、部署智能合约

本教程提供两种部署方式:

1、简化版

2、全流程版

大家根据自己喜好,或者哪一步好跑通,就部署哪一步就可以。

(一)简化版

简化版是给有一定基础的用户参考的,如果你是小白,请跳过简化版,看下面的保姆级【全流程版】

1、在”Extensions”中搜索“Solidity”和“NpM Intellisense”,安装;


2、转到source control(源代码管理)部分,第一次要点击“Download Git for Windows”,下载Git,然后点击“Reload”;

然后点击Clone Repository(克隆存储库)并在搜素框粘贴此链接:
https://github.com/sevRipen/Greeter 
可以在桌面创建一个叫“ZKSYNC”的文件夹。

3、打开终端(下图)并插入命令之一,具体取决于你的版本:
yarn init -y或npm init -y

然后我们输入:



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-deploybr


安装完成后,根据第一次输入的命令,选择以下命令之一:yarn hardhat compile或npx hardhat compile

4、在左侧,找到deploy部分并将其打开。找到一个deploy.ts文件,插入MetaMask密钥;

5、设置自动保存;转到deploy部分,在Auto Save搜索Settings 6,并选择afterDelay;

最后一个命令:yarn hardhat deploy-zksync或者npx hardhat deploy-zksync等待合约部署结束。

钱包中必须有ETH才能支付Gas。平均3–5分钟完成,所以输入命令后需要稍等片刻。但这还不是全部,在收到数据后,你需要激活合约并检查其运行情况。

(二)全流程版

1、先在桌面创建一个“HELLO-ZKSYNC”或者“ZKSYNC”文件夹;

打开Visual Studio,并按照如下操作,打开你创建的文件夹;

2、单击右上角的图标,打开一个带有终端的面板(默认情况下,将ZKSYNC选择为文件夹路径)

3、在终端中,写入一个命令(或通过按鼠标右键复制和粘贴):

npm init -y

但这不是重点,重点是看输入这行指令后,界面变成我发的这样才算成功。


下午发的教程里面,粉丝说这一步没有截图,他不会。我晚上有补了一张图片,所以会看到这张图跟其他图有点不同。

但这不是重点,重点是看输入这行指令后,界面变成我发的这样才算成功。

注意看:如果你输入上面的指令,提示说npm没有识别,那可能是版本的原因,试试这个指令(简化版中有提到过):

yarn init -y

然后继续输入:

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

下午发的一版里面,粉丝说这一步没有截图,他不会。我晚上有补了一张图片,所以会看到这张图跟其他图有点不同。

但这不是重点,重点是看输入这行指令后,界面变成我发的这样才算成功。

4、选择ZKSYNC,按照下图示例在文件夹中创建一个文件,并将其命名hardhat.config.ts


5、将智能合约部署到网络;

单击你刚刚创建的hardhat.config.ts,将打开一个字段,我们可以在其中粘贴以下文本。

如果你想部署在测试网中,则用测试网络,如果在主网中,则用主网:

对于测试网:

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

module.exports = {
 zksolc: {
   version: "1.3.5",
   compilerSource: "binary",
   settings: {},
 },
 defaultNetwork: "zkTestnet",
 networks: {
   zkTestnet: {
     url: "https://zksync2-testnet.zksync.dev", // URL of the zkSync network RPC
     ethNetwork: "goerli", // Can also be the RPC URL of the Ethereum network (e.g. `https://goerli.infura.io/v3/<API_KEY>`)
     zksync: true,
   },
 },
 solidity: {
   version: "0.8.17",
 },
};

对于主网:

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

module.exports = {
 zksolc: {
   version: "1.3.5",
   compilerSource: "binary",
   settings: {},
 },
 defaultNetwork: "zkSyncMainnet",  networks: {
   zkSyncMainnet: {
     url: "https://zksync2-mainnet.zksync.io",
     ethNetwork: "mainnet", // Can also be the RPC URL of the network (e.g. `https://goerli.infura.io/v3/<API_KEY>`)
     zksync: true,
   },
 },
 solidity: {
   version: "0.8.17",
 },
};

如下图:

6、关闭文件,选择保存更改

7、在ZKSYNC文件的左侧,点击创建按钮,创建contracts和deploy文件夹,如图:

8、在contracts文件夹中,创建Greeter.sol文件;

将以下代码粘贴到其中

//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;
   }
}

关闭文件并保存

9、在终端中输入下一个命令,并按 Enter

npx hardhat compilebr

如果一切正确,将出现以下消息:

需要注意的是,很多人在这一步会出现如下错误:

这是VPN的原因,下载没有完成。粉丝提醒,用如下代码查看是不是端口没有打开:

http_proxy=http://127.0.0.1:7890 yarn hardhat compilebr


10、在屏幕左边选择deploy ,将deploy.ts文件创建到里面

并将如下代码粘贴到其中:

import fs from "fs"
import { utils, Wallet } from "zksync-web3";
import * as ethers from "ethers";
import { HardhatRuntimeEnvironment } from "hardhat/types";
import { Deployer } from "@matterlabs/hardhat-zksync-deploy";

const PRIV_KEY = fs.readFileSync(".secret").toString()// 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(PRIV_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");  // Deposit some funds to L2 in order to be able to perform L2 transactions.
 // const depositAmount = ethers.utils.parseEther("0.001");
// const depositHandle = await deployer.zkWallet.deposit({
 //  to: deployer.zkWallet.address,
//   token: utils.ETH_ADDRESS,
//   amount: depositAmount,
//  });
 // Wait until the deposit is processed on zkSync
// await depositHandle.wait();  // 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]);
 console.log("constructor args:" + greeterContract.interface.encodeDeploy([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}`);
 }
}

关闭文件并保存。

11、在ZKSYNC文件夹中创建一个名为.secret的文件,并在在此处粘贴私钥,如下图:



关闭并保存。

12、输入最后一个命令来部署合约

npx hardhat deploy-zksyncbr


如果一切正确,会出现如下所示:


如果报错,请返回到deploy 的 deploy.ts文件里面,找到

const wallet = new Wallet(PRIV_KEY)

将PRIV_KEY替换成你的私钥,就像这样:


关闭并保存。

然后输入如下指令,部署智能合约

npx hardhat deploy-zksyncbr

一般要等3–5分钟,钱包里必须要有以太坊。

如果没问题,屏幕会有如下显示:

13、查看

复制合约地址,然后去浏览器中查看。

如果你是在测试网中部署的,请用这个链接:
https://goerli.explorer.zksync.io/

如果你是在主网中部署的,请用这个链接:
https://explorer.zksync.io/



如果你没有来得及复制,你的终端就断网了,可以在浏览器中通过地址搜索;


三、验证合约

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




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



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 栏中,插入部署合约后出现的数据:


如果找不到了,反正测试网都是一样的,填下面的数据:

0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000094869207468657265210000000000000000000000000000000000000000000000br

3、填写所有栏后,点击“Verify Smart Contract”;



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


如果你想查看部署的版本,可以在Visual Studio的hardhat.config.ts文件中查看:



四、运行合约

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

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

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


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

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

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

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

本文走的全部都是测试网的教程,如果你全部跑通,可以试试在主网上部署,这样可以增加你钱包的权重,最重要的是Gas费很低。

官方文档:
https://era.zksync.io/docs/dev/building-on-zksync/contracts/contract-deployment.html#smart-contract-security

以上就是关于zkSync Era智能合约部署的全部教程,感谢观看。

结语:最后感谢这篇教程的作者 加密狗老师 ,大家可以关注一下 加密狗老师 的推特:https://twitter.com/JiamigouCn

觉得这篇文章写的不错的朋友,也可以关注我们Crypto Box的公众号,同时Crypto Box也欢迎大家加入我们的社区与我们一起交流!

Crypto Box是一个致力于成为最专业的Web3投研信息、实用工具、教程百科平台!我们的愿景是以社区发掘+深入投研+技术工具帮助Web3投资者。


Website:
https://www.cpbox.io


Twitter:
https://twitter.com/Web3CryptoBox

Discord:
https://discord.gg/4PHP43bgp

Telegram:
https://t.me/cpboxio


d827cb525f8b0b7e20ea7a3377047a6.png