導航:首頁 > 觀區塊鏈 > hskg區塊鏈干什麼的

hskg區塊鏈干什麼的

發布時間:2023-01-07 06:06:30

⑴ 什麼是區塊鏈挖礦是做什麼詳細介紹區塊鏈和虛擬貨幣

比特幣剛發行的時候人們發現了,它去中心化,不受任何中心管制;它完全開放,除了交易信息加密之外整個系統信息高度透明,技術都是開源的;安全性,只要不能控制全部節點的%51,就無法肆意修改數據,這使得它相對安全;獨立性,整個模式和比特幣不依賴任何第三方,所有節點都在系統內驗證、交換數據,不受任何干預

我們這里詳細解釋什麼是區塊鏈技術,說白了就是區塊+鏈,那什麼是 「區塊」 ?什麼又是 「鏈」 呢?

區塊就是一個賬本交易記賬由分布在不同地方的多個節點共同完成,而且每一個節點記錄的是完整的賬目,因此它們都可以參與監督交易合法性,同時也可以共同為其作證

每一個區塊包含了前一個區塊的加密散列、相應時間戳記以及交易資料(通常用默克爾樹(Merkle tree)演算法計算的散列值表示),這樣的設計使得區塊內容具有難以篡改的特性。用區塊鏈技術所串接的分布式賬本能讓兩方有效記錄交易,且可永久查驗此交易。

哈希函數h()的作用:將任意長度的字元串,轉換成固定長度(例如256位)的輸出。輸出也被稱為 哈希值 ,這個輸出不可逆

很難找到兩個不同的x和y,使得h(x) = h(y),也就是說兩個不同的輸入,會有不同的輸出。理論上說兩個不同的輸入可能會有不同的輸出,但這幾乎不可能,比方說一個無限的空間映射到一個有限的空間,肯定存在多對一的情況,理論存在,但沒有任何規律,保證你無法通過數學上的任何推斷來找到這個結果,為什麼這里是256位呢?不是更長的呢?因為256位已經足夠安全。

將賬本拆分成塊,比如一個本子的一張紙就是一個區塊,每個區塊記錄一段時間內的交易,列如10分鍾

我們把每張紙比作一個一個 區塊 ,在每個區塊的上面增加一部分內容我們把它叫做 區塊頭 ,其中記錄父區塊的哈希值,通過每個區塊儲存父區塊的哈希值,將所有區塊按順利連接起來,形成區塊鏈

1區塊 的哈希值記錄到 2區塊 的區塊頭上,如此操作每個區塊的區塊頭都記錄父區塊的哈希值,每個區塊都按照順序鏈接起來了,這就叫做區塊鏈。第一個區塊沒有區塊頭,又被稱之為創世區塊

區塊鏈是一個賬本,在賬本上只有發生了交易你的賬戶上的錢才會變多和變少,需要進行交易那麼首先需要一個賬號和密碼,就像你的銀行卡有賬號和密碼別人就可以對你進行一個轉賬,在區塊賬本上這個賬號密碼就是公鑰和私鑰

老王(已有私鑰,公鑰),想轉給張10個BTC,需要一些操作

證明是老王本人發出轉賬 簽名函數Sign (老王的私鑰 + 轉賬信息:老王轉給張三10 BTC)=本次專賬簽名
驗證是老王本人發出轉賬 驗證函數Verify (老王的地址 + 轉賬詳細:老王轉給張三10 BTC + 本次轉賬簽名)=true
一旦轉賬記錄到區塊從此誰也不能改變它,張三增加10 BTC,老王則相應減少10 BTC,整個操作都是自動的,比如你的錢包app它會幫你去做這樣的事情,app知道你的私鑰,你告訴錢包交易內容,錢包簽名向全網公布,等待其他人來驗證這筆交易

中心化記賬效率會更高,銀行、政府或者支付寶幫你記賬,都很可靠,因為他們都無法動你的錢,除非它們有你的私鑰

中心化記賬存在一些缺點

去中心化人人都可以記賬,每個人可以保留一個完整的賬本。任何人都可以下載開源程序,參與比特幣的p2p網路,監聽來自全世界發送的交易,成為記賬節點,參與記賬,假設小逸發布了一筆交易向全網廣播,A記賬節點監聽到了這筆交易,A驗證了這筆交易位true之後放入交易池繼續向其它節點傳播,因為是網路傳播,同一時間不同記賬節點的交易池不一定相同,每10分鍾,從所有記賬節點當中,按照某個方式抽取一名,驗證這個節點的交易為true之後,之後將這個選中的節點交易池中的交易記錄與自己(A)節點的交易池中的交易記錄對比一下,對比完之後會將自己交易池中已經被選中記賬節點記錄的交易刪掉,別的不動繼續記賬等待下一次被選中,每隔10分鍾就是一個循環,這個10分鍾所有記賬節點正常記賬,10分鍾之後再選出一個節點把它交易池當中的交易作為一個新的區塊,這個區塊來自所有記賬節點中我任意選擇的一個記賬節點的交易池,如此不斷循環往復

交易並不是被記錄就完成,只有當這筆交易變成了某一個區塊,這筆交易才算是真正的完成。這就是去中心化的一個記賬的完整的流程,你的交易並不會第一時間被記錄,因為p2p網路傳播需要時間,如果被選中區塊的節點還沒有接受到你的交易,交易就沒有完成。每10分鍾產生一個區塊,但不是所有在10分鍾內的交易都能記錄。10分鍾只是一個平均值

