類似推薦
編輯推薦
資深區(qū)塊鏈開發(fā)工者力作,通俗易懂地講述以太坊開發(fā)。
內容簡介
本書從區(qū)塊鏈的概念、原理、核心技術和應用四個方面,系統(tǒng)地介紹了以太坊區(qū)塊鏈開發(fā)的相關知識。其中,重點介紹了以太坊的相關概念和原理、以太坊客戶端Geth、以太坊常用智能合約開發(fā)工具、Solidity語言和智能合約開發(fā)等內容,并實現(xiàn)了眾籌合約和代幣合約兩個項目實戰(zhàn)案例,可以讓讀者對智能合約開發(fā)的整體流程有一個全面的了解。
另外,書中結合示例對Web3.js的相關知識也做了詳細介紹,以幫助讀者更好地理解和利用以太坊的相關數(shù)據(jù)。
本書內容豐富,講解通俗易懂,案例典型,實用性強,特別適合區(qū)塊鏈技術愛好者和智能合約開發(fā)的相關從業(yè)人員閱讀,也適合區(qū)塊鏈底層研究人員閱讀。
此外,本書還適合作為區(qū)塊鏈培訓機構作為相關課程的培訓教材使用。
作者簡介
作者唐盛彬,就職于國內領先的手機游戲平臺當樂網(wǎng)(d.cn),主要負責當樂游戲中心App平臺的SDK及區(qū)塊鏈游戲眾籌平臺DOGI.IO的智能合約開發(fā)工作。熟悉以太坊,對以太坊底層原理和相關協(xié)議有較為深入的研究;熟悉以太坊智能合約開發(fā)的核心技術與常用工具,如Solidity語言、web3.js、Truffle和Geth等;對使用Solidity語言進行以太坊智能合約開發(fā)有豐富的實戰(zhàn)經(jīng)驗,特別是在眾籌和代幣開發(fā)等相關領域。
章節(jié)目錄
版權信息
前言
第1篇 基礎理論與原理
第1章 與區(qū)塊鏈的第一次親密接觸
1.1 什么是區(qū)塊鏈
1.1.1 區(qū)塊鏈簡介
1.1.2 區(qū)塊鏈的鏈式結構
1.1.3 區(qū)塊鏈上的區(qū)塊常見數(shù)據(jù)
1.2 工作量證明機制(PoW)
1.2.1 區(qū)塊鏈遭遇的問題
1.2.2 PoW模型
1.2.3 PoW為什么能防止篡改
1.3 權益證明機制(PoS)
1.3.1 什么是PoS
1.3.2 PoS的優(yōu)勢與劣勢
1.4 委托權益證明(DPoS)
1.5 權威證明(PoA)
1.6 區(qū)塊鏈的應用
1.7 本章小結
第2章 去中心化應用——DApp
2.1 DApp簡介
2.1.1 什么是DApp
2.1.2 DApp網(wǎng)絡組建過程
2.1.3 DApp的優(yōu)點
2.1.4 DApp存在的問題
2.2 中心化與去中心化
2.2.1 身份驗證
2.2.2 通信
2.2.3 數(shù)據(jù)交互
2.2.4 系統(tǒng)維護
2.3 DApp網(wǎng)絡與通信
2.3.1 P2P網(wǎng)絡與WWW
2.3.2 P2P網(wǎng)絡拓撲結構類型
2.3.3 小結
2.4 DApp貨幣與中心化數(shù)據(jù)交互
2.4.1 DApp貨幣
2.4.2 中心化應用獲取去中心化數(shù)據(jù)
2.4.3 去中心化應用獲取中心化數(shù)據(jù)
2.5 常見的DApp
2.5.1 比特幣
2.5.2 以太坊
2.5.3 IPFS存儲系統(tǒng)
第3章 比特幣那些事
3.1 比特幣簡介
3.1.1 比特幣公鑰與私鑰
3.1.2 數(shù)字簽名
3.2 橢圓曲線算法
3.2.1 群
3.2.2 橢圓曲線算法定義
3.2.3 橢圓曲線幾何運算
3.2.4 橢圓曲線算法的代碼實現(xiàn)
3.2.5 橢圓曲線加密與簽名原理
3.3 比特幣私鑰、公鑰與地址
3.3.1 從私鑰到地址
3.3.2 公鑰壓縮
3.3.3 私鑰格式
3.3.4 私鑰與安全
3.4 比特幣交易
3.4.1 交易簡介
3.4.2 交易輸出
3.4.3 交易輸入
3.4.4 交易費
3.4.5 付款至公鑰哈希(P2PKH)
3.4.6 多重簽名與P2SH
3.5 比特幣錢包
3.5.1 錢包簡介
3.5.2 生成助記詞
3.5.3 從助記詞生成種子
3.5.4 從種子生成HD錢包
3.5.5 HD錢包密鑰路徑
3.6 比特幣相關資源
第4章 以太坊
4.1 以太坊簡介
4.1.1 什么是以太坊
4.1.2 以太坊虛擬機(EVM)
4.1.3 以太坊智能合約與高級語言
4.1.4 以太幣單位
4.1.5 以太坊發(fā)行版本與提案
4.2 以太坊賬戶
4.2.1 外部賬戶
4.2.2 合約賬戶
4.2.3 外部賬戶與合約賬戶的異同
4.3 以太坊交易
4.3.1 gas、gasPrice與gasLimit
4.3.2 gasUsed與交易花費
4.3.3 什么是以太坊交易與消息
4.4 以太坊網(wǎng)絡
4.4.1 以太坊網(wǎng)絡簡介
4.4.2 以太坊與Kademlia
4.4.3 以太坊客戶端
4.5 挖礦
4.5.1 什么是挖礦
4.5.2 挖礦獎勵
4.5.3 以太坊區(qū)塊
4.6 GHOST協(xié)議
4.6.1 區(qū)塊時間
4.6.2 區(qū)塊分叉
4.6.3 普通分叉帶來的問題
4.6.4 GHOST協(xié)議的具體內容
4.7 Ethash算法之DAG
4.7.1 什么是DAG
4.7.2 DAG生成過程
4.7.3 為什么要使用DAG
4.8 Ethash算法
4.8.1 Ethash算法簡介
4.8.2 Ethash算法流程
4.9 本章小結
第2篇 開發(fā)工具
第5章 智能合約開發(fā)常用工具
5.1 Git簡介
5.1.1 Git安裝
5.1.2 Git常用命令
5.1.3 Git資源推薦
5.2 Node.js簡介
5.2.1 什么是Node.js
5.2.2 Node.js安裝
5.3 NPM簡介
5.3.1 npm config命令
5.3.2 NPM與語義化版本
5.3.3 npm install命令
5.3.4 NPM鏡像
5.3.5 NPM的其他常用命令
5.4 webpack簡介
5.4.1 認識webpack
5.4.2 webpack首秀
5.4.3 webpack與webpack-dev-schmerver
5.4.4 webpack常用功能與配置
5.4.5 webpack總結
5.5 Postman簡介
5.5.1 認識Postman
5.5.2 Postman的簡單用法
5.5.3 Postman腳本
5.6 LevelDB簡介
5.6.1 認識LevelDB
5.6.2 LevelDB文件
5.6.3 SST結構與數(shù)據(jù)查找
第6章 以太坊私鏈神器——Ganache
6.1 Ganache簡介
6.1.1 什么是Ganache
6.1.2 ganache-cli命令安裝
6.1.3 Ganache圖形界面
6.2 Ganache常見命令參數(shù)
6.2.1 挖礦時間
6.2.2 主機端口與網(wǎng)絡
6.2.3 gas相關參數(shù)
6.2.4 其他參數(shù)
6.3 Ganache賬戶
6.3.1 能多給我點錢嗎
6.3.2 能多給我?guī)讉€賬戶嗎
6.3.3 助記詞相關參數(shù)
6.3.4 指定賬戶
6.3.5 鎖定賬戶與解鎖
6.4 Ganache與JavaScript
6.4.1 在工程中引用Ganache的Provider
6.4.2 在工程中啟動Ganache的Server
6.4.3 配置工程中依賴的Ganache
6.5 Ganache交易相關RPC方法
6.5.1 eth_sendTransaction方法
6.5.2 eth_getTransactionCount方法
6.5.3 eth_getTransactionReceipt方法
6.5.4 eth_getTransactionByHash方法
6.5.5 交易相關的其他方法
6.6 Ganache賬戶相關RPC方法
6.6.1 eth_accounts方法
6.6.2 eth_getBalance方法
6.6.3 eth_coinbase方法
6.7 Ganache區(qū)塊相關RPC方法
6.7.1 eth_getBlockByHash方法
6.7.2 eth_getBlockByNumber方法
6.7.3 其他相關方法
6.8 Ganache日志相關RPC方法
6.8.1 eth_newFilter方法
6.8.2 eth_getFilterLogs方法
6.8.3 eth_getLogs方法
6.8.4 其他關聯(lián)方法
6.9 Ganache的其他RPC方法
6.9.1 web3_clientVersion方法
6.9.2 net_version方法
6.9.3 eth_getCode方法
6.9.4 eth_sign方法
第7章 以太坊官方客戶端——Geth
7.1 Geth簡介
7.1.1 Geth是什么
7.1.2 Geth安裝
7.1.3 Geth相關目錄
7.1.4 Geth相關工具
7.2 Geth子命令
7.2.1 Geth子命令概述
7.2.2 Geth子命令之a(chǎn)ccount
7.2.3 Geth子命令之console與attach
7.2.4 Geth子命令之copydb與removedb
7.3 Geth啟動參數(shù)
7.3.1 Geth數(shù)據(jù)同步模式
7.3.2 Geth網(wǎng)絡相關參數(shù)
7.3.3 Geth以太坊相關參數(shù)
7.3.4 Geth RPC相關參數(shù)
7.3.5 Geth挖礦相關參數(shù)
7.3.6 Geth ethash算法參數(shù)
7.3.7 Geth交易池配置
7.3.8 Geth日志參數(shù)
7.3.9 Geth的其他參數(shù)
7.4 Geth啟動實例
7.4.1 Geth啟動單個節(jié)點
7.4.2 Geth啟動多節(jié)點組網(wǎng)
7.5 Geth控制臺與管理接口
7.5.1 admin模塊
7.5.2 debug模塊
7.5.3 miner模塊
7.5.4 personal模塊
7.5.5 txpool模塊
7.6 keystore文件
7.6.1 keystore文件簡介
7.6.2 從密鑰到密鑰文件
7.6.3 從密鑰到密鑰文件流程驗證
第8章 以太坊錢包與瀏覽器
8.1 MetaMask插件
8.1.1 MetaMask簡介
8.1.2 MetaMask安裝
8.1.3 第一次使用MetaMask
8.1.4 MetaMask的連接配置
8.1.5 MetaMask的其他配置
8.1.6 MetaMask賬戶管理
8.1.7 MetaMask交易
8.1.8 小結
8.2 Ethereum Wallet錢包
8.2.1 Ethereum Wallet簡介
8.2.2 安裝Ethereum Wallet與Mist
8.2.3 使用Ethereum Wallet
8.3 Mist與Ethereum Wallet
8.3.1 Ethereum Wallet與Mist的區(qū)別
8.3.2 Mist的配置與使用
8.3.3 小結
8.4 MyEtherWallet網(wǎng)頁錢包
8.4.1 MyEtherWallet簡介
8.4.2 MyEtherWallet合約交互
8.4.3 MyEtherWallet離線交易
8.4.4 MyEtherWallet的其他功能
第3篇 Solidity與智能合約開發(fā)
第9章 Solidity初遇
9.1 Solidity簡介
9.1.1 什么是Solidity
9.1.2 智能合約示例
9.1.3 Solidity編譯版本
9.2 Solidity編輯器
9.2.1 Sublime編輯器
9.2.2 Atom編輯器
9.2.3 IDEA編輯器
9.3 Remix編輯器
9.3.1 Remix簡介
9.3.2 Remix文件管理
9.3.3 Remix編輯面板與控制臺
9.3.4 Remix編譯與運行面板
9.3.5 Remix基本配置面板
9.3.6 Remix分析配置面板
9.4 Solidity常見概念
9.4.1 狀態(tài)變量
9.4.2 局部變量
9.4.3 Solidity函數(shù)
9.4.4 返回多值
9.4.5 構造函數(shù)
9.4.6 異常
9.4.7 Solidity注釋與文檔
9.5 Solidity運算符
9.5.1 Solidity運算符簡介
9.5.2 Solidity運算符注意事項
9.6 Solidity控制結構
9.6.1 控制結構簡介
9.6.2 判斷語句
9.6.3 for循環(huán)
9.6.4 while與do…while循環(huán)
9.6.5 continue與break
9.6.6 三目運算符
9.7 可見性修飾符
9.7.1 public修飾符
9.7.2 internal修飾符
9.7.3 private修飾符
9.7.4 external修飾符
9.8 函數(shù)其他修飾符
9.8.1 constant修飾符
9.8.2 view修飾符
9.8.3 pure修飾符
第10章 Solidity數(shù)據(jù)類型
10.1 數(shù)據(jù)類型簡介
10.1.1 值類型
10.1.2 引用類型
10.1.3 小結
10.2 Booleans類型
10.2.1 Booleans類型簡介
10.2.2 Booleans類型支持的運算符
10.3 Integers類型
10.3.1 Integers類型簡介
10.3.2 Integers類型支持的運算符
10.3.3 Integers整除問題
10.4 定點數(shù)類型
10.4.1 定點數(shù)類型簡介
10.4.2 定點數(shù)類型支持的運算符
10.5 字面量
10.5.1 字符串字面量
10.5.2 十六進制字面量
10.5.3 有理數(shù)字面量
10.6 Enum類型
10.6.1 枚舉類型簡介
10.6.2 枚舉類型實例
10.7 mapping類型
10.7.1 mapping類型簡介
10.7.2 mapping類型實例
10.8 struct類型
第11章 Solidity數(shù)據(jù)類型進階
11.1 Solidity固定大小字節(jié)數(shù)組
11.1.1 固定大小字節(jié)數(shù)組類型
11.1.2 固定大小字節(jié)數(shù)組支持的運算符
11.1.3 固定大小字節(jié)數(shù)組的成員
11.1.4 固定大小字節(jié)數(shù)組與字符串
11.1.5 固定大小字節(jié)數(shù)組之間的轉換
11.1.6 小結
11.2 Solidity動態(tài)大小字節(jié)數(shù)組
11.2.1 動態(tài)大小字節(jié)數(shù)組簡介
11.2.2 創(chuàng)建動態(tài)大小字節(jié)數(shù)組
11.2.3 動態(tài)大小字節(jié)數(shù)組成員
11.2.4 字節(jié)數(shù)組間的轉換
11.2.5 小結
11.3 Solidity數(shù)組
11.3.1 固定長度數(shù)組
11.3.2 動態(tài)長度數(shù)組
11.3.3 二維數(shù)組
11.3.4 小結
11.4 以太坊地址類型
11.4.1 地址簡介
11.4.2 transfer、send與balance
11.4.3 call、callcode與delegatecall
11.5 函數(shù)類型
11.5.1 函數(shù)類型簡介
11.5.2 函數(shù)簽名
11.5.3 函數(shù)類型實例
11.6 數(shù)據(jù)類型轉換
11.6.1 隱式轉換
11.6.2 顯式轉換
11.6.3 var關鍵字
11.7 delete運算符
11.7.1 delete與常見類型
11.7.2 delete與數(shù)組
11.7.3 delete與mapping
11.7.4 delete與struct
11.8 本章小結
第12章 Solidity開發(fā)智能合約
12.1 智能合約簡介
12.1.1 智能合約的概念
12.1.2 EVM結構與數(shù)據(jù)
12.1.3 智能合約執(zhí)行
12.2 事件與日志簡介
12.2.1 事件簡介
12.2.2 事件主題
12.2.3 事件與日志
12.3 Solidity中的單位后綴
12.3.1 以太幣單位
12.3.2 時間單位
12.4 區(qū)塊與交易屬性
12.4.1 區(qū)塊的相關屬性
12.4.2 消息的相關屬性
12.4.3 交易的相關屬性
12.5 錯誤處理函數(shù)
12.5.1 assert函數(shù)
12.5.2 require函數(shù)
12.5.3 revert函數(shù)
12.6 數(shù)學與Hash函數(shù)
12.6.1 數(shù)學運算函數(shù)
12.6.2 Hash函數(shù)
12.6.3 ecrecover函數(shù)
12.7 ABI編碼與編碼函數(shù)
12.7.1 ABI編碼簡介
12.7.2 ABI編碼數(shù)據(jù)類型
12.7.3 常見數(shù)據(jù)類型ABI編碼規(guī)則
12.7.4 復雜類型ABI編碼規(guī)則
12.7.5 ABI編碼實例
12.8 特殊類型函數(shù)
12.8.1 回退函數(shù)
12.8.2 析構函數(shù)
12.8.3 函數(shù)重載
12.8.4 使用new創(chuàng)建合約函數(shù)調用
第13章 Solidity開發(fā)智能合約進階
13.1 Solidity數(shù)據(jù)位置
13.1.1 什么是數(shù)據(jù)位置
13.1.2 memory簡介
13.1.3 storage簡介
13.1.4 calldata簡介
13.1.5 小結
13.2 數(shù)據(jù)位置與賦值
13.2.1 狀態(tài)變量賦值給局部storage變量
13.2.2 狀態(tài)變量賦值給memory局部變量
13.2.3 局部memory變量賦值給狀態(tài)變量
13.2.4 狀態(tài)變量賦值狀態(tài)變量
13.2.5 局部memory變量賦值給局部memory變量
13.2.6 局部storage變量賦值給局部storage變量
13.2.7 局部storage變量賦值給局部memory變量
13.2.8 局部storage變量賦值給狀態(tài)變量
13.2.9 小結
13.3 函數(shù)修改器
13.3.1 函數(shù)修改器簡單實例
13.3.2 函數(shù)修改器復雜實例
13.3.3 小結
13.4 合約繼承
13.4.1 繼承簡介
13.4.2 super關鍵詞
13.4.3 抽象合約
13.4.4 接口合約
13.5 Solidity庫
13.5.1 Solidity庫簡介
13.5.2 Solidity庫應用實例
13.5.3 Solidity導入源文件
13.5.4 using for語句
13.6 Solidity編譯
13.6.1 solc簡介
13.6.2 solc編譯合約
13.6.3 solc導入與庫
13.6.4 solc.js簡介
13.6.5 使用solc.js在項目中編譯單個合約
13.6.6 使用solc.js在項目中編譯多個合約
13.7 Solidity編碼風格
13.7.1 命名風格
13.7.2 控制結構
13.7.3 函數(shù)相關風格
13.7.4 其他部分
第14章 通過web3.js與
14.1 web3.js簡介
14.1.1 web3.js概念
14.1.2 web3.js原理
14.1.3 web3.js模塊
14.2 web3.js與以太坊節(jié)點
14.2.1 HTTP方式
14.2.2 IPC方式
14.2.3 WebSocket方式
14.3 web3.js工具的相關方法
14.3.1 以太幣單位轉換方法
14.3.2 十六進制、數(shù)字與字符串轉換
14.3.3 填充字符與getStorageAt
14.4 web3.js賬戶的相關方法
14.4.1 獲取賬戶與賬戶余額
14.4.2 創(chuàng)建賬戶
14.4.3 解鎖賬戶
14.4.4 賬戶的其他相關方法
14.5 web3.js的ABI編碼方法
14.5.1 函數(shù)簽名與事件簽名
14.5.2 函數(shù)單參數(shù)編碼與解碼
14.5.3 函數(shù)多參數(shù)編碼與解碼
14.5.4 編碼函數(shù)調用
14.5.5 解碼日志
14.6 web3.js合約的相關方法
14.6.1 創(chuàng)建與克隆合約
14.6.2 合約部署deploy
14.6.3 send函數(shù)與call函數(shù)
14.6.4 estimateGas函數(shù)與encodeABI函數(shù)
14.6.5 合約方法的調用
14.6.6 合約事件的處理
14.7 web3.js交易的相關方法
14.7.1 簽名簡介
14.7.2 簽名與交易
14.7.3 發(fā)送交易
14.7.4 簽名交易與發(fā)送簽名交易
14.7.5 獲取交易的相關數(shù)據(jù)
14.8 web3.js和IBAN的相關接口
14.8.1 IBAN簡介
14.8.2 BBAN、IBAN與地址
14.8.3 IBAN的其他方法
14.9 web3.js的其他方法
14.9.1 訂閱事件
14.9.2 網(wǎng)絡及ENS的相關方法
14.9.3 與Swarm和Whisper交互的方法
14.10 與Ethereum相關的JavaScript庫
14.10.1 BigNumber.js庫
14.10.2 ethjs-abi庫
14.10.3 其他Ethereum庫
第4篇 項目案例實戰(zhàn)
第15章 工程化項目開發(fā)利器——Truffle
15.1 Truffle簡介
15.1.1 Truffle的主要功能
15.1.2 Truffle的安裝及其相關命令
15.2 Truffle創(chuàng)建項目
15.2.1 init命令
15.2.2 unbox命令
15.3 通過Truffle編譯項目
15.3.1 前置條件與編譯
15.3.2 Truffle編譯輸出
15.3.3 Truffle編譯依賴
15.4 Truffle配置文件
15.4.1 網(wǎng)絡配置
15.4.2 輸出目錄配置
15.4.3 測試配置
15.4.4 編譯配置
15.4.5 包管理相關配置
15.5 Truffle單元測試與部署
15.5.1 使用JavaScript測試
15.5.2 JavaScript測試交易
15.5.3 使用Solidity測試
15.5.4 合約部署
15.6 Truffle的其他命令
15.6.1 create命令
15.6.2 包管理相關命令
15.6.3 其他命令
第16章 項目流程與眾籌實戰(zhàn)案例
16.1 合約部分
16.1.1 項目簡介
16.1.2 初始化與合約目錄
16.1.3 部署與測試腳本目錄
16.2 眾籌合約
16.2.1 Owned合約
16.2.2 SafeMath合約
16.2.3 Crowd合約
16.3 合約的部署與使用
16.3.1 本地部署與測試環(huán)境搭建
16.3.2 本地部署與測試網(wǎng)絡配置
16.3.3 本地部署
16.3.4 本地測試
16.3.5 Ropsten網(wǎng)絡測試部署
16.4 項目的Web部分
16.4.1 初始化Web項目
16.4.2 webpack配置
16.4.3 package.json配置
16.4.4 運行Web項目
第17章 以太坊代幣標準與ERC20代幣案例
17.1 代幣簡介
17.1.1 ERC20簡介
17.1.2 ERC223簡介
17.1.3 ERC721簡介
17.2 ERC20標準接口簡介
17.2.1 基本信息
17.2.2 總額與余額
17.2.3 轉賬與授權
17.2.4 事件
17.3 ERC20代幣實例
17.3.1 查看以太坊上已有的Token
17.3.2 創(chuàng)建Token
17.3.3 查看和轉移Token
17.4 擴展ERC20標準代幣
17.4.1 銷毀代幣
17.4.2 添加Token
17.4.3 凍結與解凍賬戶
17.4.4 買賣Token
17.4.5 小結
17.5 ERC20代幣擴展實例
17.5.1 初始化項目
17.5.2 添加三方庫合約
17.5.3 代幣合約的邏輯實現(xiàn)
17.5.4 代幣合約的部署
以太坊智能合約開發(fā)實戰(zhàn)是2019年由機械工業(yè)出版社華章分社出版,作者唐盛彬。
溫馨提示:
得書感謝您對《以太坊智能合約開發(fā)實戰(zhàn)》關注和支持,如本書內容有不良信息或侵權等情形的,請聯(lián)系本網(wǎng)站。