区块链是如同链表的一组记录。每个区块含有一些信息以及与其他区块关联的方法。每个区块有前一个区块的哈希值、时间戳、数据。
class Block:
def __init__(self, timestamp, data, previous_hash):
self.timestamp = timestamp
self.data = data
self.previous_hash = previous_hash
self.hash = self.calc_hash(data)
self.next = None
def calc_hash(self, data):
hash_str = data.encode('utf-8')
sha = hashlib.sha256()
sha.update(hash_str)
return sha.hexdigest()
class BlockChain:
def __init__(self):
self.head = None
self.size = 0
def append(self, value):
if value is None:
return
self.size += 1
node = self.head
if node is None:
block = Block(datetime.datetime.now(), value, None)
self.head = block
else:
while node.next:
node = node.next
node.next = Block(datetime.datetime.now(), value, node.hash)