| 作者 |
| (美)艾伦A. A.多诺万(Alan A. A. Donovan) (美)布莱恩W.柯尼汉(Brian W. Kernighan)郑东旭 杨明珠 潘盈瑜 翟萌 |
| 丛书名 |
| 计算机科学丛书 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9787190807102 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 ---------------------------Go程序设计语言--------------------------- 本书由《C程序设计语言》的作者Kernighan和谷歌公司Go团队主管Alan Donovan联袂撰写,是学习Go语言程序设计的权威指南。本书共13章,主要内容包括:Go的基础知识、基本结构、基本数据类型、复合数据类型、函数、方法、接口、goroutine、通道、共享变量的并发性、包、go工具、测试、反射等。 本书适合作为计算机相关专业的教材,也可供Go语言爱好者阅读。 ---------------------------GO语言公链开发实战--------------------------- 本书系统地介绍区块链设计原理和开发技术,包含公链的整体架构和开发细节,主要内容包括:第1章介绍公链设计架构;第2~4章介绍比原链的交互工具、核心进程bytomd,以及API Server实现原理和接口设计。第5章和第6章详细介绍区块链核心部分,包括区块、区块链、交易的核心数据结构,以及UTXO模型、隔离见证、交易脚本、验证等技术概念的实现。第7章和第8章讲解比原链智能合约以及智能合约在BVM虚拟机上运行的过程。第9章和第10章介绍区块链钱包的设计与交易流程,包括密钥、账户、资产管理、交易管理等,还详解了区块链P2P分布式网络实现原理。第11~13章介绍数据存储、共识算法,以及挖矿相关的概念和流程。第14章展望了区块链技术未来的发展趋势。 |
| 目录 |
---------------------------Go程序设计语言--------------------------- 出版者的话 译者序 前言 第1章 入门 1 1.1 hello,world 1 1.2 命令行参数 3 1.3 找出重复行 6 1.4 GIF动画 10 1.5 获取一个URL 12 1.6 并发获取多个URL 13 1.7 一个Web服务器 14 1.8 其他内容 17 第2章 程序结构 20 2.1 名称 20 2.2 声明 21 2.3 变量 22 2.3.1 短变量声明 22 2.3.2 指针 23 2.3.3 new函数 25 2.3.4 变量的生命周期 26 2.4 赋值 27 2.4.1 多重赋值 27 2.4.2 可赋值性 28 2.5 类型声明 29 2.6 包和文件 30 2.6.1 导入 31 2.6.2 包初始化 33 2.7 作用域 34 第3章 基本数据 38 3.1 整数 38 3.2 浮点数 42 3.3 复数 45 3.4 布尔值 47 3.5 字符串 47 3.5.1 字符串字面量 49 3.5.2 Unicode 49 3.5.3 UTF-8 50 3.5.4 字符串和字节slice 53 3.5.5 字符串和数字的相互转换 56 3.6 常量 56 3.6.1 常量生成器iota 57 3.6.2 无类型常量 59 第4章 复合数据类型 61 4.1 数组 61 4.2 slice 63 4.2.1 append函数 66 4.2.2 slice就地修改 69 4.3 map 71 4.4 结构体 76 4.4.1 结构体字面量 78 4.4.2 结构体比较 80 4.4.3 结构体嵌套和匿名成员 80 4.5 JSON 82 4.6 文本和HTML模板 87 第5章 函数 92 5.1 函数声明 92 5.2 递归 93 5.3 多返回值 96 5.4 错误 98 5.4.1 错误处理策略 99 5.4.2 文件结束标识 101 5.5 函数变量 102 5.6 匿名函数 104 5.7 变长函数 110 5.8 延迟函数调用 111 5.9 宕机 115 5.10 恢复 118 第6章 方法 120 6.1 方法声明 120 6.2 指针接收者的方法 122 6.3 通过结构体内嵌组成类型 124 6.4 方法变量与表达式 127 6.5 示例:位向量 128 6.6 封装 130 第7章 接口 133 7.1 接口即约定 133 7.2 接口类型 135 7.3 实现接口 136 7.4 使用flag.Value来解析参数 139 7.5 接口值 141 7.6 使用sort.Interface来排序 144 7.7 http.Handler接口 148 7.8 error接口 152 7.9 示例:表达式求值器 154 7.10 类型断言 160 7.11 使用类型断言来识别错误 161 7.12 通过接口类型断言来查询特性 162 7.13 类型分支 164 7.14 示例:基于标记的XML解析 166 7.15 一些建议 168 第8章 goroutine和通道 170 8.1 goroutine 170 8.2 示例:并发时钟服务器 171 8.3 示例:并发回声服务器 174 8.4 通道 176 8.4.1 无缓冲通道 177 8.4.2 管道 178 8.4.3 单向通道类型 180 8.4.4 缓冲通道 181 8.5 并行循环 183 8.6 示例:并发的Web爬虫 187 8.7 使用select多路复用 190 8.8 示例:并发遍历 192 8.9 取消 195 8.10 示例:聊天服务器 198 第9章 使用共享变量实现并发 201 9.1 竞态 201 9.2 互斥锁:sync.Mutex 205 9.3 读写互斥锁:sync.RWMutex 208 9.4 内存同步 208 9.5 延迟初始化:sync.Once 210 9.6 竞态检测器 212 9.7 示例:并发非阻塞缓存 212 9.8 goroutine与线程 218 9.8.1 可增长的栈 219 9.8.2 goroutine调度 219 9.8.3 GOMAXPROCS 219 9.8.4 goroutine没有标识 220 第10章 包和go工具 221 10.1 引言 221 10.2 导入路径 221 10.3 包的声明 222 10.4 导入声明 223 10.5 空导入 223 10.6 包及其命名 225 10.7 go工具 226 10.7.1 工作空间的组织 227 10.7.2 包的下载 228 10.7.3 包的构建 229 10.7.4 包的文档化 231 10.7.5 内部包 232 10.7.6 包的查询 233 第11章 测试 235 11.1 go test工具 235 11.2 Test函数 236 11.2.1 随机测试 239 11.2.2 测试命令 240 11.2.3 白盒测试 242 11.2.4 外部测试包 245 11.2.5 编写有效测试 246 11.2.6 避免脆弱的测试 247 11.3 覆盖率 248 11.4 Benchmark函数 250 11.5 性能剖析 252 11.6 Example函数 254 第12章 反射 256 12.1 为什么使用反射 256 12.2 reflect.Type和reflect.Value 257 12.3 Display:一个递归的值显示器 259 12.4 示例:编码S表达式 263 12.5 使用reflect.Value来设置值 266 12.6 示例:解码S表达式 268 12.7 访问结构体字段标签 271 12.8 显示类型的方法 273 12.9 注意事项 274 第13章 低级编程 276 13.1 unsafe.Sizeof、Alignof 和Offsetof 276 13.2 unsafe.Pointer 278 13.3 示例:深度相等 280 13.4 使用cgo调用C代码 282 13.5 关于安全的注意事项 286 ---------------------------GO语言公链开发实战--------------------------- 推荐序一 推荐序二 前言 第1章 公链设计架构 1 1.1 概述 1 1.2 公链总体架构 2 1.3 比原链各模块功能 2 1.3.1 用户交互层 2 1.3.2 接口层 4 1.3.3 内核层 4 1.3.4 钱包层 6 1.3.5 共识层 6 1.3.6 数据存储层 7 1.3.7 P2P分布式网络 8 1.4 编译部署及应用 9 1.5 本章小结 12 第2章 交互工具 13 2.1 概述 13 2.2 bytomcli交互工具 13 2.2.1 bytomcli命令flag参数 13 2.2.2 使用bytomcli查看节点状态信息 15 2.2.3 bytomcli运行案例 16 2.3 dashboard交互工具 21 2.3.1 使用dashboard发送一笔交易 22 2.3.2 使用dashboard开启挖矿模式 22 2.4 本章小结 24 第3章 守护进程的初始化与运行 25 3.1 概述 25 3.2 bytomd守护进程初始化流程及命令参数 25 3.3 bytomd守护进程的初始化实现 27 3.3.1 Node对象 28 3.3.2 配置初始化 29 3.3.3 创建文件锁 32 3.3.4 初始化网络类型 33 3.3.5 初始化数据库(持久化存储) 35 3.3.6 初始化交易池 35 3.5.7 创建一条本地区块链 36 3.3.8 初始化本地钱包 37 3.3.9 初始化网络同步管理 37 3.3.10 初始化Pprof性能分析工具 38 3.3.11 初始化CPU挖矿功能 38 3.4 bytomd守护进程的启动方式和停止方式 39 3.5 本章小结 40 第4章 接口层 41 4.1 概述 41 4.2 实现一个简易HTTP Server 41 4.3 API Server创建HTTP服务 42 4.3.1 创建API对象 42 4.3.2 创建路由项 43 4.3.3 实例化http.Server 44 4.3.4 启动API Server 45 4.3.5 接收并响应请求 45 4.4 HTTP请求的完整生命周期 47 4.5 比原链API接口描述 48 4.6 API接口调用工具 50 4.6.1 使用curl命令行调用API接口 50 4.6.2 使用Postman调用API接口 50 4.7 比原链HTTP错误码一览 51 4.8 本章小结 52 第5章 内核层:区块与区块链 53 5.1 概述 53 5.2 区块 53 5.2.1 区块的数据结构 53 5.2.2 区块头的数据结构 54 5.2.3 区块标识符 55 5.2.4 创世区块 56 5.2.5 生成创世区块 57 5.2.6 区块验证 58 5.2.7 计算下一个区块的难度目标 60 5.2.8 孤块管理 60 5.3 区块链 63 5.3.1 区块链的数据结构 63 5.3.2 区块上链 64 5.3.3 区块连接 65 5.3.4 链重组 66 5.3.5 主链的状态 69 5.4 本章小结 70 第6章 内核层:交易 71 6.1 概述 71 6.2 交易的概念 71 6.2.1 现实生活中的交易 71 6.2.2 虚拟世界中的交易 72 6.3 核心数据结构 72 6.3.1 普通交易核心数据结构 73 6.3.2 Coinbase交易核心数据结构 78 6.3.3 交易Action数据结构 81 6.3.4 MUX交易类型 85 6.4 BUTXO模型 86 6.4.1 BUTXO模型原理 87 6.4.2 MUX结构 88 6.5 交易的流程 89 6.5.1 构建交易 89 6.5.2 签名交易 93 6.5.3 提交交易 95 6.6 隔离见证 97 6.7 交易脚本 97 6.7.1 支付到公钥 98 6.7.2 支付到脚本 99 6.7.3 资产上链 100 6.7.4 资产销毁 102 6.7.5 见证脚本 102 6.7.6 栈语言 103 6.8 交易验证 105 6.8.1 标准交易 105 6.8.2 交易验证流程 106 6.9 交易费 108 6.9.1 估算交易手续费 108 6.9.2 计算交易手续费 110 6.10 交易池 111 6.11 默克尔树 112 6.12 本章小结 115 第7章 内核层:智能合约 116 7.1 概述 116 7.2 基础知识 116 7.2.1 智能合约 116 7.2.2 图灵完备的智能合约 117 7.2.3 UTXO模型和Account模型 117 7.3 合约层设计 118 7.4 智能合约语言 119 7.4.1 Equity语言 119 7.4.2 Equity合约组成 119 7.5 基于UTXO模型合约开发实战 122 7.5.1 编写合约 123 7.5.2 编译合约 123 7.5.3 部署合约 125 7.5.4 解锁合约 129 7.6 本章小结 132 第8章 内核层:虚拟机 133 8.1 概述 133 8.2 BVM介绍 134 8.2.1 虚拟机的栈 134 8.2.2 具有图灵完备性的BVM 135 8.2.3 equity & vm代码结构 135 8.3 virtualMachine对象 136 8.4 栈实现 137 8.5 BVM操作指令集 139 8.6 智能合约在BVM上的运行过程 141 8.6.1 智能合约数据结构 141 8.6.2 合约编译流程与原理 142 8.6.3 合约程序字节码示例 156 8.6.4 合约程序字节码的执行 157 8.6.5 合约程序字节码的执行示例 159 8.7 BVM指令集 160 8.8 本章小结 165 第9章 钱包层 166 9.1 概述 166 9.2 钱包对象 167 9.3 密钥管理 167 9.3.1 密钥对生成 169 9.3.2 密钥对生成算法 170 9.3.3 密钥加密存储 172 9.4 账户管理 174 9.4.1 账户创建 175 9.4.2 账户地址 176 9.4.3 账户余额 178 9.5 资产管理 179 9.5.1 初始默认资产 179 9.5.2 发行资产 180 9.6 交易管理 182 9.6.1 筛选交易 182 9.6.2 筛选UTXO 183 9.6.3 UTXO花费选择算法 184 9.7 钱包管理 186 9.7.1 数据更新 186 9.7.2 备份 187 9.7.3 恢复 188 9.8 本章小结 188 第10章 P2P分布式网络 189 10.1 概述 189 10.2 P2P的四种网络模型 189 10.3 网络节点初始化 191 10.3.1 SyncManager初始化 191 10.3.2 P2P Switch初始化 194 10.4 节点发现机制 196 10.4.1 种子节点 196 10.4.2 Kademlia算法 197 10.4.3 UPnP协议 203 10.4.4 RLPX网络协议 205 10.5 节点发现代码实现 206 10.5.1 节点发现初始化 206 10.5.2 路由表实现 207 10.5.3 Kademlia通信协议 212 10.5.4 邻居节点发现实现 212 10.6 节点状态机 219 10.7 区块同步 223 10.7.1 区块同步流程 223 10.7.2 快速同步算法 225 10.7.3 普通同步算法 230 10.7.4 区块数据请求与发送 231 10.8 交易同步 233 10.9 快速广播 235 10.9.1 新交易快速广播 236 10.9.2 新区块快速广播 238 10.10 节点管理 239 10.10.1 TCP连接数管理 240 10.10.2 Outbound连接数管理 240 10.10.3 动态节点评分机制DynamicBanScore 241 10.11 本章小结 245 第11章 数据存储 246 11.1 概述 246 11.2 为什么使用键值数据库 246 11.3 LevelDB常用操作 247 11.3.1 增删改查操作 247 11.3.2 迭代查询 248 11.3.3 按前缀查询 249 11.3.4 批量操作 249 11.4 存储层缓存 250 11.4.1 缓存淘汰算法 250 11.4.2 比原链缓存实现 252 11.5 存储层持久化 254 11.5.1 比原链数据库 254 11.5.2 持久化存储接口 255 11.5.3 持久化key数据前缀 255 11.5.4 持久化存储区块过程 256 11.6 Varint变长编码 257 11.7 本章小结 258 第12章 共识算法 259 12.1 概述 259 12.2 PoW和PoS 259 12.3 实现一个简易PoW共识算法 261 12.4 比原链PoW共识算法 266 12.4.1 PoW hash值 266 12.4.2 难度动态调整 267 12.4.3 Tensority算法 268 12.5 本章小结 278 第13章 矿池及挖矿流程 279 13.1 概述 279 13.2 与矿池相关的基本概念 279 13.3 矿池总架构 280 13.4 挖矿流程解析(矿池视角) 282 13.5 挖矿流程解析(矿机视角) 283 13.6 拒绝数与拒绝率 286 13.7 矿池的收益分配模式 286 13.8 交易打包至区块 287 13.8.1 Coinbase交易奖励 288 13.8.2 交易手续费Gas 289 13.9 矿池优化建议 290 13.10 本章小结 291 第14章 展望 292 14.1 概述 292 14.2 跨链 293 14.2.1 打通链与链的连接 293 14.2.2 BTC、ETH与BTM的跨链资产交换 293 14.3 闪电网络 294 14.4 子链 295 14.5 本章小结 296 |