Соединение вашего DAPP с блокчейном с WalletConnect и GetBlock
27 июня 2025 г.Вы хотите подключить свое децентрализованное приложение (DAPP) к блокчейну и позволить пользователям взаимодействовать с ним, используя свои кошельки браузера? Этот урок поможет вам интегрироватьWalletConnectсGetBlock.io- Мощная комбинация для бесшовных и надежных взаимодействий блокчейна.
Мы сосредоточимся на настройке на основе браузера, что делает ее идеальным для веб-приложений, где пользователи обычно используют расширения браузера, такие какМетамаскаПолем
Что вам понадобится
Прежде чем погрузиться в код, убедитесь, что у вас есть следующее:
- Учетная запись GetBlock:GetBlock предоставляет доступ к различным узлам блокчейна. Вам понадобится ключ API для подключения. Если у вас его нет, зарегистрируйтесь вhttps://getblock.io/Полем
 - Кошелек на основе браузера:Мы будем использовать общий кошелек для удлинения браузераМетамаскаДля этого урока. Убедитесь, что он установлен в вашем браузере и подключен к Testnet (например, Sepolia) для безопасных экспериментов.
 - Базовые знания JavaScript:Этот урок включает в себя какой -то код JavaScript.
 - Простой веб -проект:Основной HTML -файл с тегом сценария - это все, что вам нужно для начала.
 
Шаг 1: Настройка токена доступа к GetBlock
- Войдите, чтобы GetBlock:После входа в систему получите свободную конечную точку для Sepolia.
 - Получите новую конечную точку (при необходимости):Вы найдете кнопку получить кнопку на панели приборной панели.
 - Скопируйте свой токен доступа:Найдите и скопируйте токен доступа. Мы будем использовать это для подключения к узлам блокчейна. Для этого урока мы предположим, что вы подключитесь к Ethereum Testnet.
 
Шаг 2: Создайте свою структуру HTML
Давайте создадим простой HTML -файл (index.html) В нем будут размещены нашу дапп и логику JavaScript.
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>WalletConnect GetBlock Tutorial</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        button { padding: 10px 20px; margin-top: 10px; cursor: pointer; }
        #status { margin-top: 20px; font-weight: bold; }
        #account { margin-top: 10px; }
    </style>
</head>
<body>
    <h1>Connect Your Wallet</h1>
    <button id="connectButton">Connect Wallet</button>
    <button id="disconnectButton">Disconnect Wallet</button>
    <div id="status">Status: Disconnected</div>
    <div id="account">Account: N/A</div>
    <script src="./app.js"></script>
