Как подключить веб-сайт к узлу geth?

До того, как был доступен DApp-браузер Mist, эта библиотека web3 кажется способом построить мост от контракта к внешнему интерфейсу (веб-сайту).

Но я не могу заставить работать самые простые примеры .

В этих источниках отсутствует несколько важных моментов:

  1. Какова точная команда для запуска geth для запуска примеров? Я использовал:

    geth --rpc console 2
    

    при добыче полезных ископаемых и т. д.

  2. В этом примере есть строка:

    web3.setProvider(new web3.providers.HttpProvider());
    

    Это должен быть локальный хост?

    web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'));
    
  3. Есть ли способ скрыть web3.setProviderи другой код JavaScript из исходного кода страницы, доступного для просмотра пользователем? Если адрес узла geth общедоступен, это может быть проблемой безопасности.

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

Та же проблема. Я пытаюсь использовать web3.js (или web3.min.js) в своем приложении NW.js. Мой файл index.html содержит: <script type="text/javascript" src=" raw.githubusercontent.com/ethereum/web3.js/master/dist/… "> </script> Я пробовал это, а также пробовал выполнение «npm init» и «npm install ethereum/web3.js --save» — я получаю аналогичную ошибку в обоих случаях. TypeError: e не является функцией в chrome-extension://kbkmobamaomphkjgbgdnoonjhcdgmell/node_modules/web3/dist/web3.min.js:1:59528 в chrome-extension://kbkmobamaomphkjgbgdnoonjhcdgmell/node_modules/web3/dist/web3.min. js: 1: 60409 в XMLHttp

Ответы (2)

Что касается пункта номер один, это должно сработать:
geth --rpc --rpccorsdomain="*" console 2>> geth.log
бег --rpccorsdomain="*"опасен, особенно если у вас есть разблокированные учетные записи. Поместите свое доменное имя вместо *. Для локального хоста добавьте--rpcaddr="localhost"

Опасность, конечно, в том, что веб-сайты могут потратить ваш эфир и даже отправить его себе. (Без каких-либо подсказок или чего-то еще!) Каждый раз, когда я видел сайт, предлагающий пользователям сделать это, мне казалось, что пользователей обманывают. Придерживайтесь Mist / Ethereum Wallet, они являются официальными и будут спрашивать вас перед переводом средств.

Чтобы добавить к ответу Итана Уайлдинга , для безопасного локального тестирования вы можете использовать --devфлаг и подключиться к узлу с именем пользователя «test» и паролем «test».

Таким образом, gethкоманда для тестирования становится:
geth --dev --rpc --rpccorsdomain="*" --rpcaddr="localhost"

[внимание: вы должны использовать эти флаги только для тестирования в режиме локальной разработки, а не в реальной сети]

И подключение клиента web3.js:
web3.setProvider(web3.providers.HttpProvider(null, 0, 'test', 'test'));
где null устанавливает хост, http://localhost:8545а 0 отключает тайм-аут

Как только это будет сделано, пример кода подключится к локальному узлу, хотя есть большая вероятность (по крайней мере, на данный момент), что многие примеры не будут работать, потому что они кажутся устаревшими. Но web3.js/example/balance.html прекрасно работает.

--rpccorsdomain="*"является наименее безопасным.
ты не ошибся в общем-то, но для девелоперского тестирования на локальном сервере? я добавлю примечание, чтобы не делать этого в производстве :)