The project Consists of 3 files namely:
main.c ==>contains code for the main user interface for giving input to the code.
Bitcoin.c ==>Function implmentation file of our project, contains all functions we needed for the project.
Bitcoin.h ==>Header file, includes basic structure & functions definations
It's a basic model that impements the Bitcoin model using data structures Linked Lists, AVL Trees.
//COMPILATION INSTRUCTION : run the command gcc Bitcoin.c main.c
-
ENTER THE FUNCTION TO BE PERFORMED FROM THE GIVEN LIST OF FUNCTIONS AS INPUT STRINGS ON THE TERMINAL:
1->ADDUSER ->ADDS A NEW USER TO THE DATABASE 2->TRANSACT ->TO TRANSACT AMONGST THE USERS 3->ATTACK ->TO ATTACK THE BLOCK CHAIN, ALTER IT'S NONCE 4->VALIDATE ->CHECKS WHETHER THE BLOCK CHAIN STRUCTURE IS VALID OR NOT==>IF NOT IT FIXES THE BLOCK CHAIN STRUCTURE 5->PRINTUSERDETAILS ->TO PRINT DETAILS FOR THE USER(WALLET BALANCE,UID,AND JOINING DATE) 6->PRINTUSERTRANSACTIONS ->TO PRINT TRANSACTION HISTORY OF A PARTICULAR USER 7->EXIT ->TERMINATES THE PROGRAM -
FOLLOWING QUERIES CAN BE PERFORMED:
A.)ADDUSER->GENERATES A RANDOM UID, VALIDATES IF THAT UID DOESNT EXISTS ALREADY IN THE USER SYSTEM IF NOT THEN IT ADDS USER WITH THAT UNIQUE UID AND A 1000 COIN JOINING BONUS INPUT INSTRUCTION:INPUT THE STRING "ADDUSER" TO ADDING A NEW USER TO THE USER DATABASE OUTPUT:PRINTS RANDOM UID OF THE USER GENERATED AND JOINING BONUS BALANCE OF THE USER B.)TRANSACT->TRANSACTS AMONGST THE USERS INPUT INSTRUCTIONS:INPUT THE STRING "TRANSACT" FOR CARRYING A TRANSACTION THEN ENTER INPUT AS : <RECIEVER's Id> <SENDER's Id> <TRANSACTION AMOUNT> OUTPUT: 1.)INVALID TRANSACTION==>IF AMOUNT<=0 2.)INVALID USER ID if==> EITHER OF SENDER OR RECIEVER UID IS'NT VALID//NOT PRESENT IN THE SYSYTEM DATABASE 3.)INSUFFICIENT BALANCE==>IF SENDERS'S WALLET BALANCE <=TRANSACTION AMOUNT 4.)PRINTS SENDER'S & RECIEVER'S BALANCE BEFORE TRANSACTION AND PRINTS SENDER'S & RECIEVER'S BALANCE AFTER TRANSACTION C.)ATTACK->TO ATTACK A BLOCK IN THE BLOCK CHAIN AND ALTER IT'S NONCE INPUT INSTRUCTION:INPUT THE STRING "ATTACK" FOR GENERATING AN ATTACK ON THE CURRENT BLOCK CHAIN STRUCTURE OUTPUT: 1.)ATTACK SUCCESSFUL ==> IF A VALID ATTACK AND NONCE OF A BLOCK IN THE CHAIN CHANGED 2.)ATTACK FAILED ==> IF COULDN'T CHANGE THE NONCE OF A BLOCK D.)VALIDATE->CHECKS WHETHER THE BLOCK CHAIN STRUCTURE IS VALID OR NOT==>IF NOT IT FIXES THE BLOCK CHAIN STRUCTURE INPUT INSTRUCTION:INPUT THE STRING "VALIDATE" FOR CHECKING THE VALIDITY OF THE CURRENT BLOCK CHAIN STRUCTURE OUTPUT: 1.)BLOCKCHAIN IS VALID==> IF BLOCK CHAIN IS FOUND TO BE VALID 2.) <WHEN BLOCKCHAIN ISNT VALID> a.)ATTACK DETECTED!!==>FLAG MESSAGE <OUTPUTS:THE WRONG NONCE AND HASH OF THE BLOCK> ATTACK FIXED!!==>FLAG MESSAGE <OUTPUTS:THE CORRECT NONCE AND HASH OF THE BLOCK> <AT THE END OUTPUTS THE NUMBER OF ATTACKS DETECTED AND FIXED!!!> E.)PRINTUSERDETAILS->TO PRINT DETAILS FOR THE USER(WALLET BALANCE,UID,AND JOINING DATE) INPUT INSTRUCTION:INPUT THE STRING "PRINTUSERDETAILS" FOR PRINTING THE DETAILS OF A PARTICULAR USER UID THEN ENTER INPUT AS : <INPUT USER UID> OUTPUT: 1.)INVALID USER ==> IF NO USER WITH ENTERED UID EXISTS IN THE DATABASE 2.)<USER ID><WALLET BALANCE><USER SINCE:DATE/TIME OF JOINING> ==> IF USER WITH ENTERED UID EXISTS F.)PRINTUSERTRANSACTIONS->TO PRINT TRANSACTION HISTORY OF A PARTICULAR USER INPUT INSTRUCTION:INPUT THE STRING "PRINTUSERTRANSACTIONS" FOR PRINTING THE DETAILS OF A PARTICULAR USER UID THEN ENTER INPUT AS : <INPUT USER UID> OUTPUT: 1.)INVALID USER ==> IF NO USER WITH ENTERED UID EXISTS IN THE DATABASE 2.)TRANSACTION LIST EMPTY-NO TRANSACTION TO SHOW!!==>IF USER EXISTS BUT NO TRANSACTION HAS BEEN MADE 3.)TRANSACTIONS MADE BY USER <USERID> ==>FOR EACH OF THE TRANSACTION MADE BY THE USER WITH ENTERED UID <TO> <FROM> <AMOUNT> <TRANSACTION DATE/TIME> <transaction details> G.)EXIT->TERMINATES THE PROGRAM INPUT INSTRUCTION:INPUT THE STRING "EXIT" OUTPUT:PROGRAM-TERMINATED
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////