區(qū)塊鏈開發(fā)實戰(zhàn):基于JavaScript 的公鏈與DApp 開發(fā)
定 價:89 元
叢書名:區(qū)塊鏈技術(shù)叢書
- 作者:梁培利 曹帥 吳延毅
- 出版時間:2019/8/1
- ISBN:9787111633044
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:F713.361.3
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
隨著區(qū)塊鏈技術(shù)的火熱以及區(qū)塊鏈應(yīng)用開發(fā)平臺的出現(xiàn),越來越多的普通開發(fā)者都需要掌握區(qū)塊鏈應(yīng)用的開發(fā),本書可帶領(lǐng)讀者快速入門區(qū)塊鏈開發(fā)。
本書由ASCH 核心開發(fā)工程師撰寫,深入淺出地介紹了區(qū)塊鏈應(yīng)用的開發(fā)方法與技巧,任何有JavaScript基礎(chǔ)的開發(fā)人員都可以掌握,分為三大部分,第壹部分“區(qū)塊鏈”介紹區(qū)塊鏈技術(shù)簡史、商業(yè)價值、核心概念、賬戶模型、主流區(qū)塊鏈項目、區(qū)塊鏈領(lǐng)域的新技術(shù),并帶領(lǐng)讀者用300行代碼實現(xiàn)一個區(qū)塊鏈系統(tǒng)。第二部分“ASCH 源碼解讀”詳細介紹ASCH的技術(shù)架構(gòu)、ASCH啟動過程、加密和驗證方式、P2P技術(shù)、交易流程、區(qū)塊鏈實現(xiàn)、DPOS+PBFT、側(cè)鏈技術(shù)實現(xiàn)等。第三部分“去中心化應(yīng)用(DApp)開發(fā)”介紹一個綜合DApp案例開發(fā),包括準備工作、DApp 開發(fā)工具、搭建開發(fā)環(huán)境、設(shè)計數(shù)據(jù)結(jié)構(gòu)、實現(xiàn)業(yè)務(wù)邏輯、引入主鏈資產(chǎn)、如何對 DApp 進行測試、發(fā)布方式等。
本書從一個300行代碼的小型區(qū)塊鏈系統(tǒng)實現(xiàn)入手,帶領(lǐng)讀者快速入門區(qū)塊鏈開發(fā)。然后由淺入深地講解區(qū)塊鏈的基本原理,以及DApp開發(fā)的技術(shù)與案例,只要懂得JavaScript 就可以開發(fā)自己的DApp。
我至今清晰地記得,在2016年5月的一個傍晚,吳延毅、單青峰還有我在北航大運村一起吃燒烤的場景。單青峰滿眼放光地談起他最近在做的項目Asch(阿希),向我們解釋了比特幣和區(qū)塊鏈的很多技術(shù)原理。我和吳延毅當時聽得也很興奮,預(yù)感這項技術(shù)未來肯定有很大的前景。
在那次聚餐之后,我開始在網(wǎng)上尋找相關(guān)的技術(shù)資料認真鉆研,終于理解了什么是加密算法、工作量證明、UTXO等區(qū)塊鏈的技術(shù)概念,內(nèi)心對這項技術(shù)的熱愛也與日俱增。后來慢慢開始以社區(qū)成員身份參與到Asch的相關(guān)工作中來,并且最終入職Asch,成為一名全職的區(qū)塊鏈開發(fā)工程師。
Asch 始于2016年年初,當時單青峰在思考如何把區(qū)塊鏈技術(shù)應(yīng)用到更廣泛的場景中,確定好了一些現(xiàn)在看來依然比較前沿的解決方案。比如,考慮到開發(fā)成本,選擇了JavaScript語言,數(shù)據(jù)庫方面選擇了關(guān)系數(shù)據(jù)庫;出于鏈的安全性和性能等方面的考慮,采用了側(cè)鏈技術(shù),每個應(yīng)用都是一條獨立的鏈。應(yīng)用既可以保持自己的獨立性和靈活性,又能夠享受Asch這個生態(tài)帶來的便利。后來,Asch 又率先在跨鏈方面進行了探索,并且在國內(nèi)非常早地提出了跨鏈的解決方案并實現(xiàn)了跨鏈。
目前,區(qū)塊鏈技術(shù)依然在快速地迭代。Asch 作為國內(nèi)為數(shù)不多并且起步較早的專注于技術(shù)創(chuàng)新的項目,這一路上的實踐經(jīng)驗是值得總結(jié)的,因此有了本書。希望本書能夠被更多的同行看到,一起交流和促進區(qū)塊鏈技術(shù)在國內(nèi)的發(fā)展與應(yīng)用。
本書用三個部分講解了區(qū)塊鏈技術(shù)以及Asch的相關(guān)實踐,第一部分講解了區(qū)塊鏈技術(shù)的基本概念,并用300行代碼實現(xiàn)了一個最小的、可運行的區(qū)塊鏈;第二部分分析Asch的源碼,講解Asch的實現(xiàn)原理;第三部分介紹了基于Asch的側(cè)鏈技術(shù)的DApp開發(fā)實戰(zhàn)。全書共有12章,其中梁培利完成了第1、2、3、4、5、9章的創(chuàng)作,吳延毅完成了第6、7、8章的創(chuàng)作,曹帥完成了第10、11、12章的創(chuàng)作。下面是各章的內(nèi)容介紹。
第一部分“區(qū)塊鏈開發(fā)概述”
第1章“自己動手實現(xiàn)一個區(qū)塊鏈系統(tǒng)” 這一章講解了如何使用300行代碼實現(xiàn)一個簡單的區(qū)塊鏈系統(tǒng),內(nèi)容包括區(qū)塊和區(qū)塊鏈的構(gòu)造、工作量證明算法的實現(xiàn)以及通過 HTTP API 的方式提供與區(qū)塊鏈的交互等。通過這章的實踐,讀者將會對區(qū)塊鏈有一個基本的了解。
第2章“DApp開發(fā)簡介” 這一章介紹了智能合約的基本概念以及案例,然后解釋了DApp的概念及特點。通過這章,讀者可以對智能合約和DApp有一個初步的認識。
第二部分“Asch源碼解讀”
第3章“Asch—區(qū)塊鏈應(yīng)用開發(fā)平臺” Asch 是一個在2016年就發(fā)布主網(wǎng)的區(qū)塊鏈應(yīng)用開發(fā)平臺,目的在于降低區(qū)塊鏈技術(shù)應(yīng)用的門檻,幫助企業(yè)和開發(fā)者快速地構(gòu)建基于區(qū)塊鏈的分布式應(yīng)用(DApp),只要開發(fā)者會使用JavaScript以及有一定的開發(fā)經(jīng)驗。該章將會從Asch的發(fā)展講起,一直到 Asch 的架構(gòu)解析。希望讀者在讀完這章以后可以對 Asch 有一個清晰的了解。
第4章“Asch源碼概覽” 對于區(qū)塊鏈項目來說,核心代碼開源是基本的要求,這種情況也為我們提供了大量的學習資源。閱讀項目源碼是深入了解一個項目的最好方式。從這章開始,我們將會一起從源碼級別探索 Asch 的實現(xiàn)與運行機制。這章的主要內(nèi)容為源碼概覽以及啟動流程簡介。
第5章“賬戶與安全” 區(qū)塊鏈的正常運轉(zhuǎn)離不開密碼學的支持。正是因為利用了安全的加密算法,區(qū)塊鏈上的每一筆交易和區(qū)塊的生產(chǎn)才有了安全的保證。這章首先探索區(qū)塊鏈用到的基本算法,然后基于Asch的源碼來解釋Asch 里賬戶的生成與運用。
第6章“共識機制” 共識機制是一個區(qū)塊鏈系統(tǒng)的靈魂。但是為什么區(qū)塊鏈系統(tǒng)需要共識機制呢?這一章將從拜占庭將軍問題談起,一直談到目前比較流行的 DPoS+PBFT算法,來看看共識機制解決了哪些問題,是如何解決的,最后簡單介紹了 Asch 的共識機制實現(xiàn)。
第7章“區(qū)塊” 區(qū)塊是組成區(qū)塊鏈的基本單位。一個區(qū)塊的產(chǎn)生、打包交易、驗證以及如何添加到區(qū)塊鏈上往往和這個區(qū)塊鏈系統(tǒng)采用的共識機制有關(guān)。這章主要介紹阿希鏈上區(qū)塊的鍛造、驗證以及添加區(qū)塊到鏈上等流程。
第8章“交易” 交易的核心流程和區(qū)塊如出一轍,只不過交易是更泛化的概念,含義比較廣,可以代表轉(zhuǎn)賬、投票等類型,這章將詳細介紹Asch交易相關(guān)的流程。
第9章“跨鏈實現(xiàn)” 如今在區(qū)塊鏈所面臨的諸多問題中,區(qū)塊鏈之間的彼此隔離成為了區(qū)塊鏈技術(shù)應(yīng)用和資產(chǎn)流通的阻礙。無論是公有鏈還是私有鏈,跨鏈技術(shù)都是實現(xiàn)價值互聯(lián)網(wǎng)的關(guān)鍵?珂溂夹g(shù)是把區(qū)塊鏈技術(shù)從目前一個個分散的孤島中分離出來的良藥,也是區(qū)塊鏈相互通信的橋梁?珂溂夹g(shù)的必要性早已在鏈圈達成了共識。我們將在這章探索 Asch 的跨鏈實現(xiàn)原理。
第三部分“DApp開發(fā)實戰(zhàn)”
第10章 “DApp設(shè)計與開發(fā)環(huán)境搭建” 這一章介紹DApp開發(fā),從DApp設(shè)計者的角度,闡述如何從零到一設(shè)計一個 DApp,從業(yè)務(wù)模型、經(jīng)濟模型到數(shù)據(jù)模型三個層面逐層介紹,幫助我們更深入地理解區(qū)塊鏈應(yīng)用。
第11章“DApp合約開發(fā)與接口實現(xiàn)” 這章通過CCTime項目案例介紹合約開發(fā)與接口實現(xiàn)。通過這章的學習,讀者可以知曉一個 DApp 開發(fā)的詳細過程。
第12章“DApp測試” 前面的章節(jié)從環(huán)境搭建、應(yīng)用設(shè)計、代碼實現(xiàn)三個部分介紹
序言
前言
第一部分 區(qū)塊鏈開發(fā)概述
第1章 自己動手實現(xiàn)一個區(qū)塊鏈系統(tǒng)3
1.1 從比特幣到區(qū)塊鏈3
1.1.1 比特幣的誕生和發(fā)展3
1.1.2 區(qū)塊鏈5
1.2 用300 行代碼開發(fā)一個區(qū)塊鏈系統(tǒng)13
1.2.1 區(qū)塊和區(qū)塊鏈的創(chuàng)建13
1.2.2 工作量證明19
1.2.3 提供和區(qū)塊鏈進行交互的API22
1.3 本章總結(jié)30
第2章 DApp開發(fā)簡介32
2.1 智能合約32
2.2 DApp簡介34
2.3 區(qū)塊鏈應(yīng)用開發(fā)平臺簡介37
2.3.1 以太坊38
2.3.2 Asch40
2.3.3 Hyperledger41
2.4 本章總結(jié)42
第二部分 Asch源碼解讀
第3章 Asch—區(qū)塊鏈應(yīng)用開發(fā)平臺47
3.1 Asch的誕生和架構(gòu)47
3.2 開發(fā)工具50
3.3 客戶端的基本使用50
3.4 如何基于 Asch 注冊自己的資產(chǎn)55
3.5 DApp案例簡介57
3.6 本章總結(jié)58
第4章 Asch源碼概覽59
4.1 Asch生態(tài)架構(gòu)59
4.2 asch庫簡要解讀60
4.2.1 數(shù)據(jù)結(jié)構(gòu)61
4.2.2 合約62
4.2.3 接口63
4.2.4 配置文件64
4.3 asch-core庫簡要解讀64
4.4 Asch主鏈的啟動流程66
4.4.1 app.js66
4.4.2 index.js68
4.4.3 runtime.js69
4.4.4 init.js70
4.5 本章總結(jié)72
第5章 賬戶與安全73
5.1 區(qū)塊鏈里的密碼學73
5.1.1 非對稱加密73
5.1.2 ECDSA算法75
5.2 Asch的賬戶生成流程80
5.2.1 BIP 3980
5.2.2 ED2551982
5.3 Asch的賬戶類型82
5.4 本章總結(jié)84
第6章 共識機制86
6.1 拜占庭將軍問題86
6.2 區(qū)塊鏈的共識算法88
6.3 從 DPoS 到 PBFT89
6.3.1 DPoS算法89
6.3.2 PBFT算法91
6.4 共識算法源碼解讀93
6.4.1 base/consensus.js94
6.4.2 core/delegates.js96
6.5 本章總結(jié)102
第7章 區(qū)塊104
7.1 區(qū)塊鏈的數(shù)據(jù)結(jié)構(gòu)104
7.2 區(qū)塊的源碼解讀105
7.2.1 base/block.js106
7.2.2 core/blocks.js110
7.3 本章總結(jié)122
第8章 交易123
8.1 Asch上的交易類型123
8.2 交易的生命周期及其實現(xiàn)124
8.2.1 創(chuàng)建交易124
8.2.2 廣播交易127
8.2.3 驗證交易127
8.2.4 寫入?yún)^(qū)塊鏈129
8.3 本章總結(jié)130
第9章 跨鏈實現(xiàn)132
9.1 跨鏈技術(shù)的提出與探索132
9.2 比特幣多簽名交易的實現(xiàn)135
9.2.1 m-of-n 多簽名交易的腳本135
9.2.2 多簽名腳本的執(zhí)行136
9.2.3 比特幣里實現(xiàn)多簽名交易137
9.2.4 兌現(xiàn)多簽名交易142
9.3 Asch的跨鏈實現(xiàn)149
9.3.1 網(wǎng)關(guān)提案的發(fā)起與投票150
9.3.2 跨鏈賬戶的開通156
9.3.3 對跨鏈網(wǎng)關(guān)的充值與提現(xiàn)159
9.3.4 對跨鏈網(wǎng)關(guān)的提現(xiàn)160
9.4 本章總結(jié)166
第三部分 DApp開發(fā)實戰(zhàn)
第10章 DApp設(shè)計與開發(fā)環(huán)境搭建169
10.1 DApp整體設(shè)計169
10.1.1 前期準備169
10.1.2 業(yè)務(wù)需求描述170
10.1.3 角色171
10.1.4 經(jīng)濟模型172
10.1.5 代碼設(shè)計174
10.1.6 DApp 的目錄結(jié)構(gòu)176
10.2 開發(fā)環(huán)境搭建184
10.2.1 Asch 的網(wǎng)絡(luò)類型184
10.2.2 配置 localnet185
10.2.3 DApp Demo187
10.3 本章總結(jié)193
第11章 DApp合約開發(fā)與接口實現(xiàn)194
11.1 DApp合約的開發(fā)194
11.1.1 創(chuàng)建頻道(createChannel)195
11.1.2 更新頻道(updateChannel)198
11.1.3 發(fā)布文章(postArticle)199
11.1.4 打賞文章(voteArticle)202
11.1.5 抽獎設(shè)計207
11.1.6 發(fā)布評論(postComment)208
11.1.7 點贊評論(likeComment)209
11.1.8 舉報(report)210
11.1.9 結(jié)算抽獎(calculatePrize)211
11.1.10 領(lǐng)取獎勵(getReward)214
11.2 DApp 接口的實現(xiàn)215
11.2.1 頻道接口217
11.2.2 文章接口219
11.2.3 投票接口222
11.3 DApp的前端實現(xiàn)224
11.3.1 登錄224
11.3.2 調(diào)用合約225
11.3.3 調(diào)用接口226
11.4 本章總結(jié)226
第12章 DApp測試227
12.1 測試準備227
12.1.1 初始化函數(shù)227
12.1.2 區(qū)塊等待229
12.1.3 賬戶生成與轉(zhuǎn)賬229
12.2 合約流程測試233
12.3 本章總結(jié)238