Skip to content
This repository has been archived by the owner on Nov 6, 2020. It is now read-only.

Client refactoring #7038

Merged
merged 130 commits into from
Mar 3, 2018
Merged

Client refactoring #7038

merged 130 commits into from
Mar 3, 2018

Conversation

0x7CFE
Copy link
Contributor

@0x7CFE 0x7CFE commented Nov 13, 2017

Affects #6136.

The main idea is to decouple Importer from the Client. Also minor tweaks are to be performed to enhance code readability.

This PR is very much in progress.


This change is Reviewable

@0x7CFE 0x7CFE added A3-inprogress ⏳ Pull request is in progress. No review needed at this stage. M4-core ⛓ Core client code / Rust. labels Nov 13, 2017
@@ -19,7 +19,8 @@ use bigint::hash::H256;
use bytes::Bytes;
use header::BlockNumber;

/// Best block info.
/// Best block info. Best block is the block with highest combined difficulty
/// (usually the block with the highest block number). Sometimes refered as latest block.
Copy link
Contributor

@rphmeier rphmeier Nov 13, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

best block heuristic is really dependent on the consensus engine (although integrating that into the blockchain structure here is mostly a TODO). this new description is only applicable to the GHOST fork-choice rule

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should I rollback the comment entirely, or provide some extra text like this:

/// Contains information on a best block that is specific to the consensus engine. 
///
/// For GHOST fork-choice rule it would typically describe the block with highest 
/// combined difficulty (usually the block with the highest block number).
/// 
/// Sometimes refered as 'latest block'.

?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

text like that is fine. a couple nits, though: combined -> cumulative and the last line about sometimes being referred to as the latest block is correct, but those would be misuses of the term, so I'd recommend omitting that statement.

/// For example, auto-updater will disable client forever if there is a
/// hard fork registered on-chain that we don't have capability for.
/// When hard fork block rolls around, the client (if `update` is false)
/// knows it can't proceed further.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the fields here are not public. comments are great, but they should be //

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see no reason to enforce using //. In multiple places in our codebase we use // for private properties and structs.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

RLS provides hover hints for fields commented with /// only.

/// Whenever a transaction is executed by evm it's execution trace is stored
/// in trace database. Each trace has information, which contracts have been
/// touched, which have been created during the execution of transaction, and
/// which calls failed.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

multi-line docs should have a single line first, then a gap, and then the rest. it formats much more nicely on the generated docs

Copy link
Contributor Author

@0x7CFE 0x7CFE Nov 13, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've tried, but failed to describe the whole thing in one compact line for a header. Or should I reformat the very same text but with an extra blank line?

On the other hand it would not be wise to write meaningless first line that Captain Obvious would be proud of.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

an obvious line like "Block and transaction execution trace database" gives more information than the struct name while allowing for more information to be included later.

@5chdn 5chdn added this to the 1.9 milestone Nov 13, 2017
debris
debris previously approved these changes Nov 13, 2017
@0x7CFE 0x7CFE force-pushed the client_split branch 3 times, most recently from b91ec0c to a76f404 Compare November 15, 2017 07:06
@0x7CFE
Copy link
Contributor Author

0x7CFE commented Nov 15, 2017

OK, at this point most of import related data and some of the logic were moved to the Importer struct (that would be extracted to a separate source file somewhat later).

Right now I'm trying to move import_verified_blocks and I've faced the following problem: the import_verified_blocks method invokes Miner::chain_new_blocks method that accepts &MiningBlockChainClient as a parameter. Current implementor of the MiningBlockChainClient trait is the Client struct.

Unfortunately, I do not see an easy way to resolve the issue. We need either to rework the whole trait hierarchy, or to edit the import_verified_blocks.

@debris, @rphmeier, do you have something in mind on this issue?

@debris
Copy link
Collaborator

debris commented Nov 15, 2017

I opt for reworking the trait hierarchy. Especially MiningBlockChainClient. We can start with MiningBlockChainClient being passed to Miner::chain_new_blocks. Instead of it, we could pass only a structure which contains all data needed by a miner. I don't know how much work would it be, but to me it seems to be the cleanest solution. It could also positively impact our performance, cause currently we request the same data multiple times.

