區塊鏈 (Blockchain) 是近幾年來很熱門的話題,似乎沒有跟區塊鏈扯上關係就太落伍了。但是也因為太熱門了,所以很多奇怪的說法就出現了,變成為了區塊鏈而區塊鏈。
到底什麼是區塊鏈? 他可以做什麼? 他不是什麼? 區塊鏈是否可以取代資料庫? 我們將仔細的來解析。
什麼是區塊鏈 (Blockchain) ?
根據維基百科,區塊鏈是藉由密碼學與共識機制等技術建立與儲存龐大交易資料區塊串鏈的點對點網路系統。
以上的說明對於不了解區塊鏈的人來說,肯定聽了還是不會理解什麼是區塊鏈。
什麼是區塊鏈? 簡單來說,區塊鏈就是符合以下幾個特色的網路系統 :
(1) 把資料儲存在一個儲存單位中,然後各儲存單位再串聯起來。
(2) 這個儲存單位就稱為區塊,串聯各區塊的方式就是透過密碼學與共識機制等技術。
(3) 資料儲存的方式不是集中儲存在資料中心,而是分散在網路系統的各個節點,屬於去中心化(Decentralized)的網路系統。
雖然已經將維基百科的解釋用比較白話的方式來表示,但是似乎仍舊還不夠白話。
我們舉個例子來說明 : 假設朋友向你借了$10,000元,寫了一張借據,如果這張借據不見了,朋友向你借了$10,000元的事實就消失了。但是如果這張借據複製了100份,分別給100個朋友持有,借據會消失或是被竄改的機率就降低很多。
以上的方式,就是把借據去中心化了,不再只儲存於一個地方,而是分散到很多地方。如果你借錢出去的借據很多張,就把各個借據串聯起來,並把串聯起來的借據複製很多份,分散給各個朋友保存。
但是以上借據的處理方式,還是有漏洞,如果朋友幫你保存的借據,被竄改了怎麼辦? 朋友幫你保存的借據怎麼知道是經過你確認的借據? 要解決這個問題的方法,就是密碼學與共識機制。
因此要了解什麼是區塊鏈,需要先知道幾個名詞 : 密碼學、共識機制、去中心化、點對點。
點對點 (Peer-to-Peer) : 簡稱P2P,是無中心服務器,依靠用户羣(peers)交換訊息的互聯網體系,它的作用在於減低以往網路傳輸中的節點,以降低資料遺失的風險。點對點就是不再需要中間人的方式,例如傳統購物是工廠先送貨到商店,然後消費者到商店購買,商店的角色就是中間人,點對點的方式就是消費者直接對工廠,捨去商店這個中間人。
去中心化 (Decentralization) : 相對於「中心化」而言的新型態架構。去中心化就是資料不再集中於資料中心,而是分散到各個網路的節點。
密碼學 (Cryptography) : 透過數學將訊息進行處理,以確保訊息安全的科學。區塊鏈會用到的密碼學技術有兩大類,非對稱式加密(Asymmetric cryptography)以及哈希函數(Hash)。
共識機制 (Consensus) : 在短時間內完成對交易的驗證和確認的機制。區塊鏈的共識機制也有兩大類,Proof-of-Work(POW)與Proof-of-Stake(POS)。
以下影片解釋[共識機制] :
如果還不是很清楚,來看看這個解釋[區塊鏈]的影片說明 :
區塊鏈到底長什麼樣子?
這個展示可以更清楚區塊鏈的樣貌 : https://andersbrownworth.com/blockchain/blockchain
如下圖,區塊鏈就是將區塊與區塊串聯起來,區塊2有個欄位(Previous Hash)指向區塊1的Hash,然後區塊3的Previous Hash再指向區塊2的Hash,如此一直下去。
SHA256(1+2+空白) = 6ee6b0c4aa8e6aaa369dfaee1379a59cec8797e7fc8ad1a358d57e1a87a1466d
一直累加Nonce到11316
SHA256(1+11316+空白) = 000015783b764259d382017d91a36d206d0600e2cbb3567748f46a33fe9297cf
你會發現當Nonce累加到11316時,輸出字串的前導出現0000,這四個零是這個展示區塊訂的,他規定當Nonce數值讓Hash出現0000,表示已經完成採礦,也就是得到正確的Hash字串。
以目前正式的加密貨幣來說,比特幣需要找到可以出現17個前導零的Nonce,乙太幣 (Ethereum) 是要找到11個前導零的Nonce,而且乙太幣使用不同的哈希函數 ~ Keccak-256。
其實Hash結果要有多少前導零,其實也不是重點,因為這只是一個「規則」範例,各個不同的區塊鏈可以有自己的「規則」。
這是Keccak-256的線上展示 ~ https://emn178.github.io/online-tools/keccak_256.html
所以你應該有觀察到,當「區塊編號」、「Nonce」、「Data」任何資料有改變的時候,區塊就變成粉紅色,並且Hash也不再維持四個前導零,表示這個區塊已經不正確了,後面的區塊也就全部串接不起來了。除非全部重新Mine去找到新的Nonce,並且後繼的區塊也要重新Mine一次。當然,實際運作中的區塊要全部找到新的Nonce,幾乎是不可能的事情,因此要變動區塊鏈中的資料也就「不太可能」發生。
之所以說「不太可能」發生,而不說「不可能」發生,是因為還是有機率發生,只是機率非常低。
現在知道什麼是Nonce(隨機數)的意義了,他就是挖礦要找的數值,讓哈希函數可以產生固定位數的前導零,至於要幾個零,就看這個區塊鏈的規定。當然越多前導零,挖礦就越困難。
那麼資料的部分要放什麼呢? 就看這個區塊鏈的功能怎麼規定,以比特幣來說,就是放交易資料,乙太幣來說可以是交易資料,也可以是智能合約之類的code。
以Python來模擬區塊鏈
我們現在以Colab跑Python來進行三個模擬 :
(1) 模擬哈希函數 https://andersbrownworth.com/blockchain/hash
(2) 模擬區塊 https://andersbrownworth.com/blockchain/block
(3) 模擬區塊鏈 https://andersbrownworth.com/blockchain/blockchain
這個模擬產生三個區塊如下 :
共識機制POW和POS有何不同呢?
PoW = Proof-of-Work 工作量證明機制就是讓大家在找出Nonce的過程中,看誰最快找到。
我們上面說過Nonce隨機數,就是找到後可以滿足形成區塊鏈。因此礦工就看誰的算力強,誰就有優勢,所以PoW機制就會讓大家很耗費資源。
PoS = Proof-of-Stake 持有量證明機制就是看誰持有較多的幣,就有更多的機會得到獎勵,所以你可以抵押加密貨幣來得到挖礦的機會。
比特幣與乙太幣就是使用PoW的代表,而乙太幣2.0就是使用PoS的代表。
另外還有一種DPoS (Delegated Proof of Stake 代理持有量證明),跟PoS類似,主要分別在於每位持幣人有權投票選出代理節點,由得票最多的若干節點負責生成區塊。DPoS引入了民主機制,持幣量少的人亦能參與投票,決定之後能生成區塊獲取獎勵的節點,以實現去中心化的目的。
關於PoW與PoS更多參考 : https://rich01.com/what-is-crypto-pos-0/
區塊鏈在企業系統上的應用有哪些?
區塊鏈在[農業]上的應用 :
以上影片我們看到農產品的區塊鏈履歷,其實就是產銷履歷用區塊鏈技術來做。
區塊鏈在[供應鏈]上的應用 :
以各種應用來看,也都是利用區塊鏈的特性來應用,例如資料的不可竄改性、資料的透明性等。這些應用也沒有要將區塊鏈取代資料庫。
區塊鏈可以取代資料庫嗎?
既然區塊鏈可以安全的儲存資料,那麼可以取代資料庫嗎? 答案應該是 : 不會。
這篇文章"What Is a Blockchain?"提到 : 「A blockchain is a distributed database that is shared among the nodes of a computer network. One key difference between a typical database and a blockchain is how the data is structured.」
他說區塊鏈是一個分享在電腦網路節點的分散式資料庫,與傳統資料庫最不同的是資料的結構不同。
這樣的說法也沒有錯,區塊鏈技術「可以」做成分散式的資料庫,但是他的「結構」與「功能」與傳統資料庫不同。
目前來說,區塊鏈與傳統資料庫是可以互補,但是無法取代。因為區塊鏈有傳統資料庫做不到的事情,傳統資料庫也有區塊鏈做不到的事情。
這篇文章"以資料庫思維理解區塊鏈",對於區塊鏈與資料庫的比較說明的不錯,我們引用來討論區塊鏈是否可以取代資料庫的問題。
他說「區塊鏈這個東西的本質和資料庫技術非常相像,很多機制使用資料庫的理念去理解會非常直觀準確」。
沒錯,就是因為兩者很像,又有人以分散式資料庫來形容區塊鏈,所以很多人會認為區塊鏈就是資料庫,就會造成誤解。
最後這篇文章的結論是 : 「資料庫技術與區塊鏈技術的融合其實是大勢所趨」。
區塊鏈與資料庫可以融合嗎?
在網路上有很多關於區塊鏈與資料庫的討論,我們來看一下這篇討論"對於區塊鏈是分佈式數據庫的說法,有疑惑,區塊鏈不支持常規數據庫的檢索的吧?"。
原提問人說區塊鏈無法執行類似SQL語法,因此認為區塊鏈不是資料庫。這個說法其實是誤會資料庫的定義,因為不是可以執行類似SQL語法才是資料庫。資料庫是可遵循一套規範來產生、儲存及操作資料,就可以稱為資料庫,因此說區塊鏈不是資料庫,也不算正確。
有個CovenantSQL值得來研究一下,他宣稱是一個基於區塊鏈的 SQL 數據庫,也就是資料庫技術與區塊鏈技術的融合,我們研究後再來跟大家報告了。CovenantSQL參考資料 : 區塊鏈上的數據庫:CovenantSQL
再來看看這個 Blockchain-based database :
The Blockchain-based database is a combination of traditional database and distributed database where data is transacted and recorded via Database Interface (also known as Compute Interface) supported by multiple-layers of blockchains. The database itself is shared in the form of an encrypted/immutable ledger which makes the information open for everyone.
區塊鏈為基礎的資料庫,是一個傳統資料庫與分散式資料庫的組合,其資料交易及儲存以介面支援在多層的區塊鏈。這個資料庫本身是以加密無法竄改的帳本方式來分享,使得資訊對所有人開放。
這裡也提到,區塊鏈本身與傳統資料庫比較,並沒有查詢的功能。所以區塊鏈為基礎的資料庫,就是要具備傳統資料庫與區塊鏈的特性。
另外一個整合區塊鏈與資料庫的還有BigChainDB (中文參考 : 這裡),他是一個去中心化的資料庫,並且具備區塊鏈的特性。並且BigChainDB後續由IPDB Foundation接手整合,顯示整合各路資源的願景。
所以融合之後的區塊鏈資料庫,會對企業資訊系統帶來什麼影響呢? 就拭目以待了。
0 留言