標籤:演算法 自訂 資料結構 style mac fabri 分散式資料庫 業務 特殊
1。區塊鏈發展與現狀
視頻地址:https://www.imooc.com/video/17452
注意:
比特幣與以太坊最大的區別在於:
以太坊引入了對圖靈完美智能合約的支援,人們可以將任何商務邏輯以合約的形式寫入區塊鏈,在以太坊前,發行自己的數字貨幣,就需要搭建一個獨立的區塊鏈網路。
比較穩定,被拿來研究的區塊鏈系統:
【1】。超級賬本
本身不是一個完整的區塊鏈系統,而是方便企業搭建自己的區塊鏈架構。各個組件,如資料存放區,共識演算法等,都可以靈活替換與組裝。對智能合約也有很好的支援。
因此常被大型行業如銀行/金融機構來構建聯盟鏈。
【2】。以太坊
運行環境:
1。裝好GO語言環境
2。裝好IDE或自己喜歡的文字編輯器:如sublime
3。我的環境:mac + GoLand
2。什麼是區塊鏈【1】區塊鏈的分類:
(1)。公有鏈
任何人都能讀取,任何人都能發動交易,交易能夠獲得有效確認,任何人都能參與其共識過程的區塊鏈。
如比特幣,以太坊,EOS。
(2)。私人鏈
一般為公司或組織內使用。
如在做區塊鏈應用時,自己在本機上搭建的開發節點和在公司內網測試節點。
(3)。聯盟鏈
有竟爭又需要合作的情境。技術上聯盟鏈是指共識過程受到預選節點控制的區塊鏈。只有準入同盟節點才可以參與其中。
如Fabric R3聯盟 / EEA (以太坊企業聯盟)/陽光鏈(眾籌平台青龍籌)
【2】區塊鏈解決問題:價值傳遞
【3】什麼是區塊鏈:
區塊鏈就是一種特殊的分散式資料庫
首先:區塊鏈作用是--儲存資訊 (任何需要儲存的資料均可以寫入區塊鏈,也可從裡面讀取。所以它是--資料庫)
其次:任何人都可以架設伺服器加入區塊鏈網路,成為一個節點。所以它具有--分布式系統特點
區塊鏈世界裡面,沒有中心節點,每個節點都是平等的。都儲存了整個資料庫,可向任何節點寫入&讀取資料。因為所有的節點都會同步。保證區塊鏈一致。
上述:節點分布在全國各個地方,節點與節點之間相互串連。你往任何一個節點發送請求,請求資料都會快速的同步到網路上的所有節點。
說明:
【1】。沒有中心,無管理員
如此龐大的網路沒有中心也沒有管理員,都是通過區塊鏈協議自管理。
【2】。全民記賬
註:記賬而不是記資料 (因為區塊鏈主要用來做價值傳遞,對於價值傳遞,重要的是可信的賬本。用來記錄所有的交易資料。所謂全民記賬是這個賬本在區塊鏈每個節點上都有一份。每個節點都可以在遵循區塊鏈協議的前提下,往這個賬本上寫入交易資料)
【3】。只能增查,不能改刪
註:在區塊鏈上的資料操作,指的是對區塊鏈上的交易資料進行操作,而不是最終的狀態。
我們進行轉賬操作時,餘額變動,
【3】區塊鏈特點:
(1)。不可攥改 :區塊鏈只支援添加和查詢,不能修改和刪除 (區塊鏈上沒有404)
(2)。可追溯 :
(3)。去中心化:對資料不可攥改的保證,不能依賴於一個中心。
3。區塊鏈架構模型
說明:
資料層-》網路層-》共識層-》激勵層-》合約層 (共5層)一起構成區塊鏈基礎架構的核心系統。
應用程式層:代表基於區塊鏈技術構建的各種應用。與區塊鏈5個核心系統分開部署,通過遠端程序呼叫RPC,與區塊鏈核心系統進行互動。
【1】資料層 & 網路層 & 共識層 (構建區塊鏈必要元素)
A。資料層
資料層封裝了底層資料的鏈式結構,以及相應的非對稱公私密金鑰加密技術和時間戳記技術。(整個區塊鏈技術中最底層的資料結構)
B。網路層
網路層包括p2p組網機制,資料傳播機制和資料驗證機制等。
C。共識層
共識層封裝了網路節點的各類共識機制演算法。共識機制演算法是區塊鏈的核心技術,這決定了到底是誰來進行計算。計算方式將影響整個系統的安全性和可靠性。
POW/EOS/DPOS/PBFP等共識演算法。
【2】。激勵層 (主要應用公有鏈)
主要用在公有鏈中。必須激勵遵守規則參與計算的節點。懲罰不遵守規則的節點。(私人鏈 & 聯盟鏈中不一定要激勵,因為參與計算的節點往往在鏈外就完成了博弈)
【3】。合約層
用來封裝各類指令碼,演算法和智能合約。是區塊鏈可程式化的基礎。可簡單理解為一份自訂的電子合約。並且這個合約可以在達到一定觸發條件後自動執行,不需要人工幹預。也可在不滿足條件時自動解約。
【4】。應用程式層
應用程式層封裝了區塊鏈的應用情境和案例。如搭建的以太坊等?
4。區塊鏈鏈式結構
鏈式結構:
鏈式結構最基礎構成單無----區塊(由區塊頭和區塊體組成)
區塊體:儲存體交易資料
區塊頭:父區塊hash
問題:為什麼每一個區塊頭都要儲存上一下區塊的hash值?(同一個值進行hash計算的結果是一致的。)
理解--hash函數
4。鏈式結構小結
注意:區塊1的值有一點改動,hash值都會變化。區塊2就會引用一個錯誤的地址。即區塊鏈2引用的區塊1的hash值無效。
區塊1值的變動,會引起區塊2hash值的變動。。。。依次。。。(要改動所有區塊。)
5。構建自己的區塊鏈
組成部分:
(一)。實現鏈式結構
(二)。實現一個簡單的http server,對外暴露讀寫介面
步驟:
step1:建立block (開發環境:GoLand)
A。建立工程demochain
demichain / Block.go
B。建立Block檔案
C。建立Block結構體與函數
結構體:
計算hash值
產生新區塊
創始區塊
step2:建立blockchain
視頻地址:https://www.imooc.com/video/17447
A。建立blockchain檔案 (Blockchain.go)
B。建立blockchain結構體與相關方法
定義blockchain結構體:
定義相關方法 (向區塊鏈裡添加區塊)
驗證(不是所有區塊都可以添加到區塊鏈)
step3:建立httpserver
視頻地址:https://www.imooc.com/video/17448
不僅可以在本地訪問也可以提供API介面訪問。
包:rpc / 檔案 Server.go
(三)。效果展示(3個區塊鏈,可通過地址欄添加新的區塊鏈)
視頻地址:https://www.imooc.com/video/17445
001/Go語言構建區塊鏈(mooc)