* Bump Substrate to rc4
* Add BaseCallFilter type
* Add DenyUnsafe to SystemApi extension
* Use new ServiceBuilder build functions
* Add BaseCallFilter to test runtimes
* Remove old comments
* Add `rev` and `git` fields back
Turns out that if you don't have these future release candidates will
be used if available. For instance, once `rc5` is released a fresh pull
would use that instead of `rc4` which is what we want.
* Use tag release instead of specific commit
Will make scripted updates easier in the future
* Add short script to update between `rc` versions
* Update scripts/update_rc.sh
Co-authored-by: Tomasz Drwięga <tomusdrw@users.noreply.github.com>
* Add skeleton for worst case import_unsigned_header
* Fix a typo
* Add benchmark test for best case unsigned header import
* Add finality verification to worst case bench
* Move `insert_header()` from mock to test_utils
Allows the benchmarking code to use this without having to pull it in from the mock.
* Add a rough bench to test a finalizing a "long" chain
* Try to use complexity parameter for finality bench
* Improve long finality bench
* Remove stray dot file
* Remove old "worst" case bench
* Scribble some ideas down for pruning bench
* Prune headers during benchmarking
* Clean up some comments
* Make finality bench work for entire range of complexity parameter
* Place initialization code into a function
* Add bench for block finalization with caching
* First attempt at bench with receipts
* Try and trigger validator set change
* Perform a validator set change during benchmarking
* Move `validators_change_receipt()` to shared location
Allows unit tests and benchmarks to access the same helper function
and const
* Extract a test receipt root into a constant
* Clean up description of pruning bench
* Fix cache and pruning tests
* Remove unecessary `build_custom_header` usage
* Get rid of warnings
* Remove code duplication comment
I don't think its entirely worth it to split out so few lines of code.
The benches aren't particularly hard to read anyways.
* Increase the range of the complexity parameter
* Use dynamic number of receipts while benchmarking
As part of this change we have removed the hardcoded TEST_RECEIPT_ROOT
and instead chose to calculate the receipt root on the fly. This will
make tests and benches less fragile.
* Prune a dynamic number of headers
* runtime benchmarks: start
* merge tests + benchmarks infrastructure
* fix compilation
* Fix compilation issues with runtime-benchmark feature flag
Mainly involved pulling in correct dependencies and adding some functions
which were called but didn't yet exist.
* Fix broken compilation for tests
* Move header signing methods into trait
* Move signing related test helpers to own module
* Remove comment about feature flag
* Add constants to tests
* Add top level comment for testing utilities
Co-authored-by: Hernando Castano <castano.ha@gmail.com>
* Move EthereumRpc implementation to Eth client
* Move SubstrateRpc implementation to SubstrateClient
* Update deploy_contract to use new RPC interface
* Fix some types in the Substrate client
* Swap out method bodies in Eth sync loop
* Swap out method bodies in Substrate sync loop
* Remove Client from SourceClient trait return types
* Remove Client from TargetClient trait return types
* Remove client from Source select! arms
* Remove client from Target select! arms
* Add missing mutable refs in Substrate client
* Use mutable references in Source/Target Client traits
* Try and use mutable references in Source/Client trait implementations
* Handle errors more gracefully
* Remove unused imports
* Remove dead_code and unused_variables lints
* Remove usage of `jsonrpsee::RawClient`
By using a `jsonrpsee::Client` we are able to remove all the shared
mutable references required when interacting with the RPC server. This
is convenient as trying to sharing mutable references in code that uses
async/await is a bit of a pain.
However, using a `Client` instead of a `RawClient` is not yet supported
by the `jsonrpsee::rpc_api` macro, so a fork must be used for the moment.
* Clean up dead code and warnings
* Clean up higher level RPCs
Some of the RPCs that were "high level" didn't necessarily belong
as part of the trait, so they were removed.
* Use positional parameters for RPCs
Both Substrate and Ethereum's RPCs use positional (array) parameters,
so in order to be compatible with both we need to make sure that
our API is defined with positional paramters in mind.
* Rename argument for eth_getBlockByNumber
* Remove some unecessary Ok-wraps
* Process client requests synchonously
Before the refactoring the sync loop would wait until a client finished
handling a request before issuing another one. This behaviour was
inadvertently changed during the refactoring leading to race conditions.
This commit makes sure that the previous behaviour is respected.
* Reduce the errors that are considered a connection error
* Only decode bridge contract once
* Set genesis_config at RPC client startup
* Fetch genesis hash in SubstrateRpcClient::new()
* Move Decode error into SubstrateNodeError
* Suppress warnings caused by `rpc_api!`
* Implement From RpcError for String
* Handle Substrate client initalization errors more gracefully
* Remove match in favour of ?
Co-authored-by: Svyatoslav Nikolsky <svyatonik@gmail.com>
* Use async_trait for SourceClient
* Use aync_trait for TargetClient
* Revert async_trait usage for Source/Target client
This reverts commit f636ffaffd60197e90e887362b4a0c35a0dc5a6c.
This reverts commit 2c15755e8c93318f8e0a605852efe87d72edb769.
I'm having a very hard time finding out what is causing compilation
issues, and I think it's best to start over again.
* Use async_trait for TargetClient
* Use async_trait for SourceClient
* Move where non-async methods are
* RustFmt
* QueuedHeader holds Arc to actual data
* Clean up async return type
Co-authored-by: Svyatoslav Nikolsky <svyatonik@gmail.com>
* Clean up async return type
Co-authored-by: Svyatoslav Nikolsky <svyatonik@gmail.com>
* Clean up async return type
Co-authored-by: Svyatoslav Nikolsky <svyatonik@gmail.com>
* Remove unused import
Co-authored-by: Svyatoslav Nikolsky <svyatonik@gmail.com>
* removeInMemoryStorage + extract Kovan stuff to runtime
* removed comment from the future
* limit number of headers that are pruned within single import Call
* verify that pruning range upper bottom is always-increasing
* Fix typo
Co-authored-by: Hernando Castano <HCastano@users.noreply.github.com>
* Test defining an RPC API
* Add wrapper clients for the RPC API
* Implement most Ethereum RPCs
Does not include RPCs that require the bridge contract.
* Implement a few of the Substrate RPCs
Still missing proper error handling, as well as decoding responses from the
Substrate node.
* Make error handling more ergonomic
* Implement Substrate RPCs that use `state_call`
* Implement rest of Substrate RPCs
* Implement `eth_call` RPC
This can be used to implement higher level requests like fetching Substrate headers
from an Ethereum node.
* Build some of the higher level Ethereum RPCs
Uses the new Ethereum RPC interface to do so
* Build some of the higher level Substrate RPCs
* Remove old Ethereum RPC methods
* Remove old Substrate RPC methods
* Add some documentation to Substrate RPCs
* Fix typo in enum construction
* Revert commits `0f0435d` to `ca75502`
This range of commits was mainly trying to integrate the new RPC interface into the existing
codebase, however this turned out to be a little out of scope for the current PR. Instead this work
will be incorporated into a PR which aims to close#72.
* Add documentation to RPCs
* Rename functions in RPC API to conform to snake_case
* Check that header contains a number and hash
* Put doc comments on trait instead of impl methods
* Remove expect() calls
* Replace runtime API enums with consts
* Accept Bytes when submitting extrinsic
Let's us avoid using a runtime specific Extrinsic.
* Add strictly typed arguments to RPC API
Missing two methods right now, which require a `serde::Deserialize`
implemenation before they can be changed.
* Add `chain_getBlock` Substrate RPC
* Use typed arguments for `eth_estimateGas` and `eth_call`
* Silence dead code warnings
* Add check for logs bloom
* Remove unused variables
* Add documentation to RPC error enums
* Bump rust-web3 to latest master
* Use tagged release from crates.io
* Add check for `logs_bloom`
Since this is required by the runtime we want to enforce that an
incoming header has this.