區塊鏈應用開發指南 : 業務場景剖析與實戰

熊麗兵、董一凡、周小雪

  • 區塊鏈應用開發指南 : 業務場景剖析與實戰-preview-1
  • 區塊鏈應用開發指南 : 業務場景剖析與實戰-preview-2
  • 區塊鏈應用開發指南 : 業務場景剖析與實戰-preview-3
區塊鏈應用開發指南 : 業務場景剖析與實戰-preview-1

買這商品的人也買了...

商品描述

區塊鏈現在仍然是一個新生事物,就像其他所有新生事物一樣,充滿了爭議。但不可否認,它也給逐漸變得穩定的互聯網帶來一股新的活力。《區塊鏈應用開發指南》力圖為區塊鏈從業人員提供一份完整的開發指南。 《區塊鏈應用開發指南》首先從區塊鏈的起源出發,簡單介紹區塊鏈的基本概念、歷史以及區塊鏈底層所使用的技術,如密碼學、零知識證明等。將比特幣作為樣板,簡單介紹了它的歷史和各種設計取捨。 接下來是這本書的重點——區塊鏈應用開發,主要內容包括以太坊工作原理、以太坊智能合約的開發與實踐,等等。 這是一本非常全面的智能合約開發指導書,包含大量的實例代碼以及實戰講解,讓讀者能夠跟隨書本開發出各種基於智能合約的可交互應用。書的最後,還講解瞭如何開發一個簡單的錢包,來完成以太坊賬號的生成、以太坊轉賬、調用合約等功能。

作者簡介

熊麗兵(網絡ID:Tiny熊),北京航空航天大學碩士,登鏈科技創始人、登鏈社區發起人,圖書《精通以太坊智能合約開發》作者。
  

董一凡,河海大學學士,上海笛藝符科技聯合創始人、首席技術官,無退社區特邀專欄作者。
  

周小雪,中國科學技術大學信息安全專業學士,復旦大學碩士。
無退社區聯合創始人,在金融領域有十多年的量化經驗。

目錄大綱

第1章區塊鏈概要 1
1.1 區塊鏈誕生之前1
1.2 區塊鏈的誕生標誌—比特幣 1
1.3 比特幣之後的區塊鏈2
1.3.1 比特幣與區塊鏈的分離 2
1.3.2 智能合約 2
1.4 分佈式系統3
1.5 什麼是區塊鏈 5
1.6 代幣是什麼6
1.7 什麼是區塊6
1.7.1 區塊是怎麼產生的 6
1.7.2 區塊生成時間 7
1.8 區塊鏈的硬分叉8
1.9 區塊鏈的去中心化 8
1.10 區塊鏈的主要種類9
1.10.1 公鏈(public blockchain) 9
1.10.2 私鏈(private blockchain) 10
1.10.3 聯盟鏈(consortium blockchain) 10
1.11 加密貨幣11
1.12 智能合約(smart contract) 12
1.12.1 什麼是智能合約12
1.12.2 智能合約的實現方式12
1.13 區塊鏈應用13
1.13.1 金融服務13
1.13.2 遊戲14
1.13.3 數字資產15
1.13.4 供應鏈管理15
1.13.5 其他15
1.14 比特幣的歷史16
1.14.1 比特幣前傳16
1.14.2 比特幣面世16
1.14.3 比特幣發展中的主要事件18
1.15 比特幣的設計取捨19
1.15.1 區塊鏈19
1.15.2 共識算法19
1.15.3 比特幣中的交易20
1.15.4 比特幣的供應模式21
1.15.5 去中心化與中心化22
1.15.6 可替換性22

第2章密碼學基礎24
2.1 密碼學發展歷史24
2.1.1 密碼學發展的三個階段24
2.1.2 近代密碼學的開端26
2.1.3 區塊鏈去中心化密鑰共享28
2.2 密碼系統31
2.2.1 定義31
2.2.2 對稱加密32
2.2.3 非對稱加密32
2.3 區塊鏈常用密碼學知識33
2.3.1 Hash(哈希)算法33
2.3.2 RSA算法36
2.3.3 默克爾樹36
2.3.4 數字簽名39
2.3.5 零知識證明和Zcash 40
2.4 加密貨幣41
2.4.1 什麼是加密貨幣41
2.4.2 熱門加密貨幣42
2.4.3 運作方式43
2.4.4 加密貨幣的安全性44
2.5 加密經濟學45
2.5.1 貨幣的功能45
2.5.2 貨幣的屬性46
2.5.3 貨幣的種類47
2.5.4 Fiat貨幣47
2.5.5 比特幣有貨幣屬性嗎48
2.5.6 加密貨幣經濟的未來49
2.6 比特幣中的密碼學49
2.6.1 比特幣中的哈希處理50
2.6.2 比特幣中的公鑰加密50
2.6.3 比特幣中的錢包和數字簽名52

