Взаимодействие с DApps

Децентрализованные приложения (DApps) предоставляют пользователям возможность взаимодействовать с блокчейном через интуитивно понятный интерфейс. Основными компонентами DApp являются:

  1. Фронтенд-приложение для взаимодействия с пользователем.
  2. Связь с блокчейном через библиотеки (например, Web3.js или Ethers.js).
  3. Смарт-контракты для выполнения логики на блокчейне.

В этом материале вы научитесь создавать фронтенд для DApp, подключать его к блокчейну с использованием Web3.js/Ethers.js, взаимодействовать со смарт-контрактами и обеспечивать удобный пользовательский опыт (UX).

Создание фронтенда для DApp

Фронтенд DApp — это веб-приложение, которое подключается к блокчейну для выполнения операций с помощью смарт-контрактов. Мы будем использовать HTML и JavaScript для создания простого интерфейса.

Установите Node.js и npm:

node -v
npm -v

Создайте проект:

mkdir dapp-frontend
cd dapp-frontend
npm init -y

Установите библиотеку для взаимодействия с блокчейном:

npm install web3 ethers

Создайте файл index.html с базовым интерфейсом:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>DApp Example</title>
  <script src="https://cdn.jsdelivr.net/npm/web3/dist/web3.min.js"></script>
</head>
<body>
  <h1>Simple DApp</h1>
  <button id="connectButton">Connect Wallet</button>
  <div id="userAddress"></div>
  <div id="balance"></div>
  <div id="contractData"></div>
  <input type="number" id="setValue" placeholder="Set new value">
  <button id="setButton">Set Value</button>
  <script src="app.js"></script>
</body>
</html>

Взаимодействие с блокчейном через Web3.js/Ethers.js

Подключение кошелька и взаимодействие с блокчейном

Создайте файл app.js для подключения к блокчейну через MetaMask и выполнения операций.

С использованием Web3.js

if (typeof window.ethereum !== 'undefined') {
  const web3 = new Web3(window.ethereum);

  const connectWallet = async () => {
    try {
      // Подключение MetaMask
      const accounts = await ethereum.request({ method: 'eth_requestAccounts' });
      const userAddress = accounts[0];
      document.getElementById('userAddress').innerText = `Connected Wallet: ${userAddress}`;

      // Получение баланса
      const balance = await web3.eth.getBalance(userAddress);
      document.getElementById('balance').innerText = `Balance: ${web3.utils.fromWei(balance, 'ether')} ETH`;
    } catch (error) {
      console.error('Error connecting to wallet:', error);
    }
  };

  document.getElementById('connectButton').addEventListener('click', connectWallet);
}

С использованием Ethers.js:

const provider = new ethers.providers.Web3Provider(window.ethereum);
const signer = provider.getSigner();

const connectWallet = async () => {
  try {
    await provider.send('eth_requestAccounts', []);
    const userAddress = await signer.getAddress();
    document.getElementById('userAddress').innerText = `Connected Wallet: ${userAddress}`;

    const balance = await provider.getBalance(userAddress);
    document.getElementById('balance').innerText = `Balance: ${ethers.utils.formatEther(balance)} ETH`;
  } catch (error) {
    console.error('Error connecting to wallet:', error);
  }
};

document.getElementById('connectButton').addEventListener('click', connectWallet);

Взаимодействие со смарт-контрактом

Подключение контракта

Для взаимодействия с контрактом вам нужны:

  1. Адрес контракта.
  2. ABI (интерфейс контракта).

Пример подключения:

const contractABI = [
  // Вставьте ABI вашего контракта
];

const contractAddress = '0xYourContractAddress';
const contract = new ethers.Contract(contractAddress, contractABI, signer);

// Вызов функций контракта
const getContractData = async () => {
  try {
    const value = await contract.getNumber();
    document.getElementById('contractData').innerText = `Contract Value: ${value.toString()}`;
  } catch (error) {
    console.error('Error fetching contract data:', error);
  }
};

const setContractData = async () => {
  try {
    const newValue = document.getElementById('setValue').value;
    const tx = await contract.setNumber(newValue);
    await tx.wait();
    alert('Value updated successfully!');
    getContractData();
  } catch (error) {
    console.error('Error setting contract data:', error);
  }
};

document.getElementById('setButton').addEventListener('click', setContractData);

Работа с тестовыми сетями блокчейнов

Тестовые сети блокчейнов — это ключевой инструмент для безопасной разработки и тестирования децентрализованных приложений (DApps). Они позволяют работать с реальными контрактами и транзакциями без использования реальных средств. В данном блоке мы разберем, как работать с тестовыми сетями различных блокчейнов, поддерживаемых в MetaMask, и какую информацию должен знать фронтенд-разработчик для эффективного взаимодействия.

Какие блокчейны поддерживает MetaMask?

