Skip to content

Commit 274a69e

Browse files
authored
Initial commit
1 parent 39bea76 commit 274a69e

File tree

4 files changed

+114
-0
lines changed

4 files changed

+114
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
2+
# INPUT : Transactions = '''Neeraj->Zara->50,Nandu->Allu->5''' , difficulty=2 ,
3+
# Previous_hash = a7sdxa036944e29568d0cff17edbe038f81208fecf9a66be9a2b8321c6ec7
4+
5+
# OUTPUT : Successfully mined bitcoins with nonce value:336 end mining. Mining took: 12.207852363586426 seconds
6+
# 006f74cef9d071afa15c58b38198be14f9b4aabb4cd6f7a44afffd9f6968efcd
7+
8+
# Import the sha256 function
9+
from hashlib import sha256
10+
11+
# Nonce value
12+
MAX_NONCE = 10000
13+
14+
15+
# Function for encoding text to a 64 bit hexadecimal value
16+
def SHA256(text):
17+
return sha256(text.encode("ascii")).hexdigest()
18+
19+
20+
# function for guessing nonce value
21+
def mine(block_number, transactions, previous_hash, prefix_zeros):
22+
23+
# string with difficulty zeroes
24+
prefix_str = '0'*prefix_zeros
25+
26+
# nonce is the value we want
27+
for nonce in range(MAX_NONCE):
28+
29+
# concatinating the string and encoding it
30+
text = str(block_number) + transactions + previous_hash + str(nonce)
31+
new_hash = SHA256(text)
32+
33+
# if matched the mined successfully
34+
if new_hash.startswith(prefix_str):
35+
print(f"Successfully mined bitcoins with nonce value:{nonce}")
36+
return new_hash
37+
38+
# might raise exception due to hardware issues etc
39+
raise BaseException(f"Couldn't find correct has after trying {MAX_NONCE} times")
40+
41+
42+
# Driver Code
43+
if __name__=='__main__':
44+
45+
# Transactions string
46+
transactions=input('Enter Transactions : ')
47+
48+
# Number of prefix zeroes
49+
difficulty=int(input('Enter Difficulty level : '))
50+
51+
# For knowing time taken for mining
52+
import time
53+
start = time.time()
54+
print("start mining")
55+
56+
previous_hash=input('Enter Previous has value : ')
57+
58+
59+
# Calling mine function with all required parameters
60+
new_hash = mine(5,transactions,previous_hash, difficulty)
61+
62+
# total time for refrence
63+
total_time = str((time.time() - start))
64+
print(f"end mining. Mining took: {total_time} seconds")
65+
print(new_hash)
Loading
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
2+
What Is Bitcoin Mining?
3+
Bitcoin mining is performed by high-powered computers that solve complex computational math problems; these problems are so complex that they cannot be solved by hand and are complicated enough to tax even incredibly powerful computers.
4+
5+
6+
7+
8+
Terminology :
9+
10+
1. Transaction : An transaction is a transfer of Bitcoin value and are collected in Blocks
11+
12+
2. SHA256: a function which can generate an almost-unique 256-bit (32-byte) signature(Hexa-Decimal) for a text.
13+
14+
3. Block: Blocks are files where data pertaining to the Bitcoin network are permanently recorded
15+
16+
4. Nonce : Miners have to guess this number which will reward them Btc , A nonce is an abbreviation for "number only used once," which is a number added to a hashed—or encrypted—block in a blockchain that, when rehashed, meets the difficulty level restrictions.
17+
18+
5. Difficulty Level : Number of prefix Contagiuos Zeroes
19+
20+
21+
22+
23+
Theory :
24+
25+
Btc will be rewarded if Nonce gives us string with prefix of Zeroes the difficult number of times. sounds confusing?
26+
27+
So, Let's take example :
28+
29+
1. Let's assume we have difficulty level = 20
30+
2. Now, Let's again assume that we have previous hash as : 'a5x208fecf9a66be9a2bc7...'
31+
3. Now we create text as : text = str(block_number) + transactions + previous_hash + str(nonce)
32+
4. Now we pass text to SHA256 Function to generate hash
33+
5. Finally, that hash prefix must be equal to number of zeroes as difficulty level.
34+
6. And Boom!! You have mined succesfully.
35+
36+
37+
38+
Draw Backs:
39+
The script has no drawbacks but due to increase in miners , the difficultl level increases and hence we'd require best hardware as fastest wins.
40+
41+
42+
43+
44+
45+
46+
47+
48+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+

0 commit comments

Comments
 (0)