1. Учебник по десятичному развертыванию для начинающих

Добро пожаловать в наше руководство для начинающих по контрактам смарт-чейнов Decimal и разработке dApp. Цель этого руководства — быстро научить вас писать и развертывать смарт-контракты в десятичной смарт-цепочке.

В этом уроке мы будем использовать:

  • Солидность
  • JavaScript
  • Node.js
  • Эфиры.js
  • Каска

Настройка среды

На первом этапе нам нужно установить Node.js.

Установка Node.js

Вы можете пропустить этот раздел, если у вас уже есть рабочаяNode.js >= 16.0

Вставьте эти команды в терминал :

Ubuntu

sudo apt update sudo apt install curl git curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs

 

MacOS

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash nvm install 18 nvm use 18 nvm alias default 18 npm install npm --global # Upgrade npm to the latest version

 

Windows

To install Node.js on windows follow this guide: https://docs.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-windows

 

Создание нового проекта

Откройте новый терминал и запустите эти команды, чтобы создать новую папку.

Создание новой папки

mkdir hardhat-tutorial cd hardhat-tutorial

 

Установите каску и запустите ее:

npm install –save-dev hardhat npm install –save-dev @nomicfoundation/hardhat-toolbox npx hardhat

 

Выберите Create an empty hardhat.config.jsс помощью клавиатуры и нажмите Enter. Hardhat.config.js обычно находится в корневой папке проекта и содержит все ваши настройки.

Инициализация проекта каски

Написание смарт- контракта

Давайте начнем с создания новой папки в нашем проекте каски с именем contracts. В этой папке мы создаем файл с именем token.sol.

Поместите этот код в файл :

контракты /token.sol

// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; contract ExampleContract { mapping(address => uint256) balances; event Deposit(uint256 value); event Withdraw(address indexed receiver, uint256 value); constructor() {} function deposit() external payable { balances[msg.sender] += msg.value; emit Deposit(msg.value); } function withdrawNative(address payable receiver, uint256 amount) public { require(amount >= balances[msg.sender], "Insufficient balance"); balances[msg.sender] -= amount; sendNative(receiver, amount); emit Withdraw(receiver, amount); } function sendNative(address payable account, uint256 amount) private { (bool sent, ) = account.call{gas: 10000, value: amount}(""); require(sent, "Failed to send DEL"); } receive() external payable {} }

 

Для составления контракта запустите его npx hardhat compileв своем терминале.

Составление договора

npx hardhat compile Compiled 1 Solidity file successfully

 

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

Итак, вы готовы протестировать свой контракт в реальной сети, чтобы другие получили доступ к вашему коду и могли его проверить.

В реальной «основной сети» десятичной смарт-цепи вы должны платить за транзакцию реальными деньгами, но есть отдельная сеть «девнет», которая имитирует сценарии реального мира, не ставя на карту реальные деньги.

На уровне программного обеспечения развертывание в сети разработчиков такое же, как развертывание в основной сети. Разница только в том, к какой сети вы подключаетесь. Давайте посмотрим, как будет выглядеть код для развертывания ваших контрактов с использованием ethers.js.

Давайте создадим новую папку в корне проекта с именем scriptsи создадим там файл с именем deploy.js.

Поместите этот код в файл :

скрипты /deploy.js

async function main() { const accounts = await ethers.getSigners(); console.log('Deploying contract with account:', accounts[0].address); const balance = await accounts[0].getBalance(); console.log('Account balance ',balance.toString()); const ExampleContract = await ethers.getContractFactory("ExampleContract"); const exampleContract = await ExampleContract.connect(accounts[0]).deploy(); await exampleContract.deployed(); console.log('ExampleContract address:', example.address); } main() .then(() => process.exit(0)) .catch((error) => { console.error(error); process.exit(1); });

 

Чтобы сообщить Hardhat, к какой сети вы хотите подключиться, вы используете --networkпараметр при запуске любой задачи, например:

Подключение к сети

npx hardhat run scripts/deploy.js –network <network-name>

 

В нашей конфигурации запуск без –networkпараметров приведет к развертыванию контракта в локальном файле Hardhat Network. Развертывание теряется после выполнения, но оно по-прежнему полезно для тестирования нашего кода развертывания.

Развертывание в локальной сети каски

npx hardhat run scripts/deploy.js –network <network-name>

 

Для развертывания в удаленной сети, такой как mainnetили devnet, вам необходимо настроить сетевую запись в вашем hardhat.config.jsфайле. Мы будем использовать devnetдля этого примера.

Поместите этот код в .hardhat.config.js

hardhat.config.js

require("@nomicfoundation/hardhat-toolbox"); const PRIVATE_KEY = "YOUR PRIVATE KEY"; module.exports = { solidity: { version: "0.8.17", settings: { optimizer: { enabled: true, runs: 200, }, }, }, defaultNetwork: "decimal_devnet", networks: { decimal_devnet: { url: `https://devnet-val.decimalchain.com/web3/`, accounts: [PRIVATE_KEY], gasPrice: 80000000000000 } } };

 

Чтобы развернуть на Decimal devnet , вам нужно отправить некоторые devnet DELна адрес, который будет выполнять развертывание. Вы можете получить devnet DELиз крана, сервис, который распространяется devnet DELбесплатно.

Наконец, запустите:

Развертывание в действующей сети

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

 

Если все прошло хорошо, вы должны увидеть развернутый адрес контракта.