Как общаться с публичным блокчейном Ethereum на веб-сервере?

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

На локальной машине разработки я запускаю ganache как testrpc и подключаюсь с помощью такой строки кода:

web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

Я также обнаружил, что могу разрабатывать против тестовой сети RinkeBy с

web3 = new Web3(new Web3.providers.HttpProvider("https://rinkeby.infura.io/$thisistheapikey"));

Но как я могу общаться с НАСТОЯЩИМ публичным блокчейном? Нужно ли мне запускать geth на веб-сервере и подключаться к его экземпляру? Или есть какая-нибудь общедоступная сеть, которую можно было бы использовать? (если мы можем этому доверять)


person delete    schedule 13.05.2019    source источник


Ответы (1)


Но как я могу общаться с НАСТОЯЩИМ общедоступным блокчейном?

Чтобы подключиться к публичной цепочке блоков Ethereum (узлу Ethereum) с помощью удаленного вызова процедур (RPC) в основной сети, вам понадобится узел Ethereum. Есть несколько способов сделать это. Вы можете запустить собственный узел Ethereum с помощью Geth или Parity. Но для этого требуется загрузить много данных из общедоступной цепочки блоков и синхронизировать их. Это огромная задача.

В качестве альтернативы вы можете использовать Infura (https://infura.io/) для доступа к узлу Ethereum (общедоступная цепочка блоков Ethereum) без необходимости запускать какой-либо узел самостоятельно. Infura предоставляет удаленный узел Ethereum бесплатно. Все, что вам нужно сделать, это зарегистрироваться и получить ключ API и URL-адрес RPC для подключения.

URL-адрес Infura RPC должен выглядеть так:

https://mainnet.infura.io/YOUR_INFURA_API_KEY  

Теперь вы можете использовать этот URL-адрес RPC для связи, например

const Web3 = require('web3')
const rpcURL = '' // Your RPC URL with infura key goes here,i.e. https://mainnet.infura.io/YOUR_INFURA_API_KEY 
const web3 = new Web3(rpcURL)
const address = '' // Your ethereum account address goes here
web3.eth.getBalance(address, (err, wei) => {
  balance = web3.utils.fromWei(wei, 'ether')
})

Нужно ли мне запускать geth на веб-сервере и подключаться к его экземпляру?

Уже рассмотрено в первом ответе, это может быть еще один подход к общению.

Или есть какая-нибудь общедоступная сеть, которую можно было бы использовать? (если мы можем этому доверять)

Существуют основная сеть Ethereum, где происходит реальная транзакция с токенами, и тестовая сеть, которые не имеют реальной ценности. Перед запуском проекта на блокчейне Ethereum лучше всего запустить весь сценарий в среде Test Net, чтобы найти и исправить проблемы с безопасностью. Доступно множество сервисов тестовой сети. Как Ропстен, Кован, Ринкеби. Просто поищите в Интернете "тестовая сеть ethereum", чтобы узнать больше. Надежда помогает.

person Syed Ekram Uddin    schedule 17.05.2019
comment
Но результаты основной сети infura не совпадают с результатами, отображаемыми в etherscan.io. Не могли бы вы мне помочь, как эти вещи работают и почему они показывают разные результаты. - person Maadhav Sharma; 24.01.2021