@tomusdrw
Copy link
Collaborator

@debris You don't know what data will be needed by Miner beforehand - you need to recover the signatures of transactions to figure out what account balances you need for instance.
That would be possible but would require that a lot of logic currently hapening in miner would need to be placed somewhere else.

Can you elaborate more on what's wrong with MiningBlockChainClient trait exactly? Is it just too fat?

@debris
Copy link
Collaborator

debris commented Nov 15, 2017

@tomusdrw you're right. It's not trivial.

Can you elaborate more on what's wrong with MiningBlockChainClient trait exactly? Is it just too fat?

Yes, I think that's the main issue now.

@0x7CFE
Copy link
Contributor Author

0x7CFE commented Nov 15, 2017

Can you elaborate more on what's wrong with MiningBlockChainClient trait exactly? Is it just too fat?

Well, since MiningBlockChainClient: BlockChainClient, implementor must provide all methods from both traits. So yeah, it's quite fat.

@0x7CFE
Copy link
Contributor Author

0x7CFE commented Nov 15, 2017

Here's complete list of client methods that are used by Miner::chain_new_blocks

From BlockChainClient:

fn best_block_header(&self) -> encoded::Header;
fn block(&self, id: BlockId) -> Option<encoded::Block>;
fn latest_nonce(&self, address: &Address) -> U256;
fn latest_balance(&self, address: &Address) -> U256;
fn chain_info(&self) -> BlockChainInfo;
fn call_contract(&self, id: BlockId, address: Address, data: Bytes) -> Result<Bytes, String>;
fn transaction_block(&self, id: TransactionId) -> Option<H256>;
fn registry_address(&self, name: String) -> Option<Address>;

From MiningBlockChainClient:

fn reopen_block(&self, block: ClosedBlock) -> OpenBlock;
fn prepare_open_block(&self, author: Address, gas_range_target: (U256, U256), extra_data: Bytes) -> OpenBlock;

Maybe we should create special trait that Importer would implement and delegate calls to the Client? But that's not the best solution, IMO.

@tomusdrw
Copy link
Collaborator

Fair enough, I though that the trait was separate.

IMHO we should duplicate methods in the MiningBlockChainClient (Importer) or extract a common method stub from both BlockchainClient and MiningBlockChainClient.

A blanket implementation might also work, but that needs to be checked in code.

@0x7CFE
Copy link
Contributor Author

0x7CFE commented Feb 23, 2018

Finally, trait hierarchy was modified according to @tomusdrw comment: #7038 (review)

Currently, Miner API and implementation uses only aggregate traits like BlockChain (which is actually ChainInfo + BlockInfo + TransactionInfo) or SealedBlockImporter ( which is ImportSealedBlock + BroadcastProposalBlock) insteaad of "elementary" feature traits. That way at a later date we may move methods from elementary traits to aggregate ones without breaking code.

Now it looks like this:

/// New chain head event. Restart mining operation.
fn update_sealing<C>(&self, chain: &C)
    where C: AccountData + BlockChain + RegistryInfo 
          + CallContract + BlockProducer + SealedBlockImporter;

/// Submit `seal` as a valid solution for the header of `pow_hash`.
/// Will check the seal, but not actually insert the block into the chain.
fn submit_seal<C: SealedBlockImporter>(&self, chain: &C, pow_hash: H256, seal: Vec<Bytes>) -> Result<(), Error>;

/// Get the sealing work package and if `Some`, apply some transform.
fn map_sealing_work<C, F, T>(&self, client: &C, f: F) -> Option<T>
    where C: AccountData + BlockChain + BlockProducer + CallContract,
          F: FnOnce(&ClosedBlock) -> T,
          Self: Sized;

In my opinion it's good that just by looking at a method declaration you already may have an idea what it does and what permissions it require.

However, there are some issues remaining. And most of them are due to wide use of trait objects in the codebase:

  • We could not merge Call and CallContract traits, since former has an associated type State whereas latter is used a a bound of BlockChainClient trait which, in turn, is used in a trait object pattern.

  • There are two traits ImportBlock and SealedBlockImporter that could not be merged for the same reason. But we would probably not want to do that, since implications of these traits are different. For the sake of consistency ImportBlock should be renamed to BlockImporter.

  • ImportBlock is used as a bound for BlockChainClient and not MiningBlockChainClient which is kinda strange. And it's not a trivial task to move import_block to MiningBlockChainClient because of existing &BlockChainClient references across the codebase. This may be done eventually, but in a separate PR.

  • Some traits like RegistryInfo and ScheduleInfo indicate a leaking abstraction somewhere and it need to be reworked again. Looks like such methods do not need to be in traits in the first place.

Aside of that PR looks ready for me. All tests pass.

@debris debris mentioned this pull request Feb 23, 2018
# Conflicts:
#	ethcore/src/client/client.rs
#	ethcore/src/miner/miner.rs
@0x7CFE 0x7CFE added A0-pleasereview 🤓 Pull request needs code review. and removed A3-inprogress ⏳ Pull request is in progress. No review needed at this stage. labels Feb 24, 2018
@0x7CFE
Copy link
Contributor Author

0x7CFE commented Feb 24, 2018

Even if review would be successful I do not recommend merging it, before I run some tests on Aura and other chains.

@0x7CFE
Copy link
Contributor Author

0x7CFE commented Feb 27, 2018

OK, I performed tests using Aura as well as the Foundation chains. Looks like all is working as expected, so we may probably consider this branch safe to merge when review would be completed.

@5chdn 5chdn modified the milestones: 1.10, 1.11, 1.12 Mar 1, 2018
Copy link
Collaborator

@debris debris left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This pr is huge, but generally, it looks good to me

