區塊鏈技術是構建位元幣區塊鏈網路與交易資訊加密傳輸的基礎技術,其解決的核心問題是如何在缺少可信任**節點和可信任通道的情況下,分布在網路中的節點如何達成共識。區塊鏈被定義為乙個分布式的賬本,即每個區塊鏈的節點都擁有系統所有交易的資訊和資料。所以區塊鏈系統具有極大的魯棒性,因為每個節點僅僅是系統的一部分,每個節點的權利相等,都有著一樣的賬本,摧毀部分節點對系統完全不造成影響。另一方面,區塊鏈的執行機制也確保了交易的安全性,在乙個龐大的系統中,除非你能控制大多數的節點,否則系統仍然會參照多數節點的意見來決定什麼才是真實的結果,修改一部分賬本毫無意義。最後,區塊鏈中不存在中心化的中介機構,交易的成本大大降低,交易效率得到極大的提公升。正是由於區塊鏈的安全性、魯棒性和高效性,其被認為是未來要顛覆世界的技術。
區塊鏈按照其去中心化的程度可以分成三類,公有鏈、聯盟鏈和私有鏈。
公有鏈沒有官方組織及管理機構,無中心伺服器,參與公有鏈的節點可以按照系統的規則自由接入網路,不受控制,節點之間基於共識機制開展工作。位元幣屬於典型的公有鏈。公有鏈適用於網路節點之間沒有任何信任的場景,所有的使用者都可以進入公有鏈成為其中乙個節點。
聯盟鏈是由若干機構聯合發起,介於公有鏈和私有鏈之間,兼具部分去中心化的特徵。聯盟鏈的參與成員是預先設定的並且具有特殊特徵的,適用於連線多個公司或者中心化的組織的場景,如銀行間的清算。
私有鏈一般建立在某個企業內部,系統的運作規則根據企業要求進行設定,修改甚至是讀取許可權僅限於少數節點,同時仍保留著區塊鏈的真實性和部分去中心化的特性。進入私有鏈的成員仍然是由中心控制和制定的,節點通過授權可以進入,如金融領域的聯盟可以是私有鏈的。
公有鏈、聯盟鏈和私有鏈這三種區塊鏈的型別中,只有公有鏈真正解決了信任問題,聯盟鏈和私有鏈還是建立在一定的信任機制的基礎之上進行的。而正因為公有鏈通過挖礦這種工作量證明的機制完全替代信任機制,公有鏈中挖礦消耗的效能也不可小覷,公有鏈是這三種型別的區塊鏈中效能最低的。
區塊鏈技術是乙個全民參與的記賬方式,區塊鏈的執行基於以下的基礎機制:
1) 賬簿公開機制
2) 身份與簽名機制
3) 曠工挖礦機制
我們把區塊鏈系統想象成乙個封閉的村莊,每個村民或者每戶人家都可以成為區塊鏈上的乙個節點,每個節點都擁有著這個村莊所有交易的乙個賬簿,賬簿是公開的。只要賬簿的初始狀態是確定的,並且每一筆交易的記錄是可靠並且有序的,當前每個人持有多少錢是可以推算出來的。按照常人的思維,就算村民之間交易的可以公開,村民肯定不想讓整個村子的人都知道自己到底有多少私房錢,所以在區塊鏈中,交易是公開的,但是參與的節點都是匿名的。參與區塊鏈的節點之間不使用真實的身份進行交易,而是使用乙個唯一的id,在兩個節點進行交易的報文中會帶有此id的數字簽名,確保交易資訊是從對應的交易方發起的。
那麼在區塊鏈系統中,節點之間是如何完成支付與交易的呢?假設在村莊中,老王和老張分別是區塊鏈的兩個節點,老王要向老張支付10個位元幣,老王首先要詢問老張的id,例如老張的id為abc,老王的id為xyz,此時區塊鏈中產生了乙個交易,xyz要向abc支付10個位元幣,於是老王就寫了乙個單子交給老張。為了追溯資金的**,單子上除了付款人和收款人的資訊以外,還有那10個位元幣的**資訊,如例子中記錄,位元幣**於賬簿的第一頁。單子寫完後,老王會在單子上加上自己的數字簽名(私鑰加密),以便於老張驗證這10個位元幣確實是來自老王的。老張收到簽名後,用老王的id(公鑰)即xyz對其進行簽名驗證,證明這個單子是老王發過來的。
到此時,老張確定這個單子是從老張那發過來的,但問題是老張怎麼確定老王身上有足夠的位元幣來支付呢?如果在乙個沒有去中心化的系統中,如老王要給老張轉賬,老王究竟有沒有足夠的餘額來支付是通過中介機構銀行來確定的,而在區塊鏈系統中,承擔這個確定工作的是曠工組織。在老王向老張傳送交易單的同時,他會把交易資訊廣播給曠工組織,曠工組織裡的每個曠工小組收到交易單後,負責確定交易並且把交易補充到賬簿中去。曠工小組執行交易單確定操作是會獲得獎勵的。下面我們看曠工小組是怎麼開展工作的。
曠工小組的具體工作就是生成如下的交易清單,首先曠工小組收到老王與老張之間的交易資訊,會把這個交易寫到交易清單一欄,接著曠工小組成員找到當前賬簿的最後一頁,講其編號抄寫到「上一交易編號」一欄。填寫到這一步,曠工小組的工作還沒有完成,曠工小組的成員把交易清單、上一交易編號以及隨機數通過雜湊運算,生成乙個本賬單編號,而區塊鏈中對於本賬單編號的值是有具體的規定的,比如目標編號需要前n位為0。由於交易清單和上一交易編號都是不可變的,曠工小組成員需要不斷的變化隨機數的值來生成符合規定的本賬單編號。區塊鏈會自調整賬單編號的規則,使得其生成的時間是10分鐘。曠工小組得到一張有意義的賬簿紙之後(這張賬簿也就是區塊),為了得到獎勵,必須立刻向其他小組確認自己的工作成果。所以該曠工小組會立刻廣播他已經生成有效區塊的資訊,要求其他小組確認。其他小組收到此類的確認資訊會立刻停下手中的工作,對此區塊的有效性進行確認。確認完成之後,這個區塊就進入了主賬簿,後面的挖礦工作會基於這個更新後的主賬簿進行。
總結一下在區塊鏈中的交易過程如下,
第一步,貨幣的所有者a會利用他的私鑰對前一次交易(位元幣的**)和下一位所有者b的簽署乙個數字簽名,並且將這個簽名附加在交易單後面;
第二步,a將交易單廣播至全網,b與曠工組織都能收到該交易單;
第三步,曠工節點通過解出對應的隨機數,生成符合條件的雜湊值,去爭奪建立新區塊的權利並且爭取位元幣的獎勵;
第四步,當乙個曠工節點找到解時,向全網廣播該區塊記錄的蓋有時間戳的交易,並由全網其他曠工節點核對;
第五步,其他款共節點核對區塊的正確定,沒有錯誤後他們會將該區塊認定為合法並且去競爭下乙個區塊,這就形成了乙個合法記賬的區塊鏈。
Hadoop2 執行機制簡介
在上圖中resourcemanager支援分層級的應用佇列,這些佇列享有集群一定比例的資源。從某種意義上講它就是乙個純粹的排程器,它在執行過程中不對應用進行監控和狀態跟蹤。同樣,它也不能重啟因應用失敗或者硬體錯誤而執行失敗的任務。resourcemanager 是基於應用程式對資源的需求進行排程的 ...
session執行機制
session機制是一種伺服器端的機制,伺服器使用一種類似於雜湊表 的結構 也可能就是使用 雜湊表 來儲存資訊。當程式需要為某個客戶端的請求建立乙個session的時候,伺服器首先檢查這個客戶端的請求裡是否已包含了乙個session標識 稱為sessionid,如果已包含乙個sessionid則說明...
try catch finally執行機制
finally的執行 如下的程式所示,注釋中是執行的順序 public class test public static string test finally public static string test1 finally其實是僅在return 語句執行前執行,如果return 乙個函式,那...