February 11, 2023

Деплоим контракт и создаем свой токен в сети Scroll

Для начала арендуем дешевенький сервер с операционной системой Ubuntu 20.04.
Я буду деплоить контракт на сервере с такими характеристиками:
- 3 ядра
- 4 GB RAM
- 80GB SSD

Разворачиваем смарт-контракт

Каждую команду прописывайте по отдельности

sudo apt update
sudo apt install git
git clone https://github.com/scroll-tech/scroll-contract-deploy-demo.git
cd scroll-contract-deploy-demo
curl -L https://foundry.paradigm.xyz | bash
source /root/.bashrc
foundryup
forge build --use 0.8.17

Ниже будет приведен блок кода, который нужно скопировать весь

forge create --rpc-url https://prealpha-rpc.scroll.io/l2 \
--value <Кол-во эфира> \ 
--constructor-args <Время блокировки> \
--private-key <Приватный ключ> \
--legacy \
contracts/Lock.sol:Lock --use 0.8.17

Не забудьте, что знаки <> используются только для указания значений, которые вам нужно изменить. В конечном коде их не должно быть

Вот пример моего кода:

forge create --rpc-url https://prealpha-rpc.scroll.io/l2 \
--value 0.0001ether \
--constructor-args 1676137899 \
--private-key a689efaf85m325cebffa145661a82324c9618bffeae47be578259cbfffea96 \
--legacy \
contracts/Lock.sol:Lock --use 0.8.17

Время блокировки - это время, когда разблокируются ваши токены в нашем смарт-контраке. Вы можете сами указать это значение, воспользовавшись этим сайтом. Выставите необходимую дату и время, а затем нажмите кнопку "Convert". Необходимое значение отобразится в строке "Unix Timestamp", которое нужно вставить в блок кода

Приватный ключ можно взять, воспользовавшись этим гайдом

После того, как вы вставили заполненный блок кода, дождитесь окончания развертывания смарт-контракта. Подтверждением будет считаться вот такой текст:

Для проверки скопируйте поле "Deployed to" и вставьте на сайт

Если транзакция существует и помечена как Contract Creation - поздравляю, вы развернули смарт-контракт

Создаем токен

Каждую команду прописывайте по отдельности

cd $HOME
sudo apt update
sudo apt install git
curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
mkdir DeployToken
cd DeployToken
sudo npm init # Нажимаем Enter и соглашаемся со всеми установками
sudo npm install --save-dev hardhat
sudo npx hardhat # Нажимаем Enter и соглашаемся со всеми установками
npm install --save-dev "@nomicfoundation/hardhat-toolbox@^2.0.0"
npm i @openzeppelin/contracts
cd contracts
nano <Имя Вашего Токена>.sol # Замените значение на свое название токена

Если все прошло успешно, у вас должен открыться пустой файл, в который вы вписываете следующее:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract <Имя Вашего Токена> is ERC20 {
    constructor() ERC20("<Имя Токена>", "<Сокращенное Имя Токена>") {
        _mint(msg.sender, 1000000000 * 10 ** decimals());
    }
}

Не забудьте, что знаки <> используются только для указания значений, которые вам нужно изменить. В конечном коде их не должно быть

Сохраняем файл комбинацией Ctrl+X, далее нажимаем Y и подтверждаем кнопкой Enter

Копируем весь блок кода, после которого должен открыться пустой файл

cd $HOME/DeployToken/scripts
rm -rf deploy.js
nano deploy.js

В открывшийся файл вставляем следующий блок, меняя значение токена на ваше

const { ethers } = require("hardhat");

async function main() {

  const token = await ethers.getContractFactory("<Имя токена>");
  
  
  const deployedToken = await token.deploy();
  
  await deployedToken.deployed();
  
  console.log(`The smart contract was deployed at: ${deployedToken.address} on Scroll L2!`);
}

main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

Сохраняем файл комбинацией Ctrl+X, далее нажимаем Y и подтверждаем кнопкой Enter

Следующие команды копируем по одной, заменив значение приватного ключа

npm i dotenv
cd $HOME/DeployToken
nano .env
PRIVATE_KEY="<Приватный ключ>"

Сохраняем комбинацией Ctrl+X, далее нажимаем Y и подтверждаем кнопкой Enter

Эти две команды тоже вводим по очереди

rm -rf hardhat.config.js
nano hardhat.config.js

Почти закончили! Осталось совсем чуть-чуть)

Копируем одним блоком, ничего не меняя

require("@nomicfoundation/hardhat-toolbox");
require("dotenv").config({ path: ".env" });

const PRIVATE_KEY = process.env.PRIVATE_KEY;

/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
  solidity: "0.8.17",
  networks: {
    scrollL2: {
      url: `https://prealpha.scroll.io/l2`,
      accounts: [PRIVATE_KEY]
    }
  }
};

Сохраняем через Ctrl+X, Y и Enter

Вводим последнюю команду, чтобы получить наш адрес контракта

npx hardhat run scripts/deploy.js --network scrollL2

Копируем появившийся адрес и ищем его в эксплорере

Готово! Сервер можно удалить или сбросить его, чтобы прогнать следующий кошелек

Оригинал: https://teletype.in/@crypto.labs/PyoAeDgxnze