去中心化記賬的特點,有記賬權的記賬節點,每十分鍾被選中的節點它會獲得50BTC獎勵,每21萬個區塊差不多4年,獎勵減半,比特幣自發行已經兩次減半,那麼每十分鍾產生一個新的區塊這個記賬節點得到的獎勵是10.5BTC,每隔4年減半那麼可以算出BTC的總量大約為2100萬枚,預計2040年開采完,記錄一個區塊的獎勵也是比特幣唯一的發行方式,當BTC開采完之後,記賬節點可以獲得的收益就只有交易的手續費了

記賬節點通過題目來爭奪記賬權,

找到某位隨機數使得等式不成立
SHA256哈希函數 (隨機數 + 父區塊哈希值 + 交易池中的交易) 某一指定值)
從0開始遍歷隨機數碰運氣之外,沒有其它解法,解題的過程,又叫做 挖礦 ,所以解這個題目的記賬節點又被稱之為 礦工 ,你遍歷隨機數越快你拿到這個記賬權的可能性就越大,這個遍歷速度就被礦老闆們稱之為 算力 ,為了得到這個算力,礦老闆們就會購買更多且更高算力的礦機

誰先解對,誰就得到記賬權。A記賬節點率先找到解,即向全網公布,其他節點驗證無誤之後,A節點就獲得了這個區塊,獲得12.5個BTC的收益,在新區塊之後重新開始新一輪計算。這個方式被稱之為(POW)分配記賬權

一般大約10分鍾解出這個隨機數,10並不絕對,因為解開這個題目的過程本就是個碰運氣的過程,未來應對算力的變化,比特幣每隔2016個區塊,大約兩周,會加大或減小難度,使得平均產生區塊的時間是十分鍾

每一個區塊包含了前一個區塊的加密散列、相應時間戳記以及交易資料(通常用默克爾樹(Merkle tree)演算法計算的散列值表示),這樣的設計使得區塊內容具有難以篡改的特性。用區塊鏈技術所串接的分布式賬本能讓兩方有效記錄交易,且可永久查驗此交易。

和傳統存儲的數據不同的是,區塊鏈每個節點都按照塊鏈式結構存儲完整的數據,區塊鏈每個節點存儲都是獨立的、地位等同的,依靠共識機制保證存儲的一致性,而傳統分布式存儲一般是通過中心節點往其他備份節點同步數據。

麻將作為中國傳統的區塊鏈項目,四個礦工一組,先碰撞出13個數字正確哈希值的礦工可以獲得記賬權並得到獎勵。

很多人講區塊鏈是騙局比特幣是騙局,這也許是個騙局,但是這個技術已經被廣泛地承認和應用,區塊鏈涉及的密碼學知識一般人再借幾個腦子給你你也搞不懂,在一個相對理性的角度看待問題最重要,千萬別聽風就是雨。

這門技術有著不可思議的地方 在一個沒有中心沒有監管的情況下保持著絕對的秩序 這個只需由大家的共識建立的信任,比特幣創造了這個共識,在區塊鏈的世界裡每個人都是公平平等的。

⑵ 區塊鏈和大數據分析有什麼關系

大數據和區塊鏈兩者之間有個共同的關鍵詞:分布式,代表了一種從技術權威壟斷到去中心化的轉變。

分布式存儲:HDFS vs. 區塊

大數據,需要應對海量化和快增長的存儲,這要求底層硬體架構和文件系統在性價比上要大大高於傳統技術,能夠彈性擴張存儲容量。谷歌的GFS和Hadoop的HDFS奠定了大數據存儲技術的基礎。另外,大數據對存儲技術提出的另一個挑戰是多種數據格式的適應能力,因此現在大數據底層的存儲層不只是HDFS,還有HBase和Ku等存儲架構。

區塊鏈,是比特幣的底層技術架構,它在本質上是一種去中心化的分布式賬本。區塊鏈技術作為一種持續增長的、按序整理成區塊的鏈式數據結構,通過網路中多個節點共同參與數據的計算和記錄,並且互相驗證其信息的有效性。從這一點來說,區塊鏈技術也是一種特定的資料庫技術。由於去中心化資料庫在安全、便捷方面的特性,很多業內人士看好其發展,認為它是對現有互聯網技術的升級與補充。

分布式計算:MapRece vs. 共識機制

大數據的分析挖掘是數據密集型計算,需要巨大的分布式計算能力。節點管理、任務調度、容錯和高可靠性是關鍵技術。Google和Hadoop的MapRece是這種分布式計算技術的代表,通過添加伺服器節點可線性擴展系統的總處理能力(Scale Out),在成本和可擴展性上都有巨大的優勢。現在,除了批計算,大數據還包括了流計算、圖計算、實時計算、交互查詢等計算框架。

區塊鏈的共識機制,就是所有分布式節之間怎麼達成共識,通過演算法來生成和更新數據,去認定一個記錄的有效性,這既是認定的手段,也是防止篡改的手段。區塊鏈主要包括四種不同的共識機制,適用於不同的應用場景,在效率和安全性之間取得平衡。以比特幣為例,採用的是「工作量證明」(Proof Of Work,簡稱POW),只有在控制了全網超過51%的記賬節點的情況下,才有可能偽造出一條不存在的記錄。

⑶ 【深度知識】區塊鏈之加密原理圖示(加密,簽名)

先放一張以太坊的架構圖:

在學習的過程中主要是採用單個模塊了學習了解的,包括P2P,密碼學,網路,協議等。直接開始總結:

秘鑰分配問題也就是秘鑰的傳輸問題,如果對稱秘鑰,那麼只能在線下進行秘鑰的交換。如果在線上傳輸秘鑰,那就有可能被攔截。所以採用非對稱加密,兩把鑰匙,一把私鑰自留,一把公鑰公開。公鑰可以在網上傳輸。不用線下交易。保證數據的安全性。

如上圖,A節點發送數據到B節點,此時採用公鑰加密。A節點從自己的公鑰中獲取到B節點的公鑰對明文數據加密,得到密文發送給B節點。而B節點採用自己的私鑰解密。

2、無法解決消息篡改。

如上圖,A節點採用B的公鑰進行加密,然後將密文傳輸給B節點。B節點拿A節點的公鑰將密文解密。

1、由於A的公鑰是公開的,一旦網上黑客攔截消息,密文形同虛設。說白了,這種加密方式,只要攔截消息,就都能解開。

2、同樣存在無法確定消息來源的問題,和消息篡改的問題。

如上圖,A節點在發送數據前,先用B的公鑰加密,得到密文1,再用A的私鑰對密文1加密得到密文2。而B節點得到密文後,先用A的公鑰解密,得到密文1,之後用B的私鑰解密得到明文。

1、當網路上攔截到數據密文2時, 由於A的公鑰是公開的,故可以用A的公鑰對密文2解密,就得到了密文1。所以這樣看起來是雙重加密,其實最後一層的私鑰簽名是無效的。一般來講,我們都希望簽名是簽在最原始的數據上。如果簽名放在後面,由於公鑰是公開的,簽名就缺乏安全性。

2、存在性能問題,非對稱加密本身效率就很低下,還進行了兩次加密過程。

如上圖,A節點先用A的私鑰加密,之後用B的公鑰加密。B節點收到消息後,先採用B的私鑰解密,然後再利用A的公鑰解密。

1、當密文數據2被黑客攔截後,由於密文2隻能採用B的私鑰解密,而B的私鑰只有B節點有,其他人無法機密。故安全性最高。
2、當B節點解密得到密文1後, 只能採用A的公鑰來解密。而只有經過A的私鑰加密的數據才能用A的公鑰解密成功,A的私鑰只有A節點有,所以可以確定數據是由A節點傳輸過來的。

經兩次非對稱加密,性能問題比較嚴重。

基於以上篡改數據的問題,我們引入了消息認證。經過消息認證後的加密流程如下:

當A節點發送消息前,先對明文數據做一次散列計算。得到一個摘要, 之後將照耀與原始數據同時發送給B節點。當B節點接收到消息後,對消息解密。解析出其中的散列摘要和原始數據,然後再對原始數據進行一次同樣的散列計算得到摘要1, 比較摘要與摘要1。如果相同則未被篡改,如果不同則表示已經被篡改。

在傳輸過程中,密文2隻要被篡改,最後導致的hash與hash1就會產生不同。

無法解決簽名問題,也就是雙方相互攻擊。A對於自己發送的消息始終不承認。比如A對B發送了一條錯誤消息,導致B有損失。但A抵賴不是自己發送的。

在(三)的過程中,沒有辦法解決交互雙方相互攻擊。什麼意思呢? 有可能是因為A發送的消息,對A節點不利,後來A就抵賴這消息不是它發送的。

為了解決這個問題,故引入了簽名。這里我們將(二)-4中的加密方式,與消息簽名合並設計在一起。

在上圖中,我們利用A節點的私鑰對其發送的摘要信息進行簽名,然後將簽名+原文,再利用B的公鑰進行加密。而B得到密文後,先用B的私鑰解密,然後 對摘要再用A的公鑰解密,只有比較兩次摘要的內容是否相同。這既避免了防篡改問題,有規避了雙方攻擊問題。因為A對信息進行了簽名,故是無法抵賴的。

為了解決非對稱加密數據時的性能問題,故往往採用混合加密。這里就需要引入對稱加密,如下圖:

在對數據加密時,我們採用了雙方共享的對稱秘鑰來加密。而對稱秘鑰盡量不要在網路上傳輸,以免丟失。這里的共享對稱秘鑰是根據自己的私鑰和對方的公鑰計算出的,然後適用對稱秘鑰對數據加密。而對方接收到數據時,也計算出對稱秘鑰然後對密文解密。

以上這種對稱秘鑰是不安全的,因為A的私鑰和B的公鑰一般短期內固定,所以共享對稱秘鑰也是固定不變的。為了增強安全性,最好的方式是每次交互都生成一個臨時的共享對稱秘鑰。那麼如何才能在每次交互過程中生成一個隨機的對稱秘鑰,且不需要傳輸呢?

那麼如何生成隨機的共享秘鑰進行加密呢?

對於發送方A節點,在每次發送時,都生成一個臨時非對稱秘鑰對,然後根據B節點的公鑰 和 臨時的非對稱私鑰 可以計算出一個對稱秘鑰(KA演算法-Key Agreement)。然後利用該對稱秘鑰對數據進行加密,針對共享秘鑰這里的流程如下:

對於B節點,當接收到傳輸過來的數據時,解析出其中A節點的隨機公鑰,之後利用A節點的隨機公鑰 與 B節點自身的私鑰 計算出對稱秘鑰(KA演算法)。之後利用對稱秘鑰機密數據。

對於以上加密方式,其實仍然存在很多問題,比如如何避免重放攻擊(在消息中加入 Nonce ),再比如彩虹表(參考 KDF機制解決 )之類的問題。由於時間及能力有限,故暫時忽略。

那麼究竟應該採用何種加密呢?

主要還是基於要傳輸的數據的安全等級來考量。不重要的數據其實做好認證和簽名就可以,但是很重要的數據就需要採用安全等級比較高的加密方案了。

密碼套件 是一個網路協議的概念。其中主要包括身份認證、加密、消息認證(MAC)、秘鑰交換的演算法組成。

在整個網路的傳輸過程中,根據密碼套件主要分如下幾大類演算法:

秘鑰交換演算法:比如ECDHE、RSA。主要用於客戶端和服務端握手時如何進行身份驗證。

消息認證演算法:比如SHA1、SHA2、SHA3。主要用於消息摘要。

