From 44a11a0cd1126ff12ec5d27966e8bea38b183b57 Mon Sep 17 00:00:00 2001 From: Ajay Kumar <87293689+ajaykumargdr@users.noreply.github.com> Date: Sun, 18 Jun 2023 22:18:26 +0530 Subject: [PATCH] blockchain implementaion-ajaykumar --- Ajay Kumar Block Chain/block.cpp | 40 ++++++++++++ Ajay Kumar Block Chain/block.h | 30 +++++++++ Ajay Kumar Block Chain/blockchain.cpp | 83 +++++++++++++++++++++++++ Ajay Kumar Block Chain/blockchain.h | 36 +++++++++++ Ajay Kumar Block Chain/main.cpp | 61 ++++++++++++++++++ Ajay Kumar Block Chain/main.exe | Bin 0 -> 221715 bytes Ajay Kumar Block Chain/transaction.cpp | 17 +++++ Ajay Kumar Block Chain/transaction.h | 26 ++++++++ README.md | 19 ++++++ Security Implication-Report.md | 27 ++++++++ 10 files changed, 339 insertions(+) create mode 100644 Ajay Kumar Block Chain/block.cpp create mode 100644 Ajay Kumar Block Chain/block.h create mode 100644 Ajay Kumar Block Chain/blockchain.cpp create mode 100644 Ajay Kumar Block Chain/blockchain.h create mode 100644 Ajay Kumar Block Chain/main.cpp create mode 100644 Ajay Kumar Block Chain/main.exe create mode 100644 Ajay Kumar Block Chain/transaction.cpp create mode 100644 Ajay Kumar Block Chain/transaction.h create mode 100644 README.md create mode 100644 Security Implication-Report.md diff --git a/Ajay Kumar Block Chain/block.cpp b/Ajay Kumar Block Chain/block.cpp new file mode 100644 index 0000000..ed4daf5 --- /dev/null +++ b/Ajay Kumar Block Chain/block.cpp @@ -0,0 +1,40 @@ +#include "block.h" + +Block::Block(std::string _preBlockHash,std::list _transactionList) +{ + this->preBlockHash = _preBlockHash; + this->transactionList = _transactionList; + this->blockHash= generateHash(); +} + +std::string Block::generateHash() +{ + std::string message = preBlockHash; + + // Fetching transaction data + for(Transaction transaction: transactionList) + { + message += transaction.toString(); + } + + // Hashing the message + + std::hash hasher; + + return std::to_string(hasher(message)); +} + +std::string Block::getHash() +{ + return (std::string)this->blockHash; +} + +std::string Block::getPreHash() +{ + return this->preBlockHash; +} + +std::list Block::getTransactionList() +{ + return this->transactionList; +} diff --git a/Ajay Kumar Block Chain/block.h b/Ajay Kumar Block Chain/block.h new file mode 100644 index 0000000..dae5e2c --- /dev/null +++ b/Ajay Kumar Block Chain/block.h @@ -0,0 +1,30 @@ +#ifndef BLOCK_H +#define BLOCK_H +#include +// #include +#include +#include +#include "transaction.h" + +class Block +{ +private: + std::string blockHash; + std::string preBlockHash; + std::list transactionList; // linked list representation + +public: + + // Constructor + Block(std::string _preBlockHash,std::list _transactionList); + + // SHA256 Hashing + std::string generateHash(); + + // Getter methods + std::string getHash(); + std::string getPreHash(); + std::list getTransactionList(); +}; + +#endif \ No newline at end of file diff --git a/Ajay Kumar Block Chain/blockchain.cpp b/Ajay Kumar Block Chain/blockchain.cpp new file mode 100644 index 0000000..7617bed --- /dev/null +++ b/Ajay Kumar Block Chain/blockchain.cpp @@ -0,0 +1,83 @@ +#include "blockchain.h" + +void BlockChain::createGenisisBlock() +{ + // Genesis block dummy transaction data + std::list transactionList = + { + // senderId, receiverId, amount + Transaction("Genisis", "Genisis", 0) + }; + + // previous block hash, current transactions + chain.push_back(Block("0", transactionList)); +} + +BlockChain::BlockChain() +{ + createGenisisBlock(); +} + +void BlockChain::addBlock(std::list transaction) +{ + chain.push_back(Block(getLatestBlock().getHash(), transaction)); +} + +std::vector BlockChain::getChain() +{ + return chain; +} + +Block BlockChain::getLatestBlock() +{ + return chain[chain.size()-1]; +} + +int BlockChain::isChainValid() +{ + if(chain[0].getHash() != chain[0].generateHash()) + { + return 0; + } + + for(int i=1; i +#include +#include +#include "block.h" +#include "transaction.h" + +class BlockChain{ + +private: + + std::vector chain; + void createGenisisBlock(); + +public: + // constructor + BlockChain(); + + // new block insertion + void addBlock(std::list transaction); + + // getters + std::vector getChain(); + Block getLatestBlock(); + + // validation + int isChainValid(); + void validationReport(); + + // printing + void printChain(); +}; + +#endif \ No newline at end of file diff --git a/Ajay Kumar Block Chain/main.cpp b/Ajay Kumar Block Chain/main.cpp new file mode 100644 index 0000000..1db5553 --- /dev/null +++ b/Ajay Kumar Block Chain/main.cpp @@ -0,0 +1,61 @@ +#include +#include +#include "transaction.h" +#include "block.h" +#include "blockchain.h" + +int main(){ + + BlockChain blockChain; + + // New list of transactions + std::list transaction1= + { + Transaction("User1","User2",2000), + Transaction("User2","User3",1500), + Transaction("User3","User4",2700) + }; + + // Add new Block + blockChain.addBlock(transaction1); + + // another list + std::list transaction2= + { + Transaction("User1","User2",4000), + Transaction("User2","User3",8600), + Transaction("User3","User4",7300) + }; + blockChain.addBlock(transaction2); + + std::list transaction3= + { + Transaction("User4","User5",8000), + Transaction("User4","User6",2500), + Transaction("User4","User7",6300) + }; + + std::list transaction4= + { + Transaction("User1","User2",6000), + Transaction("User2","User3",3500), + Transaction("User3","User4",4500) + }; + + std::list transaction5= + { + Transaction("User1","User2",1000), + Transaction("User2","User3",9000), + Transaction("User3","User4",2300) + }; + + // adding blocks + blockChain.addBlock(transaction3); + blockChain.addBlock(transaction4); + blockChain.addBlock(transaction5); + + blockChain.printChain(); + blockChain.validationReport(); + + return 0; +} \ No newline at end of file diff --git a/Ajay Kumar Block Chain/main.exe b/Ajay Kumar Block Chain/main.exe new file mode 100644 index 0000000000000000000000000000000000000000..fec43042b251865bb57c3aa6b805660aee857aec GIT binary patch literal 221715 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 = senderKey; + this->receiverKey = receiverKey; + this->amount = amount; + this->timestamp = time(nullptr); +} + +std::string Transaction::toString() +{ + return senderKey +" "+ receiverKey+" "+ + std::to_string(amount)+" "+ std::to_string(timestamp); +} \ No newline at end of file diff --git a/Ajay Kumar Block Chain/transaction.h b/Ajay Kumar Block Chain/transaction.h new file mode 100644 index 0000000..dc3352d --- /dev/null +++ b/Ajay Kumar Block Chain/transaction.h @@ -0,0 +1,26 @@ +#ifndef TRANSACTION_H +#define TRANSACTION_H + +#include +#include +#include + +class Transaction +{ +private: + std::string senderKey; + std::string receiverKey; + double amount; + time_t timestamp; + +public: + + // Constructors + Transaction(); + Transaction(std::string _senderKey, std::string _receiverKey, double _amount); + + // convert transaction data to string (for hashing purpose) + std::string toString(); +}; + +#endif \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..85ae8de --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +# Block Chain +A blockchain is a decentralized and immutable digital ledger that records transactions across multiple computers. It ensures transparency, security, and trust in financial transactions by linking blocks of data together in a sequential and cryptographically secure manner. + +# Instructions to compile and run the code + +This project is written in C++ and requires Mingw C/C++ compiler to compile and run the code. + +## Installation + +1. Downlode and install MinGW compiler from the internet +2. Add `C:\MinGW\bin` path to the system environment variable `PATH` + +## Building and Running the Project + +1. Open the command prompt (CMD) or terminal. +2. Navigate to the project folder using the `cd` command. + For Example: `cd /d "D:\Ajay Kumar Block Chain"` +3. To compile the code, run the following command:`g++ -o main main.cpp block.cpp blockChain.cpp transaction.cpp` +4. Once the compilation is successful, you can run the project by executing the generated executable `main` file. diff --git a/Security Implication-Report.md b/Security Implication-Report.md new file mode 100644 index 0000000..82626a8 --- /dev/null +++ b/Security Implication-Report.md @@ -0,0 +1,27 @@ +# Security Implications of Using Blockchain for Financial Transaction + +Blockchain technology has gained significant attention for its potential to revolutionize financial transactions. However, it is essential to consider the security implications associated with its implementation. This report explores key security considerations when utilizing blockchain for financial transactions. + +## Data Integrity and Immutability + +One of the fundamental security benefits of blockchain technology is its ability to ensure data integrity and immutability. Once a transaction is recorded on the blockchain, it becomes nearly impossible to modify or tamper with the data. This feature mitigates the risk of fraudulent activities, unauthorized alterations, and data tampering, providing a reliable and trustworthy record of financial transactions. Furthermore, the provided code incorporates the use of timestamps for each transaction, thereby enhancing the uniqueness of the resulting hash values. + +## Distributed Consensus Mechanisms + +Blockchain networks rely on distributed consensus mechanisms to validate and confirm transactions. Consensus algorithms, such as Proof of Work (PoW) or Proof of Stake (PoS), ensure agreement among network participants on the validity of transactions. However, it's crucial to evaluate the security implications of the chosen consensus mechanism, as vulnerabilities or attacks targeting the consensus algorithm can compromise the integrity of financial transactions. + +## Smart Contract Security + +Smart contracts automate and enforce the terms of financial transactions on the blockchain. While they offer efficiency and transparency, they can introduce security risks. Vulnerabilities in smart contract code can lead to financial losses or unauthorized access. Thorough code audits, comprehensive testing, and adherence to secure coding practices are necessary to mitigate these risks and ensure the integrity of financial transactions. + +## Privacy and Confidentiality + +Privacy considerations arise when using blockchain for financial transactions. While blockchain provides transparency by design, protecting sensitive financial information is crucial. Techniques like encryption and zero-knowledge proofs can enhance privacy; however, finding the right balance between transparency and confidentiality remains a challenge. Organizations must carefully evaluate privacy requirements and implement appropriate measures to safeguard sensitive financial data. + +## Regulatory Compliance + +Integrating blockchain into financial transactions raises regulatory and compliance challenges. Compliance with regulations like anti-money laundering (AML) and know-your-customer (KYC) can be complex in a decentralized environment. Ensuring compliance while maintaining privacy and security requires collaboration with regulatory bodies, development of industry standards, and implementation of robust monitoring and reporting mechanisms. + +# Conclusion + +In conclusion, leveraging blockchain for financial transactions offers numerous security advantages. However, it is essential to address the potential security implications in areas such as data integrity, consensus mechanisms, smart contract security, privacy, and regulatory compliance. By implementing appropriate security measures and best practices, organizations can enhance the security and trustworthiness of financial transactions in the blockchain ecosystem.