Выполнение web3.js - сервер против браузера

Я немного далек от веб-разработки, поэтому у меня есть одно недоразумение.

Насколько известно, код node.js должен выполняться на стороне сервера, а web3.js предназначен для работы на стороне сервера (не уверен), поскольку он использует директиву «require» и подключается к локальному узлу Ethereum.

Но в примерах здесь https://github.com/ethereum/web3. js /tree /master /example , я вижу java-скрипт, встроенный в html-код, который должен выполняться в браузере. Может кто-нибудь объяснить, как это работает, что взаимодействует с чем, какой код выполняется на стороне сервера и который в браузере .

Другой вопрос отсюда, если я использую Mist, он подключается к локальному узлу. Но если я хочу использовать web3 в браузере (не туман), у меня нет узла для взаимодействия с web3.js. Итак, вопрос: как я могу использовать web3 для браузера (не для Mist)?

23 голоса | спросил Alexey Barsuk 8 FebruaryEurope/MoscowbWed, 08 Feb 2017 18:46:12 +0300000000pmWed, 08 Feb 2017 18:46:12 +030017 2017, 18:46:12

2 ответа


15

Web3 предназначен для работы как на стороне сервера, так и на стороне клиента. Клиентская сторона должна быть предварительно обработанным пакетом JS, поскольку браузеры не могут обрабатывать расширенный JavaScript. Вы можете получить распределение пакетов или создать его самостоятельно.

Web3 связывается с использованием XMLHTTPRequest при запуске в браузере. Если у вас нет собственного узла для общения с ситуацией, это мрачно. EtherScan.io предоставляет службы на основе API-ключей, которые также предоставляют некоторые привязки JSON-RPC от Ethereum. Однако, насколько я знаю, они не предоставляют собственный провайдер Web3, поэтому вам нужно вызывать их конкретные API, используя свой клиент вместо Web3.

Вот пример проекта клиента которое использует Webpack и Babel (ECMAScript 2016) и EtherScan API на веб-странице .


Теперь есть альтернативы, такие как установка расширения Metamask в Chrome или реализация Metamascara на вашем сайте, чтобы пользователю не нужен локальный узел для взаимодействия с блочной цепочкой.

ответил Mikko Ohtamaa 9 FebruaryEurope/MoscowbThu, 09 Feb 2017 01:03:43 +0300000000amThu, 09 Feb 2017 01:03:43 +030017 2017, 01:03:43
22

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

Таким образом, в Ethereum можно получить доступ через браузер или сервер; все, что может говорить по протоколу. Браузер Mist более тесно интегрирован, как и следовало ожидать, но другие могут работать, если загружаются правильные требования.

Чтобы сделать это перспективным, можно создать полностью распределенное веб-приложение (Dapp), которое использует Ethereum Smart Contracts. Браузер будет говорить непосредственно с Smart Contracts, обычно через API Web3.js. Разумеется, браузер будет загружать API, чтобы сделать это возможным, и ему понадобится локальный узел, чтобы у API было что-то, с чем можно было поговорить.

В случае Mist это автоматически, но другие браузеры могут его загрузить. Таким образом, html будет включать <script>, чтобы загрузить его. Возможно, автор захочет добавить небольшое обнаружение, так что страница браузера действует несколько иначе в случае обнаружения Mist или обнаружения «другого браузера».

Также вполне приемлемо, чтобы сервер взаимодействовал с Smart Contracts. Как вы видели, nodejs будет загружать его с помощью require("Web3"). В этом случае браузеру (обычно) не нужен блок-узел или какая-либо специальная библиотека, потому что сервер будет получать информацию о цепочке. Возможна интеграция с другими языками. python, используя библиотеку python-ethereum, созданную для этой цели.

Для некоторых реальных примеров, etherscan.io (blockchain explorer) использует интеграцию на стороне сервера. Браузеру не требуется библиотека или узел, поскольку серверный сервер предоставляет информацию о цепочке, которую он находит от имени пользователя. Вот почему он «просто работает».

Огер бета распространяется. Чтобы использовать его, браузер загружает библиотеку, и ожидается, что пользователь будет иметь узел Ethereum, работающий локально, без которого приложение не работает должным образом. Самый простой /быстрый способ для пользователя выполнить это требование - использовать Chrome с подключаемым модулем MetaMask, который обеспечивает интерфейс «легкого клиента» без необходимости синхронизации всей цепочки блоков.

Извинения за длинный ответ. Существует множество вариантов развертывания, и это затрудняет предоставление сводных данных во всех случаях.

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

Надеюсь, это поможет.

ответил Rob Hitchens B9lab 9 FebruaryEurope/MoscowbThu, 09 Feb 2017 01:14:14 +0300000000amThu, 09 Feb 2017 01:14:14 +030017 2017, 01:14:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132