# Week 4
## Recap
This week I spent the majority of my time looking into the design of the Besu codebase. There was a lot of different portions to cover so I started by just getting an understanding of how different pieces the client are structured and organized. After learning the layout I found it much easier to locate specific files dealing with the implementation of any given EL client related concept. After researching a lot on the Discovery V5 Protocol last week I decided to check out how Besu had implemented the protocol. I looked into ways that I could build on top of it to implement the Portal Wire Protocol to integrate a Portal Client into Besu. Afterwards I began looking at the different utilities and plug-ins that Besu uses to find what is available to me when I begin developing the Portal Client. As well as looking at Besu implementation in Java, I also had to brush up on some newer Java tools as well to understand their benefit and use. Hopefully so that I can also use those tools in the Portal Client implementation. Outside of learning parts of the Besu codebase necessary for developing a Portal Client I did some more learning about Portal Client specifics. Because I am decided on my project idea I also began drafting my project proposal, I mainly focused on setting up my roadmap in order to determine the end deliverable and its feasibility.
## Learning
Most of my learning was more so hands on and done through reading Besu's Java code. Once I had set up the proper development environment I found it effective to click through different definitions and understand different class use cases. The Hyperledger Besu documentation was another valueable resource. The built-in Java docs for the Java library code was also helpful when dealing with a new concept.
### Concepts
#### Besu Codebase
I started by checking out the Hyperledger Besu documentation to see if there were any good places to start. I decided it would be best if I went through the whole codebase top-down to get a high level understanding of the different moving parts. This way even if I did not know the exact details of how something worked I could at least be confident I would know where to find the code if I needed to learn it. After learning the layout I set up a proper development environment that allowed me to interact with class and method definitions. From there I looked for specific implemetation details regarding Discovery V5 Protocol, EVM design and JSON-RPC.
##### Resources
1. https://besu.hyperledger.org/
2. https://wiki.hyperledger.org/display/BESU/Hyperledger+Besu
3. https://github.com/hyperledger/besu
#### Transactions
I decided that because I am going to be working on the Besu codebase I should get a feel for the development process. I went through the posted issues and found a good first issue to get a feel for working on Besu. It dealt with transactions and the Besu implementation of pending transactions. So in order to be able to make any changes I had to get a really solid understanding of how it was designed. I learned how pending transactions are handled and the different classes involved with the whole process. I am now at the point where I am coming up with a solution to the proposed issue and will submit my solution when I am confident it is tested and working properly. That way I can also get a good introduction to the Besu development process so I am familiar with it when I begin making larger contributions.
##### Resources
1. https://github.com/hyperledger/besu/issues/4692
#### Java Library
Although I have past experience working with Java to develop an application, there are quite a few newer features that I have not had the chance to explore. A lot of which are used throughout the Besu codebase as I learned when working on the good first issue. I spent a fair amount of time searching through different library functions and mulit-threaded features that I had not encountered before. This way I should have a good idea of their use so that I can also use them in the Portal Client to maximize performance.
##### Resources
1. https://docs.oracle.com/javase/8/docs/api/
## Week 5 Plan
Going into Week 5 my plan is to continue understanding the Besu codebase, as well as hopefully making a first contribution as the hands on experience of learning with an intent to add more code has been really effective. Otherwise my main focus is to complete my project proposal in time for presenting the following week as I unfortunately was not able to make it to EthCC.