摘要:目前通常指代基于以太坊或者上的智能合約開發(fā)的相關(guān)應(yīng)用。引入以太坊通過的交互流程大致如下總結(jié)隨著區(qū)塊鏈近些年的大紅大紫,被推上了風(fēng)口浪尖,本文從技術(shù)的角度大致介紹了一下所涉及的技術(shù)要點(diǎn)。
當(dāng)你開始探索區(qū)塊鏈開發(fā),需要了解到這些。一、DApp介紹 什么是 DApp?
DApp 是 Decentralized Application 的簡稱,及去中心化應(yīng)用。
在某種程度上,比特幣可以說是出現(xiàn)的第一個(gè) DAPP,因?yàn)樗峭耆_源的,為貢獻(xiàn)者提供獎(jiǎng)勵(lì)回報(bào),不受一個(gè)中央機(jī)構(gòu)的控制,并使用區(qū)塊鏈作為支撐技術(shù)。
區(qū)塊鏈,作為一個(gè)基礎(chǔ)設(shè)施,提供了分布式的去中心化可信數(shù)據(jù)庫,人們可以基于此,可以開發(fā)各種應(yīng)用,適用于不同的場景。
簡單來說,DAPP 和普通的 App 原理一樣,除了他們是完全去中心化的,由類似以太坊網(wǎng)絡(luò)本身自己的節(jié)點(diǎn)來運(yùn)作的 DAPP,不依賴于任何中心化的服務(wù)器,DAPP 是去中心化的,可以完全自動(dòng)地運(yùn)行。
目前 DApp 通常指代基于以太坊或者 EOS 上的智能合約開發(fā)的相關(guān)應(yīng)用。
DApp 底層區(qū)塊鏈開發(fā)平臺(tái)就好比手機(jī)的 iOS 和 Android 系統(tǒng),是各種 DApp 的底層生態(tài)環(huán)境,DApp 就是底層區(qū)塊鏈平臺(tái)生態(tài)上衍生的各種分布式應(yīng)用,也是區(qū)塊鏈?zhǔn)澜缰械幕A(chǔ)服務(wù)提供方,DApp 于區(qū)塊鏈,就好比 APP 之于 iOS 和 Android。
什么是智能合約?如果把區(qū)塊鏈看做是一個(gè)數(shù)據(jù)庫,數(shù)據(jù)源,
智能合約基本上就是一段數(shù)據(jù)庫操作腳本,
它決定了你如何在區(qū)塊鏈上存儲(chǔ)數(shù)據(jù),修改數(shù)據(jù)。
前往這里可查看 DApp 的行業(yè)最新動(dòng)態(tài):
https://www.stateofthedapps.com/
cryptokitties 加密貓
Fomo3D
智能合約開發(fā) 簡介智能合約是代碼(它的功能)和數(shù)據(jù)(它的狀態(tài))的集合,存在于以太坊區(qū)塊鏈的特定地址。 智能合約賬戶能夠在彼此之間傳遞信息,進(jìn)行圖靈完備的運(yùn)算。智能合約依靠被稱作以太坊虛擬機(jī)(EVM) 字節(jié)代碼(以太坊特有的二進(jìn)制格式)上的區(qū)塊鏈運(yùn)行。
智能合約使用諸如 Solidity 等高級語言寫成,然后編譯成字節(jié)代碼上傳到區(qū)塊鏈上。
智能合約開發(fā)流程大概有以下步驟:
編寫智能合約(如基于 solidity)
測試智能合約,在測試網(wǎng)絡(luò)或者私有鏈進(jìn)行合約的功能測試
編譯和發(fā)布合約,將合約部署到鏈上
操作合約,利用諸如 web3.js 等接口,通過訪問智能合約的地址,來調(diào)用和操作智能合約。
結(jié)構(gòu)示意圖:
智能合約的開發(fā)流程圖:
SoliditySolidity 是一種語法類似 JavaScript 的高級語言。它被設(shè)計(jì)成以編譯的方式生成以太坊虛擬機(jī)代碼。
代碼片段:
pragma solidity ^0.4.22; contract helloWorld { function renderHelloWorld () public pure returns (string) { return "helloWorld"; } }ERC-20
最著名的智能合約,想必大家都聽過,那就是 ERC20。
ERC-20 是一種代幣的標(biāo)準(zhǔn)協(xié)議,簡單地說,任何 ERC-20 代幣都能立即兼容以太坊錢包(幾乎所有支持以太幣的錢包,包括 MIST、imToken 等),由于交易所已經(jīng)知道這些代幣是如何操作的,它們可以很容易地整合這些代幣。這就意味著,在很多情況下,這些代幣都是可以立即進(jìn)行交易的。
一個(gè)基于 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開發(fā)環(huán)境介紹
下面我會(huì)粗略的引入介紹一下 Solidity 智能合約相關(guān)開發(fā)環(huán)境跟工具,這些都是目前智能合約開發(fā)中常用的工具集合。
IDE開發(fā)基于Solidity的智能合約,可以使用以下開發(fā)環(huán)境
VSCode + Solidity Plugin
Remix Solidity IDE (https://remix.ethereum.org)
TruffleTruffle 是針對基于以太坊的 Solidity 語言的一套開發(fā)框架。本身基于 Javascript。
內(nèi)置的智能合約編譯,鏈接,部署和二進(jìn)制文件的管理。
快速開發(fā)下的自動(dòng)合約測試。
腳本化的,可擴(kuò)展的部署與發(fā)布框架。
部署到不管多少的公網(wǎng)或私網(wǎng)的網(wǎng)絡(luò)環(huán)境管理功能
使用 EthPM&NPM 提供的包管理,使用 ERC190 標(biāo)準(zhǔn)。
與合約直接通信的直接交互控制臺(tái)(寫完合約就可以命令行里驗(yàn)證了)。
可配的構(gòu)建流程,支持緊密集成。
在 Truffle 環(huán)境里支持執(zhí)行外部的腳本。
安裝 Truffle
npm install -g truffle
mkdir myproject && cd myproject && truffle initGanache
Ganache 是一個(gè)帶有圖形界面的本地運(yùn)行的以太坊區(qū)塊鏈瀏覽器/模擬器,它在本地運(yùn)行了一個(gè) RPC Server,通過連接這個(gè) Ganache,我們可以完成智能合約的本地測試,而不需要真正的接入以太坊的公網(wǎng)或測試網(wǎng)絡(luò)。
通過使用 Ganache,你可以快速的看到你的應(yīng)用是如何影響區(qū)塊鏈的。其中細(xì)節(jié):如你的賬戶、余額、合約及 Gas 成本。
Gethgeth 的全稱是 go-ethereum,是以太坊的官方錢包客戶端。Geth 是基于命令行的。
通過使用 Geth 和相關(guān)參數(shù),我們可以接入以太坊的公網(wǎng),測試網(wǎng)以及私有網(wǎng)絡(luò)。
以太坊除了主網(wǎng)絡(luò),還有各種各樣的測試網(wǎng)絡(luò)。使用 geth 前要先解決要進(jìn)入哪一個(gè)網(wǎng)絡(luò)。
Geth 相當(dāng)于在本機(jī)啟動(dòng)一個(gè)以太坊網(wǎng)絡(luò)節(jié)點(diǎn),但是通過參數(shù)控制,可以讓節(jié)點(diǎn)選擇成為全節(jié)點(diǎn)或者輕節(jié)點(diǎn)。
Geth 控制臺(tái)提供 admin、debug、eth、miner、net、personal、rpc、txpool、web3 等服務(wù)及命令。比如有這些常用的操作:
eth.blockNumber 可以查看當(dāng)前的區(qū)塊高度,總共有多少區(qū)塊
eth.getBlock(xxx) 可以查看指定區(qū)塊的信息
eth.accounts 查看當(dāng)前錢包的賬戶地址,當(dāng)?shù)谝淮芜\(yùn)行私有鏈網(wǎng)絡(luò)的時(shí)候,沒有賬戶,需要新建
eth.coinbase 礦工賬戶,當(dāng)網(wǎng)絡(luò)進(jìn)行挖礦操作挖到新的區(qū)塊后,獎(jiǎng)勵(lì)會(huì)到這個(gè)賬戶里
personal.newAccount() 新建賬戶,會(huì)提示輸入密碼,之后賬戶會(huì)以加密好的私鑰文件存到data/keystore目錄下
miner.start(threas_number) 開始挖礦,前提是當(dāng)前錢包已經(jīng)有coinbase礦工賬戶
miner.stop() 停止挖礦
圖示在 geth 命令行下新建賬戶及獲取余額操作:
MistMist 是以太坊的官方圖形錢包,通過該錢包,用戶可以很方便的管理賬戶,查看余額,以及發(fā)送和接收交易。Mist 還有一個(gè)非常實(shí)用的功能就是,編譯和部署 Solidity 智能合約。
web3.jsweb3.js 提供了 web3 對象,封裝了一組可以用來操作智能合約的方法。底層實(shí)現(xiàn)上,它通過 RPC 調(diào)用與本地節(jié)點(diǎn) geth 進(jìn)行通信。
geth 本身就可以與合約進(jìn)行交互,通過 web3.js 再封裝了一層,這樣我們可以使用 js 程序與合約交互,方便開發(fā)。
引入
npm install web3
以太坊通過 web3 的交互流程大致如下:
總結(jié)隨著區(qū)塊鏈近些年的大紅大紫,DApp 被推上了風(fēng)口浪尖,本文從技術(shù)的角度大致介紹了一下 DApp 所涉及的技術(shù)要點(diǎn)。后續(xù)的文章,可以更加詳細(xì)的分享一些 DApp 開發(fā)的具體案例,引入跟介紹一些 DApp Demo 跟具體開發(fā)流程等。
后續(xù)文章:
在區(qū)塊鏈上編程:DApp 開發(fā)實(shí)戰(zhàn)——來寫個(gè)競猜游戲吧
文 / 李工普通程序猿,長期混跡移動(dòng)互聯(lián)網(wǎng)
曾供職 91 與百度,現(xiàn)任區(qū)塊鏈開發(fā)工程師
資深韭菜,在韭菜經(jīng)歷中學(xué)習(xí)到扎實(shí)的區(qū)塊鏈知識編 / 熒聲
本文已由作者授權(quán)發(fā)布,版權(quán)屬于創(chuàng)宇前端。歡迎注明出處轉(zhuǎn)載本文。本文鏈接:https://knownsec-fed.com/2018...
想要訂閱更多來自知道創(chuàng)宇開發(fā)一線的分享,請搜索關(guān)注我們的微信公眾號:創(chuàng)宇前端(KnownsecFED)。歡迎留言討論,我們會(huì)盡可能回復(fù)。
歡迎點(diǎn)贊、收藏、留言評論、轉(zhuǎn)發(fā)分享和打賞支持我們。打賞將被完全轉(zhuǎn)交給文章作者。
感謝您的閱讀。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/24327.html
摘要:合約編寫可以看出合約需要實(shí)現(xiàn)用戶投注生成隨機(jī)數(shù)發(fā)放獎(jiǎng)勵(lì)獎(jiǎng)池余額查詢的功能,接下來編寫我們的合約代碼。總結(jié)當(dāng)前隨機(jī)數(shù)的實(shí)現(xiàn)通過鏈上信息生成,這種生成隨機(jī)數(shù)的方式容易受到不誠實(shí)的節(jié)點(diǎn)攻擊。 導(dǎo)讀:本文旨在引導(dǎo)對 DApp 開發(fā)感興趣的開發(fā)者,構(gòu)建一個(gè)基于以太坊去中心化應(yīng)用,通過開發(fā)一款功能完備的競猜游戲,邁出 DApp 開發(fā)的第一步,通過實(shí)例講解 Solidity 語言的常用語法,以及前端...
摘要:必備知識設(shè)置用于為區(qū)塊鏈簽署交易,并在不泄露密鑰的情況下向應(yīng)用程序提供個(gè)人信息。 由于我一直在深入研究EOS dApp的開發(fā),我看了不少好文章。在這里,我匯總了下做一些研究后得到的所有知識。在本文中,我將解釋如何使用EOSJS和scatter。我假設(shè)你對智能合約以及如何在EOS區(qū)塊鏈上部署它們有基本的了解,因?yàn)槲覍⒃诒疚闹刑^該部分。 我們在構(gòu)建什么? ?我們正在構(gòu)建一個(gè)簡單的todo...
摘要:必備知識設(shè)置用于為區(qū)塊鏈簽署交易,并在不泄露密鑰的情況下向應(yīng)用程序提供個(gè)人信息。 由于我一直在深入研究EOS dApp的開發(fā),我看了不少好文章。在這里,我匯總了下做一些研究后得到的所有知識。在本文中,我將解釋如何使用EOSJS和scatter。我假設(shè)你對智能合約以及如何在EOS區(qū)塊鏈上部署它們有基本的了解,因?yàn)槲覍⒃诒疚闹刑^該部分。 我們在構(gòu)建什么? ?我們正在構(gòu)建一個(gè)簡單的todo...
摘要:必備知識設(shè)置用于為區(qū)塊鏈簽署交易,并在不泄露密鑰的情況下向應(yīng)用程序提供個(gè)人信息。 由于我一直在深入研究EOS dApp的開發(fā),我看了不少好文章。在這里,我匯總了下做一些研究后得到的所有知識。在本文中,我將解釋如何使用EOSJS和scatter。我假設(shè)你對智能合約以及如何在EOS區(qū)塊鏈上部署它們有基本的了解,因?yàn)槲覍⒃诒疚闹刑^該部分。 我們在構(gòu)建什么? ?我們正在構(gòu)建一個(gè)簡單的todo...
摘要:上周末,來自硅谷團(tuán)隊(duì)的游戲作品獲得思否區(qū)塊鏈黑客馬拉松北京站冠軍。本次黑客馬拉松有來自基金會(huì)科學(xué)家楊耀東合伙人劉海核心開發(fā)者姜家志星云鏈實(shí)驗(yàn)室負(fù)責(zé)人劉杜然等多位嘉賓出席。 上周末,來自硅谷團(tuán)隊(duì)的游戲作品Crypto Bird - An Implement of NabBoard獲得 SegmentFault 思否區(qū)塊鏈黑客馬拉松北京站冠軍。本次黑客馬拉松有來自 QuarkChain 基...
閱讀 1376·2021-11-04 16:11
閱讀 3036·2021-10-12 10:11
閱讀 2969·2021-09-29 09:47
閱讀 1608·2021-09-22 15:40
閱讀 1007·2019-08-29 15:43
閱讀 2798·2019-08-29 13:50
閱讀 1572·2019-08-29 13:28
閱讀 2685·2019-08-29 12:54