當你開始探索區塊鏈開發,需要了解到這些。
一、DApp介紹
什麼是 DApp?
DApp 是 Decentralized Application 的簡稱,及去中心化應用。
在某種程度上,比特幣可以說是出現的第一個 DAPP,因為它是完全開源的,為貢獻者提供獎勵回報,不受一箇中央機構的控制,並使用區塊鏈作為支撐技術。
區塊鏈,作為一個基礎設施,提供了分散式的去中心化可信資料庫,人們可以基於此,可以開發各種應用,適用於不同的場景。
簡單來說,DAPP 和普通的 App 原理一樣,除了他們是完全去中心化的,由類似以太坊網路本身自己的節點來運作的 DAPP,不依賴於任何中心化的伺服器,DAPP 是去中心化的,可以完全自動地執行。
目前 DApp 通常指代基於以太坊或者 EOS 上的智慧合約開發的相關應用。
DApp 執行原理
DApp 底層區塊鏈開發平臺就好比手機的 iOS 和 Android 系統,是各種 DApp 的底層生態環境,DApp 就是底層區塊鏈平臺生態上衍生的各種分散式應用,也是區塊鏈世界中的基礎服務提供方,DApp 於區塊鏈,就好比 APP 之於 iOS 和 Android。
什麼是智慧合約?
如果把區塊鏈看做是一個資料庫,資料來源, 智慧合約基本上就是一段資料庫操作指令碼, 它決定了你如何在區塊鏈上儲存資料,修改資料。
DApp應用案例
前往這裡可檢視 DApp 的行業最新動態:
www.stateofthedapps.com/
cryptokitties 加密貓
Fomo3D
智慧合約開發
簡介
智慧合約是程式碼(它的功能)和資料(它的狀態)的集合,存在於以太坊區塊鏈的特定地址。 智慧合約賬戶能夠在彼此之間傳遞資訊,進行圖靈完備的運算。智慧合約依靠被稱作以太坊虛擬機器(EVM) 位元組程式碼(以太坊特有的二進位制格式)上的區塊鏈執行。
智慧合約使用諸如 Solidity 等高階語言寫成,然後編譯成位元組程式碼上傳到區塊鏈上。
智慧合約開發流程大概有以下步驟:
- 編寫智慧合約(如基於 solidity)
- 測試智慧合約,在測試網路或者私有鏈進行合約的功能測試
- 編譯和釋出合約,將合約部署到鏈上
- 操作合約,利用諸如 web3.js 等介面,通過訪問智慧合約的地址,來呼叫和操作智慧合約。
結構示意圖:
智慧合約的開發流程圖:
Solidity
Solidity 是一種語法類似 JavaScript 的高階語言。它被設計成以編譯的方式生成以太坊虛擬機器程式碼。
程式碼片段:
pragma solidity ^0.4.22;
contract helloWorld {
function renderHelloWorld () public pure returns (string) {
return 'helloWorld';
}
}
複製程式碼
ERC-20
最著名的智慧合約,想必大家都聽過,那就是 ERC20。 ERC-20 是一種代幣的標準協議,簡單地說,任何 ERC-20 代幣都能立即相容以太坊錢包(幾乎所有支援以太幣的錢包,包括 MIST、imToken 等),由於交易所已經知道這些代幣是如何操作的,它們可以很容易地整合這些代幣。這就意味著,在很多情況下,這些代幣都是可以立即進行交易的。
一個基於 ERC-20 的代幣包含以下介面:
contract ERC20Interface {
function totalSupply() public constant returns (uint);
function balanceOf(address tokenOwner) public constant returns (uint balance);
function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
function transfer(address to, uint tokens) public returns (bool success);
function approve(address spender, uint tokens) public returns (bool success);
function transferFrom(address from, address to, uint tokens) public returns (bool success);
event Transfer(address indexed from, address indexed to, uint tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}
複製程式碼
Solidity開發環境介紹
下面我會粗略的引入介紹一下 Solidity 智慧合約相關開發環境跟工具,這些都是目前智慧合約開發中常用的工具集合。
IDE
開發基於Solidity的智慧合約,可以使用以下開發環境
- VSCode + Solidity Plugin
- Remix Solidity IDE (remix.ethereum.org)
Truffle
Truffle 是針對基於以太坊的 Solidity 語言的一套開發框架。本身基於 Javascript。
- 內建的智慧合約編譯,連結,部署和二進位制檔案的管理。
- 快速開發下的自動合約測試。
- 指令碼化的,可擴充套件的部署與釋出框架。
- 部署到不管多少的公網或私網的網路環境管理功能
- 使用 EthPM&NPM 提供的包管理,使用 ERC190 標準。
- 與合約直接通訊的直接互動控制檯(寫完合約就可以命令列裡驗證了)。
- 可配的構建流程,支援緊密整合。
- 在 Truffle 環境裡支援執行外部的指令碼。
安裝 Truffle
npm install -g truffle
複製程式碼
mkdir myproject && cd myproject && truffle init
複製程式碼
Ganache
Ganache 是一個帶有圖形介面的本地執行的以太坊區塊鏈瀏覽器/模擬器,它在本地執行了一個 RPC Server,通過連線這個 Ganache,我們可以完成智慧合約的本地測試,而不需要真正的接入以太坊的公網或測試網路。通過使用 Ganache,你可以快速的看到你的應用是如何影響區塊鏈的。其中細節:如你的賬戶、餘額、合約及 Gas 成本。
Geth
geth 的全稱是 go-ethereum,是以太坊的官方錢包客戶端。Geth 是基於命令列的。 通過使用 Geth 和相關引數,我們可以接入以太坊的公網,測試網以及私有網路。 以太坊除了主網路,還有各種各樣的測試網路。使用 geth 前要先解決要進入哪一個網路。 Geth 相當於在本機啟動一個以太坊網路節點,但是通過引數控制,可以讓節點選擇成為全節點或者輕節點。
Geth 控制檯提供 admin、debug、eth、miner、net、personal、rpc、txpool、web3 等服務及命令。比如有這些常用的操作:
- eth.blockNumber 可以檢視當前的區塊高度,總共有多少區塊
- eth.getBlock(xxx) 可以檢視指定區塊的資訊
- eth.accounts 檢視當前錢包的賬戶地址,當第一次執行私有鏈網路的時候,沒有賬戶,需要新建
- eth.coinbase 礦工賬戶,當網路進行挖礦操作挖到新的區塊後,獎勵會到這個賬戶裡
- personal.newAccount() 新建賬戶,會提示輸入密碼,之後賬戶會以加密好的私鑰檔案存到data/keystore目錄下
- miner.start(threas_number) 開始挖礦,前提是當前錢包已經有coinbase礦工賬戶
- miner.stop() 停止挖礦
圖示在 geth 命令列下新建賬戶及獲取餘額操作:
Mist
Mist 是以太坊的官方圖形錢包,通過該錢包,使用者可以很方便的管理賬戶,檢視餘額,以及傳送和接收交易。Mist 還有一個非常實用的功能就是,編譯和部署 Solidity 智慧合約。
web3.js
web3.js 提供了 web3 物件,封裝了一組可以用來操作智慧合約的方法。底層實現上,它通過 RPC 呼叫與本地節點 geth 進行通訊。
geth 本身就可以與合約進行互動,通過 web3.js 再封裝了一層,這樣我們可以使用 js 程式與合約互動,方便開發。
引入
npm install web3
複製程式碼
以太坊通過 web3 的互動流程大致如下:
總結
隨著區塊鏈近些年的大紅大紫,DApp 被推上了風口浪尖,本文從技術的角度大致介紹了一下 DApp 所涉及的技術要點。後續的文章,可以更加詳細的分享一些 DApp 開發的具體案例,引入跟介紹一些 DApp Demo 跟具體開發流程等。
文 / 李工
普通程式猿,長期混跡移動網際網路 曾供職 91 與百度,現任區塊鏈開發工程師 資深韭菜,在韭菜經歷中學習到紮實的區塊鏈知識
本文已由作者授權釋出,版權屬於創宇前端。歡迎註明出處轉載本文。本文連結:knownsec-fed.com/2018-08-10-…
想要看到更多來自知道創宇開發一線的分享,請搜尋關注我們的微信公眾號:創宇前端(KnownsecFED)。歡迎留言討論,我們會盡可能回覆。
感謝您的閱讀。