當前位置:首頁 » 區塊鏈知識 » 區塊鏈的公式

區塊鏈的公式

發布時間: 2023-05-12 12:19:20

區塊鏈 --- 共識演算法

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

❷ 【區塊鏈與密碼學】第5-2講:哈希函數的構造

本節課程我們將詳細講解哈希函數的構造。

MASH-1 (Molar Arithmetic Secure Hash)是一個基於RSA演算法的哈希演算法,在1995年提出,入選國際標准ISO/IEC 10118-4;MASH-2是MASH-1的改進,把第四步中的2換成了28+1;由於涉及模乘/平方運算,計算速度慢,非常不實用。

分組密碼的工作模式是: 根據不同的數據格式和安全性要求, 以一個具體的分組密碼演算法為基礎構造一個分組密碼系統的方法。

基於分組的對稱密碼演算法比如DES/AES演算法只是描述如何根據秘鑰對一段固定長度(分組塊)的數據進行加密,對於比較長的數據,分組密碼工作模式描述了如何重復應用某種演算法安全地轉換大於塊的數據量。

簡單的說就是,DES/AES演算法描述怎麼加密一個數據塊,分組密碼工作模式模式了如果重復加密比較長的多個數據塊。常見的分組密碼工作模式有五種:

電碼本( Electronic Code Book,ECB)模式

密文分組鏈接(Cipher Block Chaining,CBC)模式

密文反饋(Cipher Feed Back ,CFB)模式

輸出反饋(Output Feed Back ,OFB)模式

計數器(Counter, CTR)模式

ECB工作模式

加密:輸入是當前明文分組。

解密:每一個密文分組分別解密。

具體公式為:

CBC工作模式

加密:輸入是當前明文分組和前一次密文分組的異或。

解密:每一個密文分組被解密後,再與前一個密文分組異或得明文。

具體公式為:

CFB工作模式

加密演算法的輸入是64比特移位寄存器,其初值為某個初始向量IV。

加密演算法輸出的最左(最高有效位)j比特與明文的第一個單元P1進行異或,產生出密文的第1個單元C1,並傳送該單元。

然後將移位寄存器的內容左移j位並將C1送入移位寄存器最右邊(最低有效位)j位。

這一過程繼續到明文的所有單元都被加密為止。

OFB工作模式

OFB模式的結構類似於CFB

不同之處:

OFB模式是將加密演算法的輸出反饋到移位寄存器

CFB模式中是將密文單元反饋到移位寄存器

CTR工作模式

加密:輸入是當前明文分組和計數器密文分組的異或。

解密:每一個密文分組被解密後,再與計數器密文分組異或得明文。

具體公式為:

工作模式比較

ECB模式,簡單、高速,但最弱、易受重發攻擊,一般不推薦。

CBC模式適用於文件加密,比ECB模式慢,安全性加強。當有少量錯誤時,不會造成同步錯誤。

OFB模式和CFB模式較CBC模式慢許多。每次迭代只有少數比特完成加密。若可以容忍少量錯誤擴展,則可換來恢復同步能力,此時用CFB或OFB模式。在字元為單元的流密碼中多選CFB模式。

CTR模式用於高速同步系統,不容忍差錯傳播。

直接設計哈希函數

Merkle在1989年提出迭代型哈希函數的一般結構;(另外一個工作是默克爾哈希樹),Ron Rivest在1990年利用這種結構提出MD4。(另外一個工作是RSA演算法),這種結構在幾乎所有的哈希函數中使用,具體做法為:

把所有消息M分成一些固定長度的塊Yi

最後一塊padding並使其包含消息M的長度

設定初始值CV0

循環執行壓縮函數f,CVi=f(CVi -1||Yi -1)

最後一個CVi為哈希值

演算法中重復使用一個壓縮函數f

f的輸入有兩項,一項是上一輪輸出的n比特值CVi-1,稱為鏈接變數,另一項是演算法在本輪的b比特輸入分組Yi-1

f的輸出為n比特值CVi,CVi又作為下一輪的輸入

演算法開始時還需對鏈接變數指定一個初值IV,最後一輪輸出的鏈接變數CVL即為最終產生的雜湊值

通常有b>n,因此稱函數f為壓縮函數

演算法可表達如下:CV0=IV= n比特長的初值

CVi=f(CVi-1,Yi-1);1≤i≤L

H(M)=CVL

演算法的核心技術是設計難以找到碰撞的壓縮函數f,而敵手對演算法的攻擊重點是f的內部結構

f和分組密碼一樣是由若干輪處理過程組成

對f的分析需要找出f的碰撞。由於f是壓縮函數,其碰撞是不可避免的,因此在設計f時就應保證找出其碰撞在計算上是困難的

哈希函數的構造就講到這里啦,以上三種方式都可以構造哈希函數。下節課我們將學習常用哈希函數,敬請期待!

❸ 區塊鏈最直白的解釋

近幾年,「區塊鏈」一詞成了大熱門,新聞媒體競相報道,但大家或許對於區塊鏈的認知還停留在霧里看花的階段,今天我們就來揭開它的神秘面紗。

其實區塊鏈的本質特別簡單,一句話就可以解釋:去中心化分布式資料庫。

區塊鏈的主要作用是用於存儲信息,任何人都可以將信息寫入,同時也可以讀取,所以它是一個公開的資料庫。

區塊鏈的特點

要說分布式資料庫這種技術,市場上早有存在,可不同的是,區塊鏈雖然同為分布式資料庫,但它沒有管理員,是徹底去中心化的。

去中心化是區塊鏈技術的顛覆性特點,它無需中心化代理,實現了一種點對點的直接交互,使得高效率、大規模、無中心化代理的信息交互方式成為了現實。

但是,沒有了管理員,人人都可以往裡面寫入數據,怎麼才能保證數據是可信的呢?被壞人改了怎麼辦?設計者早已想到了這些,這也證明了區塊鏈是真正劃時代的產物。

區塊

