目錄
- 一、以太坊
- 1. 定義
- 2. 以太坊與位元幣的關系
- 3. 以太坊的共識
- 二、智能合約
- 1. 智能合約的定義
- 2. 智能合約的編譯
- 智能合約原始碼
- 智能合約編譯工具的安裝
- 3. 智能合約的測驗
- 三、以太坊虛擬機EVM
- 1. 虛擬機的分類
- 2. 區塊鏈虛擬機
- 四、以太坊的共識機制與挖礦原理
- 1. 共識機制
- 2. 以太坊的挖礦原理
一、以太坊
以太坊是區塊鏈2.0時代的代表,也是全球第一個ICO專案,
1. 定義
以太坊(Ethereum):是一個開源的有智能合約功能的公共區塊鏈平臺,通過其專用加密貨幣以太幣(Ether)提供去中心化的以太虛擬機(Ethereum Virtual Machine)來處理點對點合約,
從上述的定義可以看出以太坊和位元幣相似,都是一個基于區塊鏈技術的分布式計算平臺,不過它更強調自己是一個智能合約系統,其實它的本質和位元幣是一樣的,只不過可以在這個平臺里任意生成多個不同的位元幣系統而已,
以太坊涉及到三個基本概念:
- 以太幣:簡稱ETH,以太幣是以太坊的內部燃料,為以太坊上各種幣的自動交易提供主動的流動性,同時也適用于智能合約執行的費用支付,它是以太坊內置的資產,
- 以太坊虛擬機:簡稱EVM,支撐執行任何復雜的代碼和演算法的虛擬機,
- 智能合約:指的是由計算機程式定義、可自動執行的承諾和協議,簡單來說就是,腳本代碼,
2. 以太坊與位元幣的關系
位元幣存在的不足:
- 位元幣區塊鏈缺少圖靈完備,圖靈完備是指一切可計算的問題都可以計算,
- 位元幣區塊鏈的擴展性比較差,不能應用在除了位元幣以外的其它領域,
以太坊的優化:
- 建立了一個圖靈完備的底層系統,可以通過簡單的程式來實作各類數字資產的生產,
- 一個可編程、圖靈完備的區塊鏈網路,可以實作更多的非資產類的功能型產品,
以太坊技術=區塊鏈技術+智能合約
3. 以太坊的共識
下面三個版本的以太坊的共識機制均采用PoW,目前來看正在往混合共識機制轉換,以太坊的混合共識機制是PoW+POS,從而使礦工與持幣者的利益得到平衡,
二、智能合約
1. 智能合約的定義
智能合約:指的是由計算機程式定義、可自動執行的承諾和協議,
以太坊智能合約:代碼(即合約功能)和資料(即合約狀態)的集合,存在于以太坊區塊鏈的特定地址,合約賬戶能夠在彼此之間傳遞資訊,進行圖靈完備的運算,合約依靠以太坊虛擬機(EVM)以位元組代碼的二進制格式在區塊鏈運行,
以太坊智能合約可以分為5種:
- 資料庫合約:僅用作資料存盤,允許其他合約寫入、更新和獲取資料,以及檢查呼叫者權限,
- 管理員合約:在資料庫合約上運行,執行批量讀/寫操作,
- 合約管理合約(CMC):目的是管理其他合約,主要任務是跟蹤系統的所有合約/組件,處理這些組件之間的通信,并簡化模塊化設計,保持此功能與正常業務邏輯分離,
- 應用邏輯合約(ALC):包含應用程式特定的代碼,一般來說,如果合約使用控制器和其他合約來執行特定的任務,則它是ALC,
- 公用合約:執行特定的任務,并且可以被其他合約無限制地呼叫,它可能使用某種演算法散列字串,提供亂數字或其他東西,通常不需要太多存盤空間,而且只有很少或沒有依賴關系,
2. 智能合約的編譯
智能合約原始碼

