Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


TBD

Abstract

Hyperledger Labs Blockchain Automation Framework(BAF) is a tool to deploy different DLT platforms automatically on a given Kubernetes cluster. BAF supports multi-cloud and multi-DLT deployments, and already supports HL Fabric, HL Besu, Quorum, R3 Corda. For HL Besu, currently only IBFT2 Consensus is supported by BAF. Task is to support the Clique consensus for Besu, so that BAF can be used to deploy and operate a HL Besu network with Clique consensus. This will also include upgrading BAF to support the latest stable Besu version.

Mentor and Mentee

Mentor: Sownak Roy 

Timezone: UK

...

Project repo: https://github.com/hyperledger-labs/blockchain-automation-framework

Deliverables

  •  Documented, ready-to-use Besu Clique consensus on BAF.
  •  Documented upgrade of Besu to latest stable on BAF.

Milestones

Eval 1:

  •  VScode extension(basic functionality) + Syntax highlighting.         (TBD)
  •  Implemented Rust server to receive and send JSON-RPC responses from VScode client.      (TBD)

Eval 2:

  •  Diagnostics for compiler warnings, errors and hints. (TBD)
  •  Tests and Documentation implemented for same. (TBD)

Eval 3:

  •  Basic hover implementation for variable types. (TBD)
  •  Tests and Documentation implemented for same. (TBD)

Eval 4:

  •  Extending hover implementation for function, struct, enum, events, built-ins documentation lookups. (TBD)
  •  Test and Documentation implemented for same. (TBD)

Timeline

WeekTask/PlanStatus
May 25 - May 29
June 23 - June 28Mentee intro with the mentor. I already communicated with the mentor(
Sean
SownakDone
June 1 - June
14Implement basic functionality of VScode extension. Syntax highlighting of Solidity language. Done
19

Set-up a small Besu network using local/AWS Kubernetes network using BAF.

InProgress
June 19 - July 24Setup a Besu network with clique consensus manually/locally using Besu documentation.Pending
July 24 - July 31

Create helmcharts that can be used to deploy Besu node with clique consensus

Pending
June 15 - June 28 Rust server for receiving the incoming requests from VScode clients.DoneJune 29 - July 5 Buffer period to complete the remaining work and co-op with difficulties during implementation.Done
July 6 - July 12(TBD)

(TBD)Complete tests and documentation of the Rust server impl.

Eval on July 10: Provide reports for first quarter to the program organisers.

Done

Pending

Eval completed

July 13 - July 26(TBD)(TBD)Work on implementing diagnostics. Prepare the backend to process incoming code.
Done
Pending
July 27 - August 9(TBD)(TBD)Work on diagnostics, fixing Range issues and fixing minor bugs.
Done
Pending
August 10 - August 16(TBD)(TBD)Buffer period to complete the remaining work and co-op with difficulties during implementation.
Done
Pending
August 17 - August 23(TBD)

(TBD)Complete tests and documentation of the diagnostics implementation.

Eval on August 21: Provide reports for the second quarter to the program organisers.

Done

Pending

Eval

completed

pending

August 24 - Sept 6(TBD)(TBD)Work on the hover feature. List out all possible grammar definitions and start implementing.
Done
Pending
Sept 7 - Sept 20(TBD)(TBD)Follow up on the work.
Done
Pending
Sept 21 - 27(TBD)

(TBD)Finished the basics of hover implementation. Added hover for variable definition and types.

Done
Pending
Sept 28 - Oct 4(TBD)

(TBD)Complete tests and documentation of the implementation.

Eval on Oct 2: Provide reports for third quarter to the program organisers.

Done

Pending

Eval

completed

pending

Oct 5 - Oct 18(TBD)

(TBD)Week1: Work on adding support for Function + Return-type + Function params hover.

Week2: Work on adding support for Emit token in hover.

Done
Pending
Oct 19 - Nov 1(TBD)

(TBD)Week1: Work on adding support for struct entries in hover.

Week2: Buffer period to follow up on the work.

Done
Pending
Nov 2 - Nov 8(TBD) (TBD)Used this week to work on hover implementation.
Done
Pending
Nov 9 - Nov 13(TBD)

(TBD)Time to complete remaining details and documentation.

Done

Pending

Eval

completed

Explanation

A language server is a program that communicates with the editor to provide different editing features for a programmer. The communication takes place in the form of IO buffers and JSON-RPC messages.

The client(extension) uses VScode API's to send queries in JSON-RPC format to the server. The server runs different processes(like file open, edit, hover) which respond to specific requests from client.

For Diagnostics info the server watches for changes in the file and compiles the edited code using Solang, the compiler info for the respective code is then formatted and returned back to the server as compiler errors, warnings and hints.

For Hovers the server first traverses the AST(syntax tree) resolved by the Solang compiler on the edited code. While traversing it creates a map containing line, column and messages for the respective tokens from the AST. This map is then used to map cursor positions on the client side(line, column) to return the respective hovers. Eg: If on client side the mouse is hovered over a variable 'a' of type uint256 at line no 10 and column 10. The server will look into the map and check for entries that are defined for line 10 and column 10. For variable 'a' the map has message 'uint256 a' which is then returned to the client.

The process flow of the same is shown below:

Image Removed

Methodology

pending


Methodology

I am following I followed the “Design-Code-Test-Document​” methodology.

My first step while developing any software is to design the process flow by understanding its inner workings the inner Architecture of Besu and BAF . During the initial mentorship, I along with my mentor did will be doing some planning of the implementation and set important milestones for same as represented in the schedule for the work(given above) for the respective feature. Once I develop each feature, I wrote testswill be writing Molecule Tests for the implementation to make sure whatever I wrote is working correctly. At the end of the tests, I documented its will be documenting their implementation. I used​ am using​ GIT​ for version control with reviews taking place on Github(Repo: https://github.com/hyperledger-labs/solangblockchain-automation-vscodeframework).

I believe in constantly sharing my progress with the mentor and the community, a ​weekly​ update regarding my work is shared with the mentor as a weekly meet. The VScode extension uses typescript for client side scripting and the server side implementation is in Rusttask will be improving my skills in Ansible, Molecule, Helm charts,  Docker, Kubernetes and Gitops.

The work has been interesting and I happy that me and my mentor have established good communication throughout the mentorship. You can usually find me discussing the project related queries on the solang the blockchain-automation-framework channel of Hyperledger Rocketchat.

...