第3章零知識證明54
3.1 拋磚引玉:初識零知識證明56
3.1.1 為什麼會有零知識證明?56
3.1.2 簡述零知識證明在區塊鏈中的應用57
3.2 零知識證明使用場景案例59
3.2.1 場景一:萬聖節糖果59
3.2.2 場景二:洞穴60
3.2.3 場景三:數獨挑戰61
3.2.4 場景四:一個“真實世界中”的案例67
3.3 零知識證明的應用發展74
3.3.1 區塊鏈擴容的挑戰75
3.3.2 ZK Sync的承諾:免信任、保密、快速77
3.3.3 RedShift:透明的通用SNARK 81
3.4 libsnark開源實踐簡介81
3.5 術語介紹88

第4章進入以太坊世界90
4.1 以太坊概述90
4.2 智能合約91
4.3 賬戶93
4.4 以太幣的單位95
4.5 以太坊虛擬機(EVM) 95
4.6 以太坊客戶端97
4.6.1 geth安裝97
4.6.2 geth使用97
4.7 以太坊錢包98
4.8 以太坊交易100
4.8.1 價值傳遞100
4.8.2 創建智能合約101
4.8.3 調用合約方法101
4.9 以太坊網絡102
4.9.1 主網網絡(Mainnet)102
4.9.2 測試網絡(Testnet)102
4.9.3 私有網絡、開發者模式103
4.9.4 模擬區塊鍊網絡103
4.10 以太坊歷史回顧104
4.10.1 奧林匹克(Olympic)104
4.10.2 邊疆(Frontier) 104
4.10.3 家園(Homestead)104
4.10.4 DAO分叉105
4.10.5 拜占庭(Byzantium) 106
4.10.6 君士坦丁堡(Constantinople) 106
4.10.7 伊斯坦布爾(Istanbul) 107
4.10.8 以太坊2.0 107

第5章探索智能合約109
5.1 Remix IDE109
5.2 MetaMask110
5.2.1 安裝MetaMask 110
5.2.2 配置MetaMask賬號110
5.2.3 為賬號充值以太幣111
5.3 合約編寫113
5.4 合約編譯114
5.5 合約部署及運行115
5.5.1 部署JavaScript VM 115
5.5.2 部署到以太坊網絡117
5.6 合約內容119
5.6.1 編譯器版本聲明119
5.6.2 定義合約119
5.6.3 狀態變量120
5.6.4 合約函數120

第6章Solidity語言基礎21
6.1 Solidity數據類型121
6.1.1 值類型122
6.1.2 整型122
6.1.3 地址類型125
6.1.4 合約類型128
6.1.5 函數類型130
6.1.6 引用類型132
6.1.7 數組134
6.1.8 映射139
6.1.9 結構體140
6.2 合約141
6.2.1 可見性142
6.2.2 構造函數143
6.2.3 使用new創建合約143
6.2.4 constant狀態常量144
6.2.5 immutable不可變量145
6.2.6 視圖函數146
6.2.7 純函數146
6.2.8 訪問器函數(getter) 147
6.2.9 receive函數(接收函數) 149
6.2.10 fallback函數(回退函數) 150
6.2.11 函數修改器151
6.2.12 函數重載(Function Overloading) 155
6.2.13 函數返回多個值156
6.2.14 事件157
6.3 錯誤處理及異常159
6.3.1 錯誤處理函數159
6.3.2 require還是assert? 161
6.3.3 try/catch 162

