通過一個App Demo的演示深入理解區塊鏈運行原理
2018-8-6 09:11
來源:
Uni-times
從字面上看:區塊鏈是由一個個記錄著各種信息的小區塊鏈接起來組成的一個鏈條,類似于我們將一塊塊磚頭疊起來,而且疊起來后是沒辦法拆掉的,每個磚頭上面還寫著各種信息,包括:誰疊的,什么時候疊的,磚頭用了什么材質等等,這些信息你也沒辦法修改。
從計算機上看:區塊鏈是一種比較特殊的分布式數據庫。分布式數據庫就是將數據信息單獨放在每臺計算機,且存儲的信息的一致的,如果有一兩臺計算機壞掉了,信息也不會丟失,你還可以在其他計算機上查看到。
區塊鏈是一種分布式的,所以它是沒有中心點的,信息存儲在所有加入到區塊鏈網絡的節點當中,節點的數據是同步的。節點可以是一臺服務器,筆記本電腦,手機等。
你要知道的是這些節點的存儲的數據都是一模一樣。
去中心化:因為它是分布式存儲的,所以不存在中心點,也可以說各個節點都是中心點,生活中應用就是不需要第三方系統了(銀行、支付寶、房產中介等都屬于第三方)。
開放性:區塊鏈的系統數據是公開透明的,每個人都可以參與進來,比如租房子,你可以知道這個房子以前的出租信息,有沒出現過問題,當然這里頭的一些個人私有信息是加密的。
自治性:區塊鏈采用基于協商一致的規范和協議(比如一套公開透明的算法),然后各個節點就按照這個規范來操作,這樣就是所有的東西都有機器完成,就沒有人情成分。 使得對"人"的信任改成了對機器的信任,任何人為的干預不起作用。
信息不可篡改:如果信息存儲到區塊鏈中就被永久保存,是沒辦法去改變,至于 51% 攻擊,基本不可能實現。
匿名性:區塊鏈上面沒有個人的信息,因為這些都是加密的,是一堆數字字母組成的字符串,這樣就不會出現你的各種身份證信息、電話號碼被倒賣的現象。
區塊包含兩個部分:
1、區塊頭(Head):記錄當前區塊的元信息
2、區塊體(Body):實際數據
包含數據如下圖所示:
打開終端,輸入npm install blockchain-cli -g
在blockchian ->后面輸入blockchain或者bc(簡寫)查看創始區塊結構。
Index (Block #): 第幾個區塊? (創世區塊鏈的索引為0)
Hash: 當前區塊的hash值
Previous Hash: 上一個區塊的hash值
Timestamp:當前區塊創建時的時間戳
Data: 存儲在當前區塊上的交易信息
Nonce: 在找到有效區塊之前,我們經歷的迭代次數
每個區塊鏈都是由一個創始區塊「 Genesis Block」開始。后面你所看到的區塊都依賴于上一個區塊。因此,創始區塊是我們挖取第一個區塊的基礎。
我們在blockchain →中輸入`mine youdi,挖取我們的第一個區塊。
Hash值是一個十六進制固定長度為64位的唯一的標識。
hash值是由index, previous block hash, timestamp, block data, 和 nonce 作為輸入數據計算而得。
SHA256算法將根據給出的輸入數據計算出一個唯一的hash值,只要輸入值不變,永遠返回相同的結果。
輸入數據為youdi時,它的hash值永遠為2e4f702517a39db2c3614921b136d05b0bde291b0c5720cc899f6091668599fd
四個前導0是有效散列的最低要求。 所需的前導0的數量稱為難度。
下面的方法驗證hash難度是否有效。
這就是我們所熟知的POW工作量證明系統 - Proof-of-Work system。
nonce是一個用來找到滿足條件的hash值的數字。
nonce值一直迭代,直到hash值有效為止。在我們案例中一個有效的hash值是最少有4個前導0。找到nonce值以滿足合適條件的hash值的過程就叫做挖礦。
隨著難度的增加,可能的有效散列數減少。 使用較少可能的有效散列,需要更多的處理能力才能找到有效的散列。
hash散列很重要是因為它可以使區塊鏈不能被改變。
如果我們有三個區塊鏈1 -> 2 -> 3 -> 4 -> 5,當某個人想要試圖修改區塊A時,下面幾點將是會發生的幾種情況。
區塊3上的區塊鏈被修改。
區塊3上的hash值將發生改變,因為hash值是通過數據計算而得。
區塊3變得無效,因為它的hash值不再具備4個前導0的條件。
區塊4的hash值將發生改變,因為區塊3的hash值用來參與計算區塊4的hash值。
區塊4變得無效,因為它的hash值不再具備4個前導0的條件。
區塊5的hash值將發生改變,因為區塊4的hash值用來參與計算區塊5的hash值。
區塊5變得無效,因為它的hash值不再具備4個前導0的條件。
如果想要無效的區塊3、4、5變得有效,必須從區塊3開始再一次重新依次挖礦,當你的區塊鏈足夠長,節點足夠多時,就算你將這條鏈上的區塊鏈改變并且重新挖礦成功,但是因為超過50%的節點的數據和你的節點的數據不一致,你這個被改變的節點的數據也依然無效。
在這個demo的演示中,一共有三個節點,我修改了節點2的區塊鏈3并且重新挖礦取得合法的hash值,但是因為節點B和節點C中區塊3的hash值和A的不同,所以,我為了改變數據,必須超過51%的節點,這樣會消耗很多的資源,從而保證數據的安全,分布式保證數據的安全可靠。

版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。