* Change how RPCs eth_call and eth_estimateGas handle "Pending"
Before this PR we would return a rather confusing error when calling `eth_call` and `eth_estimateGas` with `"Pending"`, e.g.:
```
{"jsonrpc":"2.0","error":{"code":-32000,"message":"This request is not supported because your node is running with state pruning. Run with --pruning=archive."},"id":"e237678f6648ed12ff05a74933d06d17"}
```
In reality what is going on is that users often use `"Pending"` when they really mean `"Latest"` (e.g. MyCrypto…) and when the block in question is not actually pending. This changes our behaviour for these two RPC calls to fall back to `"Latest"` when the query with `"Pending"` fails.
Note that we already behave this way for many other RPCs:
- eth_call (after this PR)
- eth_estimateGas (after this PR)
- eth_getBalance
- eth_getCode
- eth_getStorageAt
Closes https://github.com/paritytech/parity-ethereum/issues/10096
* Fetch jsonrpc from git
* No real need to wait for new jsonrpc
* Add tests for calling eth_call/eth_estimateGas with "Pending"
* Fix a todo, add another
* Change client.latest_state to return the best header as well so we avoid potential data races and do less work
* Impl review suggestions
* Update rpc/src/v1/impls/eth.rs
Co-Authored-By: Niklas Adolfsson <niklasadolfsson1@gmail.com>
* Review grumbles
* update docs
* Rename RegistryInfo -> RegistryInfoDeprecated
* Add BlockId parameter to Registrar::get_address and RegistrarClient::call_contract
* Remove RegistrarClient::Call (use async for now); add RegistrarClient::get_address
* Remove Registrar type in favour of naked trait
* Use CallContract trait bound instead of separate call_contract method
* Make RegistrarClient::get_address and URLHint::resolve synchronous
* RegistrarClient::get_address: return check if address is zero
* Modify RegistryInfo::registry_address to take &str
* return Result from RegistryInfo::registry_address
* Replace RegistryInfo with RegistrarClient
- Modifed RegistrarClient::registrar_address to return Option
- Removed BlockChainClient::registrar_address
* Fix other build configs
* Fix unit test builds
* Remove local RegistrarClient type from run::execute_impl
* Remove registrar.json from ethcore
* Formatting/line breaks
* Update RegistrarClient docs, remove explicit lifetime
* Weak ref to ethcore client from hash fetch client
* Fix unit tests