區塊鏈由一個個區塊(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個數越多,難度越大。

可以把比特幣將這道工作量證明謎題的步驟大致歸納如下:

該過程可以用下圖表示:

比特幣的工作量證明,就是我們俗稱「挖礦」所做的主要工作。理解工作量證明機制,將為我們進一步理解比特幣區塊鏈的共識機制奠定基礎。

❺ 區塊鏈入門的教程


可是,簡單易懂的入門文章卻很少。區塊鏈到底是什麼,有何特別之處,很少有解釋。
下面,我就來嘗試,寫一篇最好懂的區塊鏈教程。畢竟它也不是很難的東西,核心概念非常簡單,幾句話就能說清楚。我希望讀完本文,你不僅可以理解區塊鏈,還會明白什麼是挖礦、為什麼挖礦越來越難等問題。
需要說明的是,我並非這方面的專家。雖然很早就關注,但是仔細地了解區塊鏈,還是從今年初開始。文中的錯誤和不準確的地方,歡迎大家指正。
一、區塊鏈的本質
區塊鏈是什麼?一句話,它是一種特殊的分布式資料庫。
首先,區塊鏈的主要作用是儲存信息。任何需要保存的信息,都可以寫入區塊鏈,也可以從裡面讀取,所以它是資料庫。
其次,任何人都可以架設伺服器,加入區塊鏈網路,成為一個節點。區塊鏈的世界裡面,沒有中心節點,每個節點都是平等的,都保存著整個資料庫。你可以向任何一個節點,寫入/讀取數據,因為所有節點最後都會同步,保證區塊鏈一致。
二、區塊鏈的最大特點
分布式資料庫並非新發明,市場上早有此類產品。但是,區塊鏈有一個革命性特點。
區塊鏈沒有管理員,它是徹底無中心的。其他的資料庫都有管理員,但是區塊鏈沒有。如果有人想對區塊鏈添加審核,也實現不了,因為它的設計目標就是防止出現居於中心地位的管理當局。
正是因為嫌敗無法管理,區塊鏈才能做到無法被控制。否則一旦大公司大集團控制了管理權,他們就會控制整個平台,其他使用者就都必須聽命於他們了。
但是,沒有了管理員,人人都可以往裡面寫入數據,怎麼才能保證數據是可信的呢?被壞人改了怎麼辦?請接著往下讀,這就是區塊鏈奇妙的地方。
三、區塊
區塊鏈由一個個區塊(block)組成。區塊很像資料庫的記錄,每次寫入數據,就是創建一個區塊。
每個區塊包含兩個部分。
區塊頭(Head):記錄當前區塊的特徵值
區塊體(Body):實際數據
區塊頭包含了當前區塊的多項特徵值。
生成時間
實際數據(即區塊體)的哈希
上一個區塊的哈希
...
這里,你需要理解什麼叫哈希(hash),這是理解區塊鏈必需的。
所謂哈希就是計算機可以對任意內容,計算出一個長度相同的特徵值。區塊鏈的 哈希長度是256位,這就是說,不管原始內容是什麼,最後都會計算出一個256位的二進制數字。而且可以保證,只要原始內容不同,對應的哈希一定是不同的。
舉例來說,字元串123的哈希是(十六進制),轉成二進制就是256位,而且只有123能得到這個哈希。(理論上,其他字元串也有可能得到這個哈希,但是概率極低,可以近似認為不可能發生。)
因此,就有兩個重要的推論。
推論1:每個區塊的哈希都是不一樣的,可以通過哈希標識區塊。
推論2:如果區塊的內容變了,它的哈希一定會改變。
四、 Hash 的不可修改性
區塊與哈希是一一對應的,每個區塊的哈希都是針對區塊頭(Head)計算的。也就是說,把區塊頭的各項特徵值,按照順序連接在一起,組成一個很長的字元串,再對這個字元串計算哈希。
Hash = SHA256( 區塊頭 )
上面就是區塊哈希的計算公式,SHA256是區塊鏈的哈希演算法。注意,這個公式裡面只包含區塊頭,不包含區塊體,也就是說,哈希由區塊頭唯一決定,
前面說過,區塊頭包含很多內容,其中有當前區塊體的哈希,還有上一個區塊的哈希。這意味著,如果當前區塊體的內容變了,或者上一個區塊的哈希變了,一定會引起當前區塊的哈希改彎首變。
這一點對區塊鏈有重大意義。如果有人修改了一個區塊,該區塊的哈希就變了。為了讓後面的區塊還能連到它(因為下一個區塊包含上一個區塊的哈希),該人必須依次修改後面所有的區塊,否則被改掉的區塊就脫離區塊鏈了。由於後面要提到的原因,哈希的計算很耗時,短時間內修改多個區塊幾乎不可能發生,除非有人掌握了全網51%以上的計算能力。
正是通過這種聯動機制,區塊鏈保證了自身的可靠性,數據一旦寫入,就無法被篡改。這就像歷史一樣,發生了就是發生了,從此再無法改變。
每個區塊都連著上一個區塊,這也是區塊鏈這個名字的由來。
五、采礦
由於必須保證節點之間的同步,所以新區塊的添加速度芹鬧顫不能太快。試想一下,你剛剛同步了一個區塊,准備基於它生成下一個區塊,但這時別的節點又有新區塊生成,你不得不放棄做了一半的計算,再次去同步。因為每個區塊的後面,只能跟著一個區塊,你永遠只能在最新區塊的後面,生成下一個區塊。所以,你別無選擇,一聽到信號,就必須立刻同步。
所以,區塊鏈的發明者中本聰(這是假名,真實身份至今未知)故意讓添加新區塊,變得很困難。他的設計是,平均每10分鍾,全網才能生成一個新區塊,一小時也就六個。
這種產出速度不是通過命令達成的,而是故意設置了海量的計算。也就是說,只有通過極其大量的計算,才能得到當前區塊的有效哈希,從而把新區塊添加到區塊鏈。由於計算量太大,所以快不起來。
這個過程就叫做采礦(mining),因為計算有效哈希的難度,好比在全世界的沙子裡面,找到一粒符合條件的沙子。計算哈希的機器就叫做礦機,操作礦機的人就叫做礦工。
六、難度系數
讀到這里,你可能會有一個疑問,人們都說采礦很難,可是采礦不就是用計算機算出一個哈希嗎,這正是計算機的強項啊,怎麼會變得很難,遲遲算不出來呢?
原來不是任意一個哈希都可以,只有滿足條件的哈希才會被區塊鏈接受。這個條件特別苛刻,使得絕大部分哈希都不滿足要求,必須重算。
原來,區塊頭包含一個難度系數(difficulty),這個值決定了計算哈希的難度。舉例來說,第100000個區塊的難度系數是 14484.16236122。
區塊鏈協議規定,使用一個常量除以難度系數,可以得到目標值(target)。顯然,難度系數越大,目標值就越小。
哈希的有效性跟目標值密切相關,只有小於目標值的哈希才是有效的,否則哈希無效,必須重算。由於目標值非常小,哈希小於該值的機會極其渺茫,可能計算10億次,才算中一次。這就是采礦如此之慢的根本原因。
前面說過,當前區塊的哈希由區塊頭唯一決定。如果要對同一個區塊反復計算哈希,就意味著,區塊頭必須不停地變化,否則不可能算出不一樣的哈希。區塊頭裡面所有的特徵值都是固定的,為了讓區塊頭產生變化,中本聰故意增加了一個隨機項,叫做 Nonce。
Nonce 是一個隨機值,礦工的作用其實就是猜出 Nonce 的值,使得區塊頭的哈希可以小於目標值,從而能夠寫入區塊鏈。Nonce 是非常難猜的,目前只能通過窮舉法一個個試錯。根據協議,Nonce 是一個32位的二進制值,即最大可以到21.47億。第 100000 個區塊的 Nonce 值是274148111,可以理解成,礦工從0開始,一直計算了 2.74 億次,才得到了一個有效的 Nonce 值,使得算出的哈希能夠滿足條件。
運氣好的話,也許一會就找到了 Nonce。運氣不好的話,可能算完了21.47億次,都沒有發現 Nonce,即當前區塊體不可能算出滿足條件的哈希。這時,協議允許礦工改變區塊體,開始新的計算。
七、難度系數的動態調節
正如上一節所說,采礦具有隨機性,沒法保證正好十分鍾產出一個區塊,有時一分鍾就算出來了,有時幾個小時可能也沒結果。總體來看,隨著硬體設備的提升,以及礦機的數量增長,計算速度一定會越來越快。
為了將產出速率恆定在十分鍾,中本聰還設計了難度系數的動態調節機制。他規定,難度系數每兩周(2016個區塊)調整一次。如果這兩周裡面,區塊的平均生成速度是9分鍾,就意味著比法定速度快了10%,因此接下來的難度系數就要調高10%;如果平均生成速度是11分鍾,就意味著比法定速度慢了10%,因此接下來的難度系數就要調低10%。
難度系數越調越高(目標值越來越小),導致了采礦越來越難。
八、區塊鏈的分叉
即使區塊鏈是可靠的,現在還有一個問題沒有解決:如果兩個人同時向區塊鏈寫入數據,也就是說,同時有兩個區塊加入,因為它們都連著前一個區塊,就形成了分叉。這時應該採納哪一個區塊呢?
現在的規則是,新節點總是採用最長的那條區塊鏈。如果區塊鏈有分叉,將看哪個分支在分叉點後面,先達到6個新區塊(稱為六次確認)。按照10分鍾一個區塊計算,一小時就可以確認。
由於新區塊的生成速度由計算能力決定,所以這條規則就是說,擁有大多數計算能力的那條分支,就是正宗的區塊鏈。
九、總結
區塊鏈作為無人管理的分布式資料庫,從2009年開始已經運行了8年,沒有出現大的問題。這證明它是可行的。
但是,為了保證數據的可靠性,區塊鏈也有自己的代價。一是效率,數據寫入區塊鏈,最少要等待十分鍾,所有節點都同步數據,則需要更多的時間;二是能耗,區塊的生成需要礦工進行無數無意義的計算,這是非常耗費能源的。
因此,區塊鏈的適用場景,其實非常有限。
不存在所有成員都信任的管理當局
寫入的數據不要求實時使用
挖礦的收益能夠彌補本身的成本
如果無法滿足上述的條件,那麼傳統的資料庫是更好的解決方案。
目前,區塊鏈最大的應用場景(可能也是唯一的應用場景),就是以比特幣為代表的加密貨幣。

❻ 區塊鏈質押挖礦年化率怎麼算

質押挖礦是一種投資方式,與傳統投資方式有所不同,它使用區塊鏈技術來實現投資,可以讓投資者通過抵押資產獲得投資收益。具體來說,投資者可以把一定數量的資睜中產(一般是數字貨幣)抵押給礦池,然後礦池會根據抵押資產的數量和抵押期限,給出一個年化收弊早迅益率。
計算質押挖礦年化率的公式如下:
年化收益率=投資期間租此內的總回報÷投資期間的總抵押額×100%÷投資期間的天數×365
其中,投資期間的總回報指的是投資者在投資期間所獲得的所有收益;投資期間的總抵押額指的是投資者在投資期間所抵押的所有資產;投資期間的天數指的是投資者投資期間的總天數。
因此,質押挖礦的年化收益率就是投資者在投資期間所獲得的總回報除以投資期間抵押的總資產,然後再除以投資期間的天數,再乘以365,就可以計算出質押挖礦的年化收益率了。

❼ 區塊鏈密碼演算法是怎樣的

區塊鏈作為新興技術受到越來越廣泛的關注,是一種傳統技術在互聯網時代下的新的應用,這其中包括分布式數據存儲技術、共識機制和密碼學等。隨著各種區塊鏈研究聯盟的創建,相關研究得到了越來越多的資金和人員支持。區塊鏈使用的Hash演算法、零知識證明、環簽名等密碼演算法:

Hash演算法

哈希演算法作為區塊鏈基礎技術,Hash函數的本質是將任意長度(有限)的一組數據映射到一組已定義長度的數據流中。若此函數同時滿足:

(1)對任意輸入的一組數據Hash值的計算都特別簡單;

(2)想要找到2個不同的擁有相同Hash值的數據是計算困難的。

滿足上述兩條性質的Hash函數也被稱為加密Hash函數,不引起矛盾的情況下,Hash函數通常指的是加密Hash函數。對於Hash函數,找到使得被稱為一次碰撞。當前流行的Hash函數有MD5,SHA1,SHA2,SHA3。

比特幣使用的是SHA256,大多區塊鏈系統使用的都是SHA256演算法。所以這里先介紹一下SHA256。

1、 SHA256演算法步驟

STEP1:附加填充比特。對報文進行填充使報文長度與448模512同餘(長度=448mod512),填充的比特數范圍是1到512,填充比特串的最高位為1,其餘位為0。

STEP2:附加長度值。將用64-bit表示的初始報文(填充前)的位長度附加在步驟1的結果後(低位位元組優先)。

STEP3:初始化緩存。使用一個256-bit的緩存來存放該散列函數的中間及最終結果。

STEP4:處理512-bit(16個字)報文分組序列。該演算法使用了六種基本邏輯函數,由64 步迭代運算組成。每步都以256-bit緩存值為輸入,然後更新緩存內容。每步使用一個32-bit 常數值Kt和一個32-bit Wt。其中Wt是分組之後的報文,t=1,2,...,16 。

STEP5:所有的512-bit分組處理完畢後,對於SHA256演算法最後一個分組產生的輸出便是256-bit的報文。

2、環簽名

2001年,Rivest, shamir和Tauman三位密碼學家首次提出了環簽名。是一種簡化的群簽名,只有環成員沒有管理者,不需要環成員間的合作。環簽名方案中簽名者首先選定一個臨時的簽名者集合,集合中包括簽名者。然後簽名者利用自己的私鑰和簽名集合中其他人的公鑰就可以獨立的產生簽名,而無需他人的幫助。簽名者集合中的成員可能並不知道自己被包含在其中。

環簽名方案由以下幾部分構成:

(1)密鑰生成。為環中每個成員產生一個密鑰對(公鑰PKi,私鑰SKi)。

(2)簽名。簽名者用自己的私鑰和任意n個環成員(包括自己)的公鑰為消息m生成簽名a。

(3)簽名驗證。驗證者根據環簽名和消息m,驗證簽名是否為環中成員所簽,如果有效就接收,否則丟棄。

環簽名滿足的性質:

(1)無條件匿名性:攻擊者無法確定簽名是由環中哪個成員生成,即使在獲得環成員私鑰的情況下,概率也不超過1/n。

(2)正確性:簽名必需能被所有其他人驗證。

(3)不可偽造性:環中其他成員不能偽造真實簽名者簽名,外部攻擊者即使在獲得某個有效環簽名的基礎上,也不能為消息m偽造一個簽名。

3、環簽名和群簽名的比較

(1)匿名性。都是一種個體代表群體簽名的體制,驗證者能驗證簽名為群體中某個成員所簽,但並不能知道為哪個成員,以達到簽名者匿名的作用。

(2)可追蹤性。群簽名中,群管理員的存在保證了簽名的可追蹤性。群管理員可以撤銷簽名,揭露真正的簽名者。環簽名本身無法揭示簽名者,除非簽名者本身想暴露或者在簽名中添加額外的信息。提出了一個可驗證的環簽名方案,方案中真實簽名者希望驗證者知道自己的身份,此時真實簽名者可以通過透露自己掌握的秘密信息來證實自己的身份。

(3)管理系統。群簽名由群管理員管理,環簽名不需要管理,簽名者只有選擇一個可能的簽名者集合,獲得其公鑰,然後公布這個集合即可,所有成員平等。

鏈喬教育在線旗下學碩創新區塊鏈技術工作站是中國教育部學校規劃建設發展中心開展的「智慧學習工場2020-學碩創新工作站 」唯一獲準的「區塊鏈技術專業」試點工作站。專業站立足為學生提供多樣化成長路徑,推進專業學位研究生產學研結合培養模式改革,構建應用型、復合型人才培養體系。

❽ 區塊鏈之加密原理總結(一)

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

    在學習的過程中主要是採用單個模塊了學習了解的,包括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演算法提供的一套集成(混合)加密方案。其中包括了非對稱加密,對稱加密和簽名的功能。

        ECC 是 Elliptic Curve Cryptography的簡稱。那麼什麼是橢圓加密曲線呢?Wolfram MathWorld 給出了很標準的定義: 一條橢圓曲線就是一組被  ​  定義的且滿足  ​ ​ 的點集。  

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

所以,隨著曲線參數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的整個的加密,認證,簽名模型如下:

❾ 自學區塊鏈(六)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裡面有難度的一個壓縮編碼,修改難度產生的結果是不會被誠實的節點認可的。

❿ 漫畫圖解 什麼是區塊鏈

漫畫圖解:什麼是區塊鏈

什麼是區塊鏈?
區塊鏈,英文 Blockchain,本質上是一種去中心化的分布式資料庫。任何人只要架設自己的伺服器,接入區塊鏈網路,都可以成為這個龐大網路的一個節點。
區塊鏈既然本質是資料庫,裡面究竟存儲了什麼東西呢?讓我們來了解一下區塊鏈的基本單元:區塊(Block)。
一個區塊分為兩大部分:
1.區塊頭
區塊頭裡面存儲著區塊的頭信息,包含上一個區塊的哈希值(PreHash),本區塊體的哈希值(Hash),以及時間戳(TimeStamp)等等。
2.區塊體
區塊體存儲著這個區塊的詳細數據(Data),這個數據包含若干行記錄,可以是交易信息,也可以是其他某種信息。
剛才提及的哈希值又是什麼意思呢?
想必大家都聽說過MD5,MD5就是典型的哈希演算法,可以把一串任意長度的明文轉化成一串固定長度(128bit)的字元串,這個字元串就是哈希值。
而在我們的區塊鏈中,採用的是一種更為復雜的哈希演算法,叫做SHA256。最新的數據信息(比如交易記錄)經過一系列復雜的計算,最終會通過這個哈希演算法轉化成了長度為256bit的哈希值字元串,也就是區塊頭當中的Hash,格式如下:

區塊與Hash是一一對應的,Hash可以當做是區塊的唯一標識。
不同的區塊之間是如何進行關聯的呢?依靠Hash和PreHash來關聯。每一個區塊的PreHash和前一個區塊的Hash值是相等的。
為什麼要計算區塊的哈希值呢?
既然區塊鏈是一個鏈狀結構,就必然存在鏈條的頭節點(第一個區塊)和尾節點(最後一個區塊)。一旦有人計算出區塊鏈最新數據信息的哈希值,相當於對最新的交易記錄進行打包,新的區塊會被創建出來,銜接在區塊鏈的末尾。
新區塊頭的Hash就是剛剛計算出的哈希值,PreHash等於上一個區塊的Hash。區塊體的Data存儲的是打包前的交易記錄,這部分數據信息已經變得不可修改。
這個計算Hash值,創建新區塊的過程就叫做挖礦。
用於進行海量計算的伺服器,叫做礦機。
操作計算的工作人員,叫做礦工。
計算哈希值究竟難在哪裡?咱們來做一個最粗淺的解釋,哈希值計算的公式如下:
Hash = SHA-256(最後一個區塊的Hash + 新區塊基本信息 + 交易記錄信息 + 隨機數)
其中,交易記錄信息也是一串哈希值,它的計算涉及到一個數據結構 Merkle Tree。有興趣的小夥伴可以查閱相關資料,我們暫時不做展開介紹。
這里關鍵的計算難點在於隨機數的生成。猥瑣的區塊鏈發明者為了增大Hash的計算難度,要求Hash結果的前72bit必須都是0,這個幾率實在是太小太小。
由於(最後一個區塊的Hash + 新區塊基本信息 + 交易記錄信息)是固定的,所以能否獲得符合要求的Hash,完全取決於隨機數的值。挖礦者必須經過海量計算,反復生成隨機數進行「撞大運」一般的嘗試,才有可能得到正確的Hash,從而挖礦成功。
同時,區塊頭內還包含著一個動態的難度系數,當全世界的硬體計算能力越來越快的時候,區塊鏈的難度系數也會水漲船高,使得全網平均每10分鍾才能產生出一個新區塊。
小夥伴們明白挖礦有多麼難了吧?需要補充的是,不同的區塊鏈應用在細節上是不同的,這里所描述的挖礦規則是以比特幣為例。
區塊鏈的應用

比特幣(BitCoin)的概念最初由中本聰於2008年提出,而後根據這一思路設計發布了開源軟體以及建構其上的P2P網路。比特幣是一種P2P形式的數字貨幣。點對點的傳輸意味著一個去中心化的支付系統。
什麼是P2P網路呢?
傳統的貨幣都是由中央銀行統一發行,所有的個人儲蓄也是由銀行統一管理,這是典型的中心化系統。
而比特幣則是部署在一個全世界眾多對等節點組成的去中心化網路之上。每一個節點都有資格對這種數字貨幣進行記錄和發行。
至於比特幣底層的數據存儲,正是基於了區塊鏈技術。比特幣的每一筆交易,都對應了區塊體數據中的一行,簡單的示意如下:
交易記錄的每一行都包含時間戳、交易明細、數字簽名。
表格中只是為了方便理解。實際存儲的交易明細是匿名的,只會記錄支付方和收款方的錢包地址。
至於數字簽名呢,可以理解為每一條單筆交易的防偽標識,由非對稱加密演算法所生成。
接下來說一說比特幣礦工的獎勵:
比特幣協議規定,挖到新區塊的礦工將獲得獎勵,從2008年起是50個比特幣,然後每4年減半,目前2018年是12.5個比特幣。流通中新增的比特幣都是這樣誕生的,也難怪大家對挖掘比特幣的工作如此趨之若鶩!
區塊鏈的優勢和劣勢
區塊鏈的優勢:
1.去中心化
區塊鏈不依賴於某個中心節點,整個系統的數據由全網所有對等節點共同維護,都可以進行數據的存儲和檢驗。這樣一來,除非攻擊者黑掉全網半數以上的節點,否則整個系統是不會遭到破壞的。
2.信息不可篡改
區塊內的數據是無法被篡改的。一旦數據遭到篡改哪怕一丁點,整個區塊對應的哈希值就會隨之改變,不再是一個有效的哈希值,後面鏈接的區塊也會隨之斷裂。
區塊鏈的劣勢:
1.過度消耗能源
想要生成一個新的區塊,必須要大量伺服器資源進行大量無謂的嘗試性計算,嚴重耗費電能。
2.信息的網路延遲
以比特幣為例,任何一筆交易數據都需要同步到其他所有節點,同步過程中難免會受到網路傳輸延遲的影響,帶來較長的耗時。
幾點補充:
1.本漫畫部分內容參考了阮一峰的博文《區塊鏈入門教程》,感謝這位大神的科普。
2.由於篇幅有限,關於Merkle Tree 和 非對稱加密 的知識暫時沒有展開細講,有興趣的小夥伴們可以查閱資料進行更深一步的學習。

熱點內容
usdt換成比特幣 發布:2025-06-24 05:05:47 瀏覽:603
上海atm數字貨幣取款機 發布:2025-06-24 04:10:48 瀏覽:594
數字貨幣合約周期 發布:2025-06-24 04:10:14 瀏覽:763
堡壘礦機藏寶圖 發布:2025-06-24 03:00:55 瀏覽:126
賣eth幣手續費多少 發布:2025-06-24 01:49:34 瀏覽:666
gtx960挖eth 發布:2025-06-24 01:45:14 瀏覽:336
元宇宙200 發布:2025-06-24 01:32:22 瀏覽:307
trx4燈光怎麼控制 發布:2025-06-24 01:22:13 瀏覽:726
螞蟻A3礦機是挖什麼幣 發布:2025-06-24 00:52:47 瀏覽:437
和家長合約怎麼寫 發布:2025-06-24 00:52:19 瀏覽:248