Skip to content

Instantly share code, notes, and snippets.

@miratcan
Last active September 22, 2023 12:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save miratcan/ce8015ea8283faee84bc9aa175dbfb9d to your computer and use it in GitHub Desktop.
Save miratcan/ce8015ea8283faee84bc9aa175dbfb9d to your computer and use it in GitHub Desktop.
Blockchain with Python
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