Создание и деплой контракта через truffle на примере zkEVM

Подготовься:

• Обнови систему

apt update && apt upgrade -y

• Подкинь пакетов

sudo apt install build-essential apt-transport-https lsb-release ca-certificates curl gnupg

• Добавь репо ноджс

curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -

• Установи nodejs

• Обнови npm (по желанию)

npm install -g npm@9.6.2

• Проверь

node -v
npm -v

• Установи трюфель

npm install -g truffle

• Создай папку с проектом и перейди в нее

mkdir truffleProject && cd truffleProject

• Установи dotenv

• Повели трюфелю создать необходимую структур каталогов

truffle init

• Установи пакет кошеля

npm install @truffle/hdwallet-provider

• Создай файл .env

touch .env

• Если есть ГУИ - делай как я в видосе, если нет - то открывай командой

nano .env

и вставляй следующий текст поменяв данные на свои.

INFURA_API_KEY = "https://goerli.infura.io/v3/<Your-API-Key>"
MNEMONIC = "<Your-MetaMask-Secret-Recovery-Phrase>"

жми ctrl + s, ctrl + x

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

• Создай файл

touch contracts/Demo.sol

• Копируй туда текст либо с помощью GUI,

pragma solidity >=0.5.8;

contract Demo {
    event Echo(string message);

    function echo(string calldata message) external {
        emit Echo(message);
    }
}

либо открыв в nano (после редактирования сохраняем с помощью ctrl + s, ctrl + x)

nano contracts/Demo.sol

Конфиг трюфеля

• Открывай файл truffle-config.js (либо с помощью графики либо с помощью nano, думаю ты уже разобрался как работает nano) и копируй туда следующее:

require('dotenv').config();
const HDWalletProvider = require('@truffle/hdwallet-provider');
const { INFURA_API_KEY, MNEMONIC } = process.env;

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 8545,
      network_id: "*"
    },
    goerli: {
      provider: () => new HDWalletProvider(MNEMONIC, INFURA_API_KEY),
      network_id: '59140',
      gas: 4465030
    }
  }
};

Почти готово, осталось скомпилить и задеплоить

• Скомпилить

truffle compile

Ты должен увидеть нечто подобное

Compiling your contracts...
===========================
> Compiling ./contracts/Demo.sol
> Artifacts written to /Users/myuser/truffleProject/build/contracts
> Compiled successfully using:
   - solc: 0.5.16+commit.9c3226ce.Emscripten.clang

• Создай деплоймент скрипт

touch migrations/1_deploy_contract.js

и скопируй в него текст

const Demo_Contract = artifacts.require("Demo");

module.exports = function(deployer) {
  deployer.deploy(Demo_Contract);
};

Ты готов • Деплой

truffle migrate --network goerli

Результат должен быть таким

...
Starting migrations...
======================
> Network name:    'goerli'
> Network id:      5
> Block gas limit: 30000000 (0x1c9c380)


1_deploy_contract.js
====================

   Deploying 'Demo'
   ----------------
   > transaction hash:    0xafb1fa110d77f1447434418539e3fd36a97c0f948cc83e793fa394c882a1fab1
   > Blocks: 3            Seconds: 29
   > contract address:    0x4Ee0845a9eBfB04Bcc225b70Dc78c4789C61c64E
   > block number:        7588035
   > block timestamp:     1663126548
   > account:             0x9cE564c7d09f88E7d8233Cdd3A4d7AC42aBFf3aC
   > balance:             0.088395204941580514
   > gas used:            123421 (0x1e21d)
   > gas price:           4.303203766 gwei
   > value sent:          0 ETH
   > total cost:          0.000531105712003486 ETH

   > Saving artifacts
   -------------------------------------
   > Total cost:     0.000531105712003486 ETH

Summary
=======
> Total deployments:   1
> Final cost:          0.000531105712003486 ETH

** Заклаймь статью
**

Залетай в телегу ;)