Giter Club home page Giter Club logo

jonah's People

Contributors

therealdannzor avatar

Watchers

 avatar

jonah's Issues

Interactive console experience and account management

As a user I can create and read wallets, so that it can be done when the blockchain is active

Acceptance criteria

  • Add loop in main which waits for input from the user
  • Add functionality to create or read an account (dummy implementation)

Transaction assembly and validation

As a user I can send transactions which are created and validated locally, so that counterfeit or invalid transactions are rejected

Acceptance criteria

  • Transaction class extended with methods to validate and create objects that contains necessary info

Handle balance requests through CLI

As a user I can type commands in the chain CLI, so that my balance and the balance of other addresses successfully can be read

Acceptance criteria

  • Feature to check users own balance as address me
  • Feature to check another user balance with correct address
  • Fundamental error handling to cover common pitfalls

Explain the different sections of the project (draft)

This project should serve as a way to introduce the audience to the major components of a blockchain. It can be useful to understand the project from a helicopter perspective before going into the nitty gritty. Proposal of the different parts:

  1. core: contains the core protocol and orchestrating the blockchain network. Its purpose is to coordinate all the different parts of the network so a user can utilise it in a coherent way.

  2. currency: contains the cryptocurrency protocol used in the network. Its purpose is to solely be responsible for how value is measured between accounts and the configuration settings. Note that this is not the same as transferring currencies.

  3. account: contains the whole account management logic; including wallet generation/setup and assembly of transactions from the perspective of the user. Its purpose is to solely encapsulate all local actions of a node.

  4. block: contains the whole block lifecycle management (creation, assembly, verification, chain insertion). Its purpose is to coordinate control of read and write to blocks with other parts of the project.

  5. pool: contains the whole transfer mechanism lifecycle of adding a transaction to the local transaction pool to publishing it to the wider network. Its purpose is to coordinate access between block and account management as well as the currency protocol.

  6. miner: contains the whole propagation mechanism of blocks on the networks, i.e. the blocks to be appended to the chain. Its purpose is to manage the consensus mechanism (incl. any rewards) and controlling the flow of blocks in the network.

  7. p2p: contains the whole p2p mechanism on the network. Since this could be a project in itself it will be based on the KISS principle (as simple as possible). Its purpose is to coordinate communications between peers on the network.

Test: transactions between accounts

As a user I want to make sure that transactions between two accounts work, so that I dare to transfer my own crypto at some point

Acceptance criteria

  • Create a test which mocks two accounts and transfers funds between them

P2P between client and server with libp2p

As a user I can communicate with other peers, so that the blockchain can become distributed

Acceptance criteria

  • A blockchain server (validator) can respond to requests from a blockchain client (observer)

Create simple account list feature

As a user I want to be able to access my own address easily through the CLI, as well as other saved addresses, so that I can easily view them without having to open a plain text file

Acceptance criteria

  • List your main address with a CLI command account list
  • List a saved address with a CLI command account saved

Dependency: script to fetch jsoncpp

As of now this dependency is assumed to be in .static, unpacked and all. Instead, a user should easily be able to get this dependency locally as with libsodium.

Account management file I/O

As a user I can save a wallet to a key file locally and read it, so that it can be re-used multiple times

Acceptance criteria

  • Wallet creation saves a plain text file with a public-private key pair
  • Wallet initialisation loads a plain text file with a public-private key pair

Add unit tests to existing implementation

Currently, development is done through parallel hacky happy path testing in main.cpp. This is not sufficient for certain parts of the project despite that major refactoring may happen. We need unit tests for certain critical parts of the project.

Acceptance criteria:
Add full test coverage for

  • currency.cpp
  • blockchain.cpp
  • signer.cpp

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.