Minimum server requirements
1 CPUs, 1 GB RAM, 30 GB SSD, 32 TB Traffic, Ubuntu 20.04
I use Contabo
https://contabo.com
Deploying a smart contract
Updating system
sudo apt update
sudo apt upgrade
When installing, press y
Install the curl boot loader
sudo apt install -y curl
Running the installation script for Node.js 18 (LTS)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
Installing Node.js 18
sudo apt install -y nodejs
We execute the commands one at a time
mkdir greeter-example
cd greeter-example
apt install cmdtest
Press y
PRC Official Source: https://era.zksync.io/docs/dev/fundamentals/interacting.html#connecting-to-zksync-era-on-metamask:~:text=Testnet%20network%20info
Adding the ZkSync Era Network to the Metamask: https://chainlist.org/?search=zkSync+Era+test&testnets=true
or manually
Network Name: zkSync Era Testnet
New RPC URL: https://zksync2-testnet.zksync.dev
Chain ID: 280
Currency Symbol: ETH
Block Explorer URL: https://goerli.explorer.zksync.io/
WebSocket URL: wss://zksync2-testnet.zksync.dev/ws
PRC Official Source: https://era.zksync.io/docs/dev/fundamentals/interacting.html#connecting-to-zksync-era-on-metamask:~:text=Testnet%20network%20inf
Bridging test tokens from Goerli to the ZkSync Era network: https://portal.zksync.io/bridge
Execute commands
npm init --y
npm install --save-dev hardhat
npm install -g npm@9.6.0
npx hardhat
Select Create a TypeScript project, then Enter and several times y
Execute commands
mkdir greeter
cd greeter
npm init -y
npm add -D typescript ts-node @types/node ethers@^5.7.2 zksync-web3@^0.13.1 @ethersproject/hash @ethersproject/web hardhat @matterlabs/hardhat-zksync-solc @matterlabs/hardhat-zksync-deploy
vim hardhat.config.ts
After opening the page, press i to edit and type the script below
import "@matterlabs/hardhat-zksync-deploy";
import "@matterlabs/hardhat-zksync-solc";
module.exports = {
zksolc: {
version: "1.3.1",
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",
},
};
Execute commands
mkdir contracts
mkdir deploy
vim contracts/Greeter.sol
After opening the page, press i to edit and type the script below
//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;
}
}
Then press Esc and :wq
Execute commands
npx hardhat compile
vim deploy/deploy.ts
The edit page will open, press i again and paste the script below
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");
// 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]);
// 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}`);
}
}
At const wallet = new Wallet(""); change to your private metamask key.
DISCLAIMER: Deploy a smart contract from a new wallet with no real funds to avoid financial loss!
Then press Esc and :wq
Execute commands
npx hardhat deploy-zksync
The text should appear
Greeter was deployed to (your metamask number)
Contract greets us with Hi there!!
Contract greets us with Hey guys!
Go to the explorer https://goerli.explorer.zksync.io/ , enter your metamask number and we see three transactions, because after the deploy command immediately occurs and interaction with the contract.
This means that the smart-contract is deployed!
Congratulations!
Top comments (0)