區塊鏈技術(Blockchain technology)來源于筆名中本聰(Satoshi Nakamoto)在2008年發表的論文《比特幣:一種點對點的電子現金系統》(Bitcoin: A Peer-to-Peer Electronic Cash System)。在傳統的具有中心節點的電子現金系統中,是由中心節點,比如銀行、支付機構等,來驗證電子現金是否被使用過,從而避免一幣多付(又稱雙重支付)的問題。比特幣是一種去中心化的點對點的網絡,為解決一幣多付的問題,中本聰提出了區塊鏈的概念,顧名思義,區塊鏈由區塊組成,區塊是一種數據結構,包括時間戳,交易記錄,前一個區塊的哈希值,通過這種機制,所有的區塊連在一起,形成區塊鏈。
圖1 區塊和區塊鏈
簡而言之,區塊鏈是一種分布式的數據庫,具有去中心化、不可篡改、可以追溯等特點,這些特點保證了區塊鏈節點的“誠實”和“透明”,解決了信息不對稱問題,實現了多個主體之間的信任協作和行動一致。為了方便理解區塊和區塊鏈的概念,可以參考如下簡化的Python代碼實現:
class Block:
def __init__(self, index, transactions, timestamp, previous_hash, nonce=0):
self.index = index
self.transactions = transactions
self.timestamp = timestamp
self.previous_hash = previous_hash
self.nonce = nonce def compute_hash(self):
block_string = json.dumps(self.__dict__, sort_keys=True) return sha256(block_string.encode()).hexdigest()class Blockchain:
difficulty = 2
def __init__(self):
self.unconfirmed_transactions = []
self.chain = [] def create_genesis_block(self):
genesis_block = Block(0, [], 0, "0")
genesis_block.hash = genesis_block.compute_hash()
self.chain.append(genesis_block) @property
def last_block(self):
return self.chain[-1] def add_block(self, block, proof):
previous_hash = self.last_block.hash if previous_hash != block.previous_hash: return False
if not Blockchain.is_valid_proof(block, proof): return False
block.hash = proof
self.chain.append(block) return True @staticmethod
def proof_of_work(block):
block.nonce = 0
computed_hash = block.compute_hash() while not computed_hash.startswith('0' * Blockchain.difficulty):
block.nonce += 1
computed_hash = block.compute_hash() return computed_hash def add_new_transaction(self, transaction):
self.unconfirmed_transactions.append(transaction) @classmethod
def is_valid_proof(cls, block, block_hash):
return (block_hash.startswith('0' * Blockchain.difficulty) and
block_hash == block.compute_hash())
由上述代碼可見,計算當前區塊的哈希值時,輸入變量既包括當前區塊的時間戳、交易記錄等數據,也包括上一個區塊的哈希值,如果攻擊者修改區塊鏈中的交易記錄,比如區塊1的交易記錄,則區塊1的哈希值會發生變化,因為區塊2的數據結構包括區塊1的哈希值,故區塊2的哈希值也會發生變化,從而迫使攻擊者重新計算區塊2的哈希值,以此類推,余下區塊的哈希值也需要重新計算,同時為增加攻擊者計算哈希值的難度,區塊鏈還使用了工作量證明(Proof of Work)算法,比如要求哈希值的前若干個字符是0。與此同時,在攻擊者計算歷史區塊的哈希值時,還會不斷有新的區塊寫入,除非攻擊者掌握整個區塊鏈網絡中51%以上的算力,這種攻擊從時間成本和收益成本來說,將會是毫無意義的。
比特幣(數字加密貨幣的一種)是區塊鏈技術的一種應用,二者之間的關系類似與汽車和內燃機/電動機,每一輛汽車都裝備有內燃機或者電動機或者兼而有之,但內燃機/電動機不光用于汽車,還應用于火車、輪船、工程機械等設備。隨著區塊鏈技術的發展,其應用場景從數字貨幣逐漸向其他非金融領域擴展,比如公共服務領域、數字版權領域、保險領域、物聯網和物流領域等。
區塊鏈1.0:區塊鏈用于數字貨幣
區塊鏈2.0:區塊鏈+智能合約用于金融領域(貨幣、股票、債券等)
區塊鏈3.0:區塊鏈用于非金融領域
區塊鏈應用領域的擴展也改變了社會對于區塊鏈等同于虛擬貨幣的固有認知,在監管機構對虛擬貨幣炒作和虛擬貨幣交易場所的打擊態度沒有絲毫改變的同時,也在積極鼓勵區塊鏈技術在非金融領域的發展,比如2019年10月24日,中共中央政治局就區塊鏈技術發展現狀和趨勢進行第十八次集體學習,會上中共中央總書記習近平指出“區塊鏈技術的集成應用在新的技術革新和產業變革中起著重要作用。我們要把區塊鏈作為核心技術自主創新的重要突破口,明確主攻方向,加大投入力度,著力攻克一批關鍵核心技術,加快推動區塊鏈技術和產業創新發展……區塊鏈技術應用已延伸到數字金融、物聯網、智能制造、供應鏈管理、數字資產交易等多個領域。目前,全球主要國家都在加快布局區塊鏈技術發展。我國在區塊鏈領域擁有良好基礎,要加快推動區塊鏈技術和產業創新發展,積極推進區塊鏈和經濟社會融合發展。”
區塊鏈技術具有的不可篡改、可以追溯等特點,可以和物聯網技術具有的連接隨手可及、計算無處不在等特點結合起來,以筆者在《如何從零開始搭建面向某一行業的物聯網系統架構》一文中描述的案例為例,我們可以把某一產品拆分成若干產品單元,然后把產品單元的生產制造過程拆分成若干工藝單元,每一個工藝單元的實現由各種機械設備完成,比如生產設備、測試設備等,工藝單元和工藝單元之間的物料轉運由各種自動化設備完成,比如機器人、AGV等,無論是機械還是設備,從物聯網的視角看來都屬于執行機構,傳感器用于測量生產過程的各種狀態并作為車間控制系統閉環控制的輸入信號。
圖2 產品制造過程和物聯網
借助物聯網,在某一產品單元生產完成后,可以生成該產品的關鍵信息,比如生產設備加工該產品時采用的工藝數據,測試設備對該產品進行質檢后得到的量測數據,這些數據打包成消息(比如JSON格式)。隨后該產品單元會經過物流系統流轉到下一個地點,借助物聯網,可以獲得產品在運輸過程中的關鍵信息,比如mRNA疫苗在運輸途中的環境溫度數據,這些數據也被打包成消息。在這種應用場景下,消息即等同于上面提到的交易記錄,區塊的數據結構包括時間戳、消息、前一個區塊的哈希值等數據,而消息一旦被節點發布,就不可能被修改,從而可以實現供應鏈端到端的全程監控,解決商品質量溯源、安全監管等問題。
圖3 物聯網和區塊鏈
借助智能合約,在產品單元從生產方流轉到需求方時,需求方通過獲取產品到達前的消息即可以判斷合約條款是否被滿足(時間、日期、工藝數據、量測數據、環境數據等),若滿足條款,則生產方和需求方之間的合約自動執行。這種方式避免了供應鏈中的每一個參與方單獨建立一套產品追溯系統和相應的數據庫,除了成本的增加,這種單獨建立的數據庫在開放性、協作性和認證性方面亦有所欠缺,而通過引入區塊鏈技術,可以實現“優化業務流程、降低運營成本、提升協同效率、建設可信體系”等方面的作用。
編輯:hfy
-
物聯網
+關注
關注
2910文章
44778瀏覽量
374734 -
區塊鏈
+關注
關注
111文章
15562瀏覽量
106269
發布評論請先 登錄
相關推薦
評論