</body>
</html>
Шаг 3: Реализация логики WalletConnect (app.js)
Теперь давайте создадим нашеapp.jsФайл и добавьте код JavaScript для обработки WalletConnect.
Во -первых, вам нужно установитьWalletConnect web3modalбиблиотека иWalletConnectProviderПолем Для простого примера браузера вы можете использовать CDN. Для более надежного проекта вы обычно используетеnpmПолем
Добавьте эти теги сценария в свойindex.htmlдотвойapp.jsтег скрипта:
<script src="https://unpkg.com/web3@latest/dist/web3.min.js"></script>
<script src="https://unpkg.com/@walletconnect/web3-provider@1.8.0/dist/umd/index.min.js"></script>
<script src="https://unpkg.com/web3modal@1.9.12/dist/index.js"></script>
Теперь создайте свойapp.jsфайл:
// Replace with your actual GetBlock Access Token
const GETBLOCK_ACCESS_TOKEN = 'YOUR_GETBLOCK_ACCESS_TOKEN';
const GETBLOCK_NODE_URL = `https://go.getblock.io/${GETBLOCK_ACCESS_TOKEN}/`;
let web3Modal;
let provider;
let web3;
let selectedAccount;
const connectButton = document.getElementById('connectButton');
const statusDiv = document.getElementById('status');
const accountDiv = document.getElementById('account');
const init = async () => {
    // Configure Web3Modal
    const providerOptions = {
        // You can add more providers here, but for this tutorial, WalletConnect is the focus.
        walletconnect: {
            package: window.WalletConnectProvider.default, // required
            options: {
                rpc: {
                    // You can specify multiple chains and their GetBlock.io endpoints
                    11155111: GETBLOCK_NODE_URL // Sepolia Chain ID
                },
                infuraId: undefined, // Not needed if using GetBlock for RPC
                chainId: 11155111, // Default chain to connect to (Sepolia)
            }
        }
    };
    web3Modal = new Web3Modal.default({
        cacheProvider: true, // Optional: enables caching of provider for quicker reconnections
        providerOptions, // required
        disableInjectedProvider: false, // Optional: if you want to allow direct MetaMask connections too
    });
    console.log("Web3Modal initialized.", web3Modal);
    // If a provider is already cached, connect automatically
    if (web3Modal.cachedProvider) {
        await connectWallet();
    }
};
// Function to connect the wallet using WalletConnect
const connectWallet = async () => {
    try {
        statusDiv.textContent = 'Status: Connecting...';
        provider = await web3Modal.connect(); // This opens the WalletConnect modal
        // We plug the web3 provider into Web3.js
        web3 = new Web3(provider);
        // Get the connected accounts
        const accounts = await web3.eth.getAccounts();
        selectedAccount = accounts[0];
        statusDiv.textContent = 'Status: Connected!';
        accountDiv.textContent = `Account: ${selectedAccount}`;
        // Listen for accounts changed and disconnect events
        provider.on("accountsChanged", (accounts) => {
            console.log("Accounts changed:", accounts);
            selectedAccount = accounts[0];
            accountDiv.textContent = `Account: ${selectedAccount}`;
        });
        provider.on("chainChanged", (chainId) => {
            console.log("Chain changed:", chainId);
            // You might want to reload the page or update the UI based on the new chain
            statusDiv.textContent = `Status: Connected to Chain ID ${chainId}`;
        });
        provider.on("disconnect", (code, reason) => {
            console.log("Provider disconnected:", code, reason);
            resetApp();
        });
    } catch (e) {
        console.error("Could not connect wallet:", e);
        statusDiv.textContent = 'Status: Connection Failed';
        accountDiv.textContent = 'Account: N/A';
        selectedAccount = null;
    }
};
// This function will disconnect the wallet and reset the app state
async function disconnectWallet() {
    if (window.provider && window.provider.close) {
        await window.provider.close();
    }
    await web3Modal.clearCachedProvider();
    window.location.reload(); // Opcional: recarrega a página
}
const resetApp = () => {
    selectedAccount = null;
    statusDiv.textContent = 'Status: Disconnected';
    accountDiv.textContent = 'Account: N/A';
    web3Modal.clearCachedProvider();
    provider = null;
    web3 = null;
};
// Event listener for the connect button
connectButton.addEventListener('click', connectWallet);
// Event listener for the disconnect button
disconnectButton.addEventListener('click', disconnectWallet);
// Initialize the DApp when the DOM is loaded
window.addEventListener('load', init);
Важные примечания:
- Заменять
YOUR_GETBLOCK_ACCESS_TOKEN: Обязательно замените этого заполнителя вашим фактическим токеном доступа к GetBlock.io. - Идентификатор цепи:А
chainId(11155111 для Sepolia) имеет решающее значение для WalletConnect, чтобы идентифицировать правильную сеть. rpcОбъект:rpcобъект внутриproviderOptions.walletconnect.optionsЭто где вы отображаете идентификаторы цепочки на свои URL -адреса узла getBlock.io. Это сообщает WalletConnect, какую конечную точку RPC использовать для конкретной сети.WalletConnectProvider: В типичном проекте, использующем бундлер (например, WebPack или Parcel),WalletConnectProviderбудет импортирован из@walletconnect/web3-providerПолем Для этого простого примера браузера с использованием CDN он предполагается, что он будет доступен по всему миру послеweb3modal.min.jsсценарий.- Обработка ошибок:А
try...catchБлоки важны для обработки потенциальных ошибок соединения. - Слушатели событий:Мы добавили основных слушателей событий для
accountsChangedВchainChanged, иdisconnectЧтобы обновить пользовательский интерфейс и обработать изменения в кошельке пользователя. 
Шаг 4: Запустите приложение
Сохраните ваши файлы:Убедитесь, что оба
index.htmlиapp.jsнаходятся в том же каталоге.Открыть
index.htmlв вашем браузере. Используйте локальный сервер.Если вы откроете index.html непосредственно в браузере (файл: //), некоторые браузеры будут блокировать запросы поперечного происхождения: вы должны увидеть кнопку «Подключить кошелек».
Нажмите «Подключить кошелек»:АWalletConnectМодал появится.
Выберите «WalletConnect»:QR -код появится.
Сканируйте с помощью мобильного кошелька (или используйте настольный кошелек, совместимый с кошельком, совместимый с кошельком):Если вы используете расширение рабочего стола Metamask, он должен открыть подключение. Для мобильных кошельков сканируйте QR-код, используя встроенный сканер вашего кошелька.
Утвердить соединение:Подтвердите запрос на соединение в вашем кошельке.
После подключения ваш DAPP отобразит «Статус: подключен!» и ваш подключенный адрес учетной записи.
Следующие шаги
Теперь, когда у вас установлено базовое соединение, вы можете расширить свой DAPP:
- Прочитайте данные контракта:Используйте
web3экземпляр для взаимодействия с интеллектуальными контрактами (например, вызовviewфункции). - Отправить транзакции:Разрешить пользователям отправлять транзакции (например, вызовать
nonpayableФункции на интеллектуальных контрактах, отправить ETH). - Сообщения знаком:Позвольте пользователям подписывать произвольные сообщения.
 - Реализовать отключить:Добавьте кнопку или механизм для пользователей, чтобы явно отключить свой кошелек.
 
Этот урок предоставляет прочную основу для подключения вашего DAPP к блокчейну с помощьюWalletConnectиПолучитьПолем Используя эти инструменты, вы можете создать бесшовный и удобный опыт для ваших децентрализованных приложений!
Оригинал