批量加密演算法:比如AES, 主要用於加密信息流。

偽隨機數演算法:例如TLS 1.2的偽隨機函數使用MAC演算法的散列函數來創建一個 主密鑰 ——連接雙方共享的一個48位元組的私鑰。主密鑰在創建會話密鑰(例如創建MAC)時作為一個熵來源。

在網路中,一次消息的傳輸一般需要在如下4個階段分別進行加密,才能保證消息安全、可靠的傳輸。

握手/網路協商階段:

在雙方進行握手階段,需要進行鏈接的協商。主要的加密演算法包括RSA、DH、ECDH等

身份認證階段:

身份認證階段,需要確定發送的消息的來源來源。主要採用的加密方式包括RSA、DSA、ECDSA(ECC加密,DSA簽名)等。

消息加密階段:

消息加密指對發送的信息流進行加密。主要採用的加密方式包括DES、RC4、AES等。

消息身份認證階段/防篡改階段:

主要是保證消息在傳輸過程中確保沒有被篡改過。主要的加密方式包括MD5、SHA1、SHA2、SHA3等。

ECC :Elliptic Curves Cryptography,橢圓曲線密碼編碼學。是一種根據橢圓上點倍積生成 公鑰、私鑰的演算法。用於生成公私秘鑰。

ECDSA :用於數字簽名,是一種數字簽名演算法。一種有效的數字簽名使接收者有理由相信消息是由已知的發送者創建的,從而發送者不能否認已經發送了消息(身份驗證和不可否認),並且消息在運輸過程中沒有改變。ECDSA簽名演算法是ECC與DSA的結合,整個簽名過程與DSA類似,所不一樣的是簽名中採取的演算法為ECC,最後簽名出來的值也是分為r,s。 主要用於身份認證階段

ECDH :也是基於ECC演算法的霍夫曼樹秘鑰,通過ECDH,雙方可以在不共享任何秘密的前提下協商出一個共享秘密,並且是這種共享秘鑰是為當前的通信暫時性的隨機生成的,通信一旦中斷秘鑰就消失。 主要用於握手磋商階段。

ECIES: 是一種集成加密方案,也可稱為一種混合加密方案,它提供了對所選擇的明文和選擇的密碼文本攻擊的語義安全性。ECIES可以使用不同類型的函數:秘鑰協商函數(KA),秘鑰推導函數(KDF),對稱加密方案(ENC),哈希函數(HASH), H-MAC函數(MAC)。

ECC 是橢圓加密演算法,主要講述了按照公私鑰怎麼在橢圓上產生,並且不可逆。 ECDSA 則主要是採用ECC演算法怎麼來做簽名, ECDH 則是採用ECC演算法怎麼生成對稱秘鑰。以上三者都是對ECC加密演算法的應用。而現實場景中,我們往往會採用混合加密(對稱加密,非對稱加密結合使用,簽名技術等一起使用)。 ECIES 就是底層利用ECC演算法提供的一套集成(混合)加密方案。其中包括了非對稱加密,對稱加密和簽名的功能。

<meta charset="utf-8">

這個先訂條件是為了保證曲線不包含奇點。

所以,隨著曲線參數a和b的不斷變化,曲線也呈現出了不同的形狀。比如:

所有的非對稱加密的基本原理基本都是基於一個公式 K = k G。其中K代表公鑰,k代表私鑰,G代表某一個選取的基點。非對稱加密的演算法 就是要保證 該公式 不可進行逆運算( 也就是說G/K是無法計算的 )。 *

ECC是如何計算出公私鑰呢?這里我按照我自己的理解來描述。

我理解,ECC的核心思想就是:選擇曲線上的一個基點G,之後隨機在ECC曲線上取一個點k(作為私鑰),然後根據k G計算出我們的公鑰K。並且保證公鑰K也要在曲線上。*

那麼k G怎麼計算呢?如何計算k G才能保證最後的結果不可逆呢?這就是ECC演算法要解決的。

首先,我們先隨便選擇一條ECC曲線,a = -3, b = 7 得到如下曲線:

在這個曲線上,我隨機選取兩個點,這兩個點的乘法怎麼算呢?我們可以簡化下問題,乘法是都可以用加法表示的,比如2 2 = 2+2,3 5 = 5+5+5。 那麼我們只要能在曲線上計算出加法,理論上就能算乘法。所以,只要能在這個曲線上進行加法計算,理論上就可以來計算乘法,理論上也就可以計算k*G這種表達式的值。

曲線上兩點的加法又怎麼算呢?這里ECC為了保證不可逆性,在曲線上自定義了加法體系。

現實中,1+1=2,2+2=4,但在ECC演算法里,我們理解的這種加法體系是不可能。故需要自定義一套適用於該曲線的加法體系。

ECC定義,在圖形中隨機找一條直線,與ECC曲線相交於三個點(也有可能是兩個點),這三點分別是P、Q、R。

那麼P+Q+R = 0。其中0 不是坐標軸上的0點,而是ECC中的無窮遠點。也就是說定義了無窮遠點為0點。

同樣,我們就能得出 P+Q = -R。 由於R 與-R是關於X軸對稱的,所以我們就能在曲線上找到其坐標。

P+R+Q = 0, 故P+R = -Q , 如上圖。

以上就描述了ECC曲線的世界裡是如何進行加法運算的。

從上圖可看出,直線與曲線只有兩個交點,也就是說 直線是曲線的切線。此時P,R 重合了。

也就是P = R, 根據上述ECC的加法體系,P+R+Q = 0, 就可以得出 P+R+Q = 2P+Q = 2R+Q=0

於是乎得到 2 P = -Q (是不是與我們非對稱演算法的公式 K = k G 越來越近了)。

於是我們得出一個結論,可以算乘法,不過只有在切點的時候才能算乘法,而且只能算2的乘法。

假若 2 可以變成任意個數進行想乘,那麼就能代表在ECC曲線里可以進行乘法運算,那麼ECC演算法就能滿足非對稱加密演算法的要求了。

那麼我們是不是可以隨機任何一個數的乘法都可以算呢? 答案是肯定的。 也就是點倍積 計算方式。

選一個隨機數 k, 那麼k * P等於多少呢?

我們知道在計算機的世界裡,所有的都是二進制的,ECC既然能算2的乘法,那麼我們可以將隨機數k描 述成二進制然後計算。假若k = 151 = 10010111

由於2 P = -Q 所以 這樣就計算出了k P。 這就是點倍積演算法 。所以在ECC的曲線體系下是可以來計算乘法,那麼以為這非對稱加密的方式是可行的。

至於為什麼這樣計算 是不可逆的。這需要大量的推演,我也不了解。但是我覺得可以這樣理解:

我們的手錶上,一般都有時間刻度。現在如果把1990年01月01日0點0分0秒作為起始點,如果告訴你至起始點為止時間流逝了 整1年,那麼我們是可以計算出現在的時間的,也就是能在手錶上將時分秒指針應該指向00:00:00。但是反過來,我說現在手錶上的時分秒指針指向了00:00:00,你能告訴我至起始點算過了有幾年了么?

ECDSA簽名演算法和其他DSA、RSA基本相似,都是採用私鑰簽名,公鑰驗證。只不過演算法體系採用的是ECC的演算法。交互的雙方要採用同一套參數體系。簽名原理如下:

在曲線上選取一個無窮遠點為基點 G = (x,y)。隨機在曲線上取一點k 作為私鑰, K = k*G 計算出公鑰。

簽名過程:

生成隨機數R, 計算出RG.

根據隨機數R,消息M的HASH值H,以及私鑰k, 計算出簽名S = (H+kx)/R.

將消息M,RG,S發送給接收方。

簽名驗證過程:

接收到消息M, RG,S

根據消息計算出HASH值H

根據發送方的公鑰K,計算 HG/S + xK/S, 將計算的結果與 RG比較。如果相等則驗證成功。

公式推論:

HG/S + xK/S = HG/S + x(kG)/S = (H+xk)/GS = RG

在介紹原理前,說明一下ECC是滿足結合律和交換律的,也就是說A+B+C = A+C+B = (A+C)+B。

這里舉一個WIKI上的例子說明如何生成共享秘鑰,也可以參考 Alice And Bob 的例子。

Alice 與Bob 要進行通信,雙方前提都是基於 同一參數體系的ECC生成的 公鑰和私鑰。所以有ECC有共同的基點G。

生成秘鑰階段:

Alice 採用公鑰演算法 KA = ka * G ,生成了公鑰KA和私鑰ka, 並公開公鑰KA。

Bob 採用公鑰演算法 KB = kb * G ,生成了公鑰KB和私鑰 kb, 並公開公鑰KB。

計算ECDH階段:

Alice 利用計算公式 Q = ka * KB 計算出一個秘鑰Q。

Bob 利用計算公式 Q' = kb * KA 計算出一個秘鑰Q'。

共享秘鑰驗證:

Q = ka KB = ka * kb * G = ka * G * kb = KA * kb = kb * KA = Q'

故 雙方分別計算出的共享秘鑰不需要進行公開就可採用Q進行加密。我們將Q稱為共享秘鑰。

在以太坊中,採用的ECIEC的加密套件中的其他內容:

1、其中HASH演算法採用的是最安全的SHA3演算法 Keccak 。

2、簽名演算法採用的是 ECDSA

3、認證方式採用的是 H-MAC

4、ECC的參數體系採用了secp256k1, 其他參數體系 參考這里

H-MAC 全程叫做 Hash-based Message Authentication Code. 其模型如下:

以太坊 的 UDP通信時(RPC通信加密方式不同),則採用了以上的實現方式,並擴展化了。

首先,以太坊的UDP通信的結構如下:

其中,sig是 經過 私鑰加密的簽名信息。mac是可以理解為整個消息的摘要, ptype是消息的事件類型,data則是經過RLP編碼後的傳輸數據。

其UDP的整個的加密,認證,簽名模型如下:

⑷ 區塊鏈技術

背景:比特幣誕生之後,發現該技術很先進,才發現了區塊鏈技術。比特幣和區塊鏈技術同時被發現。

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# #比特幣[超話]# #數字貨幣#

⑸ hfil和fil的區別

一、hfil和fil的區別是什麼?
HFIL是基於ERC20標准發行的數字資產,採用 1:1 的比例抵押鑄造,在保證了與主流加密資產同等價值的同時,也擁有了在以太坊上的靈活性。
FIL是IPFS的激勵層和保障層,是基於IPFS的區塊鏈項目。File Davinci會發一種代幣——Filecoin,FIL的礦工分為2種存儲礦工和檢索礦工,通過提供存儲空間和檢索數據來獲得Filecoin。
通過HFIL來連通FIL跟ETH兩大生態,是火幣長期堅持為行業建設基礎設施的重要一步。

二、數字貨幣
數字貨幣簡稱為DC,是英文「Digital Currency」(數字貨幣)的縮寫,是電子貨幣形式的替代貨幣。數字金幣和密碼貨幣都屬於數字貨幣。
數字貨幣是一種不受管制的、數字化的貨幣,通常由開發者發行和管理,被特定虛擬社區的成員所接受和使用。歐洲銀行業管理局將虛擬貨幣定義為:價值的數字化表示,不由央行或當局發行,也不與法幣掛鉤,但由於被公眾所接受,所以可作為支付手段,也可以電子形式轉移、存儲或交易。

三、區塊鏈
區塊鏈是一個信息技術領域的術語。從本質上講,它是一個共享資料庫,存儲於其中的數據或信息,具有「不可偽造」「全程留痕」「可以追溯」「公開透明」「集體維護」等特徵。基於這些特徵,區塊鏈技術奠定了堅實的「信任」基礎,創造了可靠的「合作」機制,具有廣闊的運用前景。
區塊鏈起源於比特幣,2008年11月1日,一位自稱中本聰(Satoshi Nakamoto)的人發表了《比特幣:一種點對點的電子現金系統》一文,闡述了基於P2P網路技術、加密技術、時間戳技術、區塊鏈技術等的電子現金系統的構架理念,這標志著比特幣的誕生。兩個月後理論步入實踐,2009年1月3日第一個序號為0的創世區塊誕生。幾天後,2009年1月9日出現序號為1的區塊,並與序號為0的創世區塊相連接形成了鏈,標志著區塊鏈的誕生。

⑹ 區塊鏈 --- 分布式金融(DeFi)

   DeFi是decentralized finance(分布式金融) 一詞的縮寫,通常是指基於以太坊的數字資產和金融智能合約,協議以及分布式應用程序(DApps)。

  簡單來說,DeFi就是將傳統金融搬到區塊鏈網路里,但相比傳統金融,它通過區塊鏈實現了去中心化,也就是去掉了中間人的角色,從而降低了中間環節帶來的巨額成本。

   DeFi最終要實現的是資產通證化,以智能合約功能性替代傳統中心化的金融機構,使用戶以更低的成本享受到金融服務,並且提升整個金融體系的運行效率,降低運行成本。同時打造一個面向全球開放的無國界金融體系,以打造開放、透明、安全全新的去中心化系統,讓所有人都可以自由地進行交易。

  

   隨著區塊鏈的迅速發展,DeFi的應用場景也在不斷地豐富,而金融業是其中最有前景的行業。
  

   與銀行相似,用戶可以存錢並從其他借入其資產的用戶那裡獲得利息。但是,在這種情況下, 資產是數字的 ,智能合約將貸方與借款人聯系起來,執行貸款條款並分配利息。這一切都發生了,而無需彼此信任或中間人銀行。而且,由於區塊鏈提供的透明性,通過減少中間商,貸方可以賺取更高的回報,並更清楚地了解風險。

  

   去中心化交易所,簡稱DEX,DEX是使用智能合約執行交易規則,執行交易並在必要時安全處理資金的加密貨幣交易所。當使用DEX進行交易時,沒有中心化交易所運營商,也無需注冊,沒有身份驗證或提款費用。
  

   DEX可以使用訂單薄進行交易,比如你要用10個A換15個B,那麼我記下來。然後一會又來了一個人說我要用15個B換10個A,我說太好了,正好配對上了。於是,我就在鏈上生成一筆交易,把你們倆的幣互換。這個時候匯率其實就是給交易的雙方做參考用的——建議你用這個匯率容易找到配對。這樣一來,去中心化交易所只是把交易雙方的需求匹配了一下放上鏈,就不存在智能合約讀取鏈外匯率信息的問題了。

   這方法有很多缺陷。無論這個DEX做得多麼用戶友好,它對比中心化交易所效率一定是很差的,首先幣價波動的時候很難找到匹配,其次小幣種肯定也很難找到匹配,然後交易延遲應該也不小。 但相對於中心交易所,它還是有唯一的優勢——靠譜。
  

   DEX還可以使用AMM(自動做市商)交易,即按照自己的供求關系計算匯率,以保證自己手中的幣不會被別人低價買空。最簡單的辦法就是永遠保證自己的A幣和B幣的數量是個定值,這樣就算賣空了,虧損也是有限的,而且,市場總會把價格調到合適的水平——因為反正如果匯率低了就會有人買,匯率高了就會有人賣。

  通過這種簡單的方法,可以獲得一個不需要從鏈外獲得匯率信息就可以自動根據供求關系調整的市場。當然,這東西的弱點也很明顯——如果一開始的匯率不在市場匯率附近,就會承受大量的虧損。而且AMM中還存在「無償損失」。

  

   穩定幣是旨在保持特定價值的代幣,通常與美元等法定貨幣掛鉤。

  例如,DAI是與美元掛鉤並抵押以太坊(ETH)鏈上數字資產的穩定幣。它的發行是通過一個借貸的智能合約,來實現的:每個人都可以通過抵押一定數量的ETH(以太幣)來換取和美元1:1錨定的DAI。這里,DAI採用的是 超額抵押 的形式,對於每個DAI,在MakerDAO智能合約中鎖定有1.50美元的以太坊作為抵押。

  如果你抵押價值150美元的以太幣,那麼只能換來價值100美元的DAI。然後,這個智能合約中寫定了,如果你在某個時間內歸還這100美元的DAI並且付一部分利息,那麼你就可以拿回自己抵押的以太幣。

   但是這裡面有個問題——以太坊的價格是會變動的。而且,虛擬貨幣的價格變動可是相當劇烈的,如果遇上以太坊暴跌了怎麼辦?那麼原本值150美元的以太坊可能瞬間就不到100美元了,這個時候抵押的資產不如我貸出來的資產多,DAI的價格就不可能再錨定美元,因為大家都能看到:DAI不值那麼多錢了。

   怎麼解決這個問題呢?超額抵押的作用就顯出來了——即便以太坊價格波動幅度再大,但是從150美元跌到100美元總歸還需要些時間。而這就給資產清算的空間:首先,我們規定抵押物不得少於150%的貸款,也就是如果以太坊漲了沒關系,但是一旦跌了,你得立刻補倉到150%,否則你的抵押物會進入清算的智能合約。

  

   用來裝DeFi的虛擬資產,可以用於轉賬等。

  

   資產管理工具(也叫看板)就是專門提供錢包掃描服務,可以查看錢包的明細,還有歷史記錄。

  最主要的三大資產管理工具是Debank、Zerion以及 Zapper。

  

   一般來說,市場上會有很多挖礦的機會,這也是大家理財賺錢的機會。這時候,就有做資產管理,或者是提供理財的金融服務的機器人站出來說,我是專門幫你做賺錢生意的,只要你把錢給我,我就會去市場上找賺錢的機會,幫你去賺錢。

   YFI是其中最主要的一種理財工具。

  

  區塊鏈世界的機器人都是去中心化治理的,也就是說,沒有明確是歸屬於誰的。這種情況下,如果機器人出故障了,我們應該找誰的責任?應該怎麼做?損失誰來負責?這種情況下,就需要保險機器人了,它是專門就是為其他機器人投保了。

  

   區塊鏈世界的機器人都是去中心化的,且公開透明的,自動執行的。這些機器人的升級、維護應該怎麼做?如何來確保機器人的去中心化呢?

  一般,是由很多人圍著同一個機器人一起磋商,投票決定如何讓機器人去升級、提供服務。DAO機器人就是幫助這些人跟機器人之間形成一種去中心化的治理關系的機器人。
  

   專門提供一種資產價格的機器人,比如,剛剛舉例的小c機器人收到一個比特幣的時候,它是需要知道一個比特幣到底值多少錢。否則,是沒辦法計算應該給小明貸款多少錢的。這種時候,預言機機機器人就會跑到小c面前,輸入一個價格,告訴小c機器人,比特幣現在價值1萬美金。
  

  以太坊是一個維護數字價值共享賬本的區塊鏈網路,幾乎所有DeFi應用程序(稱為智能合約或Dapp)都建立在以太坊區塊鏈上,組成網路的參與者代替了中心權力機構,以分散的方式控制網路本地加密貨幣以太(ETH)的發行。
  

