Last active
April 29, 2024 22:52
-
-
Save aunyks/8f2c2fd51cc17f342737917e1c2582e2 to your computer and use it in GitHub Desktop.
This file contains 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
import hashlib as hasher | |
import datetime as date | |
# Define what a Snakecoin block is | |
class Block: | |
def __init__(self, index, timestamp, data, previous_hash): | |
self.index = index | |
self.timestamp = timestamp | |
self.data = data | |
self.previous_hash = previous_hash | |
self.hash = self.hash_block() | |
def hash_block(self): | |
sha = hasher.sha256() | |
sha.update(str(self.index) + str(self.timestamp) + str(self.data) + str(self.previous_hash)) | |
return sha.hexdigest() | |
# Generate genesis block | |
def create_genesis_block(): | |
# Manually construct a block with | |
# index zero and arbitrary previous hash | |
return Block(0, date.datetime.now(), "Genesis Block", "0") | |
# Generate all later blocks in the blockchain | |
def next_block(last_block): | |
this_index = last_block.index + 1 | |
this_timestamp = date.datetime.now() | |
this_data = "Hey! I'm block " + str(this_index) | |
this_hash = last_block.hash | |
return Block(this_index, this_timestamp, this_data, this_hash) | |
# Create the blockchain and add the genesis block | |
blockchain = [create_genesis_block()] | |
previous_block = blockchain[0] | |
# How many blocks should we add to the chain | |
# after the genesis block | |
num_of_blocks_to_add = 20 | |
# Add blocks to the chain | |
for i in range(0, num_of_blocks_to_add): | |
block_to_add = next_block(previous_block) | |
blockchain.append(block_to_add) | |
previous_block = block_to_add | |
# Tell everyone about it! | |
print "Block #{} has been added to the blockchain!".format(block_to_add.index) | |
print "Hash: {}\n".format(block_to_add.hash) |
worked python3 version:
import hashlib
import time
class Block:
def __init__(self, index: int, timestamp: int, data: str, previous_hash):
"""
:param index: block index
:param timestamp: millisecond
:param data: block real data
:param previous_hash: previous block hash
"""
self.index = index
self.timestamp = timestamp
self.data = data
self.previous_hash = previous_hash
self.hash = self.hash_block()
def hash_block(self):
sha = hashlib.sha256()
seq = [
str(x) for x in [self.index, self.timestamp, self.data, self.previous_hash]
]
sha.update("".join(seq).encode("utf8"))
return sha.hexdigest()
def __str__(self):
return f"Block:index={self.index}×tamp={self.timestamp}&data={self.data}&hash={self.hash}"
def get_cur_millisecond():
return int(round(time.time() * 1000))
def create_genesis_block():
return Block(0, get_cur_millisecond(), "snake coin genesis block", "0")
def next_block(previous_block: Block):
index = previous_block.index + 1
return Block(
index=index,
timestamp=get_cur_millisecond(),
data=f"this is block #{index}",
previous_hash=previous_block.hash,
)
def make_test_block_chain():
block_chain = [create_genesis_block()]
previous_block = block_chain[0]
for _ in range(20):
block = next_block(previous_block)
block_chain.append(block)
previous_block = block
# broadcast: tell everyone about it!
print(f"Block #{block.index} has been added to the blockchain! detail: {block}")
time.sleep(1)
if __name__ == "__main__":
make_test_block_chain()
worked python3 version:
import hashlib import time class Block: def __init__(self, index: int, timestamp: int, data: str, previous_hash): """ :param index: block index :param timestamp: millisecond :param data: block real data :param previous_hash: previous block hash """ self.index = index self.timestamp = timestamp self.data = data self.previous_hash = previous_hash self.hash = self.hash_block() def hash_block(self): sha = hashlib.sha256() seq = [ str(x) for x in [self.index, self.timestamp, self.data, self.previous_hash] ] sha.update("".join(seq).encode("utf8")) return sha.hexdigest() def __str__(self): return f"Block:index={self.index}×tamp={self.timestamp}&data={self.data}&hash={self.hash}" def get_cur_millisecond(): return int(round(time.time() * 1000)) def create_genesis_block(): return Block(0, get_cur_millisecond(), "snake coin genesis block", "0") def next_block(previous_block: Block): index = previous_block.index + 1 return Block( index=index, timestamp=get_cur_millisecond(), data=f"this is block #{index}", previous_hash=previous_block.hash, ) def make_test_block_chain(): block_chain = [create_genesis_block()] previous_block = block_chain[0] for _ in range(20): block = next_block(previous_block) block_chain.append(block) previous_block = block # broadcast: tell everyone about it! print(f"Block #{block.index} has been added to the blockchain! detail: {block}") time.sleep(1) if __name__ == "__main__": make_test_block_chain()
Tested this out and it worked great! Thanks!
import hashlib as hasher
import datetime as date
class Block:
def __init__(self, index, timestamp, data, previous_hash):
self.index = index
self.timestamp = timestamp
self.data = data
self.previous_hash = previous_hash
self.hash = self.hash_block()
def hash_block(self):
sha = hasher.sha256()
sha.update((str(self.index) + str(self.timestamp) + str(self.data) + str(self.previous_hash)).encode()) #changed line
return sha.hexdigest()
def create_genesis_block():
return Block(0, date.datetime.now(), "Genesis Block", 0)
def next_block(last_block):
this_index = last_block.index + 1
this_timestamp = date.datetime.now()
this_data = "Hey! I'm block " + str(this_index)
this_hash = last_block.hash
return Block(this_index, this_timestamp, this_data, this_hash)
blockchain = [create_genesis_block()]
previous_block = blockchain[0]
num_of_blocks_to_add = 20
for i in range(0, num_of_blocks_to_add):
block_to_add = next_block(previous_block)
blockchain.append(block_to_add)
previous_block = block_to_add
print ("Block #{} has been added to the blockchain!".format(block_to_add.index))
print ("Hash: {}\n".format(block_to_add.hash))
For anyone in Python 3, just changed the line 14. Tested and it worked
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
You're right !