jsonrpc eth_accounts не возвращает учетных записей

У меня есть работающий узел geth, и с помощью geth account newкоманды я создал новую учетную запись:

$ geth account list

Аккаунт №0: {47978a69f410d0f...} ...

Тем не менее, при использовании вызова json rpc для вывода списка моих эфирных счетов получается нулевой результат:

$ curl -X POST --data

'{"jsonrpc":"2.0","метод":"eth_accounts","params":[],"id":1}' http://127.0.0.1:8545

{"jsonrpc":"2.0","id":1,"результат":[]}

Это почему? Любой намек? Заранее спасибо!

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

$geth --rpc --rpcapi "db,eth,net,web3" --rpcport "8545" --testnet 
--etherbase "0x47978a6...."

Возможно ли, что geth, работающий в тестовой сети, запутается в вызовах json rpc? Нужно ли мне как-то указывать в этих вызовах, чтобы использовать тестовую сеть, а не основную сеть?

Попробуйте id:0или удалите idпараметр.
Тот же результат и ошибка...:$ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":0}' http://127.0.0.1:8545 {"jsonrpc":"2.0","id":0,"result":[]} $ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[]}' http://127.0.0.1:8545 {"jsonrpc":"2.0","error":{"code":-32700,"message":"missing request id"}}´
Что такое id кстати? Идентификатор чего?
eth.accounts[]— это индекс кошельков, которые вы запрашиваете, в вашем случае 0это coinbase.

Ответы (3)

Вам не нужно использовать paramsполе в вашем вызове. Делая это, вы выполняете эту команду: eth.accounts[]которая возвращает нулевое значение. Если вы хотите получить список всех учетных записей, вы должны выполнить eth.accounts. Итак, ваша команда RPC должна быть:

curl -X POST -d '{"method":"eth_accounts","id":1}' 127.0.0.1:8545

PS: Я предполагаю, что вы уже включили RPC на порту 8545. Через консоль вы можете admin.startRPC()запустить RPC.

Спасибо за упрощение, но, к сожалению, тот же результат: {"jsonrpc":"2.0","id":1,"result":[]}
Вы проверяли с другими командами?
Да, он корректно реагирует на другие команды: $ curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64 }' localhost: 8545 {"jsonrpc": "2.0", "id": 64, "результат": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"}
Возможно, проблема связана с использованием geth с помощью testnet и json rpc с использованием mainnet... возможно ли это?

Включите API web3 RPC при запуске geth :

geth --rpc --rpcapi "web3" --rpcport "8545"

или если вы хотите, чтобы все API запускались:

geth --rpc --rpcapi "db,eth,net,web3" --rpcport "8545"
Я только что сделал это, но точно такой же результат, список учетных записей geth показывает учетную запись, а jsonrpc - нет :-(
Проблема не в том, что API не отвечает, а в том, что он отвечает нулевым результатом. На самом деле, он правильно реагирует на другие команды, такие как: ":64}' localhost:8545 {"jsonrpc":"2.0","id":64,"result":"0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"}
Вероятно, вы отправляете неправильный объект JSON. Используйте web3 и вызовите ту же функцию: github.com/ethereum/wiki/wiki/JavaScript-API#web3ethaccounts , поскольку параметры curl верны (как предлагается в документации).

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

Я создал новую учетную запись в тестовой сети, и запрос json-rpc работал отлично:

$get --список учетных записей testnet

$geth --testnet новый адрес учетной записи: {3b877e80b5c0...}

$geth --testnet список учетных записей Учетная запись №0: {3b877e80b5c0...

$ curl -X POST -d '{"метод":"eth_accounts","id":0}' 127.0.0.1:8545 {"jsonrpc":"2.0","id":0,"результат":[" 0x3b877e80...

Спасибо за вашу помощь!

В исходном посте создание учетной записи не имеет параметра командной строки --testnet, так что, возможно, это так. Пытался ли ОП найти учетную запись в основной сети?