以太坊是區塊鏈2.0時代的代表,也是全球第一個ICO專案。
以太坊(Ethereum):是一個開源的有智慧合約功能的公共區塊鏈平臺,通過其專用加密貨幣以太幣(Ether)提供去中心化的以太虛擬機器器(Ethereum Virtual Machine)來處理對等合約。
從上述的定義可以看出以太坊和位元幣相似,都是一個基於區塊鏈技術的分散式計算平臺。不過它更強調自己是一個智慧合約系統,其實它的本質和位元幣是一樣的。只不過可以在這個平臺裡任意生成多個不同的位元幣系統而已。
以太坊涉及到三個基本概念:
位元幣存在的不足:
以太坊的優化:
以太坊技術=區塊鏈技術+智慧合約
下面三個版本的以太坊的共識機制均採用PoW,目前來看正在往混合共識機制轉換,以太坊的混合共識機制是PoW+POS,從而使礦工與持幣者的利益得到平衡。
智慧合約:指的是由計算機程式定義、可自動執行的承諾和協定。
以太坊智慧合約:程式碼(即合約功能)和資料(即合約狀態)的集合,存在於以太坊區塊鏈的特定地址。合約賬戶能夠在彼此之間傳遞資訊,進行圖靈完備的運算。合約依靠以太坊虛擬機器器(EVM)以位元組程式碼的二進位制格式在區塊鏈執行。
以太坊智慧合約可以分為5種:
在部署智慧合約之前,需要兩件事情:編譯程式碼和應用程式的二進位制介面,二進位制介面是一種參考模板,用於定義如何與合同進行互動。
安裝智慧合約編譯工具solc,solc是一個Solidiy命令列編譯器,是Solidity編譯方法之一。
在ubuntu系統,在終端輸入命令列就可以成功安裝。
在Ubuntu系統
在終端中執行以下命令:
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
which solc
在MAC OSX系統,也是在終端輸入命令列。
在Mac OSX系統中
在終端中執行以下命令:
brew tap ethereum/ethereum
brew install solidity
which solc
在Windows系統中,需要安裝chocolatey,該工具可以在windows上管理軟體,然後執行命令列就可以了。
在Windosw系統中
需要安裝chocolatey (https/chocolsteyorg/),該工具可以在windows上管理軟體。
在終端中執行以下命令:
cinst -pre solC-stable
最後是通過原始碼安裝solc。
在終端中執行以下命令:。
git clone https://github.com/ethereum/cpp-ethereum.git
mkdir cpp-ethereum/build
cd cpp-ethereum/build
cmake -DISONRPC=OFF -DMINER=OFF -DETHKEY=OFF -DSERPENT=OFF-DGUI=OFF -DTESTS=OFF -DJSCONSOLE=OFF
make -j4
make install
which solc
在命令列輸入下面的bin命令進行智慧合約程式碼solc編譯:
solc --bin HelloWorld.sol
除了位元組碼資料,還需要一個abi介面,通過執行abi命令:
solc --bin HelloWorld.sol
得到abi資訊,在之後的測試部署中可能會用到。
以下是智慧合約範例
pragma solidity ^0.4.20;
contract Simplestorage {
uint storedData;
function set(uint x){
storedData= x;
}
function get() constant returns(uint){
return storedData;
}
}
三種智慧合約測試的方式:
Remix+MetaMask
wallet +MetaMask
truffle
智慧合約測試工具安裝及使用
傳統意義上的虛擬機器器
虛擬機器器:實際上不是物理計算機,而是一個用來模仿物理計算機的軟體環境,但虛擬機器器可以像物理計算機一樣執行程式。用於託管虛擬機器器的物理計算機通常可以支援多臺虛擬機器器。另外,不僅在系統層上有虛擬機器器的概念,在程式語言上也有虛擬機器器的概念。
虛擬機器器是用來解決什麼問題呢?
為了抽象掉硬體底層。從系統層來說,硬體和作業系統都越來越多樣化了。
它可以自動相容所有硬體。總結一下,虛擬機器器技術實現基本上都是將硬體層或是系統層進行了一次抽象,以致對應用層遮蔽掉了底層的實現細節,有利於應用的快速實現和部署。
按層次來說可以分為三大類:
然而它們的實現越往底層難度就越大。
傳統的精簡指令集計算機:這種計算機CPU只提供了有限的執行指令和記憶體,但是各種型別的應用都能在這臺計算機上執行。
原理:因為系統存在一個「虛擬機器器」將高層語言的實現都轉換成了CPU的相關執行指令。高層語言提供語法,人們使用高階語言開發相關應用。
由低到高的層次結構分別為:硬體指令,虛擬機器器,高階語言和應用層。
如果要在區塊鏈裡支援各種應用,也需要有這樣的層次結構,因此需要區塊鏈提供一套指令,並且區塊鏈裡的虛擬機器器可以對這些指令作相關的解釋。另外,高階語言的實現需要有一個編譯器將實現編譯成虛擬機器器支援的指令。這樣,區塊鏈就完美支援了語言和業務的分離,從而可以在區塊鏈裡開發各種業務應用。
虛擬機器器架構的組成部分:
還有兩個重要的組成部分∶
當所有的部分都就緒後,我們就可以用高階語言和API編寫符合業務邏輯的智慧合約,然後用相關編譯器將智慧合約編譯成 byte codes,並且也會生成相關的ABI描述。經過嚴格測試後,就可以將智慧合約的byte codes和ABI以交易的形式釋出到區塊鏈中。
礦工會驗證你交易的合法性,如果入塊成功,將會返回智慧合約地址。使用者會呼叫這個合約地址來獲取 ABI,再根據 ABI 裡對功能介面的描述來發起—筆對功能介面呼叫的交易,從而實現相關功能或是獲取相關結果。礦工同樣也會對這筆交易進行合法性驗證及入塊處理。
將經過嚴格測試的智慧合約程式碼釋出到區塊鏈上可以理解為一個特殊的交易——包括了可執行程式碼的交易,然後會被礦工記錄在某個塊中。當需要呼叫這個智慧合約時,只需向這個智慧合約的地址傳送一個交易即可。因為每個節點都需要安裝以太坊使用者端,而每個使用者端都自帶了一個EVM(以太坊虛擬機器器)。通過交易觸發智慧合約後,智慧合約的程式碼就能在EVM上被執行。
這種方式相當於把程式部署到了很多的電腦上,隨時都可以通過交易來觸發這些智慧合約的執行,從而也完成了去中心化程式的部署和呼叫。
DAPP就是基於以太坊執行的去中心化應用,這種應用涉及到傳統行業的方方面面。
以太坊為什麼需要共識機制呢?
分散式系統中多個主機通過非同步通訊的方式組成網路叢集,在這樣的一個非同步系統中需要主機之間進行狀態複製,以保證每個主機達成一致的狀態共識。在執行的過程中,可能出現主機故障導致無法通訊,也有可能主機效能下降、網路擁塞這些都可能導致錯誤資訊在系統內傳播,因此需要在不可靠的非同步網路中定義容錯協定以保證各主機達成安全可靠的狀態共識。
以太坊共識機制的版本
如果單純根據代幣餘額來決定記賬者,必然使富有者勝出,導致記賬權的中心化,降低共識的公正性。因此,如何解決記賬權中心化問題?不同的PoS機制在權益證明的基礎上,採用了不同的方式來增加記賬權的隨機性,來闢負中心化。
挖礦流程
共識機制:PoW(工作量證明)
演演算法:Ethash (Dagger-Hashimoto演演算法的改良版本)
對於每個塊,首先計算一個種子,該種子僅和當前塊的資訊有關,然後根據種子生成一個32M的亂資料集,根據亂資料集生成一個1G大小的DAG(有向無環圖)。
挖礦的過程就是從DAG中隨機選擇元素(類似於位元幣挖礦中查詢合適Nonce),再進行雜湊運算,可以從Cache快速計算DAG指定位置的元素,進而雜湊驗證。
挖礦步驟