第一行代碼——以太坊
-
【作 者】李寧 編著
【I S B N 】978-7-5170-6797-9
【責任編輯】周春元
【適用讀者群】科技
【出版時間】2018-08-01
【開 本】16開
【裝幀信息】平裝(光膜)
【版 次】第1版第1次印刷
【頁 數】320
【千字數】463
【印 張】20
【定 價】¥68
【叢 書】暫無分類
【備注信息】
簡介
本書特色
前言
章節列表
精彩閱讀
下載資源
相關圖書
本書是一本區塊鏈開發技術圖書。本書立足實戰,深入淺出地從零開始講解以太坊及相關技術,包括區塊鏈的基礎概念和理論、利用以太坊創建私有區塊鏈、編寫智能合約、挖礦、Web3.js API、Solidity語言、Truffle框架、Ganache測試節點等技術。本書力求通俗易懂,實例豐富,步驟詳細。為了幫助讀者鞏固基礎知識,本書最后還配有兩個綜合案例分別實現以太坊在金融領域(發布代幣)和非金融領域(DApp)的應用。
本書適合于區塊鏈技術的學習者及從業者使用。
當今最火的技術是什么?區塊鏈、區塊鏈、區塊鏈,重要的事情說3遍。現在區塊鏈的火爆程度已經全面超過了人工智能。在硅谷,一個區塊鏈工程師有16家公司在盯著。國內某區塊鏈創業公司給出的待遇是“80萬年薪+可觀原始股(注意不是期權,是原始股)”,就算這樣也難以找到合適的區塊鏈工程師。想當年人工智能工程師也沒這樣吧!由此可見,區塊鏈的技術職位是多么搶手。造成這種情況的主要原因是區塊鏈的理念剛剛誕生沒幾年,而且涉及到的技術過于龐雜,例如需要熟悉相關的編程語言、底層通信協議、操作系統原理、加密技術等,培訓領域很難在短時間內培養出合格的人才,而市場上的人才積累又不多,所以造成了區塊鏈人才過于稀缺。
隨著區塊鏈的升溫和人才的高度稀缺,不管是想找工作的還是想升職加薪的,都在躍躍欲試,想要分區塊鏈的一杯羹。不過話有說回來,光想是沒用的。如果你不會區塊鏈技術,就只能看著別人掙錢了,或者幻想著美好的未來,不過一覺醒來發現只是夢一場。與其光做夢,不如從現在開始學習區塊鏈技術。技術搞定了,錢不是問題,夢想也會變成現實。
作者在博客和公眾號(搜索“區塊鏈技術棧”既可關注)上發布了很多與區塊鏈、以太坊相關的文章,經常收到一些讀者的E-mail或微信信息,咨詢到底如何學習區塊鏈技術,因為區塊鏈技術過于龐雜,里面涉及到的技術非常多,所以讓很多想進入區塊鏈領域的程序員感到迷茫。其實區塊鏈技術主要分為應用層(以DApp、智能合約為主)和底層(主要是通信協議、加密算法等)兩部分。大多數程序員會從事應用層的開發,少部分程序員會從事區塊鏈的底層開發。這兩個層級用到的技術差別很大。例如,應用層會用到JavaScript、Python等編程語言以及Solidity等智能合約語言,而底層會用到C++、Go語言以及通信協議、加密算法等。所以讀者在進入區塊鏈領域之前,先要想好要進入哪一個層級。
為了解決程序員對區塊鏈技術感到迷茫這一問題,我決定編寫一本探索區塊鏈和以太坊技術、指導開發的書。這本書屬于應用級別,如果讀者選擇了區塊鏈應用開發,那么本書正好可以滿足這部分讀者的需求。
為什么要選擇以太坊作為區塊鏈的學習載體呢?因為以太坊代表了區塊鏈2.0,而比特幣代表了區塊鏈1.0。區塊鏈2.0和區塊鏈1.0的主要區別就是擴展性。由于以太坊支持用Solidity語言開發智能合約(一種運行在以太坊網絡上的程序),這也讓以太坊擁有了無限擴展性,同時也降低了使用以太坊的難度。
本書講解了區塊鏈和以太坊的核心理論和基本概念,并深入講解幾個與以太坊相關的技術,包括geth、Web3.js、Solidity語言等。同時提供了兩個真實的實戰案例,以便讓讀者更好地理解如何編寫基于以太坊的應用。相信讀者通過本書的學習可以輕松快速地學會以太坊和DApp開發。
本書是我將多年軟件開發和培訓授課經驗應用于以太坊技術課程方面的最新實踐。本書旨在以通俗易懂、隨學隨練、分秒有進的方式,使讀者真正進入區塊鏈技術的殿堂。
本書的很多知識點及案例都配備了專門錄制的微視頻,以期能夠讓讀者更方便快捷地理解與掌握相關的知識和開發操作。本書配備了全面的學習及技術支持資源。掃描圖書中的相關二維碼,可獲得相關學習視頻資源、習題或練習資源、代碼資源、相關實驗軟件資源、技術支持資源,所有資源均會根據情況及時更新。當然,對于本書讀者,等待您的,還有更多驚喜。
超級贈送資源:
本書配備了超級的學習資源。除本書的視頻課程外,李寧老師還把與本書緊密相關的價值698元的JavaSctipt完整視頻課程免費開放給本書讀者,并且享有與李寧老師一對一交流的機會,還有不定期的免費驚喜。本書資源清單如下:
本書的視頻課程
價值698元的JavaScript視頻課程(絕非讓人看半截就要付費的那種)
本書相關實驗軟件
作者一對一問答
本書案例代碼
掃描下面的二維碼,可通過指導獲取以上資源。
第1章 區塊鏈的基本概念與應用場景
1.1 基本概念 1
1.1.1 去中心化應用(DApp) 1
1.1.2 DApp的內部貨幣 2
1.1.3 比特幣 2
1.1.4 工作量證明(PoW) 3
1.1.5 股權證明(PoS) 4
1.1.6 51%攻擊 4
1.1.7 以太坊 4
1.1.8 超級賬本項目 5
1.2 區塊鏈的應用場景 5
1.2.1 金融領域 6
1.2.2 征信管理 7
1.2.3 資源共享 7
1.2.4 物聯網 8
1.2.5 其他領域 8
1.3 小結 9
第2章 創建第一個區塊鏈
2.1 以太坊(Ethereum)開發環境搭建 10
2.2 使用geth命令創建以太坊賬戶 13
2.3 刪除以太坊賬戶 15
2.4 geth JavaScript控制臺 16
2.5 建立私有區塊鏈與挖礦 18
2.6 小結 21
第3章 智能合約基礎
3.1 基礎知識 22
3.1.1 Solidity語言概述 23
3.1.2 用Solidity語言開發智能合約 23
3.1.3 使用Remix運行智能合約 24
3.2 編寫和測試智能合約 27
3.2.1 安裝本地Remix環境(Windows、
Mac OS X和Linux) 27
3.2.2 安裝testrpc 28
3.2.3 使用testrpc測試智能合約 29
3.2.4 Intellij IDEA Solidity插件 33
3.2.5 將Solidity編譯工具與Intellij IDEA
集成 36
3.3 其他智能合約IDE 38
3.3.1 Visual Studio擴展 38
3.3.2 Visual Studio Code擴展 40
3.3.3 Sublime Text插件 42
3.4 Solidity工具 42
3.4.1 Solidity REPL 42
3.4.2 solgraph 43
3.5 小結 45
第4章 以太坊節點與挖礦
4.1 什么是Web3.js 46
4.2 安裝Web3.js 47
4.3 連接testrpc節點 48
4.4 連接geth節點 49
4.5 HttpProvider與IPCProvider 51
4.6 發布與調用智能合約 53
4.6.1 編譯智能合約 53
4.6.2 創建以太坊賬戶 54
4.6.3 用Web3.js API發布智能合約 54
4.6.4 挖礦與掙錢 56
4.6.5 重新發布智能合約 57
4.7 自動編譯智能合約 60
4.8 小結 64
第5章 以太坊中的Web技術
5.1 Node.js入門 65
5.1.1 使用Node.js REPL 66
5.1.2 執行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創建Express工程 74
5.2.4 為Express工程添加路由 76
5.2.5 使用Handlebars模板 78
5.3 通過Web方式調用智能合約 78
5.3.1 在Web頁面中調用智能合約 79
5.3.2 在服務端(Node.js)調用智能合約 84
5.3.3 通過AJAX方式異步調用智能合約 88
5.4 小結 90
第6章 Web3.js API詳解
6.1 基礎知識 91
6.1.1 Web3.js簡介 91
6.1.2 Web3.js開發環境搭建 92
6.2 Web3 API 93
6.2.1 設置和獲取Provider 93
6.2.2 重置狀態 94
6.2.3 獲取字符串的SHA3哈希碼 94
6.2.4 將值轉換為十六進制字符串 95
6.2.5 十六進制與ASCII互相轉換 97
6.2.6 十六進制與十進制互相轉換 98
6.2.7 將數值或十六進制字符串
轉換為BigNumber 98
6.2.8 使用BigNumber 99
6.2.9 單位轉換 101
6.2.10 核對賬戶地址是否有效 103
6.3 Web3.eth API 104
6.3.1 獲取和設置默認賬戶 104
6.3.2 獲取和設置默認區塊 104
6.3.3 獲取區塊的同步狀態 105
6.3.4 捕捉區塊同步狀態 106
6.3.5 獲取礦工地址 107
6.3.6 檢測當前節點是否在挖礦 108
6.3.7 獲取以太坊燃料(gas)的
平均價格 109
6.3.8 獲取以太坊節點中的賬號地址 109
6.3.9 獲取區塊編號 110
6.3.10 獲取賬戶的余額 112
6.3.11 獲取地址某一個位置存儲的值 113
6.3.12 獲取指定地址中的代碼 113
6.3.13 獲取區塊信息 114
6.3.14 獲取區塊中包含的交易數 116
6.3.15 獲取交易數據 117
6.3.16 獲取交易憑證 118
6.3.17 獲取賬戶發送的交易數 120
6.3.18 向以太坊網絡發送交易 120
6.3.19 發送簽名交易 122
6.3.20 用賬戶對數據進行簽名 123
6.3.21 執行以太坊虛擬機中的代碼 124
6.3.22 預估交易消耗的gas數 124
6.3.23 如何設置gas、gasLimit和gasPrice 125
6.4 小結 128
第7章 Solidity語言詳解(一)
7.1 Solidity語言簡介 129
7.2 Solidity語言基礎 130
7.2.1 編譯器版本指令(pragma) 130
7.2.2 導入其他Solidity源代碼
文件(import) 132
7.2.3 用Web3.js API發布多個智能合約 136
7.2.4 用Web3.js API編譯多個智能合約 140
7.2.5 注釋 142
7.3 值類型 142
7.3.1 布爾類型(bool) 143
7.3.2 整數類型(int/uint) 144
7.3.3 浮點數(fixed) 145
7.3.4 地址類型(address) 145
7.3.5 獲取余額(balance)與
轉賬(transfer) 146
7.3.6 另一種轉賬的方式(send) 149
7.3.7 固定長度的字節序列 150
7.4 引用類型 152
7.4.1 數據存儲位置 152
7.4.2 可變長度的字節序列(bytes) 153
7.4.3 字符串(string)類型 154
7.4.4 使用bytes連接字符串 156
7.4.5 使用第三方庫連接字符串 158
7.4.6 枚舉類型(enum) 159
7.4.7 函數類型(function) 161
7.4.8 數組 164
7.4.9 結構體(struct) 168
7.5 映射(mapping) 170
7.6 小結 172
第8章 Solidity語言詳解(二)
8.1 表達式與控制結構 173
8.1.1 函數參數與函數返回值 173
8.1.2 控制結構 176
8.1.3 調用其他合約中的函數 179
8.1.4 函數的命名參數 181
8.1.5 通過new關鍵字創建合約對象 182
8.1.6 函數多返回值解構和元組賦值 184
8.1.7 變量聲明和作用域 185
8.1.8 錯誤處理 186
8.2 計量單位與全局變量 187
8.2.1 以太計量單位 187
8.2.2 時間計量單位 189
8.2.3 block變量 190
8.2.4 msg變量 191
8.2.5 其他全局變量和函數 193
8.3 智能合約 194
8.3.1 函數和狀態變量訪問權限 194
8.3.2 getter函數 195
8.3.3 自定義修飾符(modifier) 197
8.3.4 常量 201
8.3.5 view函數 202
8.3.6 pure函數 204
8.3.7 fallback函數 205
8.3.8 函數重載 206
8.3.9 事件 207
8.3.10 合約繼承 210
8.3.11 合約構造函數 211
8.3.12 抽象合約 211
8.3.13 接口 213
8.4 小結 214
第9章 Truffle與Ganache實戰
9.1 Truffle基礎 215
9.1.1 安裝Truffle 215
9.1.2 創建Truffle工程 216
9.1.3 Truffle工程的結構 216
9.1.4 在Truffle工程中創建自己的合約 217
9.1.5 編譯合約 218
9.1.6 部署合約 219
9.1.7 測試合約 219
9.2 以太坊客戶端 220
9.2.1 Truffle內置以太坊客戶端 220
9.2.2 Ganache概述 221
9.2.3 安裝Ganache 221
9.2.4 用Truffle在Ganache上發布合約 222
9.3 Truffle高級應用 224
9.3.1 用Solidity編寫測試代碼 224
9.3.2 用JavaScript編寫測試代碼 227
9.3.3 捕捉事件和異常 228
9.3.4 使用truffle-contract API調用
合約函數 231
9.3.5 寫Truffle擴展腳本 232
9.4 小結 234
第10章 項目實戰:在以太坊上發行數字資產
10.1 數字資產原理 236
10.2 代幣合約 239
10.2.1 ERC20 Token接口 239
10.2.2 編寫代幣合約 242
10.2.3 測試代幣合約中的函數 245
10.2.4 測試代幣合約中的事件 247
10.3 在以太坊上發布和使用代幣 248
10.3.1 如何將代幣合約部署在以太坊上 249
10.3.2 安裝MetaMask擴展 250
10.3.3 創建以太坊賬戶 251
10.3.4 免費申請無限量的以太(ether) 254
10.3.5 在以太坊上部署代幣合約 257
10.3.6 代幣交易 260
10.4 用Web3.js API完成Titans幣的轉賬 265
10.5 以太幣和以太坊代幣的區別 269
10.6 互聯網的未來:DApp 270
10.7 小結 271
第11章 項目實戰:支持以太坊的小程序版云筆記
11.1 項目功能概述 272
11.2 微信小程序基礎 273
11.2.1 搭建小程序開發環境 273
11.2.2 創建小程序項目 275
11.3 云筆記智能合約 277
11.3.1 編寫和測試云筆記智能合約 277
11.3.2 將CloudNoteService合約部署到
以太坊網絡上 279
11.4 用Note.js和Express開發小程序
服務端程序 281
11.4.1 編寫調用CloudNoteService合約
函數的Database類 281
11.4.2 測試Database類 289
11.4.3 為服務添加集中式存儲功能 291
11.4.4 添加為小程序服務端路由 294
11.5 開發云筆記客戶端 296
11.5.1 設計云筆記主頁面 296
11.5.2 實現云筆記主頁面的邏輯代碼 298
11.5.3 設計添加云筆記頁面 300
11.5.4 實現添加云筆記頁面的邏輯代碼 302
11.5.5 設計云筆記列表頁面 304
11.5.6 實現云筆記列表頁面的邏輯代碼 305
11.5.7 設計云筆記編輯頁面 307
11.5.8 實現云筆記編輯頁面的邏輯代碼 309
11.6 小結 310
- 三峽梯級電站水資源決策支持系統研究與開發 [姚華明 潘紅忠 湯正]
- 農村新型社區移民的社會適應性問題研究 [董洪清 蔡昌艷 馬衍陽 徐學英]
- 第四代系統論:全息系統論—全息系統的存在論、認識論和方法論 [高展 著]
- 海上風電工程專利導航與知識產權風險管理研究 [戚海峰 賈獻林 許丹海 著]
- 湖湘文化與交互藝術的融合創新 [徐英 尹志強 著]
- 海洋工程裝備制造業產業發展研究—以山東省為例 [王連海 馬強 郭俊杰 劉剛]
- 黃河流域非遺衍生品傳播與經濟開發協同發展研究 [畢雪燕 趙爽 著]
- 大學英語信息化教學探索研究 [張強 著]
- 基于診斷與改進制度的高職院校內部治理研究與實踐—以重慶電子工程職業學院為例 [主編 孫衛平 聶強]
- “互聯網+”背景下網絡課程教學團隊建設的關鍵問題研究 [楊帆 李小華 任雅琳 著]
- 光合細菌合成高價值物質的代謝研究 [劉淑麗 著]
- 媒體融合影響下的體育電視傳播與價值開發策略研究——以世界杯/NBA為例 [趙曉琳 著]
- “四步曲”開放型實踐教學活動研究與探索 [岑崗 林雪芬 著]
- 混合式課堂教學改革與實踐—微動教學法 [石鐵峰 石家羽 著]
- “學賽一體化”課程開發研究 [李作聚 著]
- 高職院校軟件類專業“類上班制”人才培養模式研究 [楊智勇 王海洋 著]
- 浮式圓柱型結構物渦激運動特性研究 [孫洪源 李 磊 林海花 著]
- 農產品云倉模式研究—以北京農產品流通物流供應鏈重構為例 [武曉釗 王成林 王春娟 等著]
- 泛家居高質量企業不可或缺的軟實力——數字化營銷篇 [凌遠龍 著]
- 基于慕課模式的課程建設與教學實踐研究 [張廣淵]
- 電子商務設計師考試32小時通關 [主編 薛大龍]
- 電子商務概論 [主編 黎夏克 甘文婷 王靜]
- 電子商務設計師真題精析與命題密卷 [主 編 薛大龍 副主編 程剛]
- 電子商務物流(第二版) [盧棟 周珠]
- 電子商務實務 [主編 孫德彩 盛乃華]
- 商務精英:跨境電商英語必會口語表達 [創想外語研發團隊 編著]
- 電子商務網絡基礎項目化教程 [張六成 孫 航 沈二波 編著]
- 創業哲學 [劉雍 熊建強 著]
- 電子商務與網絡營銷(e-Commerce & e-Marketing) [劉文良 著]
- 英文單詞循環速記手抄本•考研版 [宋德偉 編著]