客戶端與區塊鏈網路的交互
1. 淺析 Fabric Peer 節點
Hyperledger Fabric,也稱之為超級賬本,是由 IBM 發起,後成為 Linux 基金會 Hyperledger 中的區塊鏈項目之一。
Fabric 是一個提供分布式賬本解決方案的平台,底層的賬本數據存儲使用了區塊鏈。區塊鏈平台通常可以分為公有鏈、聯盟鏈和私有鏈。公有鏈典型的代表是比特幣這些公開的區塊鏈網路,誰都可以加入到這個網路中。聯盟鏈則有準入機制,無法隨意加入到網路中,聯盟鏈的典型例子就是 Fabric。
Fabric 不需要發幣來激勵參與方,也不需要挖礦來防止有人作惡,所以 Fabric 有著更好的性能。在Fabric 網路中,也有著諸多不同類型的節點來組成網路。其中 Peer 節點承載著賬本和智能合約,是整個區塊鏈網路的基礎。在這篇文章中,會詳細分析 Peer 的結構及其運行方式。
在本文中,假設讀者已經了解區塊鏈、智能合約等概念。
本文基於 Fabric1.4 LTS。
區塊鏈網路是一個分布式的網路,Fabric 也是如此,由於 Fabric 是聯盟鏈,需要准入機制,所以在網路結構上會復雜很多,下面是一個簡化的 Fabric 網路:
各個元素的含義如下:
對於 Fabric 網路,外部的用戶需要通過客戶端應用,也就是圖中的 A1、A2 或者 A3 來訪問網路,客戶端應用需要通過 CA 證書表明自己的身份,這樣才能訪問到 Fabric 網路中有許可權訪問的部分。
在上面的網路中,共有四個組織,R1、R2、R3 和 R4。其中 R4 是整個 Fabric 網路的創建者,網路是根據 NC4 配置的。
在 Fabric 網路中,不同的組織可以組成聯盟,不同的聯盟之間數據通過 Channel 來隔離。Channel 中的數據只有該聯盟中的組織才能訪問,每一個新的 Channel 都可以認為是一條新的鏈。與其他的區塊鏈網路中通常只有一條鏈不一樣,Fabric 可以通過 Channel 在網路中快速的搭建出一個新的區塊鏈。
上面 R1 和 R2 組成了一個聯盟,在 C1 上交易。R2 同時又和 R3 組成了另外一個聯盟,在 C2 上交易。R1 和 R2 在 C1 上交易時,對 R3 是不可見的,R2 和 R3 在 C2 上交易時,對 R1 是不可見的。Channel 機制提供了很好的隱私保護能力。
Orderer 節點是整個 Fabric 網路共有的,用來為所有的交易排序、打包。比如上面網路中 O4 節點。本文不會對 Orderer 節點進行詳細說明,可以把這個功能理解為比特幣網路中的挖礦過程。
Peer 節點表示網路中的節點,通常一個 Peer 就表示一個組織,Peer 是整個區塊鏈網路的基礎,是智能合約和賬本的載體,Peer 也是本文討論的重點。
一個 Peer 節點可以承載多套賬本和智能合約,比如 P2 節點,既維護了 C1 的賬本和智能合約,也維護了 C2 的賬本和智能合約。
為了可以更深入了解 Peer 節點的作用,先了解一下 Fabric 整體的交易流程。整體的交易流程圖如下:
Peer 節點按照功能來分可以分為 背書節點 和 記賬節點 。
客戶端會提交交易請求到背書節點,背書節點開始模擬執行交易,在模擬執行之後,背書節點並不會去更新賬本數據,而是把這個交易進行加密和簽名,然後返回給客戶端。
客戶端收到這個響應之後就會把響應提交到 Orderer 節點,Orderer 節點會對這些交易進行排序,並打包成區塊,然後分發到記賬節點,記賬節點就會對交易進行驗證,驗證結束之後,就會把交易記錄到賬本裡面。
一筆交易是否能成功是根據背書策略來指定的,每一個智能合約都會指定一個背書策略。
Peer 節點代表著聯盟鏈中的各個組織,區塊鏈網路也是由 Peer 節點來組成的,而且也是賬本和智能合約的載體。
通過對上面交易過程的了解可以知道,Peer 節點是主要的參與方。如果用戶想要訪問賬本資源,都必須要和 peer 節點進行交互。在一個 Peer 節點中,可以同時維護多個賬本,這些賬本屬於不同的 Channel 。每個 Peer 節點都會維護一套冗餘賬本,這樣就避免了單點故障。
Peer 節點根據在交易中的不同角色,可以分成背書節點(Endorser)和記賬節點(Committer),背書節點會對交易進行模擬執行,記賬節點才會真正將數據存儲到賬本中。
賬本可以分成兩個部分,一部分是區塊鏈,另一部分是 Current State,也被稱之為 World State。
區塊鏈上只能追加,不能對過去的數據進行修改,鏈上也包含兩部分信息,一部分是通道的配置信息,另一部分是不可修改,序列化的記錄。每一個區塊記錄前一個區塊的信息,然後連成鏈,如下圖所示:
第一個區塊被稱之為 genesis block,其中不存儲交易信息。每個區塊可以被分為 區塊頭 、 區塊數據 和 區塊元數據 。區塊頭中存儲著當前區塊的區塊號、當前區塊的 hash 值和上一個區塊的 hash 值,這樣才能把所有的區塊連接起來。區塊數據中包含了交易數據。區塊元數據中則包括了區塊寫入的時間、寫入人及簽名。
其中每一筆交易的結構如下,在 Header 中,包含了 ChainCode 的名稱、版本信息。Signature 就是交易發起用戶的簽名。Proposal 中主要是一些參數。Response 中是智能合約執行的結果。Endorsements 中是背書結果返回的結果。
WorldState中維護了賬本的當前狀態,數據以 Key-Value 的形式存儲,可以快速查詢和修改,每一次對 WorldState 的修改都會被記錄到區塊鏈中。WorldState 中的數據需要依賴外部的存儲,通常使用 LevelDB 或者 CouchDB。
區塊鏈和 WorldState 組成了一個完整的賬本,World State 保證的業務數據的靈活變化,而區塊鏈則保證了所有的修改是可追溯和不可篡改的。
在交易完成之後,數據已經寫入賬本,就需要將這些數據同步到其他的 Peer,Fabric 中使用的是 Gossip 協議。Gossip 也是 Channel 隔離的,只會在 Channel 中的 Peer 中廣播和同步賬本數據。
智能合約需要安裝到 Peer 節點上,智能合約是訪問賬本的唯一方式。智能合約可以通過 Go、Java 等變成語言進行編寫。
智能合約編寫完成之後,需要打包到 ChainCode 中,每個 ChainCode 中可以包含多個智能合約。ChainCode 需要安裝,ChainCode 需要安裝到 Peer 節點上。安裝好了之後,ChainCode 需要在 Channel 上實例化,實例化的時候需要指定背書策略。
智能合約在實例化之後就可以用來與賬本進行交互了,流程圖如下:
用戶編寫並部署實例化智能合約之後,就可以通過客戶端應用程序來向智能合約提交請求,智能合約會對 WorldState 中數據進行 get、put 或者 delete。其中 get 操作直接從 WorldState 中讀取交易對象當前的狀態信息,不會去區塊鏈上寫入信息,但 put 和 delete 操作除了修改 WorldState,還會去區塊鏈中寫入一條交易信息,且交易信息不能修改。
區塊鏈上的信息可以通過智能合約訪問,也可以在客戶端應用通過 API 直接訪問。
Event 是客戶端應用和 Fabric 網路交互的一種方式,客戶端應用可以訂閱 Event,當 Event 發生時,客戶端應用就會接受到消息。
事件源可以兩類,一類是智能合約發出的 Event,另一類是賬本變更觸發的 Event。用戶可以從 Event 中獲取到交易的信息,比如區塊高度等信息。
在這篇文章中,首先介紹了 Fabric 整體的網路架構,通過對 Fabric 交易流程的分析,討論了 peer 節點在交易中的作用,然後詳細分析了 peer 節點所維護的賬本和智能合約,並分析了 peer 節點維護賬本以及 peer 節點執行智能合約的流程。
文 / Rayjun
[1] https://hyperledger-fabric.readthedocs.io/zh_CN/release-1.4/whatis.html
[2] https://developer.ibm.com/zh/technologies/blockchain/series/os-academy-hyperledger-fabric/
[3] https://en.wikipedia.org/wiki/Gossip_protocol
2. 輕用戶是什麼意思
什麼是輕客戶端?為什麼你需要了解它
播報文章
在以太坊的案例中,過去只有一種類型的節點,現在稱為全節點。這個軟體負責驗證和轉播網路上的交易和區塊。由於無信任環境(開放的互聯網)和區塊鏈的性質,每個全節點需要下載並驗證每個區塊,所以就是在每個區塊中驗證每一筆交易。
Parity Ethereum 和 Geth 這兩個最受歡迎的以太坊客戶端,今天都可以在一台中等功率的筆記本電腦上運行。然而,下載和驗證整個區塊鏈的區塊是需要時間和資源的。例如,現在需要使用 SSD 來完全同步以太坊區塊鏈。HDD 無法跟上每秒所需的輸入/輸出操作。
全節點使用案例
現在,組織和個人運行全節點是因為他們的業務需要。想想礦工、區塊瀏覽器、交易所。個人用戶可能希望運行全節點,因為這是與區塊鏈交互的最安全方式。在一個更小的范圍內,他們也可能是純粹的利他主義來幫助網路。7*24 小時全天候的運行一個全節點需要良好的知識和資源水平,大多數用戶不願意投資是可以理解的。除了礦工,沒有什麼內置的激勵來運行一個全節點,盡管這部分基礎設施對網路至關重要。
因此,大多數與區塊鏈交互的用戶,不管是否自願,都會使用一個中心的基礎設施。最流行的軟體錢包默認依賴於第三方託管的節點。這些客戶端連接到遠程節點,並以非密碼驗證的方式完全信任其響應。它的積極方面顯然是增強了用戶體驗,因為這些錢包的用戶不需要運行自己的節點。但是,它們被迫信任第三方節點。默認情況下,Metamask、MyEtherWallet 和 MyCrypto 連接到遠程節點,但如果用戶願意,仍然允許他們連接到自己的本地節點。這不是 Jaxx 或 Exos 錢包的情況,它們默認連接到遠程節點,而沒有連接到用戶自己的本地節點的選項。這里沒有提到移動錢包,因為手機無法運行全節點。
像 Infura 這樣的公司致力於運行全節點,並免費提供給那些需要它們的人。抽象出同步一個全節點的麻煩,允許任何用戶輕松地訪問區塊鏈。這樣的解決方案有助於讓更多用戶能夠訪問以太坊。然而,盡管這一舉措是對生態系統的一個重大補充,但它代表了一個中心化的單一失敗點,與去中心化的區塊鏈理念背道而馳。直到幾個月前,錢包開發商還沒有其他選擇。
「我們的目標是創建一個兼容不同程度『輕』的協議,從幾乎不存儲任何內容的客戶端到幾乎存儲所有內容的客戶端。」
— PIP, Parity Light Protocol(https://wiki.parity.io/The-Parity-Light-Protocol-%28PIP%29)
輕量級替代方案:輕客戶端
輕客戶端或輕節點是連接到全節點與區塊鏈交互的軟體。與全節點對應節點不同,輕節點不需要運行 24/7 或讀寫區塊鏈上的大量信息。事實上,輕客戶端並不直接與區塊鏈交互,而是使用全節點作為中介。輕客戶端依賴於全節點去執行許多操作,從請求最新的區塊頭到請求帳戶中的余額。
輕客戶端協議的設計方式允許它們以最小信任的方式與全節點交互。這是一個需要理解的關鍵方面,因此讓我們回顧一下以太坊區塊鏈的基礎知識:
1. 普通用戶使用全節點、輕節點或受信任的遠程節點在網路上發送交易。
2. 全節點從網路上的對等節點接收交易,檢查這些交易的有效性,並將它們廣播到網路。
3. 礦工是連接到特定軟體的全節點。他們像一個普通的全節點一樣從網路上接收和驗證交易,但是會額外投入大量的精力來尋找問題的解決方案,才會被允許生成下一個區塊。礦工使用的全節點通過應該將哪個區塊添加到區塊鏈並構建在其上達成共識。任何在其上構建了至少 10 個塊的塊都被認為是安全的,因為它包含的交易被還原的概率非常低。
現在,回到我們的輕客戶端。作為起點,輕客戶端需要下載區塊鏈的區塊頭。輕客戶端不需要為它對全節點的每個請求去信任全節點。這是因為區塊頭包含一個名為 Merkle 樹根的信息。Merkle 樹根就是區塊鏈上有賬戶余額和智能合約存儲的所有信息的指紋。如果有任何微小的信息改變,這個指紋也會改變。假設大多數礦工都是誠實的,那麼區塊頭和他們所包含的指紋就被認為是有效的。輕客戶端可能需要從全節點請求信息,例如特定帳戶的余額。輕客戶端知道每個區塊的指紋,就可以驗證全節點給出的答案是否與其擁有的指紋匹配。這是一個強有力的工具,可以在事先不知情的情況下證明信息的真實性。
由於輕客戶端需要發送多個請求來執行簡單的操作,因此所需的總體網路帶寬高於全節點的帶寬。另一方面,所需的資源和存儲量比全節點的資源和存儲量低幾個數量級,同時實現了非常高的安全級別。只需要大約 100MB 的存儲空間和較低的計算能力,輕節點就可以在移動設備上運行!這意味著手機可以以去中心化的方式訪問區塊鏈。
因為只需要一個全節點的一小部分信息,所以一個輕節點可以更快地與區塊鏈同步。目前,將整個以太坊主網區塊鏈同步,輕客戶端大約只需要一個小時,但節點同步超過幾秒對任何應用程序來說都太多了。為輕客戶端開發的解決方案可以快速與區塊鏈頂部同步,盡管這些解決方案通常需要權衡。目前,輕客戶端在其代碼中內置了一個可信的區塊鏈檢查點。正因為如此,客戶端只需要下載最新的區塊頭文件,就可以在幾秒鍾內實現同步。輕客戶端用戶信任客戶端開發人員集成有效的檢查點。這種折衷被認為是可以接受的,因為用戶已經需要信任客戶端實現的開發人員。為了以去中心化的方式快速執行同步,Parity Technologie 目前開發了一種替代解決方案,允許輕客戶端以與全節點類似的方式執行扭曲同步(https://wiki.parity.io/Warp-Sync)。
未來,輕客戶端會遍布各地。 — Marty McFly
輕客戶端的挑戰
輕客戶端非常適合主流應用,例如發送一些交易和驗證帳戶余額。對輕客戶端的主要批評是,輕客戶端不能直接幫助網路。它們不驗證除自己需要的信息以外的任何其他信息,也不從網路向其他對等節點提供或轉播信息,它們使用來自全節點的資源,而不提供任何的回報。
與全節點相比,輕客戶端提供了更好的最終用戶體驗,同時允許最終用戶以去中心化的和安全的方式訪問區塊鏈。關鍵是要找到一種激勵個人和機構的方式去運行全節點、服務輕節點、懲罰服務壞數據的惡意全節點。使輕客戶端可持續發展的一種方法是讓他們對全節點發出的每個請求執行小額支付。在不久的將來,輕客戶端將在以太坊分片中扮演重要角色,讓驗證節點快速同步不同的分片。輕客戶端還可用於報告惡意參與者(驗證節點或 plasma 許可權)。輕客戶端對全節點的激勵是一個活躍的研究領域,因為激勵是生態系統穩定的關鍵。
有一些很有前途的想法可以讓輕客戶端快速同步,同時避免前面提到的折衷方案。一種想法是允許全節點提供最新的已知區塊頭的零知識證明(例如,zk-STARK https://eprint.iacr.org/2018/046.pdf)。然後,輕客戶端可以驗證它並與鏈的頂部同步,而無需事先知道區塊鏈的狀態。
總之,在短期內,輕客戶端將成為去中心化應用程序的骨幹,這對用戶友好的分布式生態系統來說是一個非常好的消息。
3. 一文讀懂,XFS中你必須掌握的密碼與區塊鏈理論術語
人們對於事物的深刻認知,不是像「如何將大象放進冰箱?」那般,只回答「打開冰箱,把大象放進去,關上冰箱」那麼簡單。 任何事物都需要一個抽絲剝繭,化整為零的認知過程。 特別是一個新興的概念和事物,更需要更加細致的了解。
XFS系統是一個分布式文件系統,但它並不是一個單一的框架結構,他 是密碼學、區塊鏈、互聯網等多種技術手段結合的一個有機整體 ,因此,想要更詳細的了解它,我們必須知道一些專業術語的概念。
1.加密網路
加密網路簡單來說就是一個公共區塊鏈。在區塊鏈技術誕生之前,互聯網網路中的數據傳輸其實是沒有任何加密手段的,黑客一旦截取的其中的數據,那麼除非那段數據本身就是密文,否則那些數據就直白地暴露在黑客眼前。
加密網路便是通過區塊鏈技術,由區塊鏈各個節點維護,任何人都可以無需許可加入,更重要的是,整個網路中運轉的數據是加密的。XFS系統便是一個典型的加密網路。
2.哈希演算法
哈希演算法是區塊鏈中用以確保數據完整性和安全性的一個特殊程序。哈希演算法採用的是名為「哈希函數」數學關系,結果輸出被稱為「加密摘要」。加密摘要的特點是任意長度的數據輸入後,返回的都是一個唯一且固定長度的值。
哈希函數具備:
基於這些特性,它在保證加密安全時也被用於防篡改,因為即使對散列函數的數據輸入進行微小更改也會導致完全不同的輸出。這也成為了現代密碼學和區塊鏈的主力。
3.分布式賬本
區塊鏈就是一個分布式賬本,但這個賬本不僅僅可以記錄交易信息,還可以記錄任何數據交互。每個分類帳交易都是一個加密摘要,因此無法在不被檢測到的情況下更改條目。這樣使得區塊鏈使參與者能夠以一種去中心化的方式相互審計。
4.私鑰和公鑰
私鑰和公鑰是區塊鏈通過哈希演算法形成加密後生成的一組用於解密的「鑰匙」。通過對私鑰加密,形成公鑰,此時,原始信息只能通過私鑰進行查看,由用戶自己保存,公鑰就如同一個房屋地址,用於進行數據交互,是可以公開的。反之,如果對公鑰加密,形成私鑰,那麼就會形成不可篡改的數字簽名,因為這個公鑰上的簽名只有私鑰擁有者才能進行創建。
1.節點
節點是一個區塊鏈網路的最基礎建設,也是區塊鏈網路和現實連接的物理設備。單個節點擁有許多的功能,例如緩存數據、驗證信息或將消息轉發到其他節點等。
2.點對點(P2P)網路
區塊鏈所構建的便是去中心化後節點與節點之間的數據交互。傳統的互聯網數據傳輸是一種客戶端—伺服器—客戶端的中心輻射模式。點對點網路則更符合「網」這個詞,在這個網路中,每個節點都在單一通信協議下運行,以在它們之間傳輸數據,避免了因為伺服器單點故障而引發的網路崩潰。
3.共識驗證
區塊鏈的共識驗證解決了大量分散的節點意見不統一的問題,以「少數服從多數」的哲學依據,在區塊鏈網路中,更多的節點認可便意味著「共識」,通常而言,區塊鏈網路中超過51%的節點認可的便會被採用和認可。
4.復制證明和時空證明
這兩個證明在XFS系統中都可以總稱為存儲證明。XFS系統的核心功能之一是數據存儲,因此,為了證明存儲的有效性,便通過復制證明驗證數據是否存在節點存儲空間中,並通過時空證明驗證時間上的持續性。存儲提供方如果在儲存有效期內能持續提交存儲證明,那麼他便會獲得由XFS系統提供的獎勵。
5.冗餘策略和糾刪碼
這是XFS用來平衡數據存儲量的兩個方式。冗餘策略將數據通過多副本的方式備份,確保數據在損壞或丟失後能找回。
糾刪碼則是確保數據在復制、傳輸時不會產生過多備份,節省存儲空間、提高傳輸效率。
6.文件分片協議
XFS將文件切分為N個細小的碎片存儲在節點當中,這些碎片只要有任意 M個碎片即可恢復出數據,這樣只要不同時有 N-M+1 個節點失效就能保證數據完整不丟失。
7.智能合約
XFS中的智能合約是一段程序代碼,由於是基於區塊鏈生成的,因此同樣繼承了區塊鏈不可篡改、可追溯等特點,它能保證雙方執行結果的確定性,這也使得XFS網路中的數據交互變得更加可信。
8.Dapp
即去中心化APP,同普通的APP一樣具備更加方便快捷的網路接入埠,唯一不同的便是它拋棄了傳統APP中心化的特點,這使得Dapp中的數據是歸屬於用戶自身,不用擔心隱私泄露、大數據殺熟等問題。
XFS系統是一個開放性平台,用戶可以自由的在其中使用、設計、創作各種Dapp。
結語
關於XFS中的理論術語基於篇幅原因是很難詳細展開細講的,這其中涉及到了更多的互聯網和區塊鏈專業知識。但通過上面這些簡單的解釋,相信大家對XFS系統也有了一個比較立體的認知,那麼,我們便期待打破傳統中心化存儲弊端,開船全新存儲時代的XFS新一代分布式文件系統吧。
4. 一文看懂互聯網區塊鏈
一文看懂互聯網區塊鏈
一文看懂互聯網區塊鏈,要了解區塊鏈,就不得不從互聯網的誕生開始研究區塊鏈的技術發展簡史,從中發掘區塊鏈產生的動因,並由此推斷區塊鏈的未來。下面讓我們一文看懂互聯網區塊鏈。
一文看懂互聯網區塊鏈1
區塊鏈的鼻祖就是麻將,最早的區塊鏈是中國人發明的!區塊鏈就跟麻將一樣,只不過麻將的區塊比較少而已,麻將只有136個區塊,各地麻將規則不同可視作為比特幣的硬分叉。
麻將作為最古老的區塊鏈項目,四個礦工一組,最先挖出13位正確哈希值的獲得記賬權以及獎勵,採用願賭服輸且不能作弊出老千的共識機制!
麻將去中心化,每個人都可以是庄,完全就是點對點。
礦池=棋牌室的老闆抽佣。
不可篡改,因為說服其他三個人需要消耗太多算力和體力。
典型的價值互聯網。我兜里的價值用不了八圈,就跑到他們兜里去了。
中國人基本上人手打得一手好麻將,區塊鏈方面生產了全球70%~80%的礦機,並擁有全世界最多的算力,約佔77%的算力
麻將其實是最早的的區塊鏈項目:
1,四個礦工一組,先碰撞出13個數字正確哈希值的礦工可以獲得記賬權並得到獎勵。
2,不可篡改。因為說服其他三個人需要消耗太多算力和體力。
3,典型的價值互聯網。我兜里的價值數字貨幣www.gendan5.com/digitalcurrency/btc.html用不了八圈,就跑到他們兜里去了。
4、去中心化,每個人都可以是庄,完全就是點對點。
5、UTXO,未花費的交易支出。
還有另外一種賒賬的區塊鏈玩法,假設大家身上都沒現金
細究一下,在大家達成共識時,我們看不到任何中介或者第三方出來評判丙贏了,大家給丙的獎勵也不需要通過第三方轉交給丙,都是直接點對點交易,這一過程就是去中心化,牌友們(礦工)各自記錄了第一局的戰績,丙大胡自摸十三幺,乙杠了甲東風,記錄完成後就生成了一個完整的區塊,但要記住,這才只是第一局,在整個區塊鏈上,這才僅僅是一個節點,開頭說的8局打完,也就是8個節點(區塊),8個區塊連接在一起就形成了一個完整賬本,這就是區塊鏈。因為這個賬本每人都有一個,所以就是分布式賬本,目的就是為了防止有人篡改記錄,打到最後,誰輸誰贏一目瞭然。
4個男士(甲乙丙丁)湊在一塊打麻將來錢,大家都沒帶現金,於是請一美女(中心化)用本子記賬,記錄每一局誰贏了多少錢、誰輸了多少錢?最後結束時,大家用支付寶或微信支付結總賬,但是如果這位美女記賬時記錯了或者預先被4人中的某人買通了故意記錯,就保證不了這個游戲結果的公正公平合理性,你說是不是?那怎麼辦呢?如果你「打麻將」能用「區塊鏈」作為游戲規則改編為如下:
4個男士(甲乙丙丁)湊在一塊打麻將來錢,大家都沒帶現金,乙說讓她帶來的美女記賬,甲說這位美女我們都不認識,於是甲乙丙丁4人一致約定每個人每局牌都在自己的手機上(區塊鏈節點)同時記賬(去中心化),最後打完麻將,直接手機上以電子貨幣結賬時,大家都對一下記賬的的結果,本來應該是一樣的記賬結果。
假設本來結果是甲手機上記的賬:乙欠甲10元。但乙手機上的記錄卻是不欠,可是其餘2人(丙、丁)和甲的記賬一樣,那還是按照少數服從多數規則結算,另外大家心裡對乙的誠信印象就差評了,下次打麻將就不會帶乙一起玩了。
除非乙預先買通(丙、丁)2人讓其故意作假,但乙買通他們2人的代價是10萬元(賴賬10元的1萬倍),那常理上乙只能選擇放棄,因為做假成本太高了。
假設即使乙在打牌的過程中,偷偷願意以高價10萬元預先買通丙、丁做這筆巨虧的傻貓交易,但區塊鏈的規則是按時間戳記賬的,原來是下午1點鍾記賬乙欠甲10元的,即丙和丁下午3點鍾再改賬時,時間是不可逆的,只能記下午3點鍾,那就又不吻合游戲規則了。
實際上在2017年博主已經開發出了一套麻將幣
中國最早的區塊鏈項目:四個礦工一組,最先從 148 個隨機數字中碰撞出 14 個數字正確哈希值的礦工,可以獲得一次記賬權激勵,由於分布式記賬需要得到其他幾位礦工的共識,因此每次記賬交易時間長約十幾分鍾。
一文看懂互聯網區塊鏈2
一、比特幣誕生之前,5個對區塊鏈未來有重大影響的互聯網技術
1969年,互聯網在美國誕生,此後互聯網從美國的四所研究機構擴展到整個地球。在應用上從最早的軍事和科研,擴展到人類生活的方方面面,在互聯網誕生後的近50年中,有5項技術對區塊鏈的未來發展有特別重大的意義。
1、1974誕生的TCP/IP協議:決定了區塊鏈在互聯網技術生態的位置
1974年,互聯網發展邁出了最為關鍵的一步,就是由美國科學家文頓瑟夫和羅伯特卡恩共同開發的互聯網核心通信技術--TCP/IP協議正式出台。
這個協議實現了在不同計算機,甚至不同類型的網路間傳送信息。所有連接在網路上的計算機,只要遵照這個協議,都能夠進行通訊和交互。
通俗的說,互聯網的數據能穿過幾萬公里,到達需要的計算機用戶手裡,主要是互聯網世界形成了統一的信息傳播機制。也就是互聯網設備傳播信息時遵循了一個統一的法律-TCP/IP協議。
理解TCP/IP協議對掌握互聯網和區塊鏈有非常重要的意義,在1974年TCP/IP發明之後,整個互聯網在底層的硬體設備之間,中間的網路協議和網路地址之間一直比較穩定,但在頂層應用層不斷涌現層出不窮的創新應用,這包括新聞,電子商務,社交網路,QQ,微信,也包括區塊鏈技術。
也就是說區塊鏈在互聯網的技術生態中,是互聯網頂層-應用層的一種新技術,它的出現,運行和發展沒有影響到互聯網底層的基礎設施和通訊協議,依然是按TCP/IP協議運轉的眾多軟體技術之一。
2、1984年誕生的思科路由器技術:是區塊鏈技術的模仿對象
1984年12月,思科公司在美國成立,創始人是斯坦福大學的一對夫婦,計算機中心主任萊昂納德·波薩克和商學院的計算機中心主任桑蒂·勒納,他們設計了叫做「多協議路由器」的聯網設備,放到互聯網的通訊線路中,幫助數據准確快速從互聯網的一端到達幾千公里的另一端。
整個互聯網硬體層中,有幾千萬台路由器工作繁忙工作,指揮互聯網信息的傳遞,思科路由器的一個重要功能就是每台路由都保存完成的互聯網設備地址表,一旦發生變化,會同步到其他幾千萬台路由器上(理論上),確保每台路由器都能計算最短最快的路徑。
大家看到路由器的運轉過程,會感到非常眼熟,那就是區塊鏈後來的重要特徵,理解路由器的意義在於,區塊鏈的重要特徵,在1984年的路由器上已經實現,對於路由器來說,即使有節點設備損壞或者被黑客攻擊,也不會影響整個互聯網信息的傳送。
3、隨萬維網誕生的B/S(C/S)架構:區塊鏈的對手和企圖顛覆的對象
萬維網簡稱為Web,分為Web客戶端和伺服器。所有更新的信息只在Web伺服器上修改,其他幾千,上萬,甚至幾千萬的客戶端計算機不保留信息,只有在訪問伺服器時才獲得信息的數據,這種結構也常被成為互聯網的B/S架構,也就是中心型架構。這個架構也是目前互聯網最主要的架構,包括谷歌、Facebook、騰訊、阿里巴巴、亞馬遜等互聯網巨頭都採用了這個架構。
理解B/S架構,對與後續理解區塊鏈技術將有重要的意義,B/S架構是數據只存放在中心伺服器里,其他所有計算機從伺服器中獲取信息。區塊鏈技術是幾千萬台計算機沒有中心,所有數據會同步到全部的計算機里,這就是區塊鏈技術的核心,
4、對等網路(P2P):區塊鏈的父親和技術基礎
對等網路P2P是與C/S(B/S)對應的另一種互聯網的基礎架構,它的特徵是彼此連接的多台計算機之間都處於對等的地位,無主從之分,一台計算機既可作為伺服器,設定共享資源供網路中其他計算機所使用,又可以作為工作站。
Napster是最早出現的P2P系統之一,主要用於音樂資源分享,Napster還不能算作真正的對等網路系統。2000 年3月14 日,美國地下黑客站點Slashdot郵寄列表中發表一個消息,說AOL的Nullsoft 部門已經發放一個開放源碼的Napster的克隆軟體Gnutella。
在Gnutella分布式對等網路模型中,每一個聯網計算機在功能上都是對等的,既是客戶機同時又是伺服器,所以Gnutella被稱為第一個真正的對等網路架構。
20年裡,互聯網的一些科技巨頭如微軟,IBM,也包括自由份子,黑客,甚至侵犯知識產權的犯罪分子不斷推動對等網路的發展,當然互聯網那些希望加強信息共享的理想主義者也投入了很大的熱情到對等網路中。區塊鏈就是一種對等網路架構的軟體應用。它是對等網路試圖從過去的沉默爆發的標桿性應用。
5、哈希演算法:產生比特幣和代幣(通證)的關鍵
哈希演算法將任意長度的數字用哈希函數轉變成固定長度數值的演算法,著名的哈希函數如:MD4、MD5、SHS等。它是美國國家標准暨技術學會定義的加密函數族中的一員。
這族演算法對整個世界的運作至關重要。從互聯網應用商店、郵件、殺毒軟體、到瀏覽器等、,所有這些都在使用安全哈希演算法,它能判斷互聯網用戶是否下載了想要的東西,也能判斷互聯網用戶是否是中間人攻擊或網路釣魚攻擊的受害者。
區塊鏈及其應用比特幣或其他虛擬幣產生新幣的過程,就是用哈希演算法的函數進行運算,獲得符合格式要求的數字,然後區塊鏈程序給予比特幣的獎勵。
包括比特幣和代幣的挖礦,其實就是一個用哈希演算法構建的小數學游戲。不過因為有了激烈的競爭,世界各地的人們動用了強大的伺服器進行計算,以搶先獲得獎勵。結果導致互聯網眾多計算機參與到這個小數學游戲中,甚至會耗費了某些國家超過40%的電量。
二、區塊鏈的誕生與技術核心
區塊鏈的誕生應該是人類科學史上最為異常和神秘的發明和技術,因為除了區塊鏈,到目前為止,現代科學史上還沒有一項重大發明找不到發明人是誰。
2008年10月31號,比特幣創始人中本聰(化名)在密碼學郵件組發表了一篇論文——《比特幣:一種點對點的電子現金系統》。在這篇論文中,作者聲稱發明了一套新的不受政府或機構控制的電子貨幣系統,區塊鏈技術是支持比特幣運行的基礎。
論文預印本地址在http://www.bitcoin.org/bitcoin.pdf,從學術角度看,這篇論文遠不能算是合格的論文,文章的主體是由8個流程圖和對應的解釋文字構成的, 沒有定義名詞、術語,論文格式也很不規范。
2009年1月,中本聰在SourceForge網站發布了區塊鏈的應用案例-比特幣系統的開源軟體,開源軟體發布後, 據說中本聰大約挖了100萬個比特幣.一周後,中本聰發送了10個比特幣給密碼學專家哈爾·芬尼,這也成為比特幣史上的第一筆交易。伴隨著比特幣的蓬勃發展,有關區塊鏈技術的研究也開始呈現出井噴式增長。
向大眾完整清晰的解釋區塊鏈的確是困難的事情,我們以比特幣為對象,盡量簡單但不斷深入的介紹區塊鏈的技術特徵。
1、區塊鏈是一種對等網路(P2P)的軟體應用
我們在前文提過,在21世紀初,互聯網形成了兩大類型的應用架構,中心化的B/S架構和無中心的對等網路(P2P)架構,阿里巴巴,新浪,亞馬遜,網路等等很多互聯網巨頭都是中心化的B/S架構,簡單的說,就是數據放在巨型伺服器中,我們普通用戶通過手機,個人電腦訪問阿里,新浪等網站的伺服器。
21世紀初以來,出現了很多自由分享音樂,視頻,論文資料的軟體應用,他們大部分採用的是對等網路(P2P)架構,就是沒有中心伺服器,大家的個人計算機都是伺服器,也都是客戶機,身份平等。但這類應用一直沒有流行起來,主要原因是資源消耗大,知識版權有問題等。區塊鏈就是這種領域的一種軟體應用。
2、區塊鏈是一種全網信息同步的對等網路(P2P)軟體應用
對等網路也有很多應用方式,很多時候,並不要求每台計算機都保持信息一致,大家只存儲自己需要的的信息,需要時再到別的計算機去下載。
但是區塊鏈為了支持比特幣的金融交易,就要求發生的每一筆交易都要寫入到歷史交易記錄中,並向所有安裝比特幣程序的計算機發送變動信息。每一台安裝了比特幣軟體的計算機都保持最新和全部的.比特幣歷史交易信息。
區塊鏈的這個全網同步,全網備份的特徵也就是常說的區塊鏈信息安全,不可更改來源。雖然在實際上依然不是絕對的安全,但當用戶量非常大時,的確在防範信息篡改上有一定安全優勢。
3、區塊鏈是一種利用哈希演算法產生」通證(代幣)」的全網信息同步的對等網路(P2P)軟體應用
區塊鏈的第一個應用是著名的比特幣,討論到比特幣時,經常會提到的一個名詞就是「挖礦」,那麼挖礦到底是什麼呢?
形象的比喻是,區塊鏈程序給礦工(游戲者)256個硬幣,編號分別為1,2,3……256,每進行一次Hash運算,就像拋一次硬幣,256枚硬幣同時拋出,落地後如果正巧編號前70的所有硬幣全部正面向上。礦工就可以把這個數字告訴區塊鏈程序,區塊鏈會獎勵50個比特幣給礦工。
從軟體程序的角度說,比特幣的挖礦就是用哈希SHA256函數構建的數學小游戲。區塊鏈在這個小游戲中首先規定了一種獲獎模式:給出一個256位的哈希數,但這個哈希數的後70位全部是0,然後游戲者(礦工)不斷輸入各種數字給哈希SHA256函數,看用這個函數能不能獲得位數有70個0的數字,找到一個,區塊鏈程序會獎勵50個比特幣給游戲者。實際的挖坑和獎勵要更復雜,但上面的舉例表達了挖礦和獲得比特幣的核心過程。
2009年比特幣誕生的時候,每筆賞金是50個比特幣。誕生10分鍾後,第一批50個比特幣生成了,而此時的貨幣總量就是50。隨後比特幣就以約每10分鍾50個的速度增長。當總量達到1050萬時(2100萬的50%),賞金減半為25個。當總量達到1575萬(新產出525萬,即1050的50%)時,賞金再減半為12.5個。根據比特幣程序的設計,比特幣總額是2100萬。
從上述介紹看,比特幣可以看做一個基於對等網路架構的猜數小游戲,每次正確的猜數結果獎勵的比特幣信息會傳遞給所有游戲者,並記錄到每個游戲者的歷史資料庫中。
4、區塊鏈技術因比特幣的興起產生的智能合約,通證、ICO與區塊鏈基礎平台
從上面的介紹看,比特幣的技術並不是從天上掉下來的新技術,而是把原來多種互聯網技術,如對等網路架構,路由的全網同步,網路安全的加密技術巧妙的組合在一起,算是一種組合創新的演算法游戲。
由於比特幣通過運作成為可以兌換法幣,購買實物,通過升值獲得暴利,全世界都不淡定了。抱著你能做,我也能做的態度,很多人創造了自己的仿比特幣軟體應用。同時利用政府難以監管對等網路的特點,各種山寨幣與比特幣一起爆發。這其中出現了很多欺詐和潛逃事件,逐步引起各國政府的關注。
區塊鏈基礎平台:用區塊鏈技術框架創建貨幣還是有相當的技術難度,這時區塊鏈基礎平台以太坊等基礎技術平台出現了,讓普通人也可以方便的創建類「比特幣」軟體程序,各顯神通,請人入局挖幣,炒幣,從中獲得利益。
通證或代幣:各家「比特幣」、「山寨幣」如果用哈希演算法創建的猜數小游戲,產生自己的「貨幣」時,這個「貨幣」統稱「通證」或「代幣」。
ICO:由於比特幣和以太幣已經打通與各國法幣的兌換,其他新虛擬幣發幣時,只允許用比特幣和以太幣購買發行的新幣,這樣的發幣過程就叫ICO,ICO的出現放大了比特幣,以太幣的交易量。同時很多ICO項目完全建立在虛無的項目上,導致大量欺詐案例頻發。進一步加深了社會對區塊鏈生成虛擬貨幣的負面認識。
智能合約:可以看做區塊鏈上的一種軟體功能,是輔助區塊鏈上各種虛擬幣交易的程序,具體的功能就像淘寶上支付寶的資金託管一樣,當一方用戶收到的貨物,在支付寶上進行確認後,資金自動支付個給買家貨主,智能合約在比特幣等區塊鏈應用上也是承擔了這個中介支付功能。
三、區塊鏈技術在互聯網中的歷史地位和未來前景
1、區塊鏈處於互聯網技術的什麼位置?是頂層的一種新軟體和架構。
我們在前面的TCP/IP介紹中提到,區塊鏈與瀏覽器、QQ、微信、網路游戲軟體、手機APP等一樣,是互聯網頂層-應用層的一種軟體形式。它的運行依然要靠TCP/IP的架構體系傳輸數據。只是與大部分應用層軟體不同,沒有採用C/S(B/S)的中心軟體架構。而是採用了不常見的對等網路架構,從這一點說,區塊鏈並不能顛覆互聯網基礎結構。
2、區塊鏈想要顛覆誰?想顛覆萬維網的B/S(C/S)結構。
它試圖要顛覆其實是89年年誕生的萬維網B/S,C/S結構。前面說過。由於89年年歐洲物理學家蒂姆· 伯納斯· 李發明萬維網並放棄申請專利。此後近30年中,包括谷歌,亞馬遜,facebook,阿里巴巴,網路,騰訊等公司利用萬維網B/S(C/S)結構,成長為互聯網的巨頭。
在他們的總部,建立了功能強大的中心伺服器集群,存放海量數據,上億用戶從巨頭伺服器中獲取自己需要的數據,這樣也導致後來雲計算的出現,而後互聯網巨頭把自己沒有用完的中心伺服器資源開放出來,進一步吸取企業,政府,個人的數據。中心化的互聯網巨頭對世界,國家,互聯網用戶影響力越來越大。
區塊鏈的目標是通過把數據分散到每個互聯網用戶的計算機上,試圖降低互聯網巨頭的影響力,由此可見區塊鏈真正的對手和想要顛覆的是1990年誕生的B/S(C/S)結構。但能不能顛覆掉,就要看它的技術優勢和瓶頸。
3、區塊鏈的技術缺陷:追求徹底平等自由帶來的困境
區塊鏈的技術缺陷首先來自與它的對等網路架構上,舉個例子,目前淘寶是B/S結構,海量的數據存放在淘寶伺服器集群機房裡,幾億消費者通過瀏覽器到淘寶伺服器網站獲取最新信息和歷史信息。
如果用區塊鏈技術,就是讓幾億人的個人電腦或手機上都保留一份完整的淘寶資料庫,每發生一筆交易,就同步給其他幾億用戶。這在現實中是完全無法實現的。傳輸和存儲的數據量太大。相當於同時建立幾億個淘寶網站運行。
因此區塊鏈無法應用在數據量大的項目上,甚至小一點的網站項目用區塊鏈也會吃力。到2018年,比特幣運行了近10年,積累的交易數據已經讓整個系統面臨崩潰。
於是區塊鏈採用了很多變通方式,如建立中繼節點和閃電節點,這兩個概念同樣會讓人一頭霧水,通俗的說,就是區塊鏈會向它要顛覆的對象B/S結構進行了學習,建立數據伺服器中心成為區塊鏈的中繼節點,也用類瀏覽器的終端訪問,這就是區塊鏈的閃電節點。
這種變動能夠緩解區塊鏈的技術缺陷,但確讓區塊鏈變成它反對的樣子,中心化。由此可見,單純的區塊鏈技術由於技術特徵有重大缺陷,無法像萬維網一樣應用廣泛,如果技術升級,部分採用B/S(C/S)結構,又會使得區塊鏈有了中心化的信息節點,不在保持它誕生時的夢想。
4、從互聯網大腦模型看區塊鏈的未來前景
我們知道互聯網一般是指將世界范圍計算機網路互相聯接在一起的網際網路,在這基礎上發展出覆蓋全世界的全球性互聯網路稱互聯網,即是互相連接一起的網路結構。
從1969年互聯網誕生以來,人類從不同的方向在互聯網領域進行創新,並沒有統一的規劃將互聯網建造成什麼結構,當時間的車輪到達2017年,隨著人工智慧,物聯網,大數據,雲計算,機器人,虛擬現實,工業互聯網等科學技術的蓬勃發展,當人類抬起頭來觀看自己的創造的巨系統,互聯網大腦的模型和架構已經越來越清晰。
通過近20年的發展依託萬維網的B/S,C/S結構,騰訊QQ,微信,Facebook,微博、twitter亞馬遜已經發展出類神經元網路的結構。互聯網設備特別是個人計算機,手機在通過設備上的軟體在巨頭的中心伺服器上映射出個人數據和功能空間,相互加好友交流,傳遞信息。互聯網巨頭通過中心伺服器集群的軟體升級,不斷優化數億台終端的軟體版本。在神經學的體系中,這是一種標準的中樞神經結構。
區塊鏈的誕生提供了另外一種神經元模式,不在巨頭的集中服務中統一管理神經元,而是每台終端,包括個人計算機和個人手機成為獨立的神經元節點,保留獨立的數據空間,相互信息進行同步,在神經學的體系中,這是一種沒有中心,多神經節點的分布式神經結構。
有趣的是,神經系統的發育出現過這兩種不同類型的神經結構。在低等生物中,出現過類區塊鏈的神經結構,有多個功能相同的神經節,都可以指揮身體活動和反應,但隨著生物的進化,這些神經節逐步合並,當進化成為高等生物時,中樞神經出現了,中樞神經中包含大量神經元進行交互。
四、關於區塊鏈在互聯網未來地位的判斷
1、對比特幣的認知:一個基於對等網路架構(P2P)的猜數小游戲,通過高明的金融和輿論運作,成為不受政府監管的」世界性貨幣」。
2、對區塊鏈的認知:一個利用哈希演算法產生」通證(代幣)」的全網信息同步的對等網路(P2P)軟體應用。
3、區塊鏈有特定的用途,如大規模選舉投票,大規模賭博,規避政府金融監管的金融交易等等領域,還是有不可替代的用處。
4、在更多時候,區塊鏈技術會依附於互聯網的B/S,C/S結構,實現功能的擴展,但總體依然屬於互聯網已有技術的補充。對於區塊鏈目前設想的絕大部分應用場景,都是可以用B/S,C/S結構實現,效率可以更高和技術也可以更為成熟。
5、無論是從信息傳遞效率和資源消耗,還是從神經系統進化看,區塊鏈無法成為互聯網的主流架構,更不能成為未來互聯網的顛覆者和革命者。
6、當然B/S,C/S結構發展出來的互聯網巨頭也有其問題,但這些將來可以通過商業的方式,政治的方式逐漸解決。
5. 比特幣礦池的協議stratum
轉自: https://zhuanlan.hu.com/p/23558268
getblocktemplate協議誕生於2012年中葉,此時礦池已經出現。礦池採用getblocktemplate協議與節點客戶端交互,採用stratum協議與礦工交互,這是最典型的礦池搭建模式。
與getwork相比,getblocktemplate協議最大的不同點是:getblocktemplate協議讓礦工自行構造區塊。如此一來,節點和挖礦完全分離。對於getwork來說,區塊鏈是黑暗的,getwork對區塊鏈一無所知,他只知道修改data欄位的4個位元組。對於getblocktemplate來說,整個區塊鏈是透明的,getblocktemplate掌握區塊鏈上與挖礦有關的所有信息,包括待確認交易池,getblocktemplate可以自己選擇包含進區塊的交易。
挖礦有兩種方式,一種叫SOLO挖礦,另一種是去礦池挖礦。前文所述的在節點客戶端直接啟動CPU挖礦,以及依靠getwork+cgminer驅動顯卡直接連接節點客戶端挖礦,都是SOLO挖礦,SOLO好比自己獨資買彩票,不輕易中獎,中獎則收益全部歸自己所有。去礦池挖礦好比合買彩票,大家一起出錢,能買一堆彩票,中獎後按出資比率分配收益。理論上,礦機可以藉助getblocktemplate協議鏈接節點客戶端SOLO挖礦,但其實早已沒有礦工會那麼做,在寫這篇文章時,比特幣全網算力1600P+,而當前最先進的礦機算力10T左右,如此算來,單台礦機SOLO挖到一個塊的概率不到16萬分之一,礦工(人)投入真金白銀購買礦機、交付電費,不會做風險那麼高的投資,顯然投入礦池抱團挖礦以降低風險,獲得穩定收益更加適合。因此礦池的出現是必然,也不可消除,無論是否破壞系統的去中心化原則。
礦池的核心工作是給礦工分配任務,統計工作量並分發收益。礦池將區塊難度分成很多難度更小的任務下發給礦工計算,礦工完成一個任務後將工作量提交給礦池,叫提交一個share。假如全網區塊難度要求Hash運算結果的前70個比特位都是0,那麼礦池給礦工分配的任務可能只要求前30位是0(根據礦工算力調節),礦工完成指定難度任務後上交share,礦池再檢測在滿足前30位為0的基礎上,看看是否碰巧前70位都是0。
礦池會根據每個礦工的算力情況分配不同難度的任務,礦池是如何判斷礦工算力大小以分配合適的任務難度呢?調節思路和比特幣區塊難度一樣,礦池需要藉助礦工的share率,礦池希望給每個礦工分配的任務都足夠讓礦工運算一定時間,比如說1秒,如果礦工在一秒之內完成了幾次任務,說明礦池當前給到的難度低了,需要調高,反之。如此下來,經過一段時間調節,礦池能給礦工分配合理難度,並計算出礦工的算力。
礦池通過getblocktemplate協議與網路節點交互,以獲得區塊鏈的最新信息,通過stratum協議與礦工交互。此外,為了讓之前用getwork協議挖礦的軟體也可以連接到礦池挖礦,礦池一般也支持getwork協議,通過階層挖礦代理機制實現(Stratum mining proxy)。須知在礦池剛出現時,顯卡挖礦還是主力,getwork用起來非常方便,另外早期的FPGA礦機有些是用getwork實現的,stratum與礦池採用TCP方式通信,數據使用JSON封裝格式。
先來說一下getblocktemplate遺留下來的幾個問題:
礦工驅動:在getblocktemplate協議里,依然是由礦工主動通過HTTP方式調用RPC介面向節點申請挖礦數據,這就意味著,網路最新區塊的變動無法及時告知礦工,造成算力損失。
數據負載:如上所述,如今正常的一次getblocktemplate調用節點都會反饋回1.5M左右的數據,其中主要數據是交易列表,礦工與礦池需頻繁交互數據,顯然不能每次分配工作都要給礦工附帶那麼多信息。再者巨大的內存需求將大大影響礦機性能,增加成本。
Stratum協議徹底解決了以上問題。
Stratum協議採用主動分配任務的方式,也就是說,礦池任何時候都可以給礦工指派新任務,對於礦工來說,如果收到礦池指派的新任務,應立即無條件轉向新任務;礦工也可以主動跟礦池申請新任務。
現在最核心的問題是如何讓礦工獲得更大的搜索空間,如果參照getwork協議,僅僅給礦工可以改變nNonce和nTime欄位,則交互的數據量很少,但這點搜索空間肯定是不夠的。想增加搜索空間,只能在hashMerkleroot下功夫,如果讓礦工自己構造coinbase,那麼搜索空間的問題將迎刃而解,但代價是必要要把區塊包含的所有交易都交給礦工,礦工才能構造交易列表的Merkleroot,這對於礦工來說壓力更大,對於礦池帶寬要求也更高。
Stratum協議巧妙解決了這個問題,成功實現既可以給礦工增加足夠的搜索空間,又只需要交互很少的數據量,這也是Stratum協議最具創新的地方。
再來回顧一下區塊頭的6個欄位80位元組,這個很關鍵,nVersion,nBits,hashPrevBlock這3個欄位是固定的,nNonce,nTime這兩個欄位是礦工現在就可以改變的。增加搜索空間只能從hashMerkleroot下手,這個繞不過去。Stratum協議讓礦工自己構造coinbase交易,coinbase的scriptSig欄位有很多位元組可以讓礦工自由填充,而coinbase的改動意味著hashMerkleroot的改變。從coinbase構造hashMerkleroot無需全部交易,
如上圖所示,假如區塊將包含13筆交易,礦池先對這13筆交易進行處理,最後只要把圖中的4個黑點(Hash值)交付給礦工,同時將構造coinbase需要的信息交付給礦工,礦工就可以自己構造hashMerkleroot(圖中的綠點都是礦工自行計算獲得,兩兩合並Hash時,規定下一個黑點代表的hash值總是放在右邊)
。按照這種方式,假如區塊包含N筆交易,礦池可以濃縮成log2(N)個hash值交付給礦工,這大大降低了礦池和礦工交互的數據量。
Stratum協議嚴格規定了礦工和礦池交互的介面數據結構和交互邏輯,具體如下:
1. 礦工訂閱任務
啟動挖礦機器,使用mining.subscribe方法鏈接礦池
返回數據很重要,礦工需本地記錄,在整個挖礦過程中都用到,其中:
Extranonce1,和 Extranonce2對於挖礦很重要,增加的搜索空間就在這里,現在,我們至少有了8個位元組的搜索空間,即nNonce的4個位元組,以及 Extranonce2的4個位元組。
2. 礦池授權
在礦池注冊一個賬號 ,添加礦工,礦池允許每個賬號任意添加礦工數,並取不同名字以區分。礦工使用mining.authorize方法申請授權,只有被礦池授權的礦工才能收到礦池指派任務。
3. 礦池分配任務
以上每個欄位信息都是必不可少,其中:
有了以上信息,再加上之前拿到的Extranonce1 和Extranonce2_size,就可以挖礦了。
4. 挖礦
1) 構造coinbase交易
用到的信息包括Coinb1, Extranonce1, Extranonce2_size 以及Coinb2,構造很簡單:
為啥可以這樣,因為礦池幫礦工做了很多工作,礦池已經構建了coinbase交易,系列化後在指定位置分割成coinb1和coinb2,coinb1和coinb2包含指定信息,比如coinb1包含區塊高度,coinb2包含了礦工的收益地址和收益額等信息,但是這些信息對於礦工來說無關緊要,礦工挖礦的地方只是Extranonce2 的4個位元組。另外Extranonce1是礦池寫入區塊的指定信息,一般來說,每個礦池會寫入自己礦池的信息,比如礦池名字或者域名,我們就是根據這個信息統計每個礦池在全網的算力比重。
2) 構建Merkleroot
利用coinbase和merkle_branch,按照上圖方式構造hashMerkleroot欄位。
3) 構建區塊頭
填充餘下的5個欄位,現在,礦池可以在nNonce和Extranonce2 里搜索進行挖礦,如果嫌搜索空間還不夠,只要增加Extranonce2_size為多幾個位元組就可輕而易舉解決。
5. 礦工提交工作量
當礦工找到一個符合難度的shares時,提交給礦池,提交的信息量很少,都是必不可少的欄位:
礦池拿到以上5個欄位後,首先根據任務號ID找出之前分配任務前存儲的信息(主要是構建的coinbase交易以及包含的交易列表等),然後重構區塊,再驗證shares難度,對於符合難度要求的shares,再檢測是否符合全網難度。
6. 礦池給礦工調節難度
礦池記錄每個礦工的難度,並根據shares率不斷調節以指定合適難度。礦池可以隨時通過mining.set_difficulty方法給礦工發消息另其改變難度。
如上,Stratum協議核心理念基本解析清楚,在getblocktemplate協議和Stratum協議的配合下,礦池終於可以大聲的對礦工說,讓算力來的更猛烈些吧。
6. 區塊鏈技術賦能Web3.0
Web3.0將是一個價值互聯網,它的開放性、信任的建立和身份管理等與Web2.0有很大區別。區塊鏈的發展正好為Web3.0建立了基礎技術基礎,並將在Web3.0中起到關鍵作用。在Web3.0中,與區塊鏈相關的技術包括:點對點網路技術,數據存儲和交換系統,數字身份,基於區塊鏈的金融網路,基於區塊鏈的信任系統和智能合約等等。
Web 3.0最初被萬維網(WWW)的發明者Tim Berners-Lee稱為語義網,其目標是成為一個更加自治,智能和開放的互聯網。Web 3.0的定義可以擴展如下:數據將以分散的方式互連,這將是對我們當前的Internet的巨大飛躍,在Web 2.0中,數據主要存儲在集中式存儲庫中。此外,用戶和機器將能夠與數據進行交互。要做到這一點,程序需要在概念上和上下文上理解信息。考慮到這一點,Web 3.0的兩個基石是語義Web和人工智慧(AI)。
從使用者(用戶)的角度理解,Web3.0 與 Web2.0 在呈現形式和體驗上將得到多方面的提升,以下特點是產業界比較認可的一些方面:
同時,隨著網路能力、人工智慧的發展,隨著數據的爆發式增長,Web3.0網路的建設將對Web2.0而言將是一個顛覆式的發展,這體現在Web3.0將必然是開放的,去信任的,無許可的網路,從而實現互聯網的真正願景。
Web3.0將是一個價值互聯網,它的開放性、信任的建立和身份管理等與Web2.0有很大區別。區塊鏈的發展正好為Web3.0建立了基礎技術基礎,並將在Web3.0中起到關鍵作用。在Web3.0中,與區塊鏈相關的技術包括:點對點網路技術,數據存儲和交換系統,數字身份,基於區塊鏈的金融網路,基於區塊鏈的信任系統和智能合約等等。
點對點網路系統:P2P Networking
Web1.0 和 2.0採用的網路架構圍繞核心網,接入網和區域網的架構展開。這樣的網路基本上是一個星型結構,數據的交換從端向上經接入網至核心網路,再向下逐級路由至其目標地址。互聯網應用所依靠的計算和存儲相對集中,網路一旦發生故障或者不堪重負,將立即出現服務故障。互聯網巨頭的服務故障屢見不鮮,影響巨大。
Web3.0 的網路將更加具有彈性,數據通信更多地建立在點對點網路之上,點對點網路依賴於Web2.0現有架構作為基礎設施,而在其上構建虛擬的P2P網路層。每一個用戶節點/終端同時連接多個終端節點,網路通信通過終端之間的直接連接或者通過第三方中繼。這樣的連接有諸多好處,比如:節點可以同時從多個路徑獲取信息,因此數據訪問速度可以更加高效;當數據有多個副本的情況下,可以從最近的節點獲取信息,網路資源利用率高;對網路故障的容忍度大大提高,部分網路的故障,並不會影響到通信的效果;網路鏈接豐富,數據傳播速度非常快。
點對點網路也是保障 Web3.0 其他特性的基礎,我們在下面幾節中會有所描述。LibP2P 是目前較為成熟的點對點網路技術,包括IPFS,Filecoin,Ethereum2.0等為Web3.0 提供服務的平台的網路都建立在 LibP2P 之上。
使用點對點網路的終端需要持續保持並維護較大量的網路鏈接,並能夠較智能地感知網路問題,抵抗惡意鏈接及攻擊等。這給 P2P 網路發展帶來挑戰。同時,P2P 網路是建立在現有網路的基礎之上,需要對現有網路協議的全面支持,受網路規模效應的影響,P2P 網路的發展將首先從與區塊鏈相關的技術設施開始,逐步擴展到更廣泛的領域。
數據存儲和交換系統 - The Underlying File System
Web1.0 和 Web2.0 建立在 HTTP 協議之上。HTTP協議提供簡單的通過路徑(URL)的文件訪問方式,用戶可以通過URL 訪問文件和網頁內容。
HTTP是一種客戶/服務端(Client-Server)通信協議,其構成了當前互聯網幾乎所有數據交換的基礎。客戶端-伺服器一詞意味著有一個請求方(客戶端-通常是Web瀏覽器)從伺服器(提供信息的計算機-通常是網頁或網頁的一部分)中請求信息。該協議藉助域名伺服器(DNS)伺服器來定位文件路徑。DNS伺服器本身就是一個大型網路,其中包括十三台根伺服器,以及向下鏈接的眾多區域伺服器。DNS服務網路本身就是一個中心化的網路,有些攻擊就是直接針對DNS網路進行的。
使用Web 3.0時,該機制正在發生變化。最有可能取代當前DNS系統的技術稱為行星際文件系統(InterPlanetary File System),簡稱IPFS。當HTTP逐步被IPFS取代之時,確實,我們可能傾向於將其稱為Internet 3.0。
IPFS網路同樣需要對文件(內容)進行定址,但與HTTP協議完全不同的是,IPFS的定址服務不再依賴於類似DNS網路這樣的中心化服務,而是完全通過去中心化的分布式哈希表(DHT:Decentralized Hash Table)來進行。IPFS的網路層就是 LibP2P,所以他能夠提供更大的彈性和容錯性。同時,IPFS借鑒了點對點文件系統的諸多技術來形成一整套協議,這些技術包括:BitTorrent,Git,SFS等等。
IPFS的內容定址方式實現原理非常簡單,就是對內容進行散列(Hash)運算,生成內容相關的獨一無二的內容標識(CID:Content Identity)。Hash演算法的防碰撞特性保證了標識的唯一性,因此這種標識又稱為內容指紋;Hash演算法的確定性保證了同樣的內容將生成同樣的標識,因此,在同一個存儲網路中,可以進行內容去重,從而實現更高的存儲效率。
IPFS的目標是建立一個統一的分散的不依賴單個實體的存儲平台,這與區塊鏈的思想一脈相承。與 HTTP 相比,IPFS有很多優勢:
IPFS的這些特性構成了Web3.0數據存儲的基礎,因此,IPFS的這些特性,也就成為Web3.0的特性。IPFS網路目前已經成功運行數年,作為一個公益的、開放的、開源的網路,它的運行非常成功,但是,對於商業運行而言,由於缺乏激勵層和難以協調分散節點的服務保障體系,還存在諸多挑戰,這些挑戰,也是 Filecoin 等存儲相關的項目希望解決的部分。
基於密碼學的數字身份 - Digital Identities
數字身份是區塊鏈發展帶來的另一個重要技術。它可能成為Web 3.0的最重要功能之一。在當前的互聯網路中,從身份盜用到點擊欺詐充斥著互聯網的每一個角落,發生這種情況的原因是兩台計算機之間的連接未正確進行身份驗證。在Web 2.0網落中,伺服器永遠無法確定訪問它的客戶端軟體是假裝的—在可識別的人的控制下瀏覽器。在等式的另一邊,瀏覽器也不知道它正在訪問的伺服器和文件是否是它打算訪問的文件。
但是,如果這種互動中涉及的所有事物都具有可驗證的身份,那麼進行欺詐和欺騙就更加困難了。使用數字身份證,每個人擁有一個可驗證的身份,因為每個身份都必須鏈接到唯一的憑證。同樣,組織也具有一個可驗證的身份。至於客戶端和伺服器之間交互所涉及的所有其他內容(硬體和軟體),這些東西可以直接綁定到屬於個人或組織的唯一ID。而且,由於採用了零知識證明等技術,任何一方都有可能證明他們是真實的,甚至不用透露自己的身份。
數字ID啟用Web 3.0的兩個重要功能:
這其中非常重要的原因在於用戶的身份認證和行為驗證統一了起來,加密技術應用到每一條消息,使得安全性大大提高。當然,這些也提高了終端使用的成本,而且道高一尺、魔高一丈。隨著計算技術的進步,加密的強度和演算法也會演進,同時,安全性也依賴於用戶對自己的私鑰的保護。
基於區塊鏈金融網路 - Decetralized Finance
到目前為止,我們提到了兩個技術基礎:分布式文件系統和數字身份,都與區塊鏈技術相關。區塊鏈對 Web3.0 的重要性不言而喻,但是其最重要的貢獻還在於其創建通證、並通過精巧設計的經濟模型來維護啊網路的能力,也包括使用此類通政進行小額支付的能力。
在一個區塊鏈為基礎的 Web3.0 網路中,金融的運作方式與傳統金融有很大的區別,金融更加程序化,變化更靈敏快速。無需銀行和機構為其背書,金融市場也是一個演算法市場。這里,不僅僅具有價值儲存的通證,可以進行高額的價值存儲和轉移,同樣,也具有類似於閃電網路的快速交易的小額支付能力,不同的通證提供了不同的功能。更加令人興奮的是,整個金融市場完全是一個演算法市場,不受機構的控制,因此,可以進行基於演算法的股權交易、借貸市場、不停歇的即時交易、保險、期貨等等都可以構建,並不斷創新。
關於信息價值,Web3.0與Web2.0完全不同,由於通證化,信息的價值可以直接在交易中體現出來,實現價值流和信息流的統一。而不同於Web2.0中的充滿假象的免費服務,實際上服務商通過迂迴的方式通過廣告和挖掘用戶的數據價值牟利。
網路構建信任 - Trustless
有人可能會爭辯說,區塊鏈最重要的貢獻是自動信任。這超出了區塊鏈可以通過建立信任網路通過數字ID提供的安全性。
一些區塊鏈可以創建「智能合約」,這些程序附在區塊鏈上,並在特定的區塊鏈事件觸發時執行。關於智能合約的重點是程序代碼是合約。
這使得智能合約比法律合約更具確定性。法律合同是通過法律制度執行的,法律制度的可靠性在一個地方到另一個地方各不相同,但從來都不是完美的。對法律合同提出質疑的結果是不確定的。
但是,智能合約可以100%被信任。智能合約的一個簡單示例是通過供應鏈中的商品移動給出的。發貨時會帶有RFID標簽,該標簽會在讀取商品時報告其位置。當貨物到達特定位置時,智能合約可以自動執行付款-運輸,倉儲或進口關稅。因此,付款是可預測的,並且可以100%相信發生。
自然,智能合約可能比該示例復雜得多。它們可以涵蓋法律合同當前涵蓋的許多情況,從而減少了欺詐的可能性。
7. 區塊鏈+即時通訊是怎樣的
區塊鏈特點之一就是通過分布式賬本技術實現不可逆,同時採用各種技術,比如環簽名、零知識證明等實現匿名、保護隱私等。社交網路由Facebook壟斷、即時通訊由WhatsApp等中心化產品壟斷,它們給用戶帶來了無與倫比的溝通方便,大大提高了人們之間溝通的頻次和效率,給全世界幾十億人帶來便利。
通過區塊鏈,通訊服務可以不採用中心企業的模式來組織通訊服務的運行,區塊鏈未來要對現實生活產生真正影響,不能光靠概念和炒作,而是要有真正落地的產品。什麼叫真正落地的產品,就是能夠滿足用戶需求的產品。如果現有的中心化產品能夠很好地滿足用戶的需求,那麼去中心化的產品就沒有足夠的替代效應,也就無法真正落地性。
區塊鏈協議層就有主要包括:網路編程、分布式演算法、加密簽名、數據存儲技術等4個方面。
網路編程能力是大家選擇編程語言的主要考慮因素,因為分布式演算法基本上屬於業務邏輯上的實現,什麼語言都可以做到。其中加密簽名技術是直接簡單的使用,資料庫技術也主要在使用層面,只有點對點網路的實現和並發處理才是開發的難點。所以對於那些網路編程能力強,對並發處理簡單的語言,人們就特別偏愛。
用戶免費獲得初始數量的token。它的一些實際使用場景:
1. 加密視頻聊天:跨國用戶想要進行視頻聊天,只有雙方都持有一定數量的SKM才能實現加密視頻聊天。
2. 大容量文件加密傳輸:一位用戶向另外一位用戶傳輸的文件超過了大小限制,傳輸者必須持有一定的token來實現加密傳輸。
3. 對話信息保存:只要雙方認可就可保存對話記錄,雙方需要持有一定量的token。
4. 再次傳輸提醒:如果一位用戶給另外一位用戶發送了一份文件,但他不希望對方進行分享,用戶可以通過使用一定的token,當文件被再次傳輸時會獲得通知提醒。
5. 秘鑰解鎖文件:一位用戶給另外一位傳輸秘鑰文件,只允許對方查看。發送的用戶可以通過使用token,讓對方收到的是碎片化的文件,只有通過發送者那裡得到秘鑰才能解鎖文件。
鏈喬教育在線旗下學碩創新區塊鏈技術工作站是中國教育部學校規劃建設發展中心開展的「智慧學習工場2020-學碩創新工作站 」唯一獲準的「區塊鏈技術專業」試點工作站。專業站立足為學生提供多樣化成長路徑,推進專業學位研究生產學研結合培養模式改革,構建應用型、復合型人才培養體系。
8. 區塊鏈-什麼是區塊鏈金點幣訊能讀懂區塊鏈
區塊鏈-什麼是區塊鏈?金點幣訊能讀懂區塊鏈?
區塊先鋒動畫視頻帶你了解什麼是區塊鏈,簡單易懂
什麼是區塊鏈,卯貝屬於區塊鏈?
答:卯貝不是屬於區塊鏈,只是運用了區塊鏈的技術,區塊鏈的特性就是每件發生的事物都會被記錄,不得刪除更改。
區塊鏈,什麼是區塊
區塊鏈全面解讀
一說起區塊鏈,人們總是拿它與比特幣相提並論。 2008年10月31日,一名叫「中本聰」的人在一個密碼學郵件群組中發出電子郵件,宣稱,「我一直在研究一個新的電子現金系統,這完全是點對點的,無需任何可信的第三方。 」他推出了一個以比特幣為交易貨幣的新體系。
什麼是區塊鏈技術?什麼叫區塊鏈?
區塊鏈是一種分布式共享記賬的技術,它要做的事情就是讓參與的各方能夠在技術層面建立信任關系。
區塊鏈可以大致分成兩個層面,一是做區塊鏈底層技術;二是做區塊鏈上層應用,即基於區塊鏈的改造、優化或者創新應用。
區塊鏈的核心意義到底是什麼,我們的理解是,區塊鏈最核心的意義是參與方之間建立數據信用,通過單方面的對抗,在明確規定下打造單方面的生態共同保障完整機會,這是一個體系,這種建立可以結束沒有區塊鏈之前的問題,沒有區塊鏈之前,在數據共享的時候是無法做到有新的共享,即使做定向也只是給你一個介面,區塊鏈有了以後,讓參與方是實現信用的共享。
區塊鏈的底層平台有哪些?
答:主要有一下幾類:
1、比特幣。是最早的區塊鏈開發便是基於比特幣的區塊鏈網路進行開發了,由於比特幣是全球最廣泛使用和真正意義的去中心化,就區塊鏈應用來說,比特幣就是世上最強大的錨,擁有最大的權威性。
2、以太坊。可以說除了比特幣外,以太坊目前在區塊鏈平台是最吸引眼球的。 以太坊是一個圖靈完備的區塊鏈一站式開發平台,採用多種編程語言實現協議,採用Go語言寫的客戶端作為默認客戶端(即與以太坊網路交互的方法, 支持其他多種語言的客戶端)。
3、IBM HyperLedger 。又叫 fabric,他的目標是打造成一個由全社會來共同維護的一個超級賬本,fabric源於IBM,初衷為了服務於工業生產,IBM將44,000行代碼開源,是了不起的貢獻,讓我們可以有機會如此近的去探究區別於比特幣的區塊鏈的原理。
4、LISK。是新一代的區塊鏈平台,允許JavaScript(又是Javascript技術,工程師們注意了)的開發和基於分布的分散的應用程序使用一個易於使用的,功能齊全的生態區塊鏈系統。
5、網錄區塊鏈平台。是網錄區塊鏈底層技術的研發成果和能夠進行商業交付的基礎平台,網錄區塊鏈平台除了服務網錄公鏈外,也是網錄為客戶打造私有鏈和聯盟鏈的基礎平台。
什麼是區塊鏈?什麼是數字貨幣的區塊鏈?
狹義來講,區塊鏈是一種按照時間順序將數據區塊以順序相連的方式組合成的一 種鏈式數據結構, 並以密碼學方式保證的不可篡改和不可偽造的分布式賬本。廣義來講,區塊鏈技術是利用塊鏈式數據結構來驗證與存儲數據、利用分布式節點共識演算法來生成和更新數據、利用密碼學的方式保證數據傳輸和訪問的安全、利用由自動化腳本代碼組成的智能合約來編程和操作數 據的一種全新的分布式基礎架構與計算範式。
現在,主流的數字貨幣基本上都是基於區塊鏈技術開發的。區塊鏈是數字貨幣的底層技術。國內的茶本位數字貨幣普銀就是基於區塊鏈技術開發的。
什麼是區塊鏈
區塊鏈的本質是一種去中心化的記賬系統,比特幣是這個系統上承載的「以數字形式存在」的貨幣。區塊鏈是比特幣背後的一套由信用記錄和信用記錄的清算構成的體系。
區塊鏈是分布式數據存儲、點對點傳輸、共識機制、加密演算法等計算機技術的新型應用模式。所謂共識機制是區塊鏈系統中實現不同節點之間建立信任、獲取權益的數學演算法 [1] 。
區塊鏈(Blockchain)是比特幣的一個重要概念,火幣網聯合清華大學五道口金融學院互聯網金融實驗室、新浪科技發布的《2014—2016全球比特幣發展研究報告》提到區塊鏈是比特幣的底層技術和基礎架構 [2] 。它本質上是一個去中心化的資料庫,同時作為比特幣的底層技術。區塊鏈是一串使用密碼學方法相關聯產生的數據塊,每一個數據塊中包含了一次比特幣網路交易的信息,用於驗證其信息的有效性(防偽)和生成下一個區塊
區塊鏈的進化方式是:
▪ 區塊鏈1.0——數字貨幣
▪ 區塊鏈2.0——數字資產與智能合約
▪ 區塊鏈3.0——IFMChain,區塊鏈正式鏈接移動終端
9. 區塊鏈技術概念
區塊鏈技術概念
區塊鏈技術概念,現如今,區塊鏈已經成為大部分人關注的領域,很多企業也早已深入其中研究該技術情況,但是還有人對於它不是很了解,下面我分享一篇關於區塊鏈技術概念的相關信息。
區塊鏈技術概念1
區塊鏈的基本概念和工作原理
1、基本概念
區塊鏈是分布式數據存儲、點對點傳輸、共識機制、加密演算法等計算機技術的新型應用模式。所謂共識機制是區塊鏈系統中實現不同節點之間建立信任、獲取權益的數學演算法。
區塊鏈Blockchain、是比特幣的一個重要概念,它本質上是一個去中心化的資料庫,同時作為比特幣的底層技術。區塊鏈是一串使用密碼學方法相關聯產生的數據塊,每一個數據塊中包含了一次比特幣網路交易的信息,用於驗證其信息的有效性防偽、和生成下一個區塊。
狹義來講,區塊鏈是一種按照時間順序將數據區塊以順序相連的方式組合成的一種鏈式數據結構, 並以密碼學方式保證的不可篡改和不可偽造的分布式賬本。
廣義來講,區塊鏈技術是利用塊鏈式數據結構來驗證與存儲數據、利用分布式節點共識演算法來生成和更新數據、利用密碼學的方式保證數據傳輸和訪問的安全、利用由自動化腳本代碼組成的智能合約來編程和操作數據的一種全新的分布式基礎架構與計算方式。
2、工作原理
區塊鏈系統由數據層、網路層、共識層、激勵層、合約層和應用層組成。 其中,數據層封裝了底層數據區塊以及相關的數據加密和時間戳等基礎數據和基本演算法;網路層則包括分布式組網機制、數據傳播機制和數據驗證機制等;共識層主要封裝網路節點的各類共識演算法;激勵層將經濟因素集成到區塊鏈技術體系中來,主要包括經濟激勵的發行機制和分配機制等;合約層主要封裝各類腳本、演算法和智能合約,是區塊鏈可編程特性的基礎;應用層則封裝了區塊鏈的各種應用場景和案例。該模型中,基於時間戳的鏈式區塊結構、分布式節點的共識機制、基於共識算力的經濟激勵和靈活可編程的智能合約是區塊鏈技術最具代表性的創新點。
區塊鏈主要解決的交易的信任和安全問題,因此它針對這個問題提出了四個技術創新:
1、分布式賬本,就是交易記賬由分布在不同地方的多個節點共同完成,而且每一個節點都記錄的是完整的賬目,因此它們都可以參與監督交易合法性,同時也可以共同為其作證。
跟傳統的分布式存儲有所不同,區塊鏈的分布式存儲的獨特性主要體現在兩個方面:一是區塊鏈每個節點都按照塊鏈式結構存儲完整的數據,傳統分布式存儲一般是將數據按照一定的規則分成多份進行存儲。二是區塊鏈每個節點存儲都是獨立的、地位等同的,依靠共識機制保證存儲的一致性,而傳統分布式存儲一般是通過中心節點往其他備份節點同步數據。 [8]
沒有任何一個節點可以單獨記錄賬本數據,從而避免了單一記賬人被控制或者被賄賂而記假賬的可能性。也由於記賬節點足夠多,理論上講除非所有的節點被破壞,否則賬目就不會丟失,從而保證了賬目數據的安全性。
2、非對稱加密和授權技術,存儲在區塊鏈上的交易信息是公開的,但是賬戶身份信息是高度加密的,只有在數據擁有者授權的情況下才能訪問到,從而保證了數據的安全和個人的隱私。
3、共識機制,就是所有記賬節點之間怎麼達成共識,去認定一個記錄的有效性,這既是認定的手段,也是防止篡改的手段。區塊鏈提出了四種不同的共識機制,適用於不同的應用場景,在效率和安全性之間取得平衡。
區塊鏈的共識機制具備「少數服從多數」以及「人人平等」的特點,其中「少數服從多數」並不完全指節點個數,也可以是計算能力、股權數或者其他的計算機可以比較的特徵量。「人人平等」是當節點滿足條件時,所有節點都有權優先提出共識結果、直接被其他節點認同後並最後有可能成為最終共識結果。以比特幣為例,採用的是工作量證明,只有在控制了全網超過51%的記賬節點的情況下,才有可能偽造出一條不存在的記錄。當加入區塊鏈的節點足夠多的時候,這基本上不可能,從而杜絕了造假的可能.
4、智能合約,智能合約是基於這些可信的不可篡改的數據,可以自動化的執行一些預先定義好的規則和條款。以保險為例,如果說每個人的信息包括醫療信息和風險發生的信息、都是真實可信的,那就很容易的在一些標准化的保險產品中,去進行自動化的理賠.
3、其它
互聯網交換的是信息,區塊鏈交換的是價值。人類歷史和互聯網歷史可以用八個字理解:分久必合合久必分,到了分久必合的時代,網路信息全部散在互聯網上面,大家要挖掘信息非常不容易,這時會出現像谷歌和臉 書等的平台,它做的唯一的事情就是把我們所有的信息重新組合了一下。互聯網時代壟斷巨頭們重組的就是信息,並不是產生自己的信息,產生的信息完全是我們個人。一旦信息重組,就會出現一個新的壟斷巨人,所以就到了分久必合的時代。現在由於區塊鏈技術產生又到了合久必分時代,又是新的多中心化,新的多中心化之後賦能產生新的價值,這些數據會在我們自己的手上,個人數據產生價值是歸自己所有,這是這個時代最最激動人心的時代。
區塊鏈的價值有哪些?低成本建立信任的機制,確立數權,解決數據的.產權。
目前區塊鏈技術不斷發展,包括現在的單鏈向多鏈發展,而且技術能夠在進一步擴展,我想未來還是可能會出現,特別是在交易等方面出現顛覆性的,特別是對現有產業的很多顛覆性的場景。
區塊鏈的本質是在不可信的網路建立可信的信息交換。
一帶一路+一鏈。區塊鏈更大的不是製造信任,而是讓信任產生無損的傳遞,整個降低社會的摩擦成本,從而提高整個效益。
現在區塊鏈本身還是初始階段,所以包括區塊鏈的信息傳遞、加密,這個過程中出現量子加密和其他加密,實際上對區塊鏈本身所採用的加密演算法攻擊現象也時有發生。包括區塊鏈也是作為一種資產的認定,數字資產的一個認定,但是現在我們很多都是用密碼演算法,或者是作為我們來解密的鑰匙,但是如果密碼忘記了,很可能你現在的資產就丟掉了,你不能夠在得到你原來的這些資產,所以在資產管理,包括信息傳遞和一些安全這些方面,應該說都還是存在著一些隱患。當然那麼從技術角度,現在我們區塊鏈本身處理的速度,或者說本身的擴展性,因為從工作機理的角度來看,是要把整個賬本要復制給所有的參與人員,所以在區塊鏈本身的運作效率和擴展性方面還是比較受限的。這些我們覺得都還是需要進一步在技術方面有進一步的發展。
區塊鏈平台這些底層技術,又形成包括區塊鏈錢包、區塊鏈瀏覽器、節點競選、礦機、礦池、開發組件、開發模塊、技術社區及項目社群等一系列的生態系統,這些生態系統的完善程度直接決定著區塊鏈底層平台的使用效率和效果。
4、蒙代爾的不可能三角
去中心化、高效、安全,不可能實現三者全部同時達到極致。
區塊鏈技術概念2
區塊鏈的本質是一種分布式記賬技術,與之相對的是中心式記賬技術,中心式記賬技術在我們目前的生活中廣泛存在。區塊鏈是分布式數據存儲、點對點傳輸、共識機制、加密演算法等計算機技術的新型應用模式。
區塊鏈Blockchain、,是比特幣的一個重要概念,它本質上是一個去中心化的資料庫,同時作為比特幣的底層技術,是一串使用密碼學方法相關聯產生的數據塊,每一個數據塊中包含了一批次比特幣網路交易的信息,用於驗證其信息的有效性防偽、和生成下一個區塊。
狹義來講,區塊鏈是一種按照時間順序將數據區塊以順序相連的方式組合成的一種鏈式數據結構, 並以密碼學方式保證的不可篡改和不可偽造的分布式賬本。
廣義來講,區塊鏈技術是利用塊鏈式數據結構來驗證與存儲數據、利用分布式節點共識演算法來生成和更新數據、利用密碼學的方式保證數據傳輸和訪問的安全、利用由自動化腳本代碼組成的智能合約來編程和操作數據的一種全新的分布式基礎架構與計算方式。
區塊鏈技術通俗的理解就是:把「物」的前、後、左、右區塊用一種技術連接成一個鏈條,但每個區塊的原始數據不可篡改,是一種物聯網范疇的、可以讓參與者信任的「各個模塊鏈動」的技術。區塊鏈技術的應用,離不開互聯道網,也離不開物聯網,是建立在二者融合互動基礎上的、但又讓參與者各自保持獨回立的去中心化、、並共同擁有這套價值鏈共建共享、的技術。
區塊鏈的特徵:去中心化、開放性、自治性、信息不可篡改,匿名性。
區塊鏈是一個能夠傳遞價值的網路,對可以傳遞價值的網路的需求是推動區塊鏈技術產生的重要原因。在對於保護帶有所有權或者其他價值的信息需求的推動下,區塊鏈出現了。區塊鏈通過公私鑰密碼學、分布式存儲等技術手段,一方面保證了帶有價值的信息的高效傳遞,另一方面保證了這些信息在傳遞的過程中不會被輕易的復制篡改。
從區塊鏈誕生的必然性來理解區塊鏈的內涵,區塊鏈是解決了中心化記賬缺點、解決了分布式一致性問題的分布式記賬技術,同時也是連接互聯網升級為保證帶有價值的信息安全高效傳遞的價值網路。
區塊鏈技術概念3
區塊鏈: 區塊鏈就像是一個全球唯一的帳簿,或者說是資料庫,記錄了網路中所有交易歷史。
以太坊虛擬機(EVM): 它讓你能在以太坊上寫出更強大的程序比特幣上也可以寫腳本程序、。它有時也用來指以太坊區塊鏈,負責執行智能合約以及一切。
節點:你可以運行節點,通過它讀寫以太坊區塊鏈,也即使用以太坊虛擬機。完全節點需要下載整個區塊鏈。輕節點仍在開發中。
礦工:挖礦,也就是處理區塊鏈上的區塊的節點。這個網頁可以看到當前活躍的一部分以太坊礦工:stats.ethdev.com。
工作量證明:礦工們總是在競爭解決一些數學問題。第一個解出答案的(算出下一個區塊)將獲得以太幣作為獎勵。然後所有節點都更新自己的區塊鏈。所有想要算出下一個區塊的礦工都有與其他節點保持同步,並且維護同一個區塊鏈的動力,因此整個網路總是能達成共識。(注意:以太坊正計劃轉向沒有礦工的權益證明系統(POS),不過那不在本文討論范圍之內。)
以太幣:縮寫ETH。一種你可以購買和使用的真正的數字貨幣。這里是可以交易以太幣的其中一家交易所的走勢圖。在寫這篇文章的時候,1個以太幣價值65美分。
Gas:在以太坊上執行程序以及保存數據都要消耗一定量的以太幣,Gas是以太幣轉換而成。這個機制用來保證效率。
DApp: 以太坊社區把基於智能合約的應用稱為去中心化的應用程序(Decentralized App)。DApp的目標是(或者應該是)讓你的智能合約有一個友好的界面,外加一些額外的東西,例如IPFS可以存儲和讀取數據的去中心化網路,不是出自以太坊團隊但有類似的精神)。DApp可以跑在一台能與以太坊節點交互的中心化伺服器上,也可以跑在任意一個以太坊平等節點上。(花一分鍾思考一下:與一般的網站不同,DApp不能跑在普通的伺服器上。他們需要提交交易到區塊鏈並且從區塊鏈而不是中心化資料庫讀取重要數據。相對於典型的用戶登錄系統,用戶有可能被表示成一個錢包地址而其它用戶數據保存在本地。許多事情都會與目前的web應用有不同架構。)
以太坊客戶端,智能合約語言
編寫和部署智能合約並不要求你運行一個以太坊節點。下面有列出基於瀏覽器的IDE和API。但如果是為了學習的話,還是應該運行一個以太坊節點,以便理解其中的基本組件,何況運行節點也不難。
運行以太坊節點可用的客戶端
以太坊有許多不同語言的客戶端實現即多種與以太坊網路交互的方法、,包括C++, Go, Python, Java, Haskell等等。為什麼需要這么多實現?不同的實現能滿足不同的需求例如Haskell實現的目標是可以被數學驗證、,能使以太坊更加安全,能豐富整個生態系統。
在寫作本文時,我使用的是Go語言實現的客戶端geth (go-ethereum),其他時候還會使用一個叫testrpc的工具, 它使用了Python客戶端pyethereum。後面的例子會用到這些工具。
關於挖礦:挖礦很有趣,有點像精心照料你的室內盆栽,同時又是一種了解整個系統的方法。雖然以太幣現在的價格可能連電費都補不齊,但以後誰知道呢。人們正在創造許多酷酷的DApp, 可能會讓以太坊越來越流行。
互動式控制台:客戶端運行起來後,你就可以同步區塊鏈,建立錢包,收發以太幣了。使用geth的一種方式是通過Javascript控制台。此外還可以使用類似cURL的命令通過JSON RPC來與客戶端交互。本文的目標是帶大家過一邊DApp開發的流程,因此這塊就不多說了。但是我們應該記住這些命令行工具是調試,配置節點,以及使用錢包的利器。
在測試網路運行節點: 如果你在正式網路運行geth客戶端,下載整個區塊鏈與網路同步會需要相當時間。你可以通過比較節點日誌中列印的最後一個塊號和stats.ethdev.com上列出的最新塊來確定是否已經同步。) 另一個問題是在正式網路上跑智能合約需要實實在在的以太幣。在測試網路上運行節點的話就沒有這個問題。此時也不需要同步整個區塊鏈,創建一個自己的私有鏈就勾了,對於開發來說更省時間。
Testrpc:用geth可以創建一個測試網路,另一種更快的創建測試網路的方法是使用testrpc. Testrpc可以在啟動時幫你創建一堆存有資金的測試賬戶。它的運行速度也更快因此更適合開發和測試。你可以從testrpc起步,然後隨著合約慢慢成型,轉移到geth創建的測試網路上 - 啟動方法很簡單,只需要指定一個networkid:geth --networkid "12345"。這里是testrpc的代碼倉庫,下文我們還會再講到它。
接下來我們來談談可用的編程語言,之後就可以開始真正的編程了。寫智能合約用的編程語言用Solidity就好。
要寫智能合約有好幾種語言可選:有點類似Javascript的Solidity, 文件擴展名是.sol. 和Python接近的Serpent, 文件名以.se結尾。還有類似Lisp的LLL。Serpent曾經流行過一段時間,但現在最流行而且最穩定的要算是Solidity了,因此用Solidity就好。聽說你喜歡Python? 用Solidity。
solc編譯器: 用Solidity寫好智能合約之後,需要用solc來編譯。它是一個來自C++客戶端實現的組件又一次,不同的實現產生互補、,這里是安裝方法。如果你不想安裝solc也可以直接使用基於瀏覽器的編譯器,例如Solidity real-time compiler或者Cosmo。後文有關編程的部分會假設你安裝了solc。
web3.js API. 當Solidity合約編譯好並且發送到網路上之後,你可以使用以太坊的web3.js JavaScript API來調用它,構建能與之交互的web應用。
10. dapp客戶端如何跟區塊鏈節點
運營人員通過中心化的應用市場發布進行連接。
隨著區塊鏈技術的發展,公鏈基礎設施的不斷完善, DAPP(去中心化應用)可能將成為主流。