Как подключить geth к локальному порту Parity RPC 8545?

Я работаю parityс флагом, который по умолчанию --jsonrpcпрослушивает порт .8545

Я пытаюсь прикрепить gethэкземпляр, как описано в документах :

Подключите консоль к работающему экземпляру geth. По умолчанию это происходит через IPC на конечной точке IPC по умолчанию, но при необходимости можно указать пользовательскую конечную точку:

geth attach                   # connect over IPC on default endpoint
geth attach ipc:/some/path    # connect over IPC on custom endpoint
geth attach http://host:8545  # connect over HTTP
geth attach ws://host:8546    # connect over websocket

Но я получаю фатальную ошибку:

Fatal: Unable to attach to geth node - Invalid endpoint

Это мои проверенные команды:

 ~ $ geth attach http://127.0.0.1:8545
Fatal: Unable to attach to geth node - Invalid endpoint
 ~ $ geth attach http://localhost:8545
Fatal: Unable to attach to geth node - Invalid endpoint
 ~ $ geth attach ws://localhost:8545
Fatal: Unable to attach to geth node - Invalid endpoint

Как подключить geth к локальному RPC на порту 8545?

Ответы (3)

# Через Geth:

Когда вы запускаете свой узел Parity, используйте --gethфлаг, например, parity --geth.

Затем перейдите в другое окно и запустите geth attach.

Результат этого:

Welcome to the Geth JavaScript console!
>

Отличительной особенностью Parity является то, что вам не нужно беспокоиться о включении JSON-RPC, так как он включен по умолчанию.

# Через узел:

Другой подход заключается в использовании библиотеки NodeJS web3, которая обеспечивает ту же функциональность. Из быстрого запуска паритета :

npm install web3
node # Enter REPL
Web3 = require("web3");
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

Теперь вы можете взаимодействовать с Parity так же, как с консолью Javascript:

web3.eth.getBlockNumber().then(blockNumber => console.log(blockNumber)) // Regular Geth command, except connected to Parity
743397
Красиво, --gethсправился.
для web3 1.0.0: web3.eth.isSyncing().then(console.log)
большая часть команды web3 возвращает обещания: поэтому напечатайте callback res

Недавно выпущенная версия 1.1 Parity поддерживает modules/rpc_modulesметод RPC и позволяет вам geth attach <rpcaddress>(поддерживаются geth 1.3.6 и 1.4.0).

Подробности выпуска: https://blog.ethcore.io/announcing-parity-1-1/

Примеры:

Гет 1.3.6

$ geth attach rpc://localhost

Гет 1.4.0

$ geth attach http://localhost:8545

Hum, Fatal: невозможно подключиться к узлу geth - наберите unix /home/user/.ethereum/geth.ipc: connect: соединение отклонено. Кажется, еще не готов.
Вам необходимо указать конечную точку HTTP rpc: geth attach rpc://localhost1.3.6 или geth attach http://localhost:85451.4.0
Не стесняйтесь использовать кнопку редактирования , чтобы улучшить свой ответ.

Резюме

Я не думаю, что вы сможете подключиться geth attach(версия 1.3.6) к parity(версии Parity/v1.0.2-beta/x86_64-linux-gnu/rustc1.7.0).



Подробности

Я протестировал использование geth attachдля подключения parity --rpcи получил следующее сообщение

Fatal: Unable to initialize console - Unable to parse module response - <nil>

Итак, я сделал трассировку, tcpdumpи результаты следуют.

Я начал parityсо следующих вариантов:

parity --datadir datadir --rpc --rpcapi "web3,eth,net,personal"  --rpccorsdomain "*"

Я начал tcpdumpиспользовать следующую команду (имеется в виду дамп данных в формате ASCII на интерфейс lo(127.0.0.1) и порт 8545):

sudo tcpdump -A -i lo port 8545

Я начал gethиспользовать следующую команду:

geth attach rpc:http://127.0.0.1:8545

И вот результаты tcpdump(приведены в порядок):

IP localhost.38186 > localhost.8545
POST / HTTP/1.1
Host: 127.0.0.1:8545
User-Agent: Go-http-client/1.1
Content-Length: 57
Content-Type: application/json
Accept-Encoding: gzip

{"id":1,"jsonrpc":"2.0","method":"modules","params":null}

localhost.8545 > localhost.38186
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Date: Tue, 26 Apr 2016 09:51:20 GMT
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=utf-8
Access-Control-Allow-Headers: origin, content-type, accept
Allow: OPTIONS, POST

{"jsonrpc":"2.0","error":{"code":-32601,"message":"Method not found","data":null},"id":1}

gethзапрашивает parityмодули поддержки, но parityне понимает команду " modules ", поэтому gethсдается.

Я пробовал использовать несколько разных вариантов, но результаты похожи.

Я проследил исходный код gethи обнаружил, что cmd/geth/js.goу него есть welcome()метод, который будет запрашивать у подключенного экземпляра RPC, какие модули поддерживаются. Это то, что вы обычно видите при подключении geth attachк geth --rpc:

    modules: db:1.0 eth:1.0 net:1.0 web3:1.0

Но parity, похоже, не поддерживает этот метод JSON-RPC.