Я работаю 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?
# Через 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
Недавно выпущенная версия 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/
$ geth attach rpc://localhost
$ geth attach http://localhost:8545
geth attach rpc://localhost
1.3.6 или geth attach http://localhost:8545
1.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.
q9f
--geth
справился.Каран
Каран