# Пошагово деплоим контракты: zkSync Era, Base, Scroll **Published by:** [The Roccrypto](https://paragraph.com/@roccrypto/) **Published on:** 2023-06-13 **URL:** https://paragraph.com/@roccrypto/zksync-era-base-scroll ## Content В этой статье вы найдете 3 гайда по деплою контрактов на zkSync Era, Base и Scroll.Приступим!zkSync EraЦена деплоя: ~5$ в ETH Сложность деплоя: 1 способ - классика, сложно. 2 способ - Thirdweb, легкоКачаем Visual Studio Code с оф. сайта https://code.visualstudio.com/Выбираем Английский язык при установке и оставляем дефолтные галочкиПосле установки, создаем папку на робочем столе с названием zksyncЗапускаем VSCode и открываем там же эту папкуКачаем Node.js с офф сайта и устанавливаем. При установке ничего не меняем. После перезагружаем ПК.Заходим обратно в VScode, нажимаем CTRL + J, чтобы снизу открылся терминал.Вставляем туда следующее: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-deploy Пишем команду, которая установит библиотеку с контрактами OpenZeppelin:npm install @openzeppelin/contracts Жмем плюсик и создаем новый файл с названием hardhat.config.tsВставляем код в hardhat.config.ts и после жмем CTRL+S: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", zksync: true, }, }, solidity: { version: "0.8.17", }, }; Нажимаем на другой плюсик и создаем папку с названием contracts Нажимаем на папку и создаем файл contract.sol . Любые параметры (те что в “ “) ставим под себя - полное название, тикер токена. Вставляем код контракта:// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract Roccrypto is ERC20, Ownable { constructor() ERC20("roccrypto", "rocc") { _mint(msg.sender, 100 * 10 ** decimals()); } function mint(address to, uint256 amount) public onlyOwner { _mint(to, amount); } } Сохраняем файл на CTRL+SТут мы создаем самый обычный ERC20 токен с тикером rocc . Любые другие контракты мы можем брать с документации OpenZeppelin. Но чтобы их деплоить, нужно немного понимать JS/TS. Если вы захотите деплоить другие контракты, которых нет в гайде, но не знаете эти ЯП - воспользуйтесь ChatGPT, чтобы он вам написал deploy.ts скрипт для деплоя ваших контрактов. https://docs.openzeppelin.com/Компилируем контракт командой в терминале:npx hardhat compile Если все успешно, у вас должен быть такой результат:Жмем на общую папку zksync и в ней создаем папку с названием deploy . В этой папке создаем файл deploy.ts , вставляем код и меняем в нем адрес 0x123..., на который будут минтиться токены. Сохраняем на CTRL+S: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(); export default async function (hre: HardhatRuntimeEnvironment) { console.log(`Running deploy script for the Roccrypto contract`); const wallet = new Wallet(PRIV_KEY); const deployer = new Deployer(hre, wallet); const artifact = await deployer.loadArtifact("Roccrypto"); const roccryptoContract = await deployer.deploy(artifact, []); console.log("constructor args:" + roccryptoContract.interface.encodeDeploy([])); const contractAddress = roccryptoContract.address; console.log(`${artifact.contractName} was deployed to ${contractAddress}`); // Mint some tokens to an address. const to = "0x123..."; // Адрес куда минтить токены. const amount = ethers.utils.parseEther("10"); // Сколько токенов нужно заминтить на этот адрес const mintHandle = await roccryptoContract.mint(to, amount); await mintHandle.wait(); console.log(`Minted ${amount} tokens to ${to}`); } Создаем файл .secret в общей папке zksync. В этот файл мы должны вставить приватный ключ (с балансом, ~5$ в ETH сети zkSync Era), с которого будет деплоится наш контракт. Не держите много баланса, если не уверены в своих следующих действиях. Советую сначала протестировать, а потом деплоить на мультиакках.Деплоим контракт с помощью команды:npx hardhat deploy-zksync Ура, мы смогли задеплоить контракт и заминтить токены на наш адрес!UPD: BONUS Еще контракты на zkSync можно деплоить через сервис Thirdweb, и если вам не нравится классический способ/не доверяете ему - юзаем этот.Заходим на Thirdweb и ищем нужный нам контракт - Tokenhttps://thirdweb.com/exploreНажимаем Deploy nowЗаполняем данные нашего токена и обязательно выбираем zkSync Era MainnetЖмем Deploy Now и подписываем транзакцию.В результате имеем легкий способ для деплоя контрактаBaseЦена деплоя: FREE (Goerlii ETH) Мост: bridge.base.org/deposit** Сложность деплоя:** Легко Для начала пользуемся мостом и получаем нативные ETH на кошелек.Заходим на Chainlist, ищем Base Goerli Testnet и подключаем к нему кошелек. Обязательно переключаем сеть внутри самого кошелька!Заходим на Contracts Wizard от OpenZeppelinВыбираем ERC20 токен и заполняем первый пункт на свой вкус. Ставим галочки на Mintable и BurnableНажимаем открыть в RemixСтавим галочку на Auto compileВыбираем Injected Provider - Metamask и подключем кошелек к сайтуНажимаем Deploy, подтверждаем транзакцию в MetamaskТеперь мы успешно задеплоили контракт на Base! Но чтобы каждый раз не повторяться, советую поэкспериментировать и деплоить разные контракты.ScrollЦена деплоя: FREE (Goerli ETH) Мост: scroll.io/bridge** Сложность:** Легко Для начала пользуемся мостом и получаем нативные ETH на кошелек.Заходим на Chainlist, ищем Scroll Alpha Testnet и подключаем к нему кошелек. Обязательно переключаем сеть внутри самого кошелька!Заходим на Contracts Wizard от OpenZeppelinВыбираем ERC20 токен и заполняем первый пункт на свой вкус. Ставим галочки на Mintable и BurnableНажимаем открыть в RemixСтавим галочку на Auto compileВыбираем Injected Provider - Metamask и подключем кошелек к сайтуНажимаем Deploy, подтверждаем транзакцию в MetamaskВот мы и задеплоили наш финальный контракт!Следующая статья будет о том, как правильно верифицировать и взаимодействовать с нашими свежими контрактами. Ведь мы дофига “билдеры”, и тем самым подходим под нужные критерии несколькими транзакциями: мы задеплоили контракт и будем с ним взаимодействовать, прогнали транзакцию в нужной нам сети, а в будущем даже будем гонять объем через свои контракты, затрагивая пункт Transaction value.https://t.me/roccryptoSubscribe ## Publication Information - [The Roccrypto](https://paragraph.com/@roccrypto/): Publication homepage - [All Posts](https://paragraph.com/@roccrypto/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@roccrypto): Subscribe to updates