精準分析區塊鏈定義
想知道了解更多區塊鏈技術實戰問題,請百度【鏈客區塊鏈技術問答社群】
區塊鏈就是一個具有共享狀態的密碼性安全交易的單機(cryptographically secure transactional singleton machine with shared-state)。[1]這有點長,是吧?讓我們將它分開來看:
-
“密碼性安全(Cryptographically secure)”是指用一個很難被解開的複雜數學機制演算法來保證數字貨幣生產的安全性。將它想象成類似於防火牆的這種。它們使得欺騙系統近乎是一個不可能的事情(比如:構造一筆假的交易,消除一筆交易等等)。
-
“交易的單機(Transactional singleton machine)”是指只有一個權威的機器例項為系統中產生的交易負責任。換句話說,只有一個全球真相是大家所相信的。
-
“具有共享狀態(With shared-state)”是指在這臺機器上儲存的狀態是共享的,對每個人都是開放的。
賬戶
以太坊的全域性“共享狀態”是有很多小物件(賬戶)來組成的,這些賬戶可以通過訊息傳遞架構來與對方進行互動。每個賬戶都有一個與之關聯的狀態(state)和一個20位元組的地址(address)。在以太坊中一個地址是160位的識別符號,用來識別賬戶的。
這是兩種型別的賬戶:
-
外部擁有的賬戶,被私鑰控制且沒有任何程式碼與之關聯
-
合約賬戶,被它們的合約程式碼控制且有程式碼與之關聯
外部擁有賬戶與合約賬戶的比較
理解外部擁有賬戶和合約賬戶的基本區別是很重要的。一個外部擁有賬戶可以通過建立和用自己的私鑰來對交易進行簽名,來發送訊息給另一個外部擁有賬戶或合約賬戶。在兩個外部擁有賬戶之間傳送的訊息只是一個簡單的價值轉移。但是從外部擁有賬戶到合約賬戶的訊息會啟用合約賬戶的程式碼,允許它執行各種動作。(比如轉移代幣,寫入內部儲存,挖出一個新代幣,執行一些運算,建立一個新的合約等等)。
不像外部擁有賬戶,合約賬戶不可以自己發起一個交易。相反,合約賬戶只有在接收到一個交易之後(從一個外部擁有賬戶或另一個合約賬戶接),為了響應此交易而觸發一個交易。我們將會在“交易和訊息”部分來了解關於合約與合約之間的通訊。
Gas和費用
在以太坊中一個比較重要的概念就是費用(fees),由以太坊網路上的交易而產生的每一次計算,都會產生費用—沒有免費的午餐。這個費用是以稱之為”gas”的來支付。
gas就是用來衡量在一個具體計算中要求的費用單位。gas price就是你願意在每個gas上花費Ether的數量,以“gwei”進行衡量。“Wei”是Ether的最小單位,1Ether表示10^18Wei. 1gwei是1,000,000,000 Wei。
對每個交易,傳送者設定gas limit和gas price。gas limit和gas price就代表著傳送者願意為執行交易支付的Wei的最大值。
例如,假設傳送者設定gas limit為50,000,gas price為20gwei。這就表示傳送者願意最多支付50,000*20gwei = 1,000,000,000,000,000 Wei = 0.001 Ether來執行此交易。
費用的作用是什麼?
以太坊可以運作的一個重要方面就是每個網路執行的操作同時也被全節點所影響。然而,計算的操作在以太坊虛擬機器上是非常昂貴的。因此,以太坊智慧合約最好是用來執行最簡單的任務,比如執行一個簡單的業務邏輯或者驗證簽名和其他密碼物件,而不是用於複雜的操作,比如檔案儲存,電子郵件,或機器學習,這些會給網路造成壓力。施加費用防止使用者使網路超負荷。
以太坊是一個圖靈完備語言(短而言之,圖靈機器就是一個可以模擬任何電腦演算法的機器。對於圖靈機器不太熟悉的人可以看看這個 和這個 )。這就允許有迴圈,並使以太坊受到停機問題 的影響,這個問題讓你無法確定程式是否無限制的執行。如果沒有費用的話,惡意的執行者通過執行一個包含無限迴圈的交易就可以很容易的讓網路癱瘓而不會產生任何反響。因此,費用保護網路不受蓄意攻擊。
你也許會想,“為什麼我們還需要為儲存付費?”其實就像計算一樣,以太坊網路上的儲存是整個網路都必須要負擔的成本。
Ommers解釋
“ommer”到底是什麼? ommer就是一個區塊的父區塊與當前區塊父區塊的父區塊是相同的。讓我們快速瞭解一下ommers是用來幹嘛的,並且為什麼一個區塊需要為ommers包含區塊頭。
由於以太坊的構造,它的區塊生產時間(大概15秒左右)比其他的區塊鏈例如Bitcoin(大概10分鐘左右)要快很多。這使得交易的處理更快。但是,更短的區塊生產時間的一個缺點就是:更多的競爭區塊會被礦工發現。這些競爭區塊同樣也被稱為“孤區塊”(也就是被挖出來但是不會被新增到主鏈上的區塊)。
Ommers的目的就是為了幫助獎勵礦工納入這些孤區塊。礦工包含的ommers必須是有效的,也就是ommers必須在父區塊的第6個子區塊之內或更小範圍內。在第6個子區塊之後,陳舊的孤區塊將不會再被引用(因為包含老舊的交易會使事情變得複雜一點)。
Ommer區塊會收到比全區塊少一點的獎勵。不管怎樣,依然存在激勵來讓礦工們納入孤區塊並能從中獲得一些報酬。
交易收據
自於被包含在交易收據中的日誌資訊儲存在頭中。就像你在商店買東西時收到的收據一樣,以太坊為每筆交易都產生一個收據。像你期望的那樣,每個收據包含關於交易的特定資訊。這些收據包含著:
-
區塊序號
-
區塊Hash
-
交易Hash
-
當前交易使用了的gas
-
在當前交易執行完之後當前塊使用的累計gas
-
執行當前交易時建立的日誌
-
等等
區塊難度
區塊的難度是被用來在驗證區塊時加強一致性。創世紀區塊的難度是131,072,有一個特殊的公式用來計算之後的每個塊的難度。如果某個區塊比前一個區塊驗證的更快,以太坊協議就會增加區塊的難度。
區塊的難度影響nonce,它是在挖礦時必須要使用proof-of-work演算法來計算的一個hash值。