區塊鏈技術活
① 什麼是區塊鏈技術區塊鏈技術的核心構成是什麼
從技術的角度,架構的角度,用通俗的語言來跟大家講講,我對區塊鏈的一些理解。
究竟啥是區塊鏈?Block chain,一句話來說,區塊鏈是一個存儲系統,存儲系統更細一點,區塊鏈是一個沒有管理員,每個節點都擁有全部數據的分布式存儲系統。
那常見的存儲系統,是什麼樣子的呢?
首先看一下如何保證高可用?
普通的存儲系統通常是用「冗餘」的方式來解決高可用問題的。圖上圖所示如果能夠把數據復製成幾份,冗餘到多個地方,就能夠保證高可用。一個地方的數據掛了,另外的地方還存有數據,例如MySQL的主從集群就是這個原理,磁碟的RAID也是這個原理。
這個地方需要強調的兩點是:數據冗餘,往往會引發一致性的問題
1、例如MySQL的主從集群中中其實讀寫會有延時的,它其實就是有一個短的時間內讀寫不一致。這個是數據冗餘,帶來的一個副作用。
2、第二個點是數據冗餘往往會降低寫入的效率,因為數據同步也是需要消耗資源的。你看單點寫入,如果加了兩個從庫之後,其實寫入的效率會受影響。普通的存儲系統,就是採用冗餘的方式,保證數據的高可用的。
那麼第二個問題,普通的存儲系統,能否多點寫入呢?
答案是可以的,比如說以這個圖為例:
其實MySQL的話可以做一個雙主的主從同步,雙主的主從同步,兩個節點,同時可以寫入。如果要做多機房多活的數據中心,其實多機房多活也是進行數據同步的。這里要強調的是多點寫入,往往會引發寫寫沖突的一致性問題,以MySQl為例,假設有一個表的屬性是自增ID,那麼現在資料庫中的數據是1234,那麼其中一個節點寫入,插入了一條數據,那它可能變成5了,然後這5條數據,向另外一個主節點進行數據同步,同步完成之前,如果另外一個寫入節點,也插入了一條數據,也生成了一條這個自增id為5的數據。那麼,生成之後,往另外一個節點同步,然後同步數據到達之後會與本地的這兩條5沖突,就會同步失敗,會引發寫寫的一致性沖突問題。這個多點寫入的話都會出現這個問題。
多點寫入,如何保證一致?
維新「天鵝大咖課」給你更多的技術幹活
② 區塊鏈的核心技術是什麼
簡單來說,區塊鏈是一個提供了拜占庭容錯、並保證了最終一致性的分布式資料庫;從數據結構上看,它是基於時間序列的鏈式數據塊結構;從節點拓撲上看,它所有的節點互為冗餘備份;從操作上看,它提供了基於密碼學的公私鑰管理體系來管理賬戶。
或許以上概念過於抽象,我來舉個例子,你就好理解了。
你可以想像有 100 台計算機分布在世界各地,這 100 台機器之間的網路是廣域網,並且,這 100 台機器的擁有者互相不信任。
那麼,我們採用什麼樣的演算法(共識機制)才能夠為它提供一個可信任的環境,並且使得:
節點之間的數據交換過程不可篡改,並且已生成的歷史記錄不可被篡改;
每個節點的數據會同步到最新數據,並且會驗證最新數據的有效性;
基於少數服從多數的原則,整體節點維護的數據可以客觀反映交換歷史。
區塊鏈就是為了解決上述問題而產生的技術方案。
二、區塊鏈的核心技術組成
無論是公鏈還是聯盟鏈,至少需要四個模塊組成:P2P 網路協議、分布式一致性演算法(共識機制)、加密簽名演算法、賬戶與存儲模型。
1、P2P 網路協議
P2P 網路協議是所有區塊鏈的最底層模塊,負責交易數據的網路傳輸和廣播、節點發現和維護。
通常我們所用的都是比特幣 P2P 網路協議模塊,它遵循一定的交互原則。比如:初次連接到其他節點會被要求按照握手協議來確認狀態,在握手之後開始請求 Peer 節點的地址數據以及區塊數據。
這套 P2P 交互協議也具有自己的指令集合,指令體現在在消息頭(Message Header) 的 命令(command)域中,這些命令為上層提供了節點發現、節點獲取、區塊頭獲取、區塊獲取等功能,這些功能都是非常底層、非常基礎的功能。如果你想要深入了解,可以參考比特幣開發者指南中的 Peer Discovery 的章節。
2、分布式一致性演算法
在經典分布式計算領域,我們有 Raft 和 Paxos 演算法家族代表的非拜占庭容錯演算法,以及具有拜占庭容錯特性的 PBFT 共識演算法。
如果從技術演化的角度來看,我們可以得出一個圖,其中,區塊鏈技術把原來的分布式演算法進行了經濟學上的拓展。
在圖中我們可以看到,計算機應用在最開始多為單點應用,高可用方便採用的是冷災備,後來發展到異地多活,這些異地多活可能採用的是負載均衡和路由技術,隨著分布式系統技術的發展,我們過渡到了 Paxos 和 Raft 為主的分布式系統。
而在區塊鏈領域,多採用 PoW 工作量證明演算法、PoS 權益證明演算法,以及 DPoS 代理權益證明演算法,以上三種是業界主流的共識演算法,這些演算法與經典分布式一致性演算法不同的是,它們融入了經濟學博弈的概念,下面我分別簡單介紹這三種共識演算法。
PoW: 通常是指在給定的約束下,求解一個特定難度的數學問題,誰解的速度快,誰就能獲得記賬權(出塊)權利。這個求解過程往往會轉換成計算問題,所以在比拼速度的情況下,也就變成了誰的計算方法更優,以及誰的設備性能更好。
PoS: 這是一種股權證明機制,它的基本概念是你產生區塊的難度應該與你在網路里所佔的股權(所有權佔比)成比例,它實現的核心思路是:使用你所鎖定代幣的幣齡(CoinAge)以及一個小的工作量證明,去計算一個目標值,當滿足目標值時,你將可能獲取記賬權。
DPoS: 簡單來理解就是將 PoS 共識演算法中的記賬者轉換為指定節點數組成的小圈子,而不是所有人都可以參與記賬。這個圈子可能是 21 個節點,也有可能是 101 個節點,這一點取決於設計,只有這個圈子中的節點才能獲得記賬權。這將會極大地提高系統的吞吐量,因為更少的節點也就意味著網路和節點的可控。
3、加密簽名演算法
在區塊鏈領域,應用得最多的是哈希演算法。哈希演算法具有抗碰撞性、原像不可逆、難題友好性等特徵。
其中,難題友好性正是眾多 PoW 幣種賴以存在的基礎,在比特幣中,SHA256 演算法被用作工作量證明的計算方法,也就是我們所說的挖礦演算法。
而在萊特幣身上,我們也會看到 Scrypt 演算法,該演算法與 SHA256 不同的是,需要大內存支持。而在其他一些幣種身上,我們也能看到基於 SHA3 演算法的挖礦演算法。以太坊使用了 Dagger-Hashimoto 演算法的改良版本,並命名為 Ethash,這是一個 IO 難解性的演算法。
當然,除了挖礦演算法,我們還會使用到 RIPEMD160 演算法,主要用於生成地址,眾多的比特幣衍生代碼中,絕大部分都採用了比特幣的地址設計。
除了地址,我們還會使用到最核心的,也是區塊鏈 Token 系統的基石:公私鑰密碼演算法。
在比特幣大類的代碼中,基本上使用的都是 ECDSA。ECDSA 是 ECC 與 DSA 的結合,整個簽名過程與 DSA 類似,所不一樣的是簽名中採取的演算法為 ECC(橢圓曲線函數)。
從技術上看,我們先從生成私鑰開始,其次從私鑰生成公鑰,最後從公鑰生成地址,以上每一步都是不可逆過程,也就是說無法從地址推導出公鑰,從公鑰推導到私鑰。
4、賬戶與交易模型
從一開始的定義我們知道,僅從技術角度可以認為區塊鏈是一種分布式資料庫,那麼,多數區塊鏈到底使用了什麼類型的資料庫呢?
我在設計元界區塊鏈時,參考了多種資料庫,有 NoSQL 的 BerkelyDB、LevelDB,也有一些幣種採用基於 SQL 的 SQLite。這些作為底層的存儲設施,多以輕量級嵌入式資料庫為主,由於並不涉及區塊鏈的賬本特性,這些存儲技術與其他場合下的使用並沒有什麼不同。
區塊鏈的賬本特性,通常分為 UTXO 結構以及基於 Accout-Balance 結構的賬本結構,我們也稱為賬本模型。UTXO 是「unspent transaction input/output」的縮寫,翻譯過來就是指「未花費的交易輸入輸出」。
這個區塊鏈中 Token 轉移的一種記賬模式,每次轉移均以輸入輸出的形式出現;而在 Balance 結構中,是沒有這個模式的。
③ 區塊鏈技術主要運用到哪裡
從技術的角度,架構的角度,用通俗的語言來跟大家講講,我對區塊鏈的一些理解。
究竟啥是區塊鏈?Block chain,一句話來說,區塊鏈是一個存儲系統,存儲系統更細一點,區塊鏈是一個沒有管理員,每個節點都擁有全部數據的分布式存儲系統。
那常見的存儲系統,是什麼樣子的呢?
如上圖所示,底部是數據,上面可以寫入數據。一個空間存儲數據,一個軟體管理數據,提供介面寫入數據,這就是存儲系統。比如MySQL就是最常見的存儲系統。
普通的存儲系統,容易存在什麼問題呢?至少有兩個常見的問題
第一個是非高可用的問題,數據存在一個地方很危險。用技術的話說,就是數據不高可用。
第二個問題是,它存在寫入的單點,寫入點只有一個。用技術的話說,就是它是一個單點控制。
那普通的存儲系統通常是如何解決這兩個問題的呢?
其實MySQL的話可以做一個雙主的主從同步,雙主的主從同步,兩個節點,同時可以寫入。如果要做多機房多活的數據中心,其實多機房多活也是進行數據同步的。這里要強調的是多點寫入,往往會引發寫寫沖突的一致性問題,以MySQl為例,假設有一個表的屬性是自增ID,那麼現在資料庫中的數據是1234,那麼其中一個節點寫入,插入了一條數據,那它可能變成5了,然後這5條數據,向另外一個主節點進行數據同步,同步完成之前,如果另外一個寫入節點,也插入了一條數據,也生成了一條這個自增id為5的數據。那麼,生成之後,往另外一個節點同步,然後同步數據到達之後會與本地的這兩條5沖突,就會同步失敗,會引發寫寫的一致性沖突問題。這個多點寫入的話都會出現這個問題。
多點寫入,如何保證一致?
維新「天鵝大咖課」給你更多的技術幹活
④ 什麼是區塊鏈技術
區塊鏈不屬於哪個行業,區塊鏈是分布式數據存儲、點對點傳輸、共識機制、加密演算法等計算機技術的新型應用模式。狹義來講,區塊鏈是一種按照時間順序將數據區塊以順序相連的方式組合成的一種鏈式數據結構,並以密碼學方式保證的不可篡改和不可偽造的分布式賬本。
⑤ 區塊鏈技術可以應用在哪些行業
舉幾個區塊鏈應用的例子。
區塊鏈技術最大的特徵就是去中心化, 而這一特徵將為銀行業降低大量成本。
首先,去中心化意味著銀行體系之間建立信任機制不再需要中介,節約了中介的費用。
其次,數字貨幣的發展將可能實現銀行實時的數字化交易。例如,在票據交易中,一直以來銀行的票據交易都要依靠第三方實現有價憑證的傳遞,即使是電子票據的交易,也需要通過央行 ECDS 系統的信息進行交互認證。而區塊鏈技術可以實現點對點的價值的傳遞,不再需要中心化的系統進行控制,這不僅僅加快了票據傳遞的速度,更重要的是,可以減少人為因素造成的失誤,流程方面的減少自然會降低銀行對於人員的需求量,節約了銀行的人工成本。
最後,在清算、結算方面也會有所影響。 銀行的清算、結算業務一直以來都是由中央結算來完成的,效率較低。通過區塊鏈技術進行結算將大幅度提高銀行的效率。
區塊鏈技術在銀行的跨境支付業務中也發揮著較大的作用。在全球化貿易高度發達的今天,跨境支付越來越頻繁,銀行在跨境貿易中往往充當著第三方服務的職能,例如進行電子轉賬、資產託管等。但跨境支付一般需要耗時 2 天左右才能到賬,效率很低,也降低了在途資金的利用率。而在區塊鏈技術中,跨境支付的雙方可以通過點到點的方式完成,實現全天候支付、實時到賬、從而加快了清算、結算的速度,進而提高銀行處理業務的效率。
區塊鏈技術的另一特徵就是去風險化,銀行可以建立自己的區塊鏈,這樣就能保證銀行客戶的交易信息和交易記錄是真實有效的, 是不會被任意篡改的,銀行可以有效地辨別客戶的信息,了解客戶的各方面情況,識別客戶的異常交易,防止被客戶所欺騙,從而降低銀行的監管成本。
區塊鏈技術在保險業中也具有無可比擬的優勢。
從數據管理角度來看,保險公司應用區塊鏈技術可以有效提高風險管控能力, 包括保險公司的風險監督與投保人的風險管理兩個方面。
區塊鏈技術在保險業中的應用,可以加強保險公司內部的風險監督。 區塊鏈技術可以將保險公司的日常運營流程記錄在節點上,可以實現對公司資金流向、投資情況、賠付多少等業務進行事中控制,提高公司風險管控能力。
此外,區塊鏈技術安全、可靠、無法隨意篡改,保證投保人得到的信息真實有效,使得投保人的風險管理能力增強。
區塊鏈技術在證券行業的應用可以增加證券發行的靈活性。
發行證券的公司可以採用智能合約,通過設定證券發行的方式、時間,在最理想的狀態下甚至可以 24 小時不間斷地發行證券。
在智能合約的運行下,實現買賣雙方的自動配對,並通過分布式的數字化登記系統,自動完成結算、清算步驟。 區塊鏈上的交易記錄不會被隨便更改,因此錄入的信息在實際上產生了公示的效果,因而證券交易所產生所有權的確權不會有任何爭議。
除此之外,區塊鏈技術讓證券交易流程更加公開、透明。 通過區塊鏈技術,證券行業無需核心機構來運行和管理,也不需要投行來進行承銷,實現真正的點對點的交易,減少證券交易中的暗箱操作與內幕交易等違規行為,並可以實現對證券行業的有效監管。
區塊鏈技術是以一種分散化的機制進行價值交換,將會導致以中心化為特徵的現有的金融基礎設施發生翻天覆地的變化。
抵押品、 質押品以及股票、債券、 衍生品等資產通常需要一個值得信任的核心機構來進行登記或者保管,而區塊鏈卻能夠用全新的方式來記錄和保存這些產品的數據,將會對這些產品的登記制度產生影響。
區塊鏈通過智能合約,可以對信息和價值進行接收和反應,自動完成價值的轉移,自動地完成交易、清算和結算,將沖擊現有的大額交易系統、證券存管、證券結算和場外衍生品交易等現有金融基礎設施。
區塊鏈技術在供應鏈中的應用,首先是提供了信用保障,區塊鏈上記錄著商品的流通信息等,能夠證明商品及其流轉的真實可靠性,從而能夠對鏈上企業的效用情況等進行一個綜合的評價,成為了企業銀行貸款信用、融資信用、交易信用的一個有效的保障。
首先, 區塊鏈可以將供應鏈上所有的交易數據都帶有時間戳,不可隨意篡改,即使能篡改某個節點的交易數據,也無法隻手遮天,所以區塊鏈解決了銀行對企業信息被篡改的疑慮,這對一些微小企業來說,只要信用好,向銀行貸款的可能性將大大提高。
其次,區塊鏈所記載的上下游企業之間的信息,通過有效的整合,既可以為企業在生產、銷售等環節提供支持,也可以供下游企業來分析顧客偏好,從而可以制定具有針對性的服務。
⑥ 區塊鏈的概念是什麼
從字面理解,區塊鏈包含了兩個概念:區塊、鏈。區塊鏈本身是由一個個區塊(Block)組成,而不同節點鏈接在一起構建的網路,就是區塊鏈。區塊鏈的主要作用是儲存信息,任何需要保存的信息,都可以寫入區塊鏈,也可以從裡面讀取。
每個區塊存儲:一些有效的記錄或交易;涉及該塊的信息;通過每個塊的散列到前一個塊和下一個塊的鏈接——可以被認為是塊的指紋的唯一代碼。
因此,每個塊在鏈內具有特定且不可移動的位置,因為每個塊包含來自前一塊的散列的信息。整個鏈存儲在構成區塊鏈的每個網路節點中,因此鏈的精確副本存儲在所有網路參與者中。
用途
從本質上講,區塊鏈可用於存儲任何類型的信息,這些信息必須保持完整,並且比通過中間人以安全,分散和更便宜的方式保持可用。此外,由於存儲的信息是加密的,因此可以保證其機密性,因為只有擁有加密密鑰的人才能訪問它。
在醫療保健中使用區塊鏈。例如,健康記錄可以合並並存儲在區塊鏈中。這意味著每個患者的病史都是安全的,同時,每個被授權的醫生都可以使用,無論患者接受治療的健康中心如何。甚至制葯行業也可以使用這種技術來驗證葯品並防止偽造。
區塊鏈對於管理數字資產和文檔也非常有用。到目前為止,數字化的問題在於一切都很容易復制,但Blockchain允許您記錄購買,契約,文檔或任何其他類型的在線資產,而不會被偽造。