Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 0b4631c

Browse files
Merge pull request avinashkranjan#605 from NEERAJAP2001/Bitcoin_Mining
Create Bitcoin mining Script
2 parents 2afe21c + 168ee46 commit 0b4631c

File tree

2 files changed

+117
-0
lines changed

2 files changed

+117
-0
lines changed

‎BitCoin Mining/BitCoin_Mining.py

Lines changed: 65 additions & 0 deletions
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)

‎BitCoin Mining/README.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# What Is Bitcoin Mining?
2+
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.
3+
4+
5+
6+
7+
# Terminology :
8+
9+
1. Transaction : An transaction is a transfer of Bitcoin value and are collected in Blocks
10+
11+
2. SHA256: a function which can generate an almost-unique 256-bit (32-byte) signature(Hexa-Decimal) for a text.
12+
13+
3. Block: Blocks are files where data pertaining to the Bitcoin network are permanently recorded
14+
15+
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.
16+
17+
5. Difficulty Level : Number of prefix Contagiuos Zeroes
18+
19+
20+
21+
22+
# Theory :
23+
24+
Btc will be rewarded if Nonce gives us string with prefix of Zeroes the difficult number of times. sounds confusing?
25+
26+
So,Let's take example :
27+
28+
1. Let's assume we have difficulty level = 20
29+
2. Now, Let's again assume that we have previous hash as : 'a5x208fecf9a66be9a2bc7...'
30+
3. Now we create text as : text = str(block_number) + transactions + previous_hash + str(nonce)
31+
4. Now we pass text to SHA256 Function to generate hash
32+
5. Finally, that hash prefix must be equal to number of zeroes as difficulty level.
33+
6. And Boom!! You have mined succesfully.
34+
35+
36+
37+
# Draw Backs:
38+
The script has no drawbacks but due to increase in miners , the difficultly level increases and hence we'd require best hardware as fastest wins.
39+
40+
# Refrences:
41+
42+
https://www.investopedia.com/terms/b/bitcoin.asp
43+
44+
https://www.youtube.com/watch?v=wTC31ZI6QM4
45+
46+
https://www.youtube.com/watch?v=ZhnJ1bkIWWk&t=143s
47+
48+
49+
50+
51+
52+

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /