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

By [w3bAMA](https://paragraph.com/@w3bama) · 2023-03-21

---

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

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

    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
    

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

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

---

*Originally published on [w3bAMA](https://paragraph.com/@w3bama/truffle-zkevm)*
