-
Notifications
You must be signed in to change notification settings - Fork 0
/
about.txt
80 lines (67 loc) · 3.73 KB
/
about.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Blockchain essentially functions as a public database distributed across numerous peers.
Unlike traditional distributed systems where trust is a prerequisite and data from each node is assumed to be accurate,
blockchain operates on a different principle.
It allows for the possibility that some nodes might produce incorrect data.
In a blockchain system, it's possible for up to 49% of the nodes to generate inaccurate data
without compromising the integrity of the database.
This unique feature eliminates the need for trust,
enabling the development of innovative applications with blockchains.
---FILE: block.go---
To represent a block inside golang,
we create a struct which has
1. hash - represents the hash of the block
2. data field - represtns the data which could be ledgers, documents and images (transaction details)
3. previous hash - represents the last block hash, it allows us to link the hashes together, like in a linked list
each block in our blovkchain refernces the last block created indie the blockchain
4. nonce - a random number used in the blockchain mining process
CreateBlock func:
This creates a new block with given data and the hash of the previous block.
It also runs a "proof of work" algorithm (a method of securing the blockchain)
to find a valid hash for the block
AddBlock Method:
This method adds a new block to the blockchain.
It takes some data for the new block and attaches it to the previous block's hash.
Then, it appends this new block to the chain.
Genesis func:
This function creates the very first block in the blockchain,
often called the "Genesis Block." It's the starting point of the entire chain.
InitBlockchain func:
This initializes the blockchain with the Genesis Block.
It sets up the first link in a chain before adding more blocks.
---FILE: proof.go---
Proof of Work is a mechanism to secure the blockchain
he essential idea is to make creating new blocks difficult (thus securing the network)
but easy to verify for others.
Difficulty: This is a measure of how hard it is to mine a new block.
Here, the difficulty is set to 18, meaning it's relatively difficult to find a valid hash.
ProofOfWork Struct:
This contains the block we are trying to mine and a target,
which is a number that the hash of the new block must be less than to be considered valid.
The target adjusts with the difficulty level.
InitData func:
This prepares the data from the block
along with a nonce (a number that changes with each try to get a different hash)
and the difficulty level, to be hashed together.
Run func:
This is where the mining happens.
It starts with a nonce at 0 and increments it,
hashing the block's data with the nonce each time.
It checks if the resulting hash is less than the target.
If it is, mining is successful;
if not, it increments the nonce and tries again.
This loop continues until a valid hash is found.
Validate func:
Once a block is mined, this checks if the block's hash actually meets the required conditions
(if it's less than the target).
This is important for other nodes in the network to verify that the block was correctly mined.
ToHex func:
Converts numbers to a hexadecimal format.
This is used to prepare data for hashing
Summary:
1. Take the data in a block that needs to be added to the blockchain.
2. Add a nonce (a trial number that starts at 0) to this data.
3. Hash the combined data and nonce.
4. Check if the hash meets the criteria (if it's smaller than the target).
5. If it doesn't meet the criteria, increase the nonce by 1 and go back to step 3.
6. Repeat this process until a hash that meets the criteria is found. This means the block can now be added to the blockchain.
7. Other nodes can quickly verify the hash meets the criteria, confirming the block's validity.