Skip to content

ArthoPacini/blockchaincpp

Repository files navigation

blockchaincpp

Simple Blockchain written in C++

just download it and run make https://www.gitpod.io/#https://github.com/ArthoPacini/blockchaincpp

#include <iostream>
#include "Blockchain.hpp"

int main()
{
    //Create blockchain with difficulty level 3 and 2 transactions per block max
    Blockchain blockchain(3, 2); 

    //add transactions
    //the block is mined when the transaction count reaches maximum value
    blockchain.push_transaction({1.0, "Joe", "Paul"});
    blockchain.push_transaction({3.14, "Paul", "Ruth"});
    blockchain.push_transaction({1.32, "Joe", "Ruth"});
    blockchain.push_transaction({5.52, "Steve", "Joe"});
    blockchain.push_transaction({6.7, "Ruth", "Steve"});
    blockchain.push_transaction({7.62, "Joe", "Steve"});

    //prints blockchain
    std::cout << blockchain.dump() << std::endl;

    //saves blockchain do disk
    blockchain.save();

    //validates the chain
    std::cout << "Is blockchain valid? " << blockchain.validate() << std::endl;

    //automatically load blockchain from disk
    Blockchain alternative;
}

Output:

Starting mining of block 0
Block 0 mined, nounce 1591, hash: 0007d778c421ef5b9e0787077e324007fb666cda31ec6fb41f9fd95fe83edfc9
Took 42 milliseconds to mine block
Starting mining of block 1
Block 1 mined, nounce 1741, hash: 00088682aea9f4b613aad17d49600a78359675667b125ff6f84a7f5ea81665cb
Took 45 milliseconds to mine block
Starting mining of block 2
Block 2 mined, nounce 6843, hash: 000c33bde216eb3b3df35b07eea2027b03280a0eca2282dd49bf705b9ad4ea5a
Took 177 milliseconds to mine block

{
    "blocks": [
        {
            "blockHash": "0007d778c421ef5b9e0787077e324007fb666cda31ec6fb41f9fd95fe83edfc9",
            "difficulty": 3,
            "index": 0,
            "maxTransactionCount": 2,
            "minedAt": "10/24/20 04:25:00",
            "nounce": 1591,
            "previousBlockHash": "81ddc8d248b2dccdd3fdd5e84f0cad62b08f2d10b57f9a831c13451e5c5c80a5",
            "transactions": [
                {
                    "amount": 0.0,
                    "receiverKey": "Genesis",
                    "senderKey": "Genesis",
                    "timestamp": "10/24/20 04:25:00"
                },
                {
                    "amount": 1.0,
                    "receiverKey": "Paul",
                    "senderKey": "Joe",
                    "timestamp": "10/24/20 04:25:00"
                }
            ]
        },
        {
            "blockHash": "00088682aea9f4b613aad17d49600a78359675667b125ff6f84a7f5ea81665cb",
            "difficulty": 3,
            "index": 1,
            "maxTransactionCount": 2,
            "minedAt": "10/24/20 04:25:00",
            "nounce": 1741,
            "previousBlockHash": "0007d778c421ef5b9e0787077e324007fb666cda31ec6fb41f9fd95fe83edfc9",
            "transactions": [
                {
                    "amount": 3.14,
                    "receiverKey": "Ruth",
                    "senderKey": "Paul",
                    "timestamp": "10/24/20 04:25:00"
                },
                {
                    "amount": 1.32,
                    "receiverKey": "Ruth",
                    "senderKey": "Joe",
                    "timestamp": "10/24/20 04:25:00"
                }
            ]
        },
        {
            "blockHash": "000c33bde216eb3b3df35b07eea2027b03280a0eca2282dd49bf705b9ad4ea5a",
            "difficulty": 3,
            "index": 2,
            "maxTransactionCount": 2,
            "minedAt": "10/24/20 04:25:00",
            "nounce": 6843,
            "previousBlockHash": "00088682aea9f4b613aad17d49600a78359675667b125ff6f84a7f5ea81665cb",
            "transactions": [
                {
                    "amount": 5.52,
                    "receiverKey": "Joe",
                    "senderKey": "Steve",
                    "timestamp": "10/24/20 04:25:00"
                },
                {
                    "amount": 6.7,
                    "receiverKey": "Steve",
                    "senderKey": "Ruth",
                    "timestamp": "10/24/20 04:25:00"
                }
            ]
        },
        {
            "blockHash": "",
            "difficulty": 3,
            "index": 3,
            "maxTransactionCount": 2,
            "minedAt": "not mined yet",
            "nounce": 0,
            "previousBlockHash": "000c33bde216eb3b3df35b07eea2027b03280a0eca2282dd49bf705b9ad4ea5a",
            "transactions": [
                {
                    "amount": 7.62,
                    "receiverKey": "Steve",
                    "senderKey": "Joe",
                    "timestamp": "10/24/20 04:25:00"
                }
            ]
        }
    ],
    "difficulty": 3,
    "maxTransactionsCount": 2
}
Is blockchain valid? 1

About

Simple Blockchain written in C++

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages