Last active
September 22, 2023 12:33
-
-
Save miratcan/ce8015ea8283faee84bc9aa175dbfb9d to your computer and use it in GitHub Desktop.
Blockchain with Python
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from hashlib import sha256 | |
from time import time | |
HARDNESS = 4 | |
VALID_BLOCK_PREFIX = "0" * HARDNESS | |
def is_valid_hash(hash_str): | |
return hash_str.startswith(VALID_BLOCK_PREFIX) | |
class Block(object): | |
def __init__(self, prev_hash, data): | |
self.nonce = 0 | |
self.data = data | |
self.prev_hash = prev_hash | |
self.curr_hash = self.calc_hash(self.nonce) | |
def is_valid(self): | |
return is_valid_hash(self.curr_hash) | |
def calc_hash(self, nonce): | |
hash_str = str(nonce) + self.prev_hash + self.data | |
return sha256(hash_str.encode('utf-8')).hexdigest() | |
def mine(self): | |
t1 = time() | |
new_nonce = self.nonce | |
while True: | |
new_hash = self.calc_hash(new_nonce) | |
if is_valid_hash(new_hash): | |
break | |
new_nonce += 1 | |
t2 = time() | |
print('Block mined in {} seconds ({} iterations).'.format( | |
t2 - t1, new_nonce - self.nonce)) | |
self.nonce = new_nonce | |
self.curr_hash = new_hash | |
class BlockChain(object): | |
def __init__(self): | |
self.chain = [] | |
def add_block(self, data): | |
if len(self.chain) > 2: | |
prev_hash = self.chain[-1].curr_hash | |
else: | |
prev_hash = '0' * 64 | |
block = Block(prev_hash, data) | |
block.mine() | |
self.chain.append(block) | |
blockchain = BlockChain() | |
blockchain.add_block( | |
'Ben manevî miras olarak hiçbir nas-ı katı, hiçbir dogma, hiçbir ' | |
'donmuş, kalıplaşmış kural bırakmıyorum. Benim manevî mirasım ilim ve ' | |
'akıldır. Benden sonra beni benimsemek isteyenler, bu temel mihver ' | |
'üzerinde akıl ve ilmin rehberliğini kabul ederlerse manevî ' | |
'mirasçılarım olurlar') | |
blockchain.add_block( | |
'Bütün ilerlemeler, insan fikrinin eseridir. Fikri harekete getirmek, ' | |
'birinci işimiz olmalıdır. Bir kere millet benliğine hakim olsun ve ' | |
'düşünebilsin, yeter! Başlangıçta hatalı düşünse de, az zaman sonra bu ' | |
'hatayı düzeltebilir. Fikir bir kere faaliyete başladı mı, her şey yavaş ' | |
'yavaş düzene girer ve düzelir. Fikrin serbest hareketi ise, ancak ' | |
'bireyin düşündüğünü serbest olarak söylemek, yazmak ve verdiği karara ' | |
'göre her türlü girişimde bulunmak serbestisine sahip olmakla mümkündür.' | |
) | |
blockchain.add_block( | |
'Büyüklük odur ki hiç kimseye iltifat etmeyeceksin, hiç kimseyi ' | |
'aldatmayacaksın, memleket için gerçek ülkü neyse onu görecek, o hedefe ' | |
'yürüyeceksin. Herkes senin aleyhinde bulunacaktır. Herkes seni yolundan ' | |
'çevirmeye çalışacaktır. İşte sen bunda karşı koyuşları yok eden ' | |
'olacaksın. Önüne sayılamayacak güçlükler yığacaklardır. Kendini büyük ' | |
'değil küçük, zayıf, araçsız, hiç sayarak, kimseden yardım ' | |
'gelmeyeceğine inanarak bu güçlükleri aşacaksın. Ondan sonra sana ' | |
'"büyüksün" derlerse, bunu diyenlere de güleceksin.') | |
blockchain.add_block( | |
'Dünyada her şey için, maddiyat için, maneviyat için, hayat için, ' | |
'başarı için en hakikî yol gösterici ilimdir, fendir. İlim ve fennin ' | |
'dışında yol gösterici aramak gaflettir, cahilliktir, doğru yoldan ' | |
'sapmaktır. Yalnız ilmin ve fennin yaşadığımız her dakikadaki ' | |
'safhalarının gelişimini anlamak ve ilerlemeleri zamanında takip etmek ' | |
'şarttır') | |
print("-" * 80) | |
for block in blockchain.chain: | |
print('BLOCK: {}\nDATA: "{}"\nIS_VALID: {}\n'.format( | |
block.curr_hash, block.data, block.is_valid())) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment