Вызовы JSON RPC с использованием четности. Разница между Инфурой и Гетом?

Я начал с того, что попытался следовать статье о том, как опережать банкор с помощью Python. Я подумал, что будет легко отправить запрос API на мой полный узел, а затем реплицировать тот же запрос в Python — все следуя руководству. Единственная разница заключалась в том, что автор использовал Geth, а я использую Parity. Неспособность понять, как использовать JSON RPC, завела меня в кроличью нору. Я действительно не знаю (1) что я делаю неправильно или (2) понимаю ли я хотя бы концептуально JSON RPC на данный момент.

Эта проблема:

Я должен иметь возможность запустить эту команду curl:curl -X POST --data \ '{"jsonrpc":"2.0","method":"eth_getTransactionByHash", \ "params":["0x314e0246cfc55bc0882cbf165145c168834e99924e3ff7619ebd8290e713386d"], \ "id":123}' localhost:8545

И получить такой результат:

{"jsonrpc":"2.0","id":123, "result":{ "blockHash":"0x42ea1578c23b159186853961dfbdfcdec6b40d23d8f1d971827412bc6948386b", "blockNumber":"0x3dfb88", "From":"0xcaf82fcb3a0323566c0f306684376e3e66d6284b", "To":"0x77a77eca75445841875ebb67a33d0a97dc34d924", "gasPrice":"0xba43b7400", "hash":"0x314e0246cfc55bc0882cbf165145c168834e99924e3ff7619ebd8290e713386d", "value":"0x6c6b935b8bbd400000", ...}}

Однако, когда я запускаю его с локальным узлом, подключенным к четности, я получаю только:

Supplied content type is not allowed. Content-Type: application/json is required

Я нашел документацию API Parity JSON-RPC и понял, что форматирование отличается.
введите описание изображения здесь

Поэтому я переформатировал команду curl, чтобы она выглядела так:

curl --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash",
"params":["0x314e0246cfc55bc0882cbf165145c168834e99924e3ff7619ebd8290e713386d"], "id":1, "jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545

Я решил ошибку Content Type, но затем получил нулевой результат:

{"jsonrpc":"2.0","result":null,"id":1}

Затем, глядя на эту статью об обмене стеками, я понял, что у Parity есть собственная консоль Web3. Итак, я подумал, может быть, мне вообще не нужно использовать завиток, и я могу просто бегать.

web3.eth.getTransaction('0x314e0246cfc55bc0882cbf165145c168834e99924e3ff7619ebd8290e713386d')

введите описание изображения здесь

и я все еще получаю нулевой доход.

В качестве примечания я также пытался сделать вызов, используя API Infura .

curl --include \
 --header "Content-Type: application/json" \
 --header "Accept: application/json" \

' https://api.infura.io/v1/jsonrpc/mainet/getTransaction?params=0x314e0246cfc55bc0882cbf165145c168834e99924e3ff7619ebd8290e713386d '

ИнфураНо я получаю 404 возврата.

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

Вы запускаете это в Windows? Я пробовал с infura.io, и это работаетcurl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x314e0246cfc55bc0882cbf165145c168834e99924e3ff7619ebd8290e713386d"],"id":123}' https://mainnet.infura.io/<token>
Нет, Убунту 16.04.

Ответы (2)

Назовите это так

curl --data '{"method":"web3_clientVersion","params":[],"id":1,"jsonrpc":"2.0"}' \
-H "Content-Type: application/json" \
-X POST localhost:8545

Это нужно

-H "Content-Type: application/json"

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

Не могли бы вы показать мне, как именно вы вошли в него? Мой узел определенно полностью синхронизирован
Я буквально скопировал ваш вызов и запустил его с терминала на сервере Ubuntu с контролем четности: "], "id": 1, "jsonrpc": "2.0"}' -H "Content-Type: application/json" -X POST localhost:8545 {"jsonrpc":"2.0","result":{" blockHash":"0x42ea1578c23b159186853961dfbdfcdec6b40d23d8f1d971827412bc6948386b","blockNumber":"0x3dfb88","chainId":"0x1"...
(Кроме того, почему отрицательные голоса? : O)