很多文章都提到了區塊鏈在某一塊高度出現分叉,那麼到底什麼是區塊鏈高度,以及為什麼在某一塊高度出現分叉?現在跟談談關於區塊高度的那些事情。
「區塊高度」字面意思來看就是區塊的高度,簡單點說,即連接在鏈上的個數。所以要理解什麼是區塊鏈高度,我們必須先弄清楚區塊鏈是什麼。如果把區塊鏈當作是記帳本的話,區塊就是記帳本的頁碼。
每一筆帳目都清晰地記在記帳本上。並且為了避免被篡改的風險,保障公平公開,記帳方式都是一起記帳。
由於區塊鏈是一個記帳本,每一頁(區塊)所能記錄的數量是有限的,因此,為了區分並找出記錄交易的具體區塊,採取的方式就是將這一頁(區塊)標註為頁碼。因此,如果區塊鏈是一個記帳本,那麼區塊高度就像這個記帳本的頁碼。
問題來了,在區塊鏈只有一條主鏈的情況下,假設當前記帳本這一頁的頁數為3,那麼該區塊鏈中該有多少個區塊?回答:4個。
有些人會問了,怎麼不是3個呢?因為區塊鏈中還有一個高度為0的區塊,即創世區塊。頁碼是0,所以當一個塊的頁碼是3時,就是表示它前面有3個塊,而本身就是這條鏈上的第4塊了。
弄清楚了什麼是區塊高度後,再跟大家談談區塊高度是如何形成的。從機制上講,在區塊鏈上,記帳本的頁碼是礦工們競爭獲得的。例如,目前的區塊高度是3,如果幸運的礦工解決了計算難題,就可以獲得頁碼為4的記帳權,並且獲得一定的獎勵。
此時,該區塊將記錄由該礦工打包並已確認的交易。在這個區塊已經形成之後,礦工們又會繼續在高度為4的區塊上競爭高度為5的區塊記帳權。
前面已經談過,礦工是通過解決一系列的計算問題從而得到後面區塊的記帳權力,那麼這又產生一個新的問題,我們假設當前一個區塊的高度是2,那麼出現兩個礦工同時解決了計算題獲得了區塊高度3的記帳權。
根據規則來說,兩人的記帳儘管內容不同,但是都沒有問題,那麼應該選擇哪一個記錄的區塊呢?此時,一些礦工會選擇小白的那一頁紙,接著繼續去「找」頁碼為4的那一頁記帳紙,而另一些礦工會選擇小黑的那一頁紙,繼續去「找」頁碼為4的那一頁記帳紙。
這相當於,在2頁的頁面上,分成了兩個記帳本。這種行為就稱為區塊鏈中的分叉。不過區塊鏈中存在一個最長鏈原則,就是選擇最長的那條鏈作為後續的主鏈,舉個列子,那兩個同時得到區塊高度3的幾張權後,後續誰先在各自的鏈上挖到區塊高度4的區塊就會按照最長鏈原則發展為主鏈。礦工們就會選擇在這條鏈上繼續挖掘。
現在出現了兩個高度相同的塊,那麼如何去識別它們呢?
其實在鏈上,一般則採用的是用區塊哈希標識唯一的一個區塊,而不是區塊高度。由於區塊高度相同,塊內部記錄的內容不完全相同,因此區塊哈希肯定不相同,因此可以使用區塊哈希來惟一地標識一個塊。
概括地說,區塊鏈就像記帳簿,而區塊就像記帳簿內的一頁記帳紙,區塊高度是記帳簿的頁數,當同時出現兩頁相同的頁數時,就會出現分叉。