第7章Solidity進階16
7.1 合約繼承167
7.1.1 多重繼承168
7.1.2 基類構造函數169
7.1.3 抽象合約170
7.1.4 函數重寫(overriding)171
7.2 接口172
7.3 庫174
7.3.1 內嵌庫175
7.3.2 鏈接庫175
7.3.3 Using for 176
7.4 應用程序二進制接口(ABI)178
7.4.1 ABI編碼178
7.4.2 函數選擇器179
7.4.3 參數編碼180
7.4.4 ABI接口描述181
7.5 Solidity全局API 183
7.5.1 區塊和交易屬性API 184
7.5.2 ABI編碼及解碼函數API184
7.6 使用內聯彙編186
7.6.1 彙編基礎概念186
7.6.2 Solidity中引入彙編188
7.6.3 彙編變量定義與賦值189
7.6.4 彙編中的塊和作用域190
7.6.5 彙編中訪問變量190
7.6.6 for循環191
7.6.7 if判斷語句191
7.6.8 彙編Switch語句192
7.6.9 彙編函數192
7.6.10 元組193
7.6.11 彙編缺點193

第8章智能合約實戰194
8.1 OpenZeppelin 194
8.2 SafeMath安全算數運算196
8.3 地址工具197
8.4 ERC165接口發現198
8.5 ERC20代幣200
8.6 ERC777功能型代幣205
8.6.1 ERC1820接口註冊表206
8.6.2 ERC777標準211
8.6.3 ERC777實現217
8.6.4 實現鉤子函數227
8.7 ERC721231
8.7.1 ERC721代幣規範232
8.7.2 ERC721實現235
8.8 簡單的支付通道247
8.8.1 創建支付通道智能合約247
8.8.2 支付簽名250

第9章去中心化DAPP實戰252
9.1 什麼是DAPP 252
9.2 Web3.js 254
9.2.1 Web3.js簡介254
9.2.2 引入Web3.js 255
9.2.3 用web3.js跟合約交互256
9.3 DAPP開發工具257
9.3.1 Truffle 258
9.3.2 Ganache 258
9.4 DAPP投票應用259
9.4.1 投票應用需求260
9.4.2 創建項目260
9.4.3 編寫智能合約261
9.4.4 合約編譯及部署263
9.4.5 合約部署264
9.4.6 執行部署267
9.4.7 合約測試270
9.4.8 編寫應用前端272
9.4.9 前端與合約交互273
9.4.10 運行DAPP276
9.4.11 部署到公網服務器278
9.5 使用Vue.js開發眾籌DAPP 279
9.5.1 Vue.js簡介279
9.5.2 眾籌需求分析281
9.5.3 實現眾籌合約281
9.5.4 合約部署283
9.5.5 眾籌Web界面實現284
9.5.6 與眾籌合約交互286
9.5.7 DAPP運行291
9.5.8 DAPP發布292
9.6 後台監聽合約事件293
9.6.1 Node.js及Express簡介293
9.6.2 常駐服務監聽合約事件296
9.6.3 MySQL數據庫環境準備298
9.6.4 創建數據庫及表300
9.6.5 監聽數據入庫301
9.6.6 為前端提供眾籌記錄303
9.7 DAPP去中心化存儲306
9.7.1 IPFS協議307
9.7.2 IPFS安裝308
9.7.3 IPFS初始化308
9.7.4 上傳文件到IPFS309
9.7.5 上傳目錄到IPFS312
9.8 Embark框架312
9.8.1 Embark概述312
9.8.2 Embark安裝313
9.9 Embark重寫投票DAPP 313
9.9.1 創建Embark項目313
9.9.2 Embark項目結構314
9.9.3 編寫合約及部署315
9.9.4 Embark DashBoard 316
9.9.5 Embark Cockpit 317
9.9.6 Embark Artifacts 318
9.9.7 前端index.html 319
9.9.8 使用Artifacts與合約交互321
9.9.9 Embark部署324


第10章以太坊錢包開發327
10.1 數字錢包基礎327
10.2 錢包相關提案328
10.2.1 BIP32分層推導329
10.2.2 密鑰路徑及BIP44 331
10.2.3 BIP39 331
10.2.4 生成助記詞332
10.2.5 用助記詞推導出種子333
10.3 錢包功能334
10.4 創建錢包賬號335
10.4.1 隨機數為私鑰創建賬號335
10.4.2 助記詞創建賬號337
10.5 導入賬號339
10.5.2 導出和導入keystore 344
10.6 獲取錢包餘額347
10.6.1 連接以太坊網絡347
10.6.2 查詢餘額348
10.7 發送交易350
10.7.1 構造交易350
10.7.2 交易簽名352
10.7.3 發送交易352
10.7.4 Ethers.js發送交易352
10.8 交易ERC20代幣354
10.8.1 構造合約對象355
10.8.2 獲取代幣餘額355
10.8.2 轉移代幣356