在部署智能合約之前,需要兩件事情:編譯代碼和應用程式的二進制介面,二進制介面是一種參考模板,用于定義如何與合同進行互動,
智能合約編譯工具的安裝
安裝智能合約編譯工具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資訊,在之后的測驗部署中可能會用到,
3. 智能合約的測驗
以下是智能合約示例
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
智能合約測驗工具安裝及使用
- Remix+MetaMask
remix是一個瀏覽器版的solidity開發IDE(集成開發環境),可以使用在線版,也可以安裝到本地,MetaMask是一個瀏覽器插件,作用相當于一個輕型的以太坊錢包,谷歌或者火狐瀏覽器都可以使用,安裝方法是直接在瀏覽器應用商店中搜索MetaMask,或者在MetaMask官網下載安裝,
以太坊錢包安裝完成之后,首先使用Remix發布智能合約,發布成功之后,右邊就會顯示已經發布成功的智能合約以及合約相關的資訊,包含合約地址以及暴露到外部的介面, - wallet +MetaMask
如果已經安裝好了MetaMask,那么直接打開以太坊錢包的官網https://wallet.ethereum.org/ - truffle(首先需要自行安裝node環境以及cnpm )
(1)安裝 truffle:
cnpm i-g truffle
(2)創建專案工程:
mkdir truffle && cd truffle
truffle init
(3)專案結構:
contracts目錄下存的是solidity合約代碼,migrations中存的是js腳本,test中存的是測驗用例,
(4)撰寫代碼、部署、除錯
contracts中新建Hello.sol檔案;
注意:
類名Hello需要跟檔案名Hello.sol保存一致
Migrations.sol檔案不能洗掉,
在migrations目錄下添加對應的js腳本2_depoly_hello.js
代碼添加完后,打開終端,切換到專案所在路徑,執行代碼,
三、以太坊虛擬機EVM
傳統意義上的虛擬機
虛擬機:實際上不是物理計算機,而是一個用來模仿物理計算機的軟體環境,但虛擬機可以像物理計算機一樣運行程式,用于托管虛擬機的物理計算機通常可以支持多臺虛擬機,另外,不僅在系統層上有虛擬機的概念,在程式語言上也有虛擬機的概念,
虛擬機是用來解決什么問題呢?
為了抽象掉硬體底層,從系統層來說,硬體和作業系統都越來越多樣化了,
它可以自動兼容所有硬體,總結一下,虛擬機技術實作基本上都是將硬體層或是系統層進行了一次抽象,以致對應用層屏蔽掉了底層的實作細節,有利于應用的快速實作和部署,
1. 虛擬機的分類
按層次來說可以分為三大類:
- 高級語言虛擬機:是就一個代碼解釋器,不需要二進制代碼,只需要中間代碼,然后虛擬機處理后,再移交給CPU 和存盤結構,虛擬機模擬的是代碼的執行,
- 作業系統層的虛擬機:所有作業系統介面呼叫都會被該容器截獲,經過處理后,發送到當前適當的平臺上,
- 硬體層的虛擬機:是最復雜的工程,是虛擬化技術的一大重點,是對硬體層以及硬體驅動層的模擬,
然而它們的實作越往底層難度就越大,
2. 區塊鏈虛擬機
傳統的精簡指令集計算機:這種計算機CPU只提供了有限的執行指令和存盤器,但是各種型別的應用都能在這臺計算機上運行,
原理:因為系統存在一個“虛擬機”將高層語言的實作都轉換成了CPU的相關執行指令,高層語言提供語法,人們使用高級語言開發相關應用,
由低到高的層次結構分別為:硬體指令,虛擬機,高級語言和應用層,
如果要在區塊鏈里支持各種應用,也需要有這樣的層次結構,因此需要區塊鏈提供一套指令,并且區塊鏈里的虛擬機可以對這些指令作相關的解釋,另外,高級語言的實作需要有一個編譯器將實作編譯成虛擬機支持的指令,這樣,區塊鏈就完美支持了語言和業務的分離,從而可以在區塊鏈里開發各種業務應用,
虛擬機架構的組成部分:
- 指令∶區塊鏈系統底層支持的原子操作指令
- 虛擬機∶對原子操作指令的解釋
- 編譯器:將高級語言轉換為虛擬機支持的指令
- 高級語言:用于實作在區塊鏈里運行業務應用
還有兩個重要的組成部分∶
- 區塊鏈系統提供的原始API,用于在撰寫智能合約需要時,獲取系統相關資料或是狀態;
- ABI,一個智能合約發布后,其他的應用需要知道這個合約提供了什么功能介面以及資料結構,
當所有的部分都就緒后,我們就可以用高級語言和API撰寫符合業務邏輯的智能合約,然后用相關編譯器將智能合約編譯成 byte codes,并且也會生成相關的ABI描述,經過嚴格測驗后,就可以將智能合約的byte codes和ABI以交易的形式發布到區塊鏈中,
礦工會驗證你交易的合法性,如果入塊成功,將會回傳智能合約地址,用戶會呼叫這個合約地址來獲取 ABI,再根據 ABI 里對功能介面的描述來發起—筆對功能介面呼叫的交易,從而實作相關功能或是獲取相關結果,礦工同樣也會對這筆交易進行合法性驗證及入塊處理,
將經過嚴格測驗的智能合約代碼發布到區塊鏈上可以理解為一個特殊的交易——包括了可執行代碼的交易,然后會被礦工記錄在某個塊中,當需要呼叫這個智能合約時,只需向這個智能合約的地址發送一個交易即可,因為每個節點都需要安裝以太坊客戶端,而每個客戶端都自帶了一個EVM(以太坊虛擬機),通過交易觸發智能合約后,智能合約的代碼就能在EVM上被執行,
這種方式相當于把程式部署到了很多的電腦上,隨時都可以通過交易來觸發這些智能合約的執行,從而也完成了去中心化程式的部署和呼叫,
DAPP就是基于以太坊運行的去中心化應用,這種應用涉及到傳統行業的方方面面,
四、以太坊的共識機制與挖礦原理
1. 共識機制
以太坊為什么需要共識機制呢?
分布式系統中多個主機通過異步通信的方式組成網路集群,在這樣的一個異步系統中需要主機之間進行狀態復制,以保證每個主機達成一致的狀態共識,在運行的程序中,可能出現主機故障導致無法通信,也有可能主機性能下降、網路擁塞這些都可能導致錯誤資訊在系統內傳播,因此需要在不可靠的異步網路中定義容錯協議以保證各主機達成安全可靠的狀態共識,
以太坊共識機制的版本

如果單純根據代幣余額來決定記賬者,必然使富有者勝出,導致記賬權的中心化,降低共識的公正性,因此,如何解決記賬權中心化問題?不同的PoS機制在權益證明的基礎上,采用了不同的方式來增加記賬權的隨機性,來辟負中心化,

2. 以太坊的挖礦原理
挖礦流程
共識機制:PoW(作業量證明)
演算法:Ethash (Dagger-Hashimoto演算法的改良版本)
對于每個塊,首先計算一個種子,該種子僅和當前塊的資訊有關,然后根據種子生成一個32M的隨機資料集,根據隨機資料集生成一個1G大小的DAG(有向無環圖),

挖礦的程序就是從DAG中隨機選擇元素(類似于位元幣挖礦中查找合適Nonce),再進行哈希運算,可以從Cache快速計算DAG指定位置的元素,進而哈希驗證,
挖礦步驟
- 生成一個錢包
- 有一臺電腦,把電腦調成挖礦的最高效狀態
- 下載個挖礦軟體開始挖礦,挖到礦后,挖到的幣會發到錢包里面,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/141885.html
標籤:其他
上一篇:lotus 區塊高度 匯出快照
