Ⅰ 【區塊鏈工具百寶箱26】如何設置TradingView的相對強弱(RSI)技術指標
承接上篇,還是竹三七的那位高手師兄,他在2015股災中全身而退,在2017年比特幣高位全部套現,是個傳奇人物。師兄分享了野頃成交量「價升量增、價跌量減」的訣竅。就像昨天有讀者留言「如果交易所刷量,成交量作假」怎麼辦?竹三七當時也是如是問。
師兄搖搖白扇,「成那就用相對強弱(RSI)技術指標!RSI是不騙人的指標!」
《區塊鏈工具百寶箱》面對小白用戶,讓大家知道有哪些工具可以使用,在哪些場景下使用。
幣圈常見的三種賺錢方式:炒幣、搬磚、挖礦。現在是「炒幣篇」。
Relative Strength Index (RSI) ,相對強度指數。是根據特定時期內上漲點數和漲跌點數之和的比率製作出的一種技術曲線,RSI能夠反映出市場在特定時期內的是否景氣。RSI最早由威爾斯.威爾德(Welles Wilder)應用於期貨買賣,後來被廣泛用於股票市場的短線投資,短線差價操作。
RSI已被證明是可行的預測價格變動的指標。
計算公式
RSI = (近期漲幅平均值 / (近期漲幅平均值 + 近期跌幅平均值))x100
計算步驟如下:
近期漲幅平均值 = (2+1+2+4)/ 6 = 1.5
近期跌幅平均值 = (1+2)/ 6 = 0.5
RSI = (1.5/(1.5+0.5))* 100 = 75
RSI通過指數的漲跌大小來分析測量多空雙方買賣力量的強弱程度,從而推測未來價格變動方向。
常用的走勢分析 如下 :
1、根據RSI值的大小來判斷行情
根據威爾德(Wilder)的觀點,任何超過70的數字都應被視為超買,任何低於30的數字都應視為超賣。
30至70之間的RSI被認為是中性的,RSI約為50表示「 沒有趨勢 」,市場買賣力量均衡,處於盤整期。
但是一些交易商認為,Wilder的超買/超賣范圍太寬,並選擇改變這些范圍。例如,對於變化劇烈的市場,比如幣市,可以規定80以上超買,20以下為超賣**。即:
當RSI值>80時,表明市場已經出現超買現象,隨時會因為買勢減弱而使得幣價下跌,操作上一般為逢高逐步減倉。
當RSI值<20時,表明市場已經出現超賣現象,價格距離底部不遠,隨時會因為買盤介入而使得幣價回升。
當然,這個數值,完全由交易者自行決定。
2、根據短期(比如5日)和長期(比如10日)兩條RSI曲線來判斷行情
當短期天數的RSI>長期天數的RSI時,屬於多頭市場;
比如:
當短期RSI在20以下止跌回穩,並上穿長期RSI時,技術上稱」黃金交叉」,視為」買進信號」。
當短期RSI在80以上,進入超買區,顯示出多方力量遠遠大於空方力量,當然也顯示目前市場過熱,差攔隨時可能多翻空。
當短期天數的RSI<長期天數的RSI時,則屬於空頭市場;
比如:
RSI的值在50以下為弱勢,總趨勢向下。
如果短期RSI突然掉頭下穿長期RSI,技術上稱」虛脊胡死亡交叉」,視為」賣出信號」。
還有價格與RSI的差異,趨勢確認等等用途,本文就不詳述了。
步驟如下:
第一步、選擇我們昨天保存的 BTCUSD圖表(點擊查看文末【如何保存、再次打開圖表】 。
第二步、添加指標。打開【指標】搜索【RSI】,點擊添加。
頁面會顯示RSI。點擊RSI旁邊的x,會移除RSI。
點擊右側的三角符號,可以上移到Vol(成交量)的上方。
點擊雙三角的符號,可以將RSI放大,占據整個圖表窗格,再次點擊,恢復原位。
第三步、設置參數。
點擊面板上灰色小字 RSI 右側的齒輪符號,可以設置參數。
長度:是用於計算RSI的時間段。14天是默認值。
我們可以修改長成20日,點擊確定。
資源:是確定每個條形中哪些數據將用於計算。默認值是收盤。
還可以設置樣式:顏色、上下限數值、背景色等等。一般使用默認值就可以了。
第四步、上下滑動滑鼠,可以對圖表進行縮放。
向上滑動縮小、向下滑動放大:
第五步、創建警報。
點擊右鍵,點擊「創建警報」,可以針對成交量設置警報。點擊確定後,可以在面板右邊,看到「管理警報」。免費版目前只支持一個警報,所以需要刪除昨天的警報,再新建警報。
注意:免費版每個布局,最多支持3個指標和策略。PRO、PRO Plus 或者Premium版的布局支持更多指標。
親,你會操作了嗎?
今天學會了設置相對強弱RSI指標來判斷行情啦!快去試試吧!
有讀者說,前面文章中給出的截圖,沒有反應「價升量增、價跌量減」等規律!
明天,竹三七講講三個技術指標——MA、成交量、RSI的常見的分析例子!
我們明天見!
聲明:本文僅為作者獨立觀點,不構成任何投資意見或建議。
竹三七把文章合集放在【幣圈金馬獎社群】旗下的網站 幣姐 啦!
點擊鏈接可以看到竹三七的 【區塊鏈工具百寶箱】 合集。 http://bjiebtc.com/category/blockchain/blockchain-tools/
謝謝閱讀!謝謝點贊!
Ⅱ 區塊鏈最直白的解釋
近幾年,「區塊鏈」一詞成了大熱門,新聞媒體競相報道,但大家或許對於區塊鏈的認知還停留在霧里看花的階段,今天我們就來揭開它的神秘面紗。
其實區塊鏈的本質特別簡單,一句話就可以解釋:去中心化分布式資料庫。
區塊鏈的主要作用是用於存儲信息,任何人都可以將信息寫入,同時也可以讀取,所以它是一個公開的資料庫。
區塊鏈的特點
要說分布式資料庫這種技術,市場上早有存在,可不同的是,區塊鏈雖然同為分布式資料庫,但它沒有管理員,是徹底去中心化的。
去中心化是區塊鏈技術的顛覆性特點,它無需中心化代理,實現了一種點對點的直接交互,使得高效率、大規模、無中心化代理的信息交互方式成為了現實。
但是,沒有了管理員,人人都可以往裡面寫入數據,怎麼才能保證數據是可信的呢?被壞人改了怎麼辦?設計者早已想到了這些,這也證明了區塊鏈是真正劃時代的產物。
區塊
區塊鏈由一個個區塊(block)組成。區塊很像資料庫的記錄,每次寫入數據,就是創建一個區塊。
每個區塊包含兩個部分:
區塊頭(Head):記錄當前區塊的特徵值
區塊體(Body):實際數據
區塊頭包含了當前區塊的多項特徵值。
生成時間
實際數據(即區塊體)的哈希
上一個區塊的哈希
...
系統中每一個節點都擁有最新的完整資料庫拷貝,修改單個節點的資料庫是無效的,因為系統會自動比較,認為最多次出現的相同數據記錄為真。同時數據的每一步記錄都會被留存在區塊鏈上,可以溯源每一步的往來信息。
這里,你需要理解什麼叫哈希(hash),這是理解區塊鏈必需的。
所謂"哈希"就是計算機可以對任意內容,計算出一個長度相同的特徵值。區塊鏈的 哈希長度是256位,這就是說,不管原始內容是什麼,最後都會計算出一個256位的二進制數字。而且可以保證,只要原始內容不同,對應的哈希一定是不同的。
舉例來說,字元串123的哈希是(十六進制),轉成二進制就是256位,而且只有123能得到這個哈希。(理論上,其他字元串也有可能得到這個哈希,但是概率極低,可以近似認為不可能發生。)
因此,就有兩個重要的推論。
推論1:每個區塊的哈希都是不一樣的,可以通過哈希標識區塊。
推論2:如果區塊的內容變了,它的哈希一定會改變。
哈希的不可修改性
區塊與哈希是一一對應的,每個區塊的哈希都是針對"區塊頭"(Head)計算的。也就是說,把區塊頭的各項特徵值,按照順序連接在一起,組成一個很長的字元串,再對這個字元串計算哈希。
Hash = SHA256( 區塊頭 )
上面就是區塊哈希的計算公式,SHA256是區塊鏈的哈希演算法。注意,這個公式裡面只包含區塊頭,不包含區塊體,也就是說,哈希由區塊頭唯一決定。
前面說過,區塊頭包含很多內容,其中有當前區塊體的哈希,還有上一個區塊的哈希。這意味著,如果當前區塊體的內容變了,或者上一個區塊的哈希變了,一定會引起當前區塊的哈希改變。
這一點對區塊鏈有重大意義。如果有人修改了一個區塊,該區塊的哈希就變了。為了讓後面的區塊還能連到它(因為下一個區塊包含上一個區塊的哈希),該人必須依次修改後面所有的區塊,否則被改掉的區塊就脫離區塊鏈了。由於後面要提到的原因,哈希的計算很耗時,短時間內修改多個區塊幾乎不可能發生,除非有人掌握了全網51%以上的計算能力。
正是通過這種聯動機制,區塊鏈保證了自身的可靠性,數據一旦寫入,就無法被篡改。這就像歷史一樣,發生了就是發生了,從此再無法改變。
Ⅲ 深入了解區塊鏈的共識機制及演算法原理
所謂「共識機制」,是通過特殊節點的投票,在很短的時間內完成對交易的驗證和確認;對一筆交易,如果利益不相乾的若干個節點能夠達成共識,我們就可以認為全網對此也能夠達成共識。再通俗一點來講,如果中國一名微博大V、美國一名虛擬幣玩家、一名非洲留學生和一名歐洲旅行者互不相識,但他們都一致認為你是個好人,那麼基本上就可以斷定你這人還不壞。
要想整個區塊鏈網路節點維持一份相同的數據,同時保證每個參與者的公平性,整個體系的所有參與者必須要有統一的協議,也就是我們這里要將的共識演算法。比特幣所有的節點都遵循統一的協議規范。協議規范(共識演算法)由相關的共識規則組成,這些規則可以分為兩個大的核心:工作量證明與最長鏈機制。所有規則(共識)的最終體現就是比特幣的最長鏈。共識演算法的目的就是保證比特幣不停地在最長鏈條上運轉,從而保證整個記賬系統的一致性和可靠性。
區塊鏈中的用戶進行交易時不需要考慮對方的信用、不需要信任對方,也無需一個可信的中介機構或中央機構,只需要依據區塊鏈協議即可實現交易。這種不需要可信第三方中介就可以順利交易的前提是區塊鏈的共識機制,即在互不了解、信任的市場環境中,參與交易的各節點出於對自身利益考慮,沒有任何違規作弊的動機、行為,因此各節點會主動自覺遵守預先設定的規則,來判斷每一筆交易的真實性和可靠性,並將檢驗通過的記錄寫入到區塊鏈中。各節點的利益各不相同,邏輯上將它們沒有合謀欺騙作弊的動機產生,而當網路中有的節點擁有公共信譽時,這一點尤為明顯。區塊鏈技術運用基於數學原理的共識演算法,在節點之間建立「信任」網路,利用技術手段從而實現一種創新式的信用網路。
目前區款連行業內主流的共識演算法機制包含:工作量證明機制、權益證明機制、股份授權證明機制和Pool驗證池這四大類。
工作量證明機制即對於工作量的證明,是生成要加入到區塊鏈中的一筆新的交易信息(即新區塊)時必須滿足的要求。在基於工作量證明機制構建的區塊鏈網路中,節點通過計算隨機哈希散列的數值解爭奪記賬權,求得正確的數值解以生成區塊的能力是節點算力的具體表現。工作量證明機制具有完全去中心化的優點,在以工作量證明機制為共識的區塊鏈中,節點可以自由進出。大家所熟知的比特幣網路就應用工作量證明機制來生產新的貨幣。然而,由於工作量證明機制在比特幣網路中的應用已經吸引了全球計算機大部分的算力,其他想嘗試使用該機制的區塊鏈應用很難獲得同樣規模的算力來維持自身的安全。同時,基於工作量證明機制的挖礦行為還造成了大量的資源浪費,達成共識所需要的周期也較長,因此該機制並不適合商業應用。
2012年,化名Sunny King的網友推出了Peercoin,該加密電子貨幣採用工作量證明機制發行新幣,採用權益證明機制維護網路安全,這是權益證明機制在加密電子貨幣中的首次應用。與要求證明人執行一定量的計算工作不同,權益證明要求證明人提供一定數量加密貨幣的所有權即可。權益證明機制的運作方式是,當創造一個新區塊時,礦工需要創建一個「幣權」交易,交易會按照預先設定的比例把一些幣發送給礦工本身。權益證明機制根據每個節點擁有代幣的比例和時間,依據演算法等比例地降低節點的挖礦難度,從而加快了尋找隨機數的速度。這種共識機制可以縮短達成共識所需的時間,但本質上仍然需要網路中的節點進行挖礦運算。因此,PoS機制並沒有從根本上解決PoW機制難以應用於商業領域的問題。
股份授權證明機制是一種新的保障網路安全的共識機制。它在嘗試解決傳統的PoW機制和PoS機制問題的同時,還能通過實施科技式的民主抵消中心化所帶來的負面效應。
股份授權證明機制與董事會投票類似,該機制擁有一個內置的實時股權人投票系統,就像系統隨時都在召開一個永不散場的股東大會,所有股東都在這里投票決定公司決策。基於DPoS機制建立的區塊鏈的去中心化依賴於一定數量的代表,而非全體用戶。在這樣的區塊鏈中,全體節點投票選舉出一定數量的節點代表,由他們來代理全體節點確認區塊、維持系統有序運行。同時,區塊鏈中的全體節點具有隨時罷免和任命代表的權力。如果必要,全體節點可以通過投票讓現任節點代表失去代表資格,重新選舉新的代表,實現實時的民主。
股份授權證明機制可以大大縮小參與驗證和記賬節點的數量,從而達到秒級的共識驗證。然而,該共識機制仍然不能完美解決區塊鏈在商業中的應用問題,因為該共識機制無法擺脫對於代幣的依賴,而在很多商業應用中並不需要代幣的存在。
Pool驗證池基於傳統的分布式一致性技術建立,並輔之以數據驗證機制,是目前區塊鏈中廣泛使用的一種共識機制。
Pool驗證池不需要依賴代幣就可以工作,在成熟的分布式一致性演算法(Pasox、Raft)基礎之上,可以實現秒級共識驗證,更適合有多方參與的多中心商業模式。不過,Pool驗證池也存在一些不足,例如該共識機制能夠實現的分布式程度不如PoW機制等
這里主要講解區塊鏈工作量證明機制的一些演算法原理以及比特幣網路是如何證明自己的工作量的,希望大家能夠對共識演算法有一個基本的認識。
工作量證明系統的主要特徵是客戶端要做一定難度的工作來得到一個結果,驗證方則很容易通過結果來檢查客戶端是不是做了相應的工作。這種方案的一個核心特徵是不對稱性:工作對於請求方是適中中的,對於驗證方是易於驗證的。它與驗證碼不同,驗證碼是易於被人類解決而不是易於被計算機解決。
下圖所示的為工作量證明流程。
舉個例子,給個一個基本的字元創「hello,world!」,我們給出的工作量要求是,可以在這個字元創後面添加一個叫做nonce(隨機數)的整數值,對變更後(添加nonce)的字元創進行SHA-256運算,如果得到的結果(一十六進制的形式表示)以「0000」開頭的,則驗證通過。為了達到這個工作量證明的目標,需要不停地遞增nonce值,對得到的字元創進行SHA-256哈希運算。按照這個規則,需要經過4251次運算,才能找到前導為4個0的哈希散列。
通過這個示例我們對工作量證明機制有了一個初步的理解。有人或許認為如果工作量證明只是這樣一個過程,那是不是只要記住nonce為4521使計算能通過驗證就行了,當然不是了,這只是一個例子。
下面我們將輸入簡單的變更為」Hello,World!+整數值」,整數值取1~1000,也就是說將輸入變成一個1~1000的數組:Hello,World!1;Hello,World!2;...;Hello,World!1000。然後對數組中的每一個輸入依次進行上面的工作量證明—找到前導為4個0的哈希散列。
由於哈希值偽隨機的特性,根據概率論的相關知識容易計算出,預計要進行2的16次方次數的嘗試,才能得到前導為4個0的哈希散列。而統計一下剛剛進行的1000次計算的實際結果會發現,進行計算的平均次數為66958次,十分接近2的16次方(65536)。在這個例子中,數學期望的計算次數實際就是要求的「工作量」,重復進行多次的工作量證明會是一個符合統計學規律的概率事件。
統計輸入的字元創與得到對應目標結果實際使用的計算次數如下:
對於比特幣網路中的任何節點,如果想生成一個新的區塊加入到區塊鏈中,則必須解決出比特幣網路出的這道謎題。這道題的關鍵要素是工作量證明函數、區塊及難度值。工作量證明函數是這道題的計算方法,區塊是這道題的輸入數據,難度值決定了解這道題的所需要的計算量。
比特幣網路中使用的工作量證明函數正是上文提及的SHA-256。區塊其實就是在工作量證明環節產生的。曠工通過不停地構造區塊數據,檢驗每次計算出的結果是否滿足要求的工作量,從而判斷該區塊是不是符合網路難度。區塊頭即比特幣工作量證明函數的輸入數據。
難度值是礦工們挖掘的重要參考指標,它決定了曠工需要經過多少次哈希運算才能產生一個合法的區塊。比特幣網路大約每10分鍾生成一個區塊,如果在不同的全網算力條件下,新區塊的產生基本都保持這個速度,難度值必須根據全網算力的變化進行調整。總的原則即為無論挖礦能力如何,使得網路始終保持10分鍾產生一個新區塊。
難度值的調整是在每個完整節點中獨立自動發生的。每隔2016個區塊,所有節點都會按照統一的格式自動調整難度值,這個公式是由最新產生的2016個區塊的花費時長與期望時長(按每10分鍾產生一個取款,則期望時長為20160分鍾)比較得出來的,根據實際時長一期望時長的比值進行調整。也就是說,如果區塊產生的速度比10分鍾快,則增加難度值;反正,則降低難度值。用公式來表達如下:
新難度值=舊難度值*(20160分鍾/過去2016個區塊花費時長)。
工作量證明需要有一個目標值。比特幣工作量證明的目標值(Target)的計算公式如下:
目標值=最大目標值/難度值,其中最大目標值為一個恆定值
目標值的大小與難度值成反比,比特幣工作量證明的達成就是礦中計算出來的區塊哈希值必須小於目標值。
我們也可以將比特幣工作量的過程簡單的理解成,通過不停變更區塊頭(即嘗試不同nonce值)並將其作為輸入,進行SHA-256哈希運算,找出一個有特定格式哈希值的過程(即要求有一定數量的前導0),而要求的前導0個數越多,難度越大。
可以把比特幣將這道工作量證明謎題的步驟大致歸納如下:
該過程可以用下圖表示:
比特幣的工作量證明,就是我們俗稱「挖礦」所做的主要工作。理解工作量證明機制,將為我們進一步理解比特幣區塊鏈的共識機制奠定基礎。
Ⅳ 區塊鏈和比特幣(一)
區塊鏈(Blockchain)是一種很早就被學界提出但近幾年才被比特幣帶火的一個概念。比特幣是基於區塊鏈技術的一種實現,比特幣是一種加密貨幣,或者叫數字貨幣也可以。我們先以比特幣入手談談比特幣是怎麼利用區塊鏈技術的。
假設06年世界盃決賽期間,兩個互相不認識的足球迷碰到了,義大利打法國,法國球迷說我們法蘭西有齊達內肯定贏你們義大利,義大利球迷不服氣說我們義大利是戰無不勝的,不信咱倆賭100歐元。現實世界裡,怎麼辦呢?
我之前講過我們搞計算機的,90%以上的時間都在處理異常情況,如果人類都很講信用的話,那這個世界可能就不是現在這樣了。秦國當年許給楚懷王那600里地就不是6里了,說不定統一中國的就是楚國了呢也說不定。如果把錢交到第三方手裡,萬一第三方也跑了怎麼辦?把錢私吞了。所以現實的陌生世界單靠一顆善良的心是靠不住的,必須有手段穩穩地保證這個承諾,法律契約等。如今很通用的做法是第三方要找權威機構,比如政府,銀行等,要麼找個有頭有臉的人或組織,歸根結底還是找個有公信力的機構或人。但一般情況下這個第三方肯定會「雁過拔毛」,收取一定比例的手續費。
那麼到底還有沒有辦法來解決這個難題呢?這就是比特幣最初設計的一個初衷,解決兩個陌生人之間的信任問題。
加密演算法 + 多人記賬
首先說加密演算法,這里又要我之前提過的非對稱加密,即公鑰私鑰。每個人都可以有一對或多對公鑰私鑰,但一個公鑰只能有對應的私鑰,反之亦然。其原理就是兩個非常大的質數(p和q)相乘得一個數字(n),如果要根據公鑰破解私鑰的話理論上必須暴力破解,算出這個數字是由哪兩個大質數相乘得來的。目前世界上沒有公布可以破解1024位以上的私鑰,所以採用1024或者2048甚至更長的私鑰是非常安全的。
那麼有了公鑰私鑰,我作為個人就可以用私鑰加密,然後發布公鑰,任何人都可以用我的公鑰解密來確定這就是我本人發布的東西。同理別人給我的轉賬我也可以用他的公鑰解密,從而判斷這個就是某人的身份,這也叫數字簽名。原理都是一樣的,都是加密演算法,利用數學歐拉公式,質數相乘等原理得到的。這是個非常偉大的演算法,叫RSA,由3個數學家提出,我們普通人只要理解到公鑰私鑰的概念和用處就好了。
之前傳統模式里,銀行或者政府機構都有自己單獨的賬本,比如張三轉給了李四100塊,那賬本里怎麼記?張三的賬戶里扣除100, 李四的賬戶里增加100,對吧?
多人賬本也是一樣的道理,只不過從之前的中心化機構變成了分布式,去中心化的多個機構甚至個人。好比李白給杜甫轉了100兩銀子,以前是財政部記賬,區塊鏈里則是唐太宗,楊玉環,張小靜,賀知章等多個人一起記賬,記到李太白轉給了杜子美100兩銀子,以此為證,後面附有李白的印章。這樣一來,有了多個賬本,想要篡改那就難於登天了,李白可以放心的轉給杜甫並且不擔心他會篡改金額或者抵賴。
這樣做就可以解決開始提到的球迷打賭的問題,但還有個問題,別人為什麼要幫我們記賬?
答案是有報酬,這符合人性,不然誰肯幫忙記一筆跟自己沒關系的賬呢?
但最終記賬的人有且只有一個,不然就要亂套了。
有好處的前提下,如何保證哪一個人來記賬呢?這里要涉及到一個數學知識,每個要記賬的人,其實也就是所謂的礦工他在記賬錢必須要解一個數學問題,這個數學問題沒有取巧的辦法,只能通過把數字帶入公式里硬算,演算法就是一個Hash(哈希)演算法,類似於算一串數字出來,礦工只可以猜,除此之外別無他法。而且目前比特幣里這個猜到的概率是萬億分之一,大概一台普通計算機要持續不斷的猜一年才可以猜出來這個數字。
但世界上有成千上萬台計算機,它們如果一起算的話速度會快很多,因為從概率上講肯定會有一個計算機算出來,現實情況也確實如此。看個比特幣真實的例子。
除此之外,還可以看到Miner(挖礦人)是誰, 這個塊里包含了多少比交易(Number of Transactions)。
如果這個礦工是個別有用心的人,他在算出來後,私自篡改轉賬記錄和金額怎麼辦?
A. 篡改交易記錄 / 金額
前面我們介紹了公私鑰加密技術,礦工本身理論上是沒有發款人或收款人的私鑰的,所以他篡改過的交易記錄在用正確的公鑰解密的時候會出錯,最終被認定為非法(這里作者本人不太確定是在什麼時間點做的鑒定,但確定這個記錄是可以被證偽的)。
B. 刪除交易記錄
假設一個場景,張三要在北京4環買一個兩室一廳的房子,但張三不想出這錢還想白占房子,想到了一種偷雞摸狗的辦法就是篡改交易記錄。理論上,在張三付款後,這個記錄產生但並未確認,記錄需要等到一個解出謎題的礦工來做,假設這個礦工是他自己人,他讓礦工把這條記錄抹掉,沒有問題。但做法有幾種:
眾所周知比特幣挖礦需要很長一段時間,因為要做提到很麻煩的數學題,現在這個周期大概是10分鍾所有,這是基於全世界幾十萬礦機同時滿負荷工作的前提下。也就是說每十分鍾有上萬筆交易會被統一確認並放到一個不可改變的區塊里,並且這幾十萬台礦機同時更新自己本地的記錄。
2.1 如果這筆交易剛生成,房東看到了,然後下一秒就把產權過戶給張三,那麼張三如果想篡改這個付款記錄他必須滿足幾個條件:
成功的難度取決於在篡改的記錄之後有多少塊被確認過的區塊。如果只有一個,那麼太簡單了,因為區塊鏈演算法默認礦工在發布新的區塊時,採用第一個收到且較長的區塊。所以這次修改後就一勞永逸,因為所有的賬本都會背同步,但也有一個問題,就是這次同步會被記錄,如果房東查不到賬,張三最終還是會被抓起來的。如果有很多個,比如張三轉賬完後,房東在確認轉賬後1小時才做的產權過戶,那麼張三就必須篡改之前差不多6塊左右的區塊信息,這個很麻煩,因為每一個區塊都會指向上一個區塊,並且每個區塊都會有一個摘要(Hash),這是當前區塊所有交易記錄的匯總。所以如果試圖修改一個很久前的區塊,那麼後面的區塊的摘要都會變掉,這就是哈希樹(MerkleTree)。其他節點是可以報告區塊鏈被篡改的信息的。這就要涉及到最重要的一點,經常有人提到的51%算力,就是說如果張三擁有了超過50%的賬本都承認這次修改,那麼其他節點按照演算法設計也會承認這次修改。不過,先不談世界上基本沒人可以同時做到以上兩點,就算做到了,如果有人對此有疑問,依然可以把系統強制修復,之前以太坊就出過類似的問題,結局是以太坊篡改了整個區塊,追回了被盜取的財產。 以太坊分叉事件 。
以上只是粗淺的介紹了應用區塊鏈技術實現的比特幣的特徵,它可以很好的實現公開,公正,中立和平等。世界上任意兩個陌生人可以依賴比特幣或者其他區塊鏈技術實現互相信任。
Ⅳ 用大白話解釋區塊鏈
img src=' https://p26 . toutiaoimg.com/large/39b 70000088 e 51 B3 c 258 '/
最近國內屏蔽了各種ICO金融騙局,但並不妨礙區塊鏈科技的蓬勃發展。說到底,技術是無辜的,是可以給人帶來好處的。至於怎麼使用,就要靠人去操作了。運營好的可以推薦開發,運營不好的就像各大ICO項目一樣。找一些知識給網路名人進行所謂的非法集資和金融詐騙。
說了半天,區塊鏈是什麼?說到區塊鏈,很多人第一個想到的就是比特幣。我們需要解決一個問題。比特幣是區塊鏈,但區塊鏈不是比特幣。簡而言之,區塊鏈是分布式賬本技術(DLT),而不是令牌。他有很多特點,比如去中心化,可追溯,不易篡改。
(一)區塊鏈是一個分布式資料庫
首先,這是一個去中心化的分布式架構系統。因此,只有一個中央伺服器或節點不叫區塊鏈。比如你去淘寶買手機,你和賣家是陌生人,沒有信任基礎。如果你先把錢給了賣家,賣家很可能以不發貨的方式拉黑了你,那你手機錢就沒了。如果賣家先發貨,你付錢嗎?有可能你收到貨後不付款給賣家,反正有一方可能會賠錢。這時候就需要第三方擔保來解決信任問題。就像現在的支付寶,你把錢給支付寶,賣家就會發貨。當你收到貨物,賣家會收到錢。
上面的例子是一個集中式的系統,因為所有的擔保工作都是由第三方支付Bora來處理的。假設有一天支付寶想篡改數據,無論是買家還是賣家都無能為力,因為所有的許可權都在一家公司手裡。
這時候就需要一個分布式資料庫了。這個第三方不再是支付寶,而是成千上萬的監視器。你在淘寶上買手機,就會對所有人大喊我要去XXX買手機,我付了XXX元。對方會像其他人一樣大喊大叫。收了XXX的手機費,送過去了。這樣大家都知道這個交易,大家都在記錄這個交易,所以一兩個節點出現問題或者惡意行為都沒用,因為大部分節點都記錄了這個事情。
(B)區塊鏈使用加密技術來確保數據安全
這裡面有兩點很重要:1。加密早攜哈希函數2。不對稱加密。
如果你對具體概念感興趣,可以去網路,但是沒有基礎的人也不一定能看懂,因為這兩點太專業了。事實上,如果你只知道區塊鏈的使用,你不需要對它有深入的了解。它也是一個技術概念。你只需要知道,區塊鏈依靠這些技術點來保證數據的安全,不容易被篡改。當然,很多人說,靠這兩點就能保證100%不被篡改。在這里,我想保守一點。作為一個遊走在安全行業的作者,我一直對100%的安全性清和心存疑慮,所以稱之為難以被篡改可能更合適。
我還是簡單介紹一下這兩個概念答睜盯,盡量用通俗易懂的英語說清楚。
1.加密哈希函數
這主要用於驗證信息的完整性。比如我給公司領導發信息,上面說我周五生病,需要請一天假。這時候會根據我發的消息生成一個哈希值,比如:123456。此時,當領導者收到此消息時,也會生成一個哈希值。因為我發的消息內容沒變(沒被篡改),所以哈希值不變,還是:123456。這是如果有人想篡改這個消息,並在周五生病,需要休息一年。這時候哈希值就會發生變化,比如:123489。那時我們才知道我們的信息被篡改了。
2.不對稱加密
主要用於信息加密和認證,其實就是兩個密鑰,一個叫公鑰,一個叫私鑰。公鑰加密,私鑰解密。
公鑰是每個人都擁有的密鑰。你擁有它,我擁有它。我們都可以用這個密鑰加密,但是解密的時候必須用我的私鑰解密。如果你沒有我的私鑰,你就無法解密。
(C)區塊鏈採用共識演算法對新數據達成共識。
共識演算法的作用是使所有節點對新塊達成共識,換句話說,每個人都必須認可新塊。
對於集中式部署系統來說,這很簡單,一切都由中心控制,但在區塊鏈的分布式系統中,這就很復雜了。例如,有三個節點。a說買了XXX店的手機,付了錢,B說沒付,C說沒付夠。那你聽誰的?更何況,區塊鏈技術不是三個節點那麼簡單,而是一個龐大的分布式系統。
這時候就需要一個解決方案。計算機科學中有一個相應的問題,叫做「拜占庭通用問題」或「拜占庭容錯」(BFT)。當年提出這個問題不是因為比特幣,而是因為某種特殊的背景。
早期的飛機有三個獨立的控制系統。為什麼需要三個獨立的控制系統?比如遇到緊急情況,對面有飛機。怎麼判斷該不該躲?如果只有一個系統,就沒有選擇,相當於集中部署。如果系統壞了,你就掛了。兩個系統中有一個壞了怎麼辦?好的說躲,壞的說不躲,計算機無法判斷最終結果。所以需要三個獨立的系統來支撐,兩個總壞的概率還是很小的。但這只是考慮了傷害。有惡意系統怎麼辦?三個夠了嗎?答案是否定的,我們需要四個系統來保持共識。
區塊鏈的使用也類似,因為它有龐大的節點支持,每個節點都是一個獨立的系統,互不幹擾。我們可以假設失敗節點和惡意節點的數量是有限的,所以不會導致數據的異常一致。
區塊鏈是一種全新的計算範式和分布基礎架構,利用快鏈式數據結構、分布式節點共識演算法、密碼學方式和基於自動化腳本代碼的智能合約來生產、驗證、存儲和傳輸數據。也可以說區塊鏈是一種分布式的賬本技術,能夠在非信任環境中提供去中心化信任機制,從而讓多方參與者在沒有中介機構的情況下進行安全的信任化交易。
區塊鏈技術的核心優勢是去中心化,能夠通過運用數據加密、時間戳、分布式共識和經濟激勵等手段,在節點無需互相信任的分布式系統中實現基於去中心化信用的點對點交易、協調與協作,從而為解決中心化機構普遍存在的高成本、低效率和數據存儲不安全等問題提供了解決方案。
區塊鏈的使用領域有數字貨幣、通證、金融、防偽溯源、隱私保護、供應鏈、娛樂等等,區塊鏈、比特幣的火爆,不少相關的top域名都被注冊,對域名行業產生了比較大的影響。
二嘎子是我發小,小時候一起光屁股_河溝的交情。後來我來到城裡上學工作,過著北漂的生活;他在家務農也做點小生意,如今兒女雙全,生活無虞。他羨慕我所謂的「見過大世面」,而我羨慕他沒有房貸壓力的簡單生活,我們擁有截然不同且相互羨慕的人生??
那天,嘎子在微信找我,上來就問「區塊鏈是個啥?」我一下子愣住,這個呆瓜怎麼關心起這么前衛的詞兒來了?我故作鎮定,准備從技術原理一點點講起,但隔著手機屏幕都能看到那個呆瓜雲山霧繞的表情。該怎麼跟一點互聯網概念和技術基礎的人說清楚「啥是區塊鏈」,這似乎是一個非常棘手的問題??
村口小賣部演繹區塊鏈核心(圖片引自網路)
區塊鏈的核心精髓是「去中心化」,區塊鏈所有運行模式幾乎都在圍繞著「去中心化」的概念來運行。一旦理解了什麼是「去中心化」,那麼基本就可以解釋「什麼是區塊鏈」這個問題了。對於二嘎來說,當然要演繹一個他能聽懂的版本。
「我說,嘎子,村東頭的那個小賣部你還開著呢嗎?」嘎子回答是的,我決定以這個小賣部為範例,來講解區塊鏈在現代商業和金融模式中的實際使用場景,從而讓他更好的理解啥是區塊鏈。
「那現在還有很多村民賒賬嗎?是不是到了年底有的帳都記不清楚了,還有好多賴賬的或者不認賬的呢?」說到這里,二嘎子來了情緒,一直抱怨如今人心不古、生意難做啊!
「以前你小賣部的運作模式就是典型中心化,你授信給鄉親們可以賒賬,所有的記賬都是通過你和咱們村民直接對接的,你就是所有賬務的中心。」二嘎子表示能懂,讓我繼續。
我說:「假如有一天你掛掉了,那所有的帳都成了死賬??有白紙黑字打借條的估計都很難要回去,更別提那些口頭記得那些賬了,但是區塊鏈的去中心化能很好的解決這個問題。只要這個地球還在,那麼區塊鏈記得每一筆賬都將永遠存在」二嘎聽完來了精神。
區塊鏈的精髓就是「去中心化」
「區塊鏈的精髓就是去中心化,一旦有人從你那賒賬,全村的街坊鄰居都幫你記賬。因為記賬的節點很多,既不容易出錯別人也無法賴賬,從而大家達成一種共識。如果有人惡意不還賬,全村人都知道了他的品行,以後也沒人願意跟他發生金錢上的往來了??」
說到這里,嘎子顯然有些興奮了,看來他被賒賬這事兒搞得實在有些焦頭爛額。看嘎子來了興趣,我也小有成就感,繼續說道:「當然了,以上就是打個比方,實際上區塊鏈不是真的讓村民們去拿紙筆幫你記賬,而是通過網路和計算機聯網完成的。」
此時嘎子有點疑惑,問道:「那別人從我這里買了啥東西,豈不是全村人都知道,那誰還從我這里買東西啊,真是一點隱私都沒有了。而且你這里沒有記賬的時間,去年的帳說成是今年的,不斷往後拖延咋整?」
「行啊,嘎子,你這個問題問到點子上了。」看來嘎子一點都不傻,做起生意還是很精明的。我繼續解釋道:「所以說,這些信息的記錄和傳輸,都是通過加密來完成的,看到就是一幅數字和英文的字元串,而且每一筆賬都有時間戳來記錄發生的時間,賴不掉的。」
嘎子又產生了疑問:「會不會欠賬的人跟村民們關系好,他們聯合起來篡改記賬呢?那到時候可就說不清講不明了??」
「嘎子,你就這點小心思,呵呵。」我理解了嘎子的擔憂,繼續解釋道:「區塊鏈的機制想要篡改一筆賬單,需要超過51%的人同意才可以。人和人之間都有個親疏遠近,不可能所有人都偏向一個人。如果換做電腦來說,需要全網一半以上的電腦重新計算,這個工程龐大到幾乎不能可能完成的??」
就這樣,通過小賣部的實際情況並結合一些生活中的場景,嘎子明白了啥是區塊鏈中的:去中心化、分布式記賬、共識機制、加密機制、時間戳,以及不易篡改的特性。
二嘎子沉默了片刻,似乎正在消化剛才我給他舉的例子,也不知道他能領會幾分。沒過多久,他又在微信上給我發了語音過來:「區塊鏈的意思是不是以前我從網上買貨支付,都得經過馬雲家。要是有了區塊鏈,是不是直接就能跟賣家交易,反正記賬很安全了。」
「行啊,嘎子,真是一點就透。區塊鏈本質上是一個去中心化的分布式賬本數據雲,當然按照你這么理解也是可以的。」我很高興嘎子能夠大致領略了區塊鏈的真正魅力,好在我的一番口舌還沒有白費。
比特幣又是個啥呢?(圖片引自網路)
「那比特幣又是個啥玩意啊?跟區塊鏈啥關系?」嘎子追問道。
我簡單思考了一下,決定繼續以小賣部的故事來跟嘎子解釋:「你那小賣部,村民們不能成天沒事免費給你記賬吧,逢年過節是不是得拎點東西串串門子啥的,這個就是區塊鏈的獎勵機制,所有參與記賬的人都可能獲得獎勵。」
「那依據啥獎勵呢?總得有個規則吧?」嘎子非常不解的問道。
我解釋道:「張三去你店裡賒了一條香煙,但是李四先知道了這個事情,先幫你記了一筆賬,隨後其他人才知道才開始記賬,那麼李四就能獲得一朵小紅花作為獎勵~這個小紅花是區塊鏈系統產生的,本身沒有價值,因此也不需要你為這個小紅花支付任何成本??」
「那比特幣能當錢花嗎?跟咱們平時花的紙幣有啥區別啊?」嘎子繼續追問。
「比特幣就是一種數字化的加密虛擬貨幣,原則上來講跟我們的紙幣一樣本身是沒有任何價值的,但是紙幣有國家作為信用擔保,因此具有了價值。而比特幣是比特幣網路用戶之間因為共識而形成的價值,並且具備可流通的屬性,因此也就可以用來承載價值。」這里說的有些深奧,不知道嘎子能否聽懂。
我繼續解釋道:「紙幣可以無限的印刷,印的多了就產生了通貨膨脹,咱小時候冰棍1分錢的就很好,現在1塊錢沒法吃,當然影響通貨膨脹的因素很多。而比特幣的數量是固定等,不存在無限超發的可能。但不同的人對其價值判定存在差異,再加上供求關系和投資者情緒的影響,因此其價格總是不斷波動的。」
比特幣價格波動 跟股票有啥區別?
「那炒比特幣就是炒股票唄?能不能這么理解啊?」嘎子似乎懂得還挺多。
「其實有些類同,但也有很大區別。」我接著嘎子的話題繼續說到:「股票的價格始終圍繞著企業的估值而波動,並且股票市場存在政府的監管。而比特幣本身則沒有價值,完全靠供求關系和玩家估值來定價,而且屬於野蠻的生長,完全沒有任何政府的監管,因此相比股票可能存在更高的風險和更高的收益。」
最終,嘎子暴露了今天真正的目的,他問我:「區塊鏈項目能投資嗎?」
無事不登三寶殿,嘎子就屬於這其中的典型。饒了很大一個圈子,又是區塊鏈又是比特幣的,其實他真正關心的問題是「區塊鏈項目投資究竟靠不靠譜?」此話一出,讓我感到無比震驚,如今所謂的區塊鏈投資項目竟然已經下探到四六線城市和小鄉鎮了!
截止到目前,投資區塊鏈無外乎三種情況:挖礦、炒幣,所謂的區塊鏈項目。
挖礦和炒幣依然是區塊鏈的主線(圖片引自網路)
所謂挖礦就是通過購買礦機等挖礦設備,挖掘虛擬貨幣,再進行賣出變現,從而獲得回報。你可以把礦機自己安置,也可以找礦池進行託管,但想要盈利的核心關鍵就是「算力」和「功耗」以及設備投入資金。隨著虛擬貨幣的價格大幅跌落以及挖礦難度的增加,目前很多幣種的挖礦收益都非常不理想。而挖礦顯然是極少數懂技術的投資者才能玩得轉,我的童年好友嘎子顯然玩不轉。
至於「炒幣」,我剛才在上一個部分已經介紹了比特幣和股票的一些區別,原則上來講雖然都是進行「低買高賣」的操作,但卻有極大的不同。一般的投資者無法判定一個虛擬貨幣的本身的價值,完全靠供求關系決定價格,有些類似我們常說的「庄股」。另一方面,虛擬貨幣交易市場極為不規范,監守自盜和黑客攻擊的事情經常發生,其風險系數要遠遠大於投資股票。為了好友的資金安全,我是一萬個不同意嘎子來「炒幣」的!
「九四」規定發行虛擬貨幣是違法的
而坊間的那些所謂的投資項目,其實在我看來絕大多數本質就是「非法集資」和「傳銷手段」。一些所謂的區塊鏈投資項目通過各種包裝和鼓動性言辭吸引投資者進圈,然後通過構建發行新幣+挖礦+炒幣的軟硬體生態形成盈利的假象,然後最終跑路。我們國家法律明確規定,發行虛擬貨幣屬於非法行為。
非法傳銷如今穿上了區塊鏈的外衣(圖片引自網路)
而有些打著區塊鏈幌子的傳銷活動又該如何甄別呢?其實這些傳銷也就是所謂的龐氏騙局,咱們老百姓常說的「空手套」。這些所謂的「直銷」或者「營銷」活動往往沒有什麼實際的產品來流通,更多的是依靠發展「下線」來確保頂層的收益。隨著區塊鏈概念的興起,這種傳銷的模式又呈現加劇趨勢,甚至打著國家支持新技術的旗號來騙人。
當嘎子問出那句「區塊鏈項目能投資嗎?」的時候,我意識到了問題的嚴重性。嘎子就是個典型的小鎮青年,老婆孩子熱炕頭才是他的追求。但面對「財富」的吸引,人往往會做出格的事情。什麼挖礦、炒幣根本就不適合他,更不要提極有可能是「非法融資」或「非法傳銷」的什麼區塊鏈投資項目了!
我趕緊撥通了嘎子的電話,並苦口婆心的進行了如上的分析??
Ⅵ 區塊鏈 --- 共識演算法
PoW演算法是一種防止分布式服務資源被濫用、拒絕服務攻擊的機制。它要求節點進行適量消耗時間和資源的復雜運算,並且其運算結果能被其他節點快速驗算,以耗用時間、能源做擔保,以確保服務與資源被真正的需求所使用。
PoW演算法中最基本的技術原理是使用哈希演算法。假設求哈希值Hash(r),若原始數據為r(raw),則運算結果為R(Result)。
R = Hash(r)
哈希函數Hash()的特性是,對於任意輸入值r,得出結果R,並且無法從R反推回r。當輸入的原始數據r變動1比特時,其結果R值完全改變。在比特幣的PoW演算法中,引入演算法難度d和隨機值n,得到以下公式:
Rd = Hash(r+n)
該公式要求在填入隨機值n的情況下,計算結果Rd的前d位元組必須為0。由於哈希函數結果的未知性,每個礦工都要做大量運算之後,才能得出正確結果,而算出結果廣播給全網之後,其他節點只需要進行一次哈希運算即可校驗。PoW演算法就是採用這種方式讓計算消耗資源,而校驗僅需一次。
PoS演算法要求節點驗證者必須質押一定的資金才有挖礦打包資格,並且區域鏈系統在選定打包節點時使用隨機的方式,當節點質押的資金越多時,其被選定打包區塊的概率越大。
POS模式下,每個幣每天產生1幣齡,比如你持有100個幣,總共持有了30天,那麼,此時你的幣齡就為3000。這個時候,如果你驗證了一個POS區塊,你的幣齡就會被清空為0,同時從區塊中獲得相對應的數字貨幣利息。
節點通過PoS演算法出塊的過程如下:普通的節點要成為出塊節點,首先要進行資產的質押,當輪到自己出塊時,打包區塊,然後向全網廣播,其他驗證節點將會校驗區塊的合法性。
DPoS演算法和PoS演算法相似,也採用股份和權益質押。
但不同的是,DPoS演算法採用委託質押的方式,類似於用全民選舉代表的方式選出N個超級節點記賬出塊。
選民把自己的選票投給某個節點,如果某個節點當選記賬節點,那麼該記賬節點往往在獲取出塊獎勵後,可以採用任意方式來回報自己的選民。
這N個記賬節點將輪流出塊,並且節點之間相互監督,如果其作惡,那麼會被扣除質押金。
通過信任少量的誠信節點,可以去除區塊簽名過程中不必要的步驟,提高了交易的速度。
拜占庭問題:
拜占庭是古代東羅馬帝國的首都,為了防禦在每塊封地都駐扎一支由單個將軍帶領的軍隊,將軍之間只能靠信差傳遞消息。在戰爭時,所有將軍必須達成共識,決定是否共同開戰。
但是,在軍隊內可能有叛徒,這些人將影響將軍們達成共識。拜占庭將軍問題是指在已知有將軍是叛徒的情況下,剩餘的將軍如何達成一致決策的問題。
BFT:
BFT即拜占庭容錯,拜占庭容錯技術是一類分布式計算領域的容錯技術。拜占庭假設是對現實世界的模型化,由於硬體錯誤、網路擁塞或中斷以及遭到惡意攻擊等原因,計算機和網路可能出現不可預料的行為。拜占庭容錯技術被設計用來處理這些異常行為,並滿足所要解決的問題的規范要求。
拜占庭容錯系統 :
發生故障的節點被稱為 拜占庭節點 ,而正常的節點即為 非拜占庭節點 。
假設分布式系統擁有n台節點,並假設整個系統拜占庭節點不超過m台(n ≥ 3m + 1),拜占庭容錯系統需要滿足如下兩個條件:
另外,拜占庭容錯系統需要達成如下兩個指標:
PBFT即實用拜占庭容錯演算法,解決了原始拜占庭容錯演算法效率不高的問題,演算法的時間復雜度是O(n^2),使得在實際系統應用中可以解決拜占庭容錯問題
PBFT是一種狀態機副本復制演算法,所有的副本在一個視圖(view)輪換的過程中操作,主節點通過視圖編號以及節點數集合來確定,即:主節點 p = v mod |R|。v:視圖編號,|R|節點個數,p:主節點編號。
PBFT演算法的共識過程如下:客戶端(Client)發起消息請求(request),並廣播轉發至每一個副本節點(Replica),由其中一個主節點(Leader)發起提案消息pre-prepare,並廣播。其他節點獲取原始消息,在校驗完成後發送prepare消息。每個節點收到2f+1個prepare消息,即認為已經准備完畢,並發送commit消息。當節點收到2f+1個commit消息,客戶端收到f+1個相同的reply消息時,說明客戶端發起的請求已經達成全網共識。
具體流程如下 :
客戶端c向主節點p發送<REQUEST, o, t, c>請求。o: 請求的具體操作,t: 請求時客戶端追加的時間戳,c:客戶端標識。REQUEST: 包含消息內容m,以及消息摘要d(m)。客戶端對請求進行簽名。
主節點收到客戶端的請求,需要進行以下交驗:
a. 客戶端請求消息簽名是否正確。
非法請求丟棄。正確請求,分配一個編號n,編號n主要用於對客戶端的請求進行排序。然後廣播一條<<PRE-PREPARE, v, n, d>, m>消息給其他副本節點。v:視圖編號,d客戶端消息摘要,m消息內容。<PRE-PREPARE, v, n, d>進行主節點簽名。n是要在某一個范圍區間內的[h, H],具體原因參見 垃圾回收 章節。
副本節點i收到主節點的PRE-PREPARE消息,需要進行以下交驗:
a. 主節點PRE-PREPARE消息簽名是否正確。
b. 當前副本節點是否已經收到了一條在同一v下並且編號也是n,但是簽名不同的PRE-PREPARE信息。
c. d與m的摘要是否一致。
d. n是否在區間[h, H]內。
非法請求丟棄。正確請求,副本節點i向其他節點包括主節點發送一條<PREPARE, v, n, d, i>消息, v, n, d, m與上述PRE-PREPARE消息內容相同,i是當前副本節點編號。<PREPARE, v, n, d, i>進行副本節點i的簽名。記錄PRE-PREPARE和PREPARE消息到log中,用於View Change過程中恢復未完成的請求操作。
主節點和副本節點收到PREPARE消息,需要進行以下交驗:
a. 副本節點PREPARE消息簽名是否正確。
b. 當前副本節點是否已經收到了同一視圖v下的n。
c. n是否在區間[h, H]內。
d. d是否和當前已收到PRE-PPREPARE中的d相同
非法請求丟棄。如果副本節點i收到了2f+1個驗證通過的PREPARE消息,則向其他節點包括主節點發送一條<COMMIT, v, n, d, i>消息,v, n, d, i與上述PREPARE消息內容相同。<COMMIT, v, n, d, i>進行副本節點i的簽名。記錄COMMIT消息到日誌中,用於View Change過程中恢復未完成的請求操作。記錄其他副本節點發送的PREPARE消息到log中。
主節點和副本節點收到COMMIT消息,需要進行以下交驗:
a. 副本節點COMMIT消息簽名是否正確。
b. 當前副本節點是否已經收到了同一視圖v下的n。
c. d與m的摘要是否一致。
d. n是否在區間[h, H]內。
非法請求丟棄。如果副本節點i收到了2f+1個驗證通過的COMMIT消息,說明當前網路中的大部分節點已經達成共識,運行客戶端的請求操作o,並返回<REPLY, v, t, c, i, r>給客戶端,r:是請求操作結果,客戶端如果收到f+1個相同的REPLY消息,說明客戶端發起的請求已經達成全網共識,否則客戶端需要判斷是否重新發送請求給主節點。記錄其他副本節點發送的COMMIT消息到log中。
如果主節點作惡,它可能會給不同的請求編上相同的序號,或者不去分配序號,或者讓相鄰的序號不連續。備份節點應當有職責來主動檢查這些序號的合法性。
如果主節點掉線或者作惡不廣播客戶端的請求,客戶端設置超時機制,超時的話,向所有副本節點廣播請求消息。副本節點檢測出主節點作惡或者下線,發起View Change協議。
View Change協議 :
副本節點向其他節點廣播<VIEW-CHANGE, v+1, n, C , P , i>消息。n是最新的stable checkpoint的編號, C 是 2f+1驗證過的CheckPoint消息集合, P 是當前副本節點未完成的請求的PRE-PREPARE和PREPARE消息集合。
當主節點p = v + 1 mod |R|收到 2f 個有效的VIEW-CHANGE消息後,向其他節點廣播<NEW-VIEW, v+1, V , O >消息。 V 是有效的VIEW-CHANGE消息集合。 O 是主節點重新發起的未經完成的PRE-PREPARE消息集合。PRE-PREPARE消息集合的選取規則:
副本節點收到主節點的NEW-VIEW消息,驗證有效性,有效的話,進入v+1狀態,並且開始 O 中的PRE-PREPARE消息處理流程。
在上述演算法流程中,為了確保在View Change的過程中,能夠恢復先前的請求,每一個副本節點都記錄一些消息到本地的log中,當執行請求後副本節點需要把之前該請求的記錄消息清除掉。
最簡單的做法是在Reply消息後,再執行一次當前狀態的共識同步,這樣做的成本比較高,因此可以在執行完多條請求K(例如:100條)後執行一次狀態同步。這個狀態同步消息就是CheckPoint消息。
副本節點i發送<CheckPoint, n, d, i>給其他節點,n是當前節點所保留的最後一個視圖請求編號,d是對當前狀態的一個摘要,該CheckPoint消息記錄到log中。如果副本節點i收到了2f+1個驗證過的CheckPoint消息,則清除先前日誌中的消息,並以n作為當前一個stable checkpoint。
這是理想情況,實際上當副本節點i向其他節點發出CheckPoint消息後,其他節點還沒有完成K條請求,所以不會立即對i的請求作出響應,它還會按照自己的節奏,向前行進,但此時發出的CheckPoint並未形成stable。
為了防止i的處理請求過快,設置一個上文提到的 高低水位區間[h, H] 來解決這個問題。低水位h等於上一個stable checkpoint的編號,高水位H = h + L,其中L是我們指定的數值,等於checkpoint周期處理請求數K的整數倍,可以設置為L = 2K。當副本節點i處理請求超過高水位H時,此時就會停止腳步,等待stable checkpoint發生變化,再繼續前進。
在區塊鏈場景中,一般適合於對強一致性有要求的私有鏈和聯盟鏈場景。例如,在IBM主導的區塊鏈超級賬本項目中,PBFT是一個可選的共識協議。在Hyperledger的Fabric項目中,共識模塊被設計成可插拔的模塊,支持像PBFT、Raft等共識演算法。
Raft基於領導者驅動的共識模型,其中將選舉一位傑出的領導者(Leader),而該Leader將完全負責管理集群,Leader負責管理Raft集群的所有節點之間的復制日誌。
下圖中,將在啟動過程中選擇集群的Leader(S1),並為來自客戶端的所有命令/請求提供服務。 Raft集群中的所有節點都維護一個分布式日誌(復制日誌)以存儲和提交由客戶端發出的命令(日誌條目)。 Leader接受來自客戶端的日誌條目,並在Raft集群中的所有關注者(S2,S3,S4,S5)之間復制它們。
在Raft集群中,需要滿足最少數量的節點才能提供預期的級別共識保證, 這也稱為法定人數。 在Raft集群中執行操作所需的最少投票數為 (N / 2 +1) ,其中N是組中成員總數,即 投票至少超過一半 ,這也就是為什麼集群節點通常為奇數的原因。 因此,在上面的示例中,我們至少需要3個節點才能具有共識保證。
如果法定仲裁節點由於任何原因不可用,也就是投票沒有超過半數,則此次協商沒有達成一致,並且無法提交新日誌。
數據存儲:Tidb/TiKV
日誌:阿里巴巴的 DLedger
服務發現:Consul& etcd
集群調度:HashiCorp Nomad
只能容納故障節點(CFT),不容納作惡節點
順序投票,只能串列apply,因此高並發場景下性能差
Raft通過解決圍繞Leader選舉的三個主要子問題,管理分布式日誌和演算法的安全性功能來解決分布式共識問題。
當我們啟動一個新的Raft集群或某個領導者不可用時,將通過集群中所有成員節點之間協商來選舉一個新的領導者。 因此,在給定的實例中,Raft集群的節點可以處於以下任何狀態: 追隨者(Follower),候選人(Candidate)或領導者(Leader)。
系統剛開始啟動的時候,所有節點都是follower,在一段時間內如果它們沒有收到Leader的心跳信號,follower就會轉化為Candidate;
如果某個Candidate節點收到大多數節點的票,則這個Candidate就可以轉化為Leader,其餘的Candidate節點都會回到Follower狀態;
一旦一個Leader發現系統中存在一個Leader節點比自己擁有更高的任期(Term),它就會轉換為Follower。
Raft使用基於心跳的RPC機制來檢測何時開始新的選舉。 在正常期間, Leader 會定期向所有可用的 Follower 發送心跳消息(實際中可能把日誌和心跳一起發過去)。 因此,其他節點以 Follower 狀態啟動,只要它從當前 Leader 那裡收到周期性的心跳,就一直保持在 Follower 狀態。
當 Follower 達到其超時時間時,它將通過以下方式啟動選舉程序:
根據 Candidate 從集群中其他節點收到的響應,可以得出選舉的三個結果。
共識演算法的實現一般是基於復制狀態機(Replicated state machines),何為 復制狀態機 :
簡單來說: 相同的初識狀態 + 相同的輸入 = 相同的結束狀態 。不同節點要以相同且確定性的函數來處理輸入,而不要引入一下不確定的值,比如本地時間等。使用replicated log是一個很不錯的注意,log具有持久化、保序的特點,是大多數分布式系統的基石。
有了Leader之後,客戶端所有並發的請求可以在Leader這邊形成一個有序的日誌(狀態)序列,以此來表示這些請求的先後處理順序。Leader然後將自己的日誌序列發送Follower,保持整個系統的全局一致性。注意並不是強一致性,而是 最終一致性 。
日誌由有序編號(log index)的日誌條目組成。每個日誌條目包含它被創建時的任期號(term),和日誌中包含的數據組成,日誌包含的數據可以為任何類型,從簡單類型到區塊鏈的區塊。每個日誌條目可以用[ term, index, data]序列對表示,其中term表示任期, index表示索引號,data表示日誌數據。
Leader 嘗試在集群中的大多數節點上執行復制命令。 如果復製成功,則將命令提交給集群,並將響應發送回客戶端。類似兩階段提交(2PC),不過與2PC的區別在於,leader只需要超過一半節點同意(處於工作狀態)即可。
leader 、 follower 都可能crash,那麼 follower 維護的日誌與 leader 相比可能出現以下情況
當出現了leader與follower不一致的情況,leader強制follower復制自己的log, Leader會從後往前試 ,每次AppendEntries失敗後嘗試前一個日誌條目(遞減nextIndex值), 直到成功找到每個Follower的日誌一致位置點(基於上述的兩條保證),然後向後逐條覆蓋Followers在該位置之後的條目 。所以丟失的或者多出來的條目可能會持續多個任期。
要求候選人的日誌至少與其他節點一樣最新。如果不是,則跟隨者節點將不投票給候選者。
意味著每個提交的條目都必須存在於這些伺服器中的至少一個中。如果候選人的日誌至少與該多數日誌中的其他日誌一樣最新,則它將保存所有已提交的條目,避免了日誌回滾事件的發生。
即任一任期內最多一個leader被選出。這一點非常重要,在一個復制集中任何時刻只能有一個leader。系統中同時有多餘一個leader,被稱之為腦裂(brain split),這是非常嚴重的問題,會導致數據的覆蓋丟失。在raft中,兩點保證了這個屬性:
因此, 某一任期內一定只有一個leader 。
當集群中節點的狀態發生變化(集群配置發生變化)時,系統容易受到系統故障。 因此,為防止這種情況,Raft使用了一種稱為兩階段的方法來更改集群成員身份。 因此,在這種方法中,集群在實現新的成員身份配置之前首先更改為中間狀態(稱為聯合共識)。 聯合共識使系統即使在配置之間進行轉換時也可用於響應客戶端請求,它的主要目的是提升分布式系統的可用性。
Ⅶ 一文了解以太坊挖礦演算法及算力規模2020-09-09
以太坊網路中,想要獲得以太坊,也要通過挖礦來實現。當前以太坊也是採用POW共識機制,但是與比特幣的POW挖礦有點不一樣,以太坊挖礦難度是可以調節的。以太坊系統有一個特殊的公式用來計算之後的每個塊的難度。如果某個區塊比前一個區塊驗證的更快,以太坊協議就會增加區塊的難度。通過調整區塊難度,就可以調整驗證區塊所需的時間。
以太坊採用的是Ethash 加密演算法,在挖礦的過程中,需要讀取內存並存儲 DAG 文件。由於每一次讀取內寸的帶寬都是有限的,而現有的計算機技術又很難在這個問題上有質的突破,所以無論如何提高計算機的運算效率,內存讀取效率仍然不會有很大的改觀。因此,從某種意義上來說,以太坊的Ethash加密演算法具有「抗ASIC性」。
加密演算法的不同,導致了比特幣和以太坊的挖礦設備、算力規模差異很大。
目前,比特幣挖礦設備主要是專業化程度非常高的ASIC 礦機,單台礦機的算力最高達到了 112T/s(神馬M30S++礦機),全網算力的規模達到139.92EH/s。
以太坊的挖礦設備主要是顯卡礦機和定製GPU礦機,專業化的ASIC礦機非常少,一方面是因為以太坊挖礦演算法的「抗 ASIC 性」提高了研發ASIC礦機的門檻,另一方面是因為以太坊升級到2.0之後共識機制會轉型為PoS,礦機無法繼續挖。
和ASIC礦機相比,顯卡礦機在算力上相差了2個量級。目前,主流的顯卡礦機(8卡)算力約為420MH/s,比較領先的定製GPU礦機算力約在500M~750M,以太坊全網算力約為235.39TH/s。
從過去兩年的時間維度上看,以太坊的全網算力增長相對緩慢。
以太坊協議規定,難度的動態調整方式是使全網創建新區塊的時間間隔為15秒,網路用15秒時間創建區塊鏈,這樣一來,因為時間太快,系統的同步性就大大提升,惡意參與者很難在如此短的時間發動51%(也就是半數以上)的算力去修改歷史數據。
Ⅷ 自學區塊鏈(六)BTC-挖礦難度
我們來看下挖礦的計算公式
H(block header) target,這個target就是 目標閾值
BTC用的哈希演算法是SHA-256,它產生的哈希值是256位,那麼就有2^256種取值,這個就是他的輸出空間,要增大挖礦難度, 就調節目標值在這個輸出空間所佔的比例 。
挖礦難度和目標閾值是成反比的, 當算力強時,調節難度,使目標閾值變小 。
不調節難度,隨著礦工數量增多,隨著算力的上升,那麼挖到區塊的時間就會變短,從10分鍾縮短到1分鍾甚至幾秒鍾,這個會帶來什麼樣的問題呢?可能很多人覺得這不是挺好嗎,交易等六個確認就會縮短時間了,交易就會變快了。其實出塊時間縮到很短,風險是很大的,因為網路延遲,出塊時間變短,不同節點很可能接到不同的區塊信息,導致會有很多分叉節點出現。礦工會根據自己認為正確的區塊接著挖。這種情況下,惡意節點發動分叉攻擊就比較容易成功,因為誠實節點的算力被分散了。
導致不需要51%的算力就能成功,所以縮短出塊時間是不利於BTC系統的穩定的。雖然10分鍾不一定是最優的時間,但是也算是比較合理的。
下面是 算力增長曲線
下面是 挖礦難度曲線
下面是 平均出礦時間
我們來看下難度公式:每2016個區塊調整一次挖礦難度,10分鍾出一個平均算下來是兩星期調整一次。
previous_difficulty是上一次的挖礦難度,分母是最近2016個區塊花費的時間
每個節點挖礦是獨立的,BTC的協議也是開源的,會不會有礦工不修改挖礦難度呢?可能性是存在的,但是不影響結果,因為廣播給其他節點需要獨立驗證block header的哈希值, 這個header裡面有難度的一個壓縮編碼,修改難度產生的結果是不會被誠實的節點認可的。
Ⅸ 區塊鏈技術
背景:比特幣誕生之後,發現該技術很先進,才發現了區塊鏈技術。比特幣和區塊鏈技術同時被發現。
1.1 比特幣誕生的目的:
①貨幣交易就有記錄,即賬本;
②中心化機構記賬弊端——可篡改;易超發
比特幣解決第一個問題:防篡改——hash函數
1.2 hash函數(加密方式)
①作用:將任意長度的字元串,轉換成固定長度(sha256)的輸出。輸出也被稱為hash值。
②特點:很難找到兩個不同的x和y,使得h(x)=h(y)。
③應用:md5文件加密
1.3 區塊鏈
①定義
區塊:將總賬本拆分成區塊存儲
區塊鏈:在每個區塊上,增加區塊頭。其中記錄父區塊的hash值。通過每個區塊存儲父區塊的hash值,將所有的區塊按照順序連接起來,形成區塊鏈。
②區塊鏈如何防止交易記錄被篡改
形成區塊鏈後,篡改任一交易,會導致該交易區塊hash值和其子區塊中不同,發現篡改。
即使繼續篡改子區塊頭中hash值,會導致子區塊hash值和孫區塊中不同,發現篡改。
1.4 區塊鏈本質
①比特幣和區塊鏈本質:一個人人可見的大賬本,只記錄交易。
②核心技術:通過密碼學hash函數+數據結構,保證賬本記錄不可篡改。
③核心功能:創造信任。法幣依靠政府公信力,比特幣依靠技術。
1.5如何交易
①進行交易,需要有賬號和密碼,對應公鑰和私鑰
私鑰:一串256位的二進制數字,獲取不需要申請,甚至不需要電腦,自己拋硬幣256次就生成了私鑰
地址由私鑰轉化而成。地址不能反推私鑰。
地址即身份,代表了在比特幣世界的ID。
一個地址產生之後,只有進入區塊鏈賬本,才能被大家知道。
②數字簽名技術
簽名函數sign(張三的私鑰,轉賬信息:張三轉10元給李四) = 本次轉賬簽名
驗證韓式verify(張三的地址,轉賬信息:張三轉10元給李四,本次轉賬簽名) = True
張三通過簽名函數sign(),使用自己的私鑰對本次交易進行簽名。
任何人可以通過驗證韓式vertify(),來驗證此次簽名是否有由持有張三私鑰的張三本人發出。是返回true,反之為false。
sign()和verify()由密碼學保證不被破解。·
③完成交易
張三將轉賬信息和簽名在全網供內部。在賬戶有餘額的前提下,驗證簽名是true後,即會記錄到區塊鏈賬本中。一旦記錄,張三的賬戶減少10元,李四增加10元。
支持一對一,一對多,多對已,多對多的交易方式。
比特幣世界中,私鑰就是一切!!!
1.6中心化記賬
①中心化記賬優點:
a.不管哪個中心記賬,都不用太擔心
b.中心化記賬,效率高
②中心化記賬缺點:
a 拒絕服務攻擊
b 厭倦後停止服務
c 中心機構易被攻擊。比如破壞伺服器、網路,監守自盜、法律終止、政府幹預等
歷史 上所有有中心化機構的機密貨幣嘗試都失敗了。
比特幣解決第二個問題:如何去中心化
1.7 去中心化記賬
①去中心化:人人都可以記賬。每個人都可以保留完整的賬本。
任何人都可以下載開源程序,參與P2P網路,監聽全世界發送的交易,成為記賬節點,參與記賬。
②去中心化記賬流程
某人發起一筆交易後,向全網廣播。
每個記賬節點,持續監聽、持續全網交易。收到一筆新交易,驗證准確性後,將其放入交易池並繼續向其它節點傳播。
因為網路傳播,同一時間不同記賬節點的交一次不一定相同。
每隔10分鍾,從所有記賬節點當中,按照某種方式抽取1名,將其交易池作為下一個區塊,並向全網廣播。
其它節點根據最新的區塊中的交易,刪除自己交易池中已經被記錄的交易,繼續記賬,等待下一次被選中。
③去中心化記賬特點
每隔10分鍾產生一個區塊,但不是所有在這10分鍾之內的交易都能記錄。
獲得記賬權的記賬節點,將得到50個比特幣的獎勵。每21萬個區塊(約4年)後,獎勵減半。總量約2100萬枚,預計2040年開采完。
記錄一個區塊的獎勵,也是比特幣唯一的發行方式。
④如何分配記賬權:POW(proof of work) 方式
記賬幾點通過計算一下數學題,來爭奪記賬權。
找到某隨即數,使得一下不等式成立:
除了從0開始遍歷隨機數碰運氣之外,沒有其它解法,解題的過程,又叫做挖礦。
誰先解對,誰就得到記賬權。
某記賬節點率先找到解,即向全網公布。其他節點驗證無誤之後,在新區塊之後重新開始新一輪的計算。這個方式被稱為POW。
⑤難度調整
每個區塊產生的時間並不是正好10分鍾
隨著比特幣發展,全網算力不算提升。
為了應對算力的變化,每隔2016個區塊(大約2周),會加大或者減少難度,使得每個區塊產生的平均時間是10分鍾。
#歐易OKEx# #比特幣[超話]# #數字貨幣#