Err(e) => {
warn!(target: "client", "Failed to generate transition proof for block {}: {}", hash, e);
warn!(target: "client", "Snapshots produced by this client may be incomplete");
Vec::new()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if client failed to generate proof, why do we insert an invalid proof (Vec::new()) into chain? line 644

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nvm. I see that this code hasn't been changed in this pr

Copy link
Contributor

@rphmeier rphmeier Mar 2, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

to answer the original question, we could also bail and return an error. But this code-path indicates that either the validator contract or the local database are broken so whatever we do the chain is going to break at some point.

vec![],
vec![],
vec![],
vec![block.rlp_bytes()],
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should these values be empty vectors?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nvm, I see that it hasn't been changed in this pr


impl RegistryInfo for Client {
fn registry_address(&self, name: String, block: BlockId) -> Option<Address> {
let address = match self.registrar_address {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

latest version of rust supports ? for options, so you can write:

let address = self.registrar_address?;

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, good point.

@5chdn
Copy link
Contributor

5chdn commented Mar 1, 2018

@debris could you label it accordingly? Is this a "looksgood" or "mustngrumble"? Or does this require additional work?

@5chdn 5chdn added the P5-sometimesoon 🌲 Issue is worth doing soon. label Mar 1, 2018
@debris debris added A8-looksgood 🦄 Pull request is reviewed well. and removed A0-pleasereview 🤓 Pull request needs code review. labels Mar 2, 2018
@debris
Copy link
Collaborator

debris commented Mar 2, 2018

looksgood and it requires additional review

}

/// Provides various blockchain information, like block header, chain state etc.
pub trait BlockChain: ChainInfo + BlockInfo + TransactionInfo /* + StateClient */ {}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the StateClient bound desired? Why is it commented?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nope, it's an artifact. Previously I thought, that BlockChain should bound on StateClient but it wasn't the case.

self.state_db.read().boxed_clone_canon(&header.hash()),
header.state_root(),
self.engine.account_start_nonce(header.number()),
self.factories.clone())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

style: close paren should go on following line, with one level less indentation

@debris debris merged commit 9d7d6f7 into master Mar 3, 2018
@debris debris deleted the client_split branch March 3, 2018 17:42
folsen pushed a commit that referenced this pull request Mar 5, 2018
* Improves `BestBlock` comment

* Improves `TraceDB` comment

* Improves `journaldb::Algorithm` comment.

Probably the whole enum should be renamed to `Strategy` or something alike.

* Comments some of the `Client`'s fields

* Deglobs client imports

* Fixes comments

* Extracts `import_lock` to `Importer` struct

* Extracts `verifier` to `Importer` struct

* Extracts `block_queue` to `Importer` struct

* Extracts `miner` to `Importer` struct

* Extracts `ancient_verifier` to `Importer` struct

* Extracts `rng` to `Importer` struct

* Extracts `import_old_block` to `Importer` struct

* Adds `Nonce` trait

* Adds `Balance` trait

* Adds `ChainInfo` trait

* Fixes imports for tests using `chain_info` method

* Adds `BlockInfo` trait

* Adds more `ChainInfo` imports

* Adds `BlockInfo` imports

* Adds `ReopenBlock` trait

* Adds `PrepareOpenBlock` trait

* Fixes import in tests

* Adds `CallContract` trait

* Fixes imports in tests using `call_contract` method

* Adds `TransactionInfo` trait

* Adds `RegistryInfo` trait

* Fixes imports in tests using `registry_address` method

* Adds `ScheduleInfo` trait

* Adds `ImportSealedBlock` trait

* Fixes imports in test using `import_sealed_block` method

* Adds `BroadcastProposalBlock` trait

* Migrates `Miner` to static dispatch

* Fixes tests

* Moves `calculate_enacted_retracted` to `Importer`

* Moves import-related methods to `Importer`

* Removes redundant `import_old_block` wrapper

* Extracts `import_block*` into separate trait

* Fixes tests

* Handles `Pending` in `LightFetch`

* Handles `Pending` in filters

* Handles `Pending` in `ParityClient`

* Handles `Pending` in `EthClient`

* Removes `BlockId::Pending`, partly refactors dependent code

* Adds `StateInfo` trait

* Exports `StateOrBlock` and `BlockChain` types from `client` module

* Refactors `balance` RPC using generic API

* Refactors `storage_at` RPC using generic API

* Makes `MinerService::pending_state`'s return type dynamic

* Adds `StateOrBlock` and `BlockChain` types

* Adds impl of `client::BlockChain` for `Client`

* Exports `StateInfo` trait from `client` module

* Missing `self` use

To be fixed up to "Adds impl of `client::BlockChain` for `Client`"

* Adds `number_to_id` and refactors dependent RPC methods

* Refactors `code_at` using generic API

* Adds `StateClient` trait

* Refactors RPC to use `StateClient` trait

* Reverts `client::BlockChain` trait stuff, refactors methods to accept `StateOrBlock`

* Refactors TestClient

* Adds helper function `block_number_to_id`

* Uses `block_number_to_id` instead of local function

* Handles `Pending` in `list_accounts` and `list_storage_keys`

* Attempt to use associated types for state instead of trait objects

* Simplifies `state_at_beginning`

* Extracts `call` and `call_many` into separate trait

* Refactors `build_last_hashes` to accept reference

* Exports `Call` type from the module

* Refactors `call` and `call_many` to accept state and header

* Exports `state_at` in `StateClient`

* Exports `pending_block_header` from `MinerService`

* Refactors RPC `call` method using new API

* Adds missing parentheses

* Refactors `parity::call` to use new call API

* Update .gitlab-ci.yml

fix gitlab lint

* Fixes error handling

* Refactors `traces::call` and `call_many` to use new call API

* Refactors `call_contract`

* Refactors `block_header`

* Refactors internal RPC method `block`

* Moves `estimate_gas` to `Call` trait, refactors parameters

* Refactors `estimate_gas` in RPC

* Refactors `uncle`

* Refactors RPC `transaction`

* Covers missing branches

* Makes it all compile, fixes compiler grumbles

* Adds casts in `blockchain` module

* Fixes `PendingBlock` tests, work on `MinerService`

* Adds test stubs for StateClient and EngineInfo

* Makes `state_db` public

* Adds missing impls for `TestBlockChainClient`

* Adds trait documentation

* Adds missing docs to the `state_db` module

* Fixes trivial compilation errors

* Moves `code_hash` method to a `BlockInfo` trait

* Refactors `Verifier` to be generic over client

* Refactors `TransactionFilter` to be generic over client

* Refactors `Miner` and `Client` to reflect changes in verifier and txfilter API

* Moves `ServiceTransactionChecker` back to `ethcore`

* Fixes trait bounds in `Miner` API

* Fixes `Client`

* Fixes lifetime bound in `FullFamilyParams`

* Adds comments to `FullFamilyParams`

* Fixes imports in `ethcore`

* Fixes BlockNumber handling in `code_at` and `replay_block_transactions`

* fix compile issues

* First step to redundant trait merge

* Fixes compilation error in RPC tests

* Adds mock `State` as a stub for `TestClient`

* Handles `StateOrBlock::State` in `TestBlockChainClient::balance`

* Fixes `transaction_count` RPC

* Fixes `transaction_count`

* Moves `service_transaction.json` to the `contracts` subfolder

* Fixes compilation errors in tests

* Refactors client to use `AccountData`

* Refactors client to use `BlockChain`

* Refactors miner to use aggregate traits

* Adds `SealedBlockImporter` trait

* Refactors miner to use `SealedBlockImporter` trait

* Removes unused imports

* Simplifies `RegistryInfo::registry_address`

* Fixes indentation

* Removes commented out trait bound
debris pushed a commit that referenced this pull request Mar 12, 2018
* Echo back the message hash of a ping in the pong request

* Fixed broken link in README (#8012)

* Fixed broken link in README

* Updated wiki link

* [hardware wallet] sleeping -> pollling (#8018)

* Use polling, enable missing doc warnings & docs

* make try_connect_polling() a free function

* `Client` refactoring (#7038)

* Improves `BestBlock` comment

* Improves `TraceDB` comment

* Improves `journaldb::Algorithm` comment.

Probably the whole enum should be renamed to `Strategy` or something alike.

* Comments some of the `Client`'s fields

* Deglobs client imports

* Fixes comments

* Extracts `import_lock` to `Importer` struct

* Extracts `verifier` to `Importer` struct

* Extracts `block_queue` to `Importer` struct

* Extracts `miner` to `Importer` struct

* Extracts `ancient_verifier` to `Importer` struct

* Extracts `rng` to `Importer` struct

* Extracts `import_old_block` to `Importer` struct

* Adds `Nonce` trait

* Adds `Balance` trait

* Adds `ChainInfo` trait

* Fixes imports for tests using `chain_info` method

* Adds `BlockInfo` trait

* Adds more `ChainInfo` imports

* Adds `BlockInfo` imports

* Adds `ReopenBlock` trait

* Adds `PrepareOpenBlock` trait

* Fixes import in tests

* Adds `CallContract` trait

* Fixes imports in tests using `call_contract` method

* Adds `TransactionInfo` trait

* Adds `RegistryInfo` trait

* Fixes imports in tests using `registry_address` method

* Adds `ScheduleInfo` trait

* Adds `ImportSealedBlock` trait

* Fixes imports in test using `import_sealed_block` method

* Adds `BroadcastProposalBlock` trait

* Migrates `Miner` to static dispatch

* Fixes tests

* Moves `calculate_enacted_retracted` to `Importer`

* Moves import-related methods to `Importer`

* Removes redundant `import_old_block` wrapper

* Extracts `import_block*` into separate trait

* Fixes tests

* Handles `Pending` in `LightFetch`

* Handles `Pending` in filters

* Handles `Pending` in `ParityClient`

* Handles `Pending` in `EthClient`

* Removes `BlockId::Pending`, partly refactors dependent code

* Adds `StateInfo` trait

* Exports `StateOrBlock` and `BlockChain` types from `client` module

* Refactors `balance` RPC using generic API

* Refactors `storage_at` RPC using generic API

* Makes `MinerService::pending_state`'s return type dynamic

* Adds `StateOrBlock` and `BlockChain` types

* Adds impl of `client::BlockChain` for `Client`

* Exports `StateInfo` trait from `client` module

* Missing `self` use

To be fixed up to "Adds impl of `client::BlockChain` for `Client`"

* Adds `number_to_id` and refactors dependent RPC methods

* Refactors `code_at` using generic API

* Adds `StateClient` trait

* Refactors RPC to use `StateClient` trait

* Reverts `client::BlockChain` trait stuff, refactors methods to accept `StateOrBlock`

* Refactors TestClient

* Adds helper function `block_number_to_id`

* Uses `block_number_to_id` instead of local function

* Handles `Pending` in `list_accounts` and `list_storage_keys`

* Attempt to use associated types for state instead of trait objects

* Simplifies `state_at_beginning`

* Extracts `call` and `call_many` into separate trait

* Refactors `build_last_hashes` to accept reference

* Exports `Call` type from the module

* Refactors `call` and `call_many` to accept state and header

* Exports `state_at` in `StateClient`

* Exports `pending_block_header` from `MinerService`

* Refactors RPC `call` method using new API

* Adds missing parentheses

* Refactors `parity::call` to use new call API

* Update .gitlab-ci.yml

fix gitlab lint

* Fixes error handling

* Refactors `traces::call` and `call_many` to use new call API

* Refactors `call_contract`

* Refactors `block_header`

* Refactors internal RPC method `block`

* Moves `estimate_gas` to `Call` trait, refactors parameters

* Refactors `estimate_gas` in RPC

* Refactors `uncle`

* Refactors RPC `transaction`

* Covers missing branches

* Makes it all compile, fixes compiler grumbles

* Adds casts in `blockchain` module

* Fixes `PendingBlock` tests, work on `MinerService`

* Adds test stubs for StateClient and EngineInfo

* Makes `state_db` public

* Adds missing impls for `TestBlockChainClient`

* Adds trait documentation

* Adds missing docs to the `state_db` module

* Fixes trivial compilation errors

* Moves `code_hash` method to a `BlockInfo` trait

* Refactors `Verifier` to be generic over client

* Refactors `TransactionFilter` to be generic over client

* Refactors `Miner` and `Client` to reflect changes in verifier and txfilter API

* Moves `ServiceTransactionChecker` back to `ethcore`

* Fixes trait bounds in `Miner` API

* Fixes `Client`

* Fixes lifetime bound in `FullFamilyParams`

* Adds comments to `FullFamilyParams`

* Fixes imports in `ethcore`

* Fixes BlockNumber handling in `code_at` and `replay_block_transactions`

* fix compile issues

* First step to redundant trait merge

* Fixes compilation error in RPC tests

* Adds mock `State` as a stub for `TestClient`

* Handles `StateOrBlock::State` in `TestBlockChainClient::balance`

* Fixes `transaction_count` RPC

* Fixes `transaction_count`

* Moves `service_transaction.json` to the `contracts` subfolder

* Fixes compilation errors in tests

* Refactors client to use `AccountData`

* Refactors client to use `BlockChain`

* Refactors miner to use aggregate traits

* Adds `SealedBlockImporter` trait

* Refactors miner to use `SealedBlockImporter` trait

* Removes unused imports

* Simplifies `RegistryInfo::registry_address`

* Fixes indentation

* Removes commented out trait bound

* Bump master to 1.11.0 (#8021)

* Bump master to 1.11.0

* Bump price-info

* Bump mac installer version

* Fix gitlab builds

*  Add MCIP-6 Byzyantium transition to Musicoin spec (#7841)

* Add test chain spec for musicoin byzantium testnet

* Add MCIP-6 Byzyantium transition to Musicoin spec

* Update mcip6_byz.json

* ethcore: update musicoin byzantium block number

* ethcore: update musicoin byzantium block number

* ethcore: update musicoin bootnodes

* Update musicoin.json

* Update musicoin.json

* More bootnodes.

* prelude to the block module cleanup (#8025)

* prelude to block cleanup

* fixed tests

* fix cache & snapcraft CI build (#8052)

after successful testing it is necessary to port in a ```beta``` and ```stable```

* Update refs to shell (#8051)

* Abstract devp2p (#8048)

* Rename ethcore-network to ethcore-network-devp2p

* Fix typo

* Extract generic traits into util/network

* Simplify util/network

* Fix devp2p tests

* Remove old feature

* Fix RPC tests

* Change port because testing environment didn't like those ports
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
A8-looksgood 🦄 Pull request is reviewed well. M4-core ⛓ Core client code / Rust. P5-sometimesoon 🌲 Issue is worth doing soon.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants