Deploy zk-sync SMART CONTRACT TESTNET NEW ERA
Делаю через дедик, в mobaexterm (ctrl v = mid mous)
Паки устанавливаем качаем что бы все работало чётенько
sudo apt update
sudo apt upgrade
sudo apt install -y curl
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install -y nodejs
npm install --save-dev hardhat
npx hardhat
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce
sudo systemctl status docker
Сразу зайди в папку greeter-example, если нету(( рефрешни пкм она появится, в ней ничего нет, мы будет создавать менять внутри циферки букавки
npm i --save-dev typescript ts-node ethers@^5.7.2 zksync-web3@^0.13.1 hardhat @matterlabs/hardhat-zksync-solc @matterlabs/hardhat-zksync-deploy
Создаем файл в greeter-example куда зашёл
ПКМ-> New Empty File пишем туда hardhat.config.ts и открываем через редактор
Вставляем в hardhat.config.ts этот большой код и сохраняем
import "@matterlabs/hardhat-zksync-deploy";
import "@matterlabs/hardhat-zksync-solc";
module.exports = {
zksolc: {
version: "1.3.1",
compilerSource: "binary",
settings: {},
},
defaultNetwork: "zkSyncTestnet",
networks: {
zkSyncTestnet: {
url: "https://zksync2-testnet.zksync.dev",
ethNetwork: "goerli", // 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",
},
};
Пропиши одну команду
sudo systemctl start docker
Создай еще одну папку в greeter-example(ПКМ->New Directory) назови contracts там создаем Greeter.sol опять редачим и пишем туда этот кодик
//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; } }
Еще команда
npx hardhat compile
Возвращаемся в /greeter-example/ создаем папку deploy в ней deploy.ts редачим deploy.ts и вставляем этот большой код, сохраняем
import fs from "fs"
import { Wallet, utils } 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 you want to deploy.
const deployer = new Deployer(hre, wallet);
const artifact = await deployer.loadArtifact("Greeter");
// Estimate contract deployment fee
const greeting = "Hi there!";
const deploymentFee = await deployer.estimateDeployFee(artifact, [greeting]);
// OPTIONAL: Deposit funds to L2
// Comment this block if you already have funds on zkSync.
const depositHandle = await deployer.zkWallet.deposit({
to: deployer.zkWallet.address,
token: utils.ETH_ADDRESS,
amount: deploymentFee.mul(2),
});
// 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 parsedFee = ethers.utils.formatEther(deploymentFee.toString());
console.log(`The deployment is estimated to cost ${parsedFee} ETH`);
const greeterContract = await deployer.deploy(artifact, [greeting]);
//obtain the Constructor Arguments
console.log("constructor args:" + greeterContract.interface.encodeDeploy([greeting]));
// Show the contract info.
const contractAddress = greeterContract.address;
console.log(`${artifact.contractName} was deployed to ${contractAddress}`);
}
Возвращаемся в /greeter-example/ создаем папку .secret в ней пишем свой приват ключ, без пробелов, одной строчкой, у адресов разные приват счета можешь использовать не основу я бы сказал нужно) как достать ключ найдешь сам srry
Идем на https://goerli.portal.zksync.io/bridge переводи тестовые Goerli ETH(КРАН) в ZkSync New Era Testnet подожди пока придут зефирки потому что они щас будут нужны
И ЛАСТ КОМАНДА
npx hardhat deploy-zksync
После нее ничего не жми в терминале жди пока дадут инфу по контрактику, сколько газа ушло и код для конекта контракта
construcor args сохраняем и смарт контракт тоже
Идем https://goerli.explorer.zksync.io/address/ВашСмартКонтракт
Переходим в Contract->Verify Smart Contract
Contract Address
По дефолту должен быть твой смарт контракт адрес
Zksolc Version Solc Version
v1.3.1 0.8.17
В Enter the Solidity 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: construcor args код который сохраняли выше
Почти готово возвращаемся в Contract справа видим коннект мм, делаем
В Write пишем что угодно и гоняем транзы через ваш смарт контракт, готово.