區塊鏈上編程:DApp 開發簡介


https://zhuanlan.zhihu.com/p/42606628

一、DApp介紹

什么是 DApp?

DApp 是 Decentralized Application 的簡稱,及去中心化應用。
在某種程度上,比特幣可以說是出現的第一個 DAPP,因為它是完全開源的,為貢獻者提供獎勵回報,不受一個中央機構的控制,並使用區塊鏈作為支撐技術。 區塊鏈,作為一個基礎設施,提供了分布式的去中心化可信數據庫,人們可以基於此,可以開發各種應用,適用於不同的場景。 簡單來說,DAPP 和普通的 App 原理一樣,除了他們是完全去中心化的,由類似以太坊網絡本身自己的節點來運作的 DAPP,不依賴於任何中心化的服務器,DAPP 是去中心化的,可以完全自動地運行。 目前 DApp 通常指代基於以太坊或者 EOS 上的智能合約開發的相關應用。

DApp 運行原理

DApp 底層區塊鏈開發平台就好比手機的 iOS 和 Android 系統,是各種 DApp 的底層生態環境,DApp 就是底層區塊鏈平台生態上衍生的各種分布式應用,也是區塊鏈世界中的基礎服務提供方,DApp 於區塊鏈,就好比 APP 之於 iOS 和 Android。

 

什么是智能合約?

如果把區塊鏈看做是一個數據庫,數據源, 智能合約基本上就是一段數據庫操作腳本, 它決定了你如何在區塊鏈上存儲數據,修改數據。

DApp應用案例

前往這里可查看 DApp 的行業最新動態:

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的智能合約,可以使用以下開發環境

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 與百度,現任區塊鏈開發工程師
資深韭菜,在韭菜經歷中學習到扎實的區塊鏈知識

本文已由作者授權發布,版權屬於創宇前端。歡迎注明出處轉載本文。本文鏈接:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM