![]() ![]() |
第一行代碼——以太坊 ![]() 本書是一本區(qū)塊鏈開發(fā)技術(shù)圖書。本書立足實(shí)戰(zhàn),深入淺出地從零開始講解以太坊及相關(guān)技術(shù),包括區(qū)塊鏈的基礎(chǔ)概念和理論、利用以太坊創(chuàng)建私有區(qū)塊鏈、編寫智能合約、挖礦、Web3.js API、Solidity語言、Truffle框架、Ganache測(cè)試節(jié)點(diǎn)等技術(shù)。本書力求通俗易懂,實(shí)例豐富,步驟詳細(xì)。為了幫助讀者鞏固基礎(chǔ)知識(shí),本書*后還配有兩個(gè)綜合案例分別實(shí)現(xiàn)以太坊在金融領(lǐng)域(發(fā)布代幣)和非金融領(lǐng)域(DApp)的應(yīng)用。 本書適合于區(qū)塊鏈技術(shù)的學(xué)習(xí)者及從業(yè)者使用。●骨灰級(jí)大牛: 51CTO學(xué)院金牌講師、CSDN、51CTO博客專家、寧哥教育創(chuàng)始人、著名碼農(nóng)李寧親著 ●超級(jí)學(xué)習(xí)資源:實(shí)打?qū)嵸?zèng)送價(jià)值698元JavaScript視頻課程 本書視頻課 全套實(shí)驗(yàn)軟件 全書案例源碼 一對(duì)一解答 不定期驚喜 ●全棧知識(shí)一站搞定:區(qū)塊鏈、以太坊、智能合約、DApp,從概念到實(shí)戰(zhàn),一站搞定。 ●成就感十足:從入門到精通,從理論到實(shí)戰(zhàn),一點(diǎn)一例,輕松上手,學(xué)習(xí)驚喜不斷。 當(dāng)今最火的技術(shù)是什么?區(qū)塊鏈、區(qū)塊鏈、區(qū)塊鏈,重要的事情說3遍。現(xiàn)在區(qū)塊鏈的火爆程度已經(jīng)全面超過了人工智能。在硅谷,一個(gè)區(qū)塊鏈工程師有16家公司在盯著。國內(nèi)某區(qū)塊鏈創(chuàng)業(yè)公司給出的待遇是80萬年薪 可觀原始股(注意不是期權(quán),是原始股),就算這樣也難以找到合適的區(qū)塊鏈工程師。想當(dāng)年人工智能工程師也沒這樣吧!由此可見,區(qū)塊鏈的技術(shù)職位是多么搶手。造成這種情況的主要原因是區(qū)塊鏈的理念剛剛誕生沒幾年,而且涉及到的技術(shù)過于龐雜,例如需要熟悉相關(guān)的編程語言、底層通信協(xié)議、操作系統(tǒng)原理、加密技術(shù)等,培訓(xùn)領(lǐng)域很難在短時(shí)間內(nèi)培養(yǎng)出合格的人才,而市場(chǎng)上的人才積累又不多,所以造成了區(qū)塊鏈人才過于稀缺。 隨著區(qū)塊鏈的升溫和人才的高度稀缺,不管是想找工作的還是想升職加薪的,都在躍躍欲試,想要分區(qū)塊鏈的一杯羹。不過話有說回來,光想是沒用的。如果你不會(huì)區(qū)塊鏈技術(shù),就只能看著別人掙錢了,或者幻想著美好的未來,不過一覺醒來發(fā)現(xiàn)只是夢(mèng)一場(chǎng)。與其光做夢(mèng),不如從現(xiàn)在開始學(xué)習(xí)區(qū)塊鏈技術(shù)。技術(shù)搞定了,錢不是問題,夢(mèng)想也會(huì)變成現(xiàn)實(shí)。 作者在博客和公眾號(hào)(搜索區(qū)塊鏈技術(shù)棧既可關(guān)注)上發(fā)布了很多與區(qū)塊鏈開發(fā)、以太坊開發(fā)相關(guān)的文章,經(jīng)常收到一些讀者的E-mail或微信信息,咨詢到底如何學(xué)習(xí)區(qū)塊鏈技術(shù),因?yàn)閰^(qū)塊鏈技術(shù)過于龐雜,里面涉及到的技術(shù)非常多,所以讓很多想進(jìn)入?yún)^(qū)塊鏈領(lǐng)域的程序員感到迷茫。其實(shí)區(qū)塊鏈技術(shù)主要分為應(yīng)用層(以DApp、智能合約為主)和底層(主要是通信協(xié)議、加密算法等)兩部分。大多數(shù)程序員會(huì)從事應(yīng)用層的開發(fā),少部分程序員會(huì)從事區(qū)塊鏈的底層開發(fā)。這兩個(gè)層級(jí)用到的技術(shù)差別很大。例如,應(yīng)用層會(huì)用到JavaScript、Python等編程語言以及Solidity等智能合約語言,而底層會(huì)用到C 、Go語言以及通信協(xié)議、加密算法等。所以讀者在進(jìn)入?yún)^(qū)塊鏈領(lǐng)域之前,先要想好要進(jìn)入哪一個(gè)層級(jí)。 為了解決程序員對(duì)區(qū)塊鏈技術(shù)感到迷茫這一問題,我決定編寫一本探索區(qū)塊鏈和以太坊技術(shù)、指導(dǎo)開發(fā)的書。這本書屬于應(yīng)用級(jí)別,如果讀者選擇了區(qū)塊鏈應(yīng)用開發(fā),那么本書正好可以滿足這部分讀者的需求。 為什么要選擇以太坊作為區(qū)塊鏈的學(xué)習(xí)載體呢?因?yàn)橐蕴淮砹藚^(qū)塊鏈2.0,而比特幣代表了區(qū)塊鏈1.0。區(qū)塊鏈2.0和區(qū)塊鏈1.0的主要區(qū)別就是擴(kuò)展性。由于以太坊支持用Solidity語言開發(fā)智能合約(一種運(yùn)行在以太坊網(wǎng)絡(luò)上的程序),這也讓以太坊擁有了無限擴(kuò)展性,同時(shí)也降低了使用以太坊的難度。 本書講解了區(qū)塊鏈和以太坊的核心理論和基本概念,并深入講解幾個(gè)與以太坊相關(guān)的技術(shù),包括geth、Web3.js、Solidity語言等。同時(shí)提供了兩個(gè)真實(shí)的實(shí)戰(zhàn)案例,以便讓讀者更好地理解如何編寫基于以太坊的應(yīng)用。相信讀者通過本書的學(xué)習(xí)可以輕松快速地學(xué)會(huì)以太坊和DApp開發(fā)。 本書是我將多年軟件開發(fā)和培訓(xùn)授課經(jīng)驗(yàn)應(yīng)用于以太坊技術(shù)課程方面的最新實(shí)踐。本書旨在以通俗易懂、隨學(xué)隨練、分秒有進(jìn)的方式,使讀者真正進(jìn)入?yún)^(qū)塊鏈技術(shù)的殿堂。 本書的很多知識(shí)點(diǎn)及案例都配備了專門錄制的微視頻,以期能夠讓讀者更方便快捷地理解與掌握相關(guān)的知識(shí)和開發(fā)操作。本書配備了全面的學(xué)習(xí)及技術(shù)支持資源。掃描圖書中的相關(guān)二維碼,可獲得相關(guān)學(xué)習(xí)視頻資源、習(xí)題或練習(xí)資源、代碼資源、相關(guān)實(shí)驗(yàn)軟件資源、技術(shù)支持資源,所有資源均會(huì)根據(jù)情況及時(shí)更新。當(dāng)然,對(duì)于本書讀者,等待您的,還有更多驚喜。 超級(jí)贈(zèng)送資源: 本書配備了超級(jí)的學(xué)習(xí)資源。除本書的視頻課程外, l 本書的視頻課程 l 價(jià)值698元的JavaScript視頻課程(絕非讓人看半截就要付費(fèi)的那種) l 本書相關(guān)實(shí)驗(yàn)軟件 l 作者一對(duì)一問答 l 本書案例代碼 掃描下面的二維碼,可通過指導(dǎo)獲取以上資源。●歐瑞科技創(chuàng)始人&CEO,寧哥教育創(chuàng)始人&教學(xué)總監(jiān) ●51CTO學(xué)院金牌講師(已錄制超過1000小時(shí)的視頻課程), ●51CTO、CSDN、CNBLOG博客專家。 ●超過15年的企業(yè)內(nèi)訓(xùn)經(jīng)驗(yàn)和開發(fā)實(shí)戰(zhàn)經(jīng)驗(yàn),曾任國內(nèi)著名軟件公司項(xiàng)目經(jīng)理,●目前主要從事區(qū)塊鏈、比特幣、人工智能、大數(shù)據(jù)、Python、JavaScript、Java、C 、編譯器等技術(shù)的研究和開發(fā),現(xiàn)在正在帶領(lǐng)團(tuán)隊(duì)開發(fā)支持區(qū)塊鏈的跨平臺(tái)開發(fā)系統(tǒng)。 ●曾出版超過30多本開發(fā)技術(shù)暢銷書。 ●深厚的一線項(xiàng)目開發(fā)功力加上多年的培訓(xùn)講師經(jīng)歷,成店堂了李寧老師風(fēng)趣幽默,條理清晰、通俗易懂、深入淺出、實(shí)戰(zhàn)性強(qiáng)的授課特點(diǎn)。他的課程,經(jīng)常能夠讓學(xué)生舉一反三,發(fā)散學(xué)生的思維,并指引學(xué)生發(fā)掘適合自己的學(xué)習(xí)方法。 前言 第1章 區(qū)塊鏈的基本概念與應(yīng)用場(chǎng)景 1.1 基本概念 1 1.1.1 去中心化應(yīng)用(DApp) 1 1.1.2 DApp的內(nèi)部貨幣 2 1.1.3 比特幣 2 1.1.4 工作量證明(PoW) 3 1.1.5 股權(quán)證明(PoS) 4 1.1.6 51%攻擊 4 1.1.7 以太坊 4 1.1.8 超級(jí)賬本項(xiàng)目 5 1.2 區(qū)塊鏈的應(yīng)用場(chǎng)景 5 1.2.1 金融領(lǐng)域 6 1.2.2 征信管理 7 1.2.3 資源共享 7 1.2.4 物聯(lián)網(wǎng) 8 1.2.5 其他領(lǐng)域 8 1.3 小結(jié) 9 第2章 創(chuàng)建第一個(gè)區(qū)塊鏈 2.1 以太坊(Ethereum)開發(fā)環(huán)境搭建 10 2.2 使用geth命令創(chuàng)建以太坊賬戶 13 2.3 刪除以太坊賬戶 15 2.4 geth JavaScript控制臺(tái) 16 2.5 建立私有區(qū)塊鏈與挖礦 18 2.6 小結(jié) 21 第3章 智能合約基礎(chǔ) 3.1 基礎(chǔ)知識(shí) 22 3.1.1 Solidity語言概述 23 3.1.2 用Solidity語言開發(fā)智能合約 23 3.1.3 使用Remix運(yùn)行智能合約 24 3.2 編寫和測(cè)試智能合約 27 3.2.1 安裝本地Remix環(huán)境(Windows、Mac OS X和Linux) 27 3.2.2 安裝testrpc 28 3.2.3 使用testrpc測(cè)試智能合約 29 3.2.4 Intellij IDEA Solidity插件 33 3.2.5 將Solidity編譯工具與Intellij IDEA集成 36 3.3 其他智能合約IDE 38 3.3.1 Visual Studio擴(kuò)展 38 3.3.2 Visual Studio Code擴(kuò)展 40 3.3.3 Sublime Text插件 42 3.4 Solidity工具 42 3.4.1 Solidity REPL 42 3.4.2 solgraph 43 3.5 小結(jié) 45 第4章 以太坊節(jié)點(diǎn)與挖礦 4.1 什么是Web3.js 46 4.2 安裝Web3.js 47 4.3 連接testrpc節(jié)點(diǎn) 48 4.4 連接geth節(jié)點(diǎn) 49 4.5 HttpProvider與IPCProvider 51 4.6 發(fā)布與調(diào)用智能合約 53 4.6.1 編譯智能合約 53 4.6.2 創(chuàng)建以太坊賬戶 54 4.6.3 用Web3.js API發(fā)布智能合約 54 4.6.4 挖礦與掙錢 56 4.6.5 重新發(fā)布智能合約 57 4.7 自動(dòng)編譯智能合約 60 4.8 小結(jié) 64 第5章 以太坊中的Web技術(shù) 5.1 Node.js入門 65 5.1.1 使用Node.js REPL 66 5.1.2 執(zhí)行JavaScript腳本文件 66 5.1.3 Node.js IDE(WebStorm) 67 5.1.4 在WebStorm中編寫Node.js程序 68 5.2 Express入門 70 5.2.1 安裝express模塊 70 5.2.2 使用express模塊 72 5.2.3 用WebStorm創(chuàng)建Express工程 74 5.2.4 為Express工程添加路由 76 5.2.5 使用Handlebars模板 78 5.3 通過Web方式調(diào)用智能合約 78 5.3.1 在Web頁面中調(diào)用智能合約 79 5.3.2 在服務(wù)端(Node.js)調(diào)用智能合約 84 5.3.3 通過AJAX方式異步調(diào)用智能合約 88 5.4 小結(jié) 90 第6章 Web3.js API詳解 6.1 基礎(chǔ)知識(shí) 91 6.1.1 Web3.js簡介 91 6.1.2 Web3.js開發(fā)環(huán)境搭建 92 6.2 Web3 API 93 6.2.1 設(shè)置和獲取Provider 93 6.2.2 重置狀態(tài) 94 6.2.3 獲取字符串的SHA3哈希碼 94 6.2.4 將值轉(zhuǎn)換為十六進(jìn)制字符串 95 6.2.5 十六進(jìn)制與ASCII互相轉(zhuǎn)換 97 6.2.6 十六進(jìn)制與十進(jìn)制互相轉(zhuǎn)換 98 6.2.7 將數(shù)值或十六進(jìn)制字符串轉(zhuǎn)換為BigNumber 98 6.2.8 使用BigNumber 99 6.2.9 單位轉(zhuǎn)換 101 6.2.10 核對(duì)賬戶地址是否有效 103 6.3 Web3.eth API 104 6.3.1 獲取和設(shè)置默認(rèn)賬戶 104 6.3.2 獲取和設(shè)置默認(rèn)區(qū)塊 104 6.3.3 獲取區(qū)塊的同步狀態(tài) 105 6.3.4 捕捉區(qū)塊同步狀態(tài) 106 6.3.5 獲取礦工地址 107 6.3.6 檢測(cè)當(dāng)前節(jié)點(diǎn)是否在挖礦 108 6.3.7 獲取以太坊燃料(gas)的平均價(jià)格 109 6.3.8 獲取以太坊節(jié)點(diǎn)中的賬號(hào)地址 109 6.3.9 獲取區(qū)塊編號(hào) 110 6.3.10 獲取賬戶的余額 112 6.3.11 獲取地址某一個(gè)位置存儲(chǔ)的值 113 6.3.12 獲取指定地址中的代碼 113 6.3.13 獲取區(qū)塊信息 114 6.3.14 獲取區(qū)塊中包含的交易數(shù) 116 6.3.15 獲取交易數(shù)據(jù) 117 6.3.16 獲取交易憑證 118 6.3.17 獲取賬戶發(fā)送的交易數(shù) 120 6.3.18 向以太坊網(wǎng)絡(luò)發(fā)送交易 120 6.3.19 發(fā)送簽名交易 122 6.3.20 用賬戶對(duì)數(shù)據(jù)進(jìn)行簽名 123 6.3.21 執(zhí)行以太坊虛擬機(jī)中的代碼 124 6.3.22 預(yù)估交易消耗的gas數(shù) 124 6.3.23 如何設(shè)置gas、gasLimit和gasPrice 125 6.4 小結(jié) 128 第7章 Solidity語言詳解(一) 7.1 Solidity語言簡介 129 7.2 Solidity語言基礎(chǔ) 130 7.2.1 編譯器版本指令(pragma) 130 7.2.2 導(dǎo)入其他Solidity源代碼 文件(import) 132 7.2.3 用Web3.js API發(fā)布多個(gè)智能合約 136 7.2.4 用Web3.js API編譯多個(gè)智能合約 140 7.2.5 注釋 142 7.3 值類型 142 7.3.1 布爾類型(bool) 143 7.3.2 整數(shù)類型(int/uint) 144 7.3.3 浮點(diǎn)數(shù)(fixed) 145 7.3.4 地址類型(address) 145 7.3.5 獲取余額(balance)與轉(zhuǎn)賬(transfer) 146 7.3.6 另一種轉(zhuǎn)賬的方式(send) 149 7.3.7 固定長度的字節(jié)序列 150 7.4 引用類型 152 7.4.1 數(shù)據(jù)存儲(chǔ)位置 152 7.4.2 可變長度的字節(jié)序列(bytes) 153 7.4.3 字符串(string)類型 154 7.4.4 使用bytes連接字符串 156 7.4.5 使用第三方庫連接字符串 158 7.4.6 枚舉類型(enum) 159 7.4.7 函數(shù)類型(function) 161 7.4.8 數(shù)組 164 7.4.9 結(jié)構(gòu)體(struct) 168 7.5 映射(mapping) 170 7.6 小結(jié) 172 第8章 Solidity語言詳解(二) 8.1 表達(dá)式與控制結(jié)構(gòu) 173 8.1.1 函數(shù)參數(shù)與函數(shù)返回值 173 8.1.2 控制結(jié)構(gòu) 176 8.1.3 調(diào)用其他合約中的函數(shù) 179 8.1.4 函數(shù)的命名參數(shù) 181 8.1.5 通過new關(guān)鍵字創(chuàng)建合約對(duì)象 182 8.1.6 函數(shù)多返回值解構(gòu)和元組賦值 184 8.1.7 變量聲明和作用域 185 8.1.8 錯(cuò)誤處理 186 8.2 計(jì)量單位與全局變量 187 8.2.1 以太計(jì)量單位 187 8.2.2 時(shí)間計(jì)量單位 189 8.2.3 block變量 190 8.2.4 msg變量 191 8.2.5 其他全局變量和函數(shù) 193 8.3 智能合約 194 8.3.1 函數(shù)和狀態(tài)變量訪問權(quán)限 194 8.3.2 getter函數(shù) 195 8.3.3 自定義修飾符(modifier) 197 8.3.4 常量 201 8.3.5 view函數(shù) 202 8.3.6 pure函數(shù) 204 8.3.7 fallback函數(shù) 205 8.3.8 函數(shù)重載 206 8.3.9 事件 207 8.3.10 合約繼承 210 8.3.11 合約構(gòu)造函數(shù) 211 8.3.12 抽象合約 211 8.3.13 接口 213 8.4 小結(jié) 214 第9章 Truffle與Ganache實(shí)戰(zhàn) 9.1 Truffle基礎(chǔ) 215 9.1.1 安裝Truffle 215 9.1.2 創(chuàng)建Truffle工程 216 9.1.3 Truffle工程的結(jié)構(gòu) 216 9.1.4 在Truffle工程中創(chuàng)建自己的合約 217 9.1.5 編譯合約 218 9.1.6 部署合約 219 9.1.7 測(cè)試合約 219 9.2 以太坊客戶端 220 9.2.1 Truffle內(nèi)置以太坊客戶端 220 9.2.2 Ganache概述 221 9.2.3 安裝Ganache 221 9.2.4 用Truffle在Ganache上發(fā)布合約 222 9.3 Truffle高級(jí)應(yīng)用 224 9.3.1 用Solidity編寫測(cè)試代碼 224 9.3.2 用JavaScript編寫測(cè)試代碼 227 9.3.3 捕捉事件和異常 228 9.3.4 使用truffle-contract API調(diào)用 合約函數(shù) 231 9.3.5 寫Truffle擴(kuò)展腳本 232 9.4 小結(jié) 234 第10章 項(xiàng)目實(shí)戰(zhàn):在以太坊上發(fā)行數(shù)字資產(chǎn) 10.1 數(shù)字資產(chǎn)原理 236 10.2 代幣合約 239 10.2.1 ERC20 Token接口 239 10.2.2 編寫代幣合約 242 10.2.3 測(cè)試代幣合約中的函數(shù) 245 10.2.4 測(cè)試代幣合約中的事件 247 10.3 在以太坊上發(fā)布和使用代幣 248 10.3.1 如何將代幣合約部署在以太坊上 249 10.3.2 安裝MetaMask擴(kuò)展 250 10.3.3 創(chuàng)建以太坊賬戶 251 10.3.4 免費(fèi)申請(qǐng)無限量的以太(ether) 254 10.3.5 在以太坊上部署代幣合約 257 10.3.6 代幣交易 260 10.4 用Web3.js API完成Titans幣的轉(zhuǎn)賬 265 10.5 以太幣和以太坊代幣的區(qū)別 269 10.6 互聯(lián)網(wǎng)的未來:DApp 270 10.7 小結(jié) 271 第11章 項(xiàng)目實(shí)戰(zhàn):支持以太坊的小程序版云筆記 11.1 項(xiàng)目功能概述 272 11.2 微信小程序基礎(chǔ) 273 11.2.1 搭建小程序開發(fā)環(huán)境 273 11.2.2 創(chuàng)建小程序項(xiàng)目 275 11.3 云筆記智能合約 277 11.3.1 編寫和測(cè)試云筆記智能合約 277 11.3.2 將CloudNoteService合約部署到以太坊網(wǎng)絡(luò)上 279 11.4 用Note.js和Express開發(fā)小程序服務(wù)端程序 281 11.4.1 編寫調(diào)用CloudNoteService合約函數(shù)的Database類 281 11.4.2 測(cè)試Database類 289 11.4.3 為服務(wù)添加集中式存儲(chǔ)功能 291 11.4.4 添加為小程序服務(wù)端路由 294 11.5 開發(fā)云筆記客戶端 296 11.5.1 設(shè)計(jì)云筆記主頁面 296 11.5.2 實(shí)現(xiàn)云筆記主頁面的邏輯代碼 298 11.5.3 設(shè)計(jì)添加云筆記頁面 300 11.5.4 實(shí)現(xiàn)添加云筆記頁面的邏輯代碼 302 11.5.5 設(shè)計(jì)云筆記列表頁面 304 11.5.6 實(shí)現(xiàn)云筆記列表頁面的邏輯代碼 305 11.5.7 設(shè)計(jì)云筆記編輯頁面 307 11.5.8 實(shí)現(xiàn)云筆記編輯頁面的邏輯代碼 309 11.6 小結(jié) 310
你還可能感興趣
我要評(píng)論
|