`geth/` packages require refactoring as they are tightly coupled, hard to maintain and extend. In this idea, we would like to fix all these issues and make status-go architecture easier to work with for new core members and external contributors.
## Swarm Participants
- Lead Contributor: @adambabik
- Contributors:
-@dshulyak (20h/week)
-@adriacidre
- Tester/Evaluator: TBD
## Product Overview
We have a bunch of problems related to the `geth/` packages:
*`NodeManager` contains a lot of complexity, especially related to starting and stopping a node,
*`geth/account` unnecessarily depends on packages like `geth/rpc`,
* decouple `geth/transactions` from `geth/account`,
* remove huge, unnecessary interfaces,
* get rid of `geth/common` package.
In this idea, our goal is to come up with a better architecture design for these packages, removing unnecessary dependencies and huge interfaces. Overall, the whole repo will be easier to browse through for audit companies and external contributors.
### Product Description
It does not add any new features from the user perspective but it's a part of making status-go better tested, easier to extend and reason about, also by external contributors.
### Requirements & Dependencies
All existing tests should pass. If we need to change the interface in `library.go`, we need to communicate that and work with status-react team to figure out the best way to do it.
### Minimum Viable Product
Goal Date: 2018-02-02
Description: Minimal implementation of `Node` that can be started and stopped and an RPC client can be connected to it. It should be preceded with code examples how the new interface of `Node` will look like.
### Iteration 1
Goal Date: 2018-02-09
Description: The rest of the `Node` features is implemented.
`common.NodeManager` interface and all its mocks have to be removed from status-go. This interface is too large and is not useful at all.
### Iteration 5: `geth/common` package removal
Goal Date: 2018-04-06
Description:
`get/common` package contains everything. In this iteration, the goal is to remove it complete or at least move most of the functions to appropriate packages.