defipulse公布的 DeFi排名 ,該排名跟蹤鎖定全球DeFi智能合約中的實時價值。

   MakerDAO在DeFi領域是毫無疑問的龍頭,MakerDAO之於DeFi就如比特大陸之於 礦圈。

  MakerDAO 成立於2014年,是以太坊上 自動化抵押貸款平台 ,同時也是穩定幣 Dai 的提供者。MakerDAO 是建立在以太坊上的去中心化的衍生金融體系,它採用了雙幣模式,一種為穩定幣 Dai,另一種為權益代幣和管理型代幣 MKR。Dai 於2017年12月主網上線。通過雙幣機制,MakerDAO使得整個去中心化的質押貸款體系得以運轉。

  Dai和美元進行1:1錨定,和其他穩定幣一樣,Dai也存在價格波動。和其他穩定幣不一樣的是,Dai是通過 超額抵押 加密數字貨幣,從而獲得價值。USDT、TrueUSD 和 GUSD 這一類的中心化穩定幣每發行1美元的代幣背後都存在1美元的法幣作為儲備,而1 Dai背後是以超出1美元的數字資產作為儲備。

  與USDT、TrueUSD等不同的是,Dai的運行機制是公開透明的,這也是 Dai的優勢之一。不僅 Dai本身透明,換取 Dai的抵押物以太坊的價值波動和數量也一樣透明,對外公開可見。

  

   Compound協議打造的是一個無中介的貸款平台,借方獲得利益,貸方支付利息。(頭等倉註:通常我們把代幣存入借貸池的一方稱為借方,向借貸池中借代幣的一方稱為貸方。)

   Compound的新ERC-20代幣簡稱cToken,使用戶能更簡便的進行借貸操作。例如,支持cDAI與DAI交換,DAI持有者就可以將代幣借給cDAI用戶。不是所有的錢包都支持交換,但在Eidoo錢包中,用戶可以輕松地用cDAI交換DAI,從而出借DAI換取利息。如今,Compound總共支持8種cToken,鎖定資產合計高達約等值於2億美元:cDAI、cETH、cUSDC、cBAT、cWBTC、cSAI、cREP、cZRX。

  借方可以隨時從Compound中提取代幣,自動、瞬時計算利息。如果是通過像Eidoo這樣的非託管錢包來提幣,無需任何中介(因為以太坊的去中心化協議就能做到)。

   貸方則必須鎖定代幣作為抵押品,根據基礎資產的雄厚薄弱,獲取50-75%的信貸。

  Compound協議還設有10%的利息作為准備金,而剩餘的90%利息歸借方。無任何費用,無協議代幣。基於以太坊的信貸市場,形成了一個真正的去中心化流動池,以一種無中介、自主、快速的方式發放和獲得貸款。

   Synthetix是基於以太坊的 合成資產發行協議 。Synthetix目前支持發行的合成資產包括法幣、加密貨幣、大宗商品。其中法幣主要有美元(sUSD)、歐元(sEUR)、日元(sJPY),不過目前基本上以sUSD為主。加密貨幣方面有比特幣(sBTC)和以太坊(sETH)等,此外,還有反向的加密資產,例如iBTC,當BTC價格下跌,iBTC價格上漲,從而獲利。大宗商品方面當前以金(sXAU)和銀(sXAG)為主。

  Synthetix上交易是去中心化的模式進行的,且無須交易對手存在,也不用擔心流動性和滑點問題。在其交易所上的交易都是通過智能合約執行的,是對智能合約的交易,而不是訂單簿交易。這些都有其獨特的交易體驗和部分優勢。

   Synthetix跟其他資產發行協議一樣,也需要進行資產抵押才能發行,例如MakerDAO協議要生成dai,需要抵押ETH。Synthetix也類似,但它抵押的是其原生代幣SNX。用戶只要在其智能合約中鎖定一定量的SNX,即可發行合成資產。其中其質押率非常高,是其發行資產的750%,只有達到750%的目標閥值才有機會獲得交易手續費和SNX新代幣的獎勵。

  

TVL就是每個DeFi協議的鎖倉總價值,越高越好。

Dex就是交易量,越高越好。

活躍地址數量代表以太坊上的DeFi用戶數,越多越好。

手續費越低越好。

以太坊作為一個基礎設施,它的市值可以很高,但是,說到它與DeFi市值的比例,那以太坊的市值應當是越低越好,越高就說明這個市場越成熟。

  

參考鏈接:
https://zhuanlan.hu.com/p/206910261
https://zhuanlan.hu.com/p/366412971
https://zhuanlan.hu.com/p/377856331
https://www.hu.com/question/324838085/answer/1526607416
  
如有不對,煩請指出,感謝~

⑺ 區塊鏈記賬原理

區塊鏈是由一個個區塊構成的有序列表,每一個區塊都記錄了一系列交易,並且每一個區塊都指向前一個區塊從而形成一個鏈條。

區塊鏈有以下幾個特徵:

區塊鏈具有不可篡改的特性,是由哈希演算法保證的。

什麼是哈希演算法/Hash:

安全哈希演算法的特點:

哈希演算法的作用:
假設我們相信一個安全的哈希演算法:如果H(x) = H(y),則x = y

常用的哈希演算法:

比特幣使用兩種哈希演算法:

假設這個區塊有5筆交易,首先,對每一筆交易進行第一hash,也就是2次SHA-256的運算,得到5個哈希值,也就是a1、a2、a3、a4、a5,這五個哈希值也可以看做是數據,將a1和a2拼起來、a3和a4拼起來,再計算出2個哈希值b1和b2。那a5怎麼辦呢?答案是將a5復制一份在與a5拼起來進行哈希計算得到b3;繼續將b1和b2拼起來進行哈希運算得到c1,同樣的b3會被復制一份再與b3拼起來進行哈希運算得到c2;最後將c1和c2拼起來進行哈希運算得到最終的哈希值,這個哈希值就是Merkle Hash。

從Merkle Hash的計算方法可以得出結論:修改任意一筆交易,哪怕是一個位元組,或者交換兩個交易的順序,都會導致Merkle Hash驗證失敗,也就會導致這個區塊本身是無效的。所以Merkle Hash記錄在頭部,它的作用就是保證交易記錄永遠不能夠被修改。

區塊本身用Block Hash來標識:Block Hash是區塊唯一標識。一個區塊的hash並沒有記錄在區塊頭部,而是通過計算區塊的hash得到的。

區塊的Prev Hash記錄了上一個區塊的Hash,這樣就可以通過Prev Hash追蹤到上一個區塊,由於下一個區塊的Prev Hash又會指向當前區塊,這樣每一個區塊的Prev Hash都指向上一個區塊,這些區塊串起來就形成了區塊鏈。如果一個攻擊者惡意攻擊了某一個區塊的交易記錄,那麼這個區塊的Merkle Hash驗證就不會通過,所以攻擊者只能重新計算Merkle Hash,然後把區塊頭的Merkle Hash也修改了,但是這個區塊本身的Hash已經改變,那麼下一個區塊指向該區塊的鏈接也斷掉了。由於比特幣區塊的hash必須滿足一定的難度值,所以攻擊者只能把後面所以區塊全部重新計算,並且偽造出來,才能修改整個區塊鏈。

修改一個區塊的成本已經非常高了,如果要修改整個區塊鏈,那麼其成本非常非常的高昂。在比特幣網路中,偽造區塊鏈需要擁有超過51%的全網算力。所以比特幣網路運行了6年,從來沒有被攻破過。

⑻ 區塊鏈 --- 共識演算法

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使用了一種稱為兩階段的方法來更改集群成員身份。 因此,在這種方法中,集群在實現新的成員身份配置之前首先更改為中間狀態(稱為聯合共識)。 聯合共識使系統即使在配置之間進行轉換時也可用於響應客戶端請求,它的主要目的是提升分布式系統的可用性。

⑼ 軟體開發區塊鏈各種系統是怎麼做的

區塊鏈是分布式數據存儲、點對點傳輸、共識機制、加密演算法等計算機技術的新型應用模式。所謂共識機制是區塊鏈系統中實現不同節點之間建立信任、獲取權益的數學演算法。

閱讀全文

與hskg區塊鏈干什麼的相關的資料

熱點內容
紅牛礦池怎麼激活 瀏覽:535
btc合約如何套利 瀏覽:491
以太坊打開埠 瀏覽:250
數字貨幣紙質貨幣還能用嗎 瀏覽:334
中國禁止比特幣的影響 瀏覽:606
如何發起比特幣交易 瀏覽:674
在哪下比特幣勒索補丁 瀏覽:885
螞蟻礦機額定算力什麼意思 瀏覽:909
通過知道創宇審核的虛擬貨幣 瀏覽:83
gcc虛擬貨幣是什麼軟體 瀏覽:546
以太坊超過比特幣 瀏覽:116
顯卡人工智慧算力怎麼查看 瀏覽:946
上海發數字貨幣 瀏覽:424
注冊礦池時為什麼老說錯誤 瀏覽:598
相城區數字貨幣去哪裡去申請 瀏覽:929
數字貨幣存在的問題有哪些 瀏覽:985
比特幣周日有交易嗎 瀏覽:576
數字貨幣和紙幣有什麼不同 瀏覽:734
柚子幣比特幣以太坊的優勢 瀏覽:533
比特幣去向記錄 瀏覽:993