Git Product home page Git Product logo

lukchain's Introduction

About Me!

I'm Freddie Brown and I'm a CS Graduate from the University of Warwick. I am currently working on Rust projects such as stabilize. If you are interested in collaborating, clone the repo and make a PR! My main interests centre around Distributed Systems and Financial Computing. I'm also interested in how these intersect with other areas of technology, such as Machine Learning.

Projects

  • LukChain: Generalised Blockchain library
  • Sybl: Low-code Ensemble ML Platform making data science simple.
  • stabilize: This is a load balancer written in Rust using the QUIC protocol.
  • Bluefind: Dissertation project which investigated the use of P2P dissemintation of location dat using Bluetooth.

Technologies

  • Languages: Rust, C/C++, Java, Python, SQL, Verilog, JavaScript, PHP
  • Libraries: tokio, Actix, Keras, Pandas, Numpy, OpenMP, Pthread, VueJS, Intel Intrinsics
  • Other: FIX Messaging, Apache Kafka, MongoDB, Bluetooth, TCP/IP, QUIC, Git, LaTeX/BibTeX

Citations

  • CASTLEGUARD: Anonymised Data Streams with Guaranteed Differential Privacy; Alistair Robinson and Frederick Brown and Nathan Hall and Alex Jackson and Graham Kemp and Matthew Leeke; 18th IEEE International Conference on Dependable, Autonomic and Secure Computing (DASC 2020)

lukchain's People

Contributors

freddiebrown avatar

Stargazers

 avatar

Watchers

 avatar

Forkers

rust-chainblock

lukchain's Issues

Create multithreaded simulation of small network

Create simulation running with multiple threads. Each thread is a different participant in the blockchain. This simulation will have 1 miner and multiple users all connected. Each user will join the simulation and will send a join message to all nodes, as well as being given the current state of the blockchain. Each will send between 1-5 messages (some individual and some group) before finishing.

This will help to work out any bugs and will allow for a connection interface between participants to be developed.

Improve performance of program

Go through and improve the performance and efficiency of the Blockchain. This may include a number of performance upgrades:

  • Reduce the number of .clone() uses
  • Restructure code so fewer intermediate variables are used
  • Use other rust tricks to improve the performance
  • Implement HPC tricks to improve memory usage

Add heartbeat functionality

Currently not able to determine the health of a connection. This functionality should be added so the node knows if its connections are working, and whether to send a message to the lookup table to get more addresses for other nodes.

API for creating Events

Currently there is no way for a user to generate events. Such a way should be created where it adds a ProcessMessage with the created Event into the job queue to send. This should be done in an extensible way such that applications can be built on top of this. It should use a producer model.

Write container for sending messages over network

A container struct specifically for sending messages should be created. This should be sufficiently general that it will take any struct which implements serialise/deserialise. This struct should then be turned into JSON and have the number of bytes appended to the front of the message. This should be of the form 10|{...}, for example. This allows a socket to correctly read the correct number of bytes in.

This method allows easy conversion back into the correct types that are needed. A further step could be to create a further wrapper enum for any Structs that are to be sent over the interface. That might make it easier to convert them back into the correct structs using match statements.

Add more extensive tests and documentation

Currently there are a number of tests, but this number needs to be increased. There is a lot of behaviour which isn't well documented and tested so this should be improved.

generalise blockchain

Generalise the blockchain so it doesn't just store events, but also stores anything which implements the blockchain transaction trait.

Perform integration testing

Testing should be performed on a network to ensure it can send and receive messages, and that a miner can create blocks and distribute them, as well as all participants transmitting their blockchain state.

Change repo so blockchain is main part

Currently the point of the repo is for a blockchain based chat application. However, the project is now centred around the blockchain more than the chat aspect. The repo should be re-calibrated to reflect this. The current main.rs should be moved into an examples folder and the blockchain folder should be the root of src, with mod.rs becoming lib.rs. The name should also be changed to something more appropriate for the project

Reduce resending of messages

Currently events and blocks will bounce between nodes indefinitely. This should be changed so that there are controls around who messages are sent to and when they are relayed.

Add persistence to blockchain

Store data items in file so on startup the participant can pick up where they last left of. This requires a number of tasks:

  • When starting up, check for file containing information of node (RSA keys, blockchain file, id)
  • If no data, generate new credentials (better creation of id using RSA keys) and basic blockchain
  • When blockchain is expanded, the binary file should be updated to reflect this

Implement Chat functionality

With the newly implemented passable function, implement a chat functionality which will create Events and will send them to the outbound thread which will pass them onto other nodes. This will use the basic Data enum to define what is stored on the blockchain

Improve Cryptographic security of BlockChain

Currently there are issues with the blockchain, such as IDs and nonces aren't generated in the most secure way. This should change so that the complexity increases to make the blockchain more secure as a whole. The method should be more efficient than the way BitCoin performs mining, maybe something more akin to Ethereum.

To generated nonces and an ID, the RSA key pair should be used so its more individual for each network participant

Add better logging

Currently no logging apart from a few print statements, need to add full logging with debug statements

Improve network connectivity stability

Improve tolerance of network faults to workout if a stream is closed and to add stream timeouts. This could be acheived through exponential backoff.

Rust examples of checking the stream can be seen here

Update README.md

Update the README to reflect recent changes, such as how the CLI works and how config.toml should be structured.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.