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