40行python開發一個區塊鏈---實踐小記
- 一、前言
- 二、關于區塊鏈
- 二、實踐小記
叮嘟!這里是小啊嗚的學習課程資料整理,好記性不如爛筆頭,今天也是努力進步的一天,一起加油進階吧!
一、前言
本次實踐指導詳細參見文章:戳這兒!
https://www.imooc.com/article/details/id/29636
二、關于區塊鏈
區塊鏈是一個公開的數字賬本,它按時間順序記錄位元幣或其他加密貨幣發生的交易,
更一般的講,區塊鏈是一個公共資料庫,新的資料將存盤在一個被稱為”塊“的容器中,然后塊會被添加到一個不可篡改的鏈,因此被稱為“區塊鏈”,當我們談到位元幣或其他加密貨幣時,這些資料指的是交易記錄,當然,你可以將任何型別的資料存入區塊鏈,
區塊鏈技術已經催生了全新的、完全數字化的貨幣,如位元幣和萊特幣,這些貨幣并不是由中央政府發行或管理的,這一技術給那些不認可當前銀行系統人帶來了新的自由,
區塊鏈同時也為分布式計算帶來了革命性的創新,例如,以太坊區塊鏈引入了一些有趣的概念,比如智能合約,
在本文中,將用40多行的Python 3代碼來做一個簡單的區塊鏈,我們稱它為SnakeCoin,
我們首先將定義“塊”的資料結構,在區塊鏈中,每個塊都存盤一個時間戳和一個可選地索引,在SnakeCoin中,我們將把兩者都存盤起來,為了確保整個區塊鏈的完整性,每個塊都有一個用于自我標識的哈希,與位元幣一樣,每個塊的哈希將是對塊索引、時間戳、資料和前塊哈希計算出的加密哈希值,其中你可以在資料中保存任何內容,
二、實踐小記
import hashlib as hasher
class Block:
def __init__(self, index, version, previous_hash, timestamp, data):
self.index = index
self.version = version
self.previous_hash = previous_hash
self.timestamp = timestamp
self.data = data
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("utf-8"))
return sha.hexdigest()
import datetime as date
def create_genesis_block():
# Manually construct a block with
# index zero and arbitrary previous hash
return Block(0, "v1.00", "0", date.datetime.now(), "Genesis Block")
def next_block(last_block, version):
this_index = last_block.index + 1
this_version = version
this_hash = last_block.hash
this_timestamp = date.datetime.now()
this_data = "Hey! I'm block " + str(this_index)
return Block(this_index, this_version, this_hash, this_timestamp, this_data)
# 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, "v1.00")
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))
成功跑通!
如果希望在控制臺中查看更多資訊,可以編輯源檔案并列印每個塊的時間戳或塊中的資料,
實驗結果如下:


Ending!
更多課程知識學習記錄隨后再來吧!
就醬,嘎啦!

注:
人生在勤,不索何獲,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/189874.html
標籤:其他