MetaMask поддерживает EVM-совместимые блокчейны (Ethereum Virtual Machine), которые используют схожую архитектуру с Ethereum. Это позволяет работать с такими сетями, как:

  1. Ethereum (основная сеть и тестовые сети Goerli, Sepolia).
  2. Binance Smart Chain (BSC): Testnet и Mainnet.
  3. Polygon: Mumbai Testnet и Mainnet.
  4. Avalanche: Fuji Testnet и Mainnet.
  5. Fantom: Testnet и Mainnet.
  6. Arbitrum: Testnet и Mainnet.
  7. Optimism: Testnet и Mainnet.

Все эти сети можно настроить в MetaMask, и они поддерживают взаимодействие через RPC (Remote Procedure Call).

Настройка тестовых сетей в MetaMask

Для добавления тестовой сети в MetaMask разработчику нужно знать RPC URL, Chain ID, и другие параметры. Вот примеры для популярных тестовых сетей:

Ethereum (Goerli Testnet)

Binance Smart Chain (Testnet)

Polygon (Mumbai Testnet)

Avalanche (Fuji Testnet)

Fantom (Testnet)

Получение тестовых токенов

Для работы в тестовых сетях требуются токены (например, ETH, BNB, MATIC) для оплаты транзакций (газа). Эти токены можно получить бесплатно через Faucet. Или разработчик вашего контракта может зачислить на ваш кошелек тестовые токены.

Информация, необходимая фронтенд-разработчику

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

Подключение к RPC

Для взаимодействия с тестовой сетью DApp должен использовать RPC-сервер. Вот пример подключения с помощью Ethers.js:

const provider = new ethers.providers.JsonRpcProvider(
  'https://rpc-mumbai.maticvigil.com/'
);

Смена сети в MetaMask

Чтобы приложение работало в нужной сети, убедитесь, что пользователь подключён к правильной сети. Для автоматического переключения сети можно использовать метод wallet_addEthereumChain:

const addNetwork = async () => {
  try {
    await window.ethereum.request({
      method: 'wallet_addEthereumChain',
      params: [
        {
          chainId: '0x13881', // Chain ID в формате Hex (Polygon Mumbai)
          chainName: 'Mumbai Testnet',
          rpcUrls: ['https://rpc-mumbai.maticvigil.com/'],
          nativeCurrency: {
            name: 'MATIC',
            symbol: 'MATIC',
            decimals: 18,
          },
          blockExplorerUrls: ['https://mumbai.polygonscan.com'],
        },
      ],
    });
  } catch (error) {
    console.error('Failed to add network:', error);
  }
};

Обработка ошибок

Фронтенд должен обрабатывать типичные ошибки:

  • Пользователь отклонил запрос (код ошибки 4001).
  • Пользователь подключён к неверной сети.
  • Ошибки взаимодействия с контрактами.
  • Зависания при ожидании ответа от блокчейна.

Пример обработки ошибок:

try {
  const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' });
  console.log('Connected:', accounts[0]);
} catch (error) {
  if (error.code === 4001) {
    alert('User rejected the connection.');
  } else {
    console.error('Error:', error.message);
  }
}

Отображение данных пользователя

Фронтенд должен показывать:

  • Баланс пользователя в тестовой сети.
  • Подключённую сеть.
  • Информацию о транзакциях (например, через блокчейн-эксплорер).

Пример получения баланса:

const getBalance = async (address) => {
  const balance = await provider.getBalance(address);
  console.log('Balance:', ethers.utils.formatEther(balance), 'ETH');
};

Проверка подключения MetaMask

Приложение должно проверять, установлен ли MetaMask, и предлагать пользователю установить его, если он отсутствует.

if (typeof window.ethereum === 'undefined') {
  alert('MetaMask is not installed. Please install it to use this DApp.');
}

Заключение

В этом материале мы узнали , как создать простой интерфейс для DApp, подключиться к блокчейну через Web3.js/Ethers.js, взаимодействовать со смарт-контрактами и подключаться к тестовым сетям.


Следите за обновлениями в нашем Telegram-канале!

Чтобы не пропустить новые материалы, подписывайтесь на наш Telegram-канал. Здесь вы сможете получать все статьи, курсы и эксклюзивные материалы прямо в удобный мессенджер. А также быть в курсе последних новостей и инсайтов из мира AI.

Присоединяйтесь к сообществу единомышленников, задавайте вопросы и делитесь своим мнением — будем учиться и развиваться вместе!

Подписаться можно по ссылке: https://t.me/proaionru

Отличные новости для всех моих подписчиков! 🎉 При покупке продукции JetBrains вы можете использовать специальный промокод «Asgru24» и получить скидку 25% на любой товар! Не упустите шанс сэкономить на лучших инструментах разработки.

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *