Home | 简体中文 | 繁体中文 | 杂文 | 打赏(Donations) | 云栖社区 | OSChina 博客 | Facebook | Linkedin | 知乎专栏 | Github | Search | About

Netkiller Blockchain 手札

本文作者最近在找工作,有意向致电 13113668890

Mr. Neo Chan, 陈景峯(BG7NYT)


中国广东省深圳市龙华新区民治街道溪山美地
518131
+86 13113668890


文档始创于2018-02-10

版权声明

转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。

http://www.netkiller.cn
http://netkiller.github.io
http://netkiller.sourceforge.net
微信订阅号 netkiller-ebook (微信扫描二维码)
QQ:13721218 请注明“读者”
QQ群:128659835 请注明“读者”

$Data$

内容摘要

这一部关于区块链开发及运维的电子书。

为什么会写区块链电子书?因为2018年是区块链年,区块链是一个风口,前几个风口我都错过了。例如web2.0, 云, 大数据等等,都从身旁擦肩而过。所以我要抓住这次。

这本电子书是否会出版(纸质图书)? 不会,因为互联网技术更迭太快,纸质书籍的内容无法实时更新,一本书动辄百元,很快就成为垃圾,你会发现目前市面的上区块链书籍至少是一年前写的,内容已经过时,很多例子无法正确运行。所以我不会出版,电子书的内容会追逐技术发展,及时跟进软件版本的升级,做到内容最新,至少是主流。

这本电子书与其他区块链书籍有什么不同?市面上大部分区块链书籍都是用2/3去讲区块链原理,只要不到 1/3 的干货,干货不够理论来凑,通篇将理论或是大谈特谈区块链行业,这些内容更多是头脑风暴,展望区块链,均无法落地实施。本书与那些书籍完全不同,不讲理论和原理,面向应用落地,注重例子,均是干货。

写作原则,无法落地的项目作者绝对不会写。凡是写入电子的内容均具备可操作,可落地。

电子书更新频率?每天都会有新内容加入,更新频率最迟不会超过一周,更新内容请关注 https://github.com/netkiller/netkiller.github.io/commits/master

本文采用碎片化写作,原文会不定期更新,请尽量阅读原文。

http://www.netkiller.cn/blockchain/index.html

您的打赏是我的写作动力:http://www.netkiller.cn/blockchain/donations.html


目录

1. 自述
1.1. 系列文档
1.2. 作者简介
1.3. 写给读者
1.4. 文档下载
1.4.1. Netkiller 手札 2017版电子书(epub,kindle,chm,pdf)
1.5. 打赏(Donations)
1.5.1. 微信(Wechat)
1.5.2. 支付宝(Alipay)
1.5.3. PayPal Donations
1.5.4. 银行(Bank)
1. 区块链
1.1. 什么是区块链?
1.2. 什么是智能合约?
1.3. 我们应该怎么做?
1.4. 如何学习区块链
1.5. 币圈与链圈
1.6. 区块链能做什么
1.7. 区块链不能解决的问题
1.8. 理解去中心化
1.9. 理解不可撰改
1.10. 安全问题
1.11. 区块链落地面临的问题
1.11.1. 性能问题
1.11.2. 颗粒度问题
1.11.3. 区块链不能替代传统数据
1.11.4. 链上,链下数据一致性问题
1.12. 区块链未来
1.13. 区块链的六层模型
1.14. 名词解释
I. Ethereum
2. 以太坊私链入门
2.1. 软件安装与配置
2.1.1. Ubuntu
2.1.1.1. 安装 geth
2.1.1.2. 安装 solc
2.1.2. CentOS 7
2.1.3. Windows
2.1.4. Mac OS
2.1.4.1. 安装 Node
2.1.4.2. Ethereum Wallet
2.1.5. 编译安装
2.1.6. Netkiller OSCM 一键安装
2.1.6.1. 1.8.3
2.1.6.2. 1.8.1
2.1.6.3. 1.8.3
2.2. 创世区块
2.2.1. 初始化创世区块
2.2.2. 创建主账号
2.2.3. 启动节点
2.2.4. 使用节点进行挖矿
2.2.4.1. 启动矿工开始挖矿
2.2.4.2. 停止挖矿
2.2.4.3. 查看所挖金额
2.2.5. 在创世链中制定矿工账号并为它充值
2.3. 单机多实例演示
2.3.1. 实例一
2.3.2. 实例二
2.3.3. 添加节点
2.3.4. 节点测试
2.4. 防止 geth 异常退出
2.5. 使用 pm2 启动以太坊
3. geth v1.8.3 命令详解
3.1. 控制台
3.2. 连接控制台
3.2.1. 指定 geth.ipc 文件位置
3.2.2. IPC 方式连接
3.2.3. TCP 连接控制台
3.2.4. WebSocket 方式
3.3. 账号管理
3.3.1. 新建账号
3.3.2. 查看账号
3.4. api 相关参数
3.4.1. rpcapi
3.4.2. rpcaddr
3.5. 配置自动解锁账号
3.6. 运行JS
3.7. 节点管理
3.8. 启动挖矿
3.8.1. 挖矿线程数
3.8.2. 指定旷工账号
3.9. 运行智能合约
3.10. Ropsten测试网络
3.11. 日志
3.12. 静态节点
3.13. JavaScript Console
3.13.1. personal 管理
3.13.1.1. 创建账号
3.13.1.2. 列出账号
3.13.1.3. 解锁账号
3.13.2. eth 管理
3.13.2.1. 矿工账号
3.13.2.2. 余额
3.13.2.2.1. 单位转换
3.13.2.2.2. 一次检查所有账号余额
3.13.2.3. 解锁账号
3.13.2.4. 转账
3.13.2.5. 查看挂起的交易
3.13.2.6. 查看当前区块总数
3.13.2.7. 查看区块信息
3.13.2.8. eth.syncing 同步状态
3.13.2.9. 查看智能合约编译器
3.13.3. web3
3.13.3.1. Ether币的基本单位
3.13.3.1.1. web3.toWei
3.13.3.1.2. web3.fromWei
3.13.4. admin 管理
3.13.4.1. 看看 networkid
3.13.4.2. 节点管理
3.13.4.2.1. 显示节点
3.13.4.2.2. 添加节点
3.13.4.2.3. 查看节点
3.13.4.2.4. networkid
3.13.5. miner 挖矿管理
3.13.5.1. 开始挖矿
3.13.5.2. 停止挖矿
3.13.5.3. 设置默认矿工账号
3.13.6. txpool 管理
3.13.6.1. txpool.status
3.13.7. net
3.13.7.1. 监听状态
3.14. jsonrpc 原生交口调用
4. Wallet
4.1. Ethereum Wallet(Mist)
4.1.1. Ethereum Wallet 工作原理
4.1.1.1. geth 启动 ropsten 测试网
4.1.1.2. 连接到本地测试网络
4.1.1.2.1. IPC
4.1.1.2.2. TCP
4.1.1.3. 控制台
4.1.2. 主网络
4.1.2.1. 主网启动参数
4.1.2.2. 进入主网
4.1.2.3. 以太坊区块浏览器
4.1.3. Ropsten 测试网络
4.1.3.1. 启动参数
4.1.3.2. 获得测试币
4.1.3.3. Etherscan
4.1.4. Rinkeby 测试网络
4.1.4.1. 测试网络
4.1.4.2. 获取测试网络上的以太币
4.1.4.3. 连接节点(Light node)
4.1.4.4. 区块链浏览器
4.1.5. Solo Network
4.1.6. 私网
4.1.7. 创建代币
4.1.7.1. 合约文件
4.1.7.2. 部署合约
4.1.7.3. 代币转账
4.2. MetaMask
4.2.1. 测试网络
4.2.1.1. 获取测试网络上的以太币
4.2.2. mnemonic - Reveal seed words
4.2.3. MetaMask Vault Decryptor
5. 智能合约语言 Solidity v0.4.21
5.1. browser-solidity
5.1.1. 将 Remix(browser-solidity) 安装到本地
5.2. solc 命令
5.2.1. 使用 solc 编译 *.sol 代码
5.3. 智能合约入门演示
5.4. 数据类型
5.4.1. 数值型
5.4.1.1. 加 +,减 -,乘 *,除 / 运算演示
5.4.1.2. 求余 % 运算演示
5.4.1.3. 幂运算演示
5.4.1.4. 与 &,| 或,非 ~,异或 ^ 演示
5.4.1.5. 位移演示
5.4.2. 字符串
5.4.2.1. 获取字符串长度
5.4.3. 布尔(Booleans)
5.4.4. 字节类型
5.4.5. 数组
5.4.5.1. length
5.4.5.2. push() 方法
5.4.6. 枚举类型
5.4.7. 结构体
5.4.7.1. 函数返回Struct
5.4.8. address
5.4.8.1. payable
5.4.8.2. .value()
5.4.8.3. .gas()
5.4.9. mapping
5.5. 单位
5.5.1. 货币单位(Ether Units)
5.5.2. 时间单位(Time Units)
5.6. 变量
5.6.1. 全局变量
5.6.2. storage
5.6.3. memory
5.7. 函数
5.7.1. 构造方法
5.7.2. 定义函数
5.7.3. 函数返回值
5.7.4. 参数传递
5.7.5. 函数的例子
5.7.6. Fallback function
5.7.7. modifier
5.8. 事件
5.9. 面向对象编程
5.9.1. 修饰符
5.9.2. 错误处理
5.9.3. interface 接口
5.9.4. library 库
5.9.4.1. 使用库来扩展数据类型
5.9.5. 继承
5.10. solidity example
5.10.1. Voting
5.10.2. MetaCoin
5.10.3. Anonymous voting on Ethereum without a tally authority. Protocol from this paper
5.10.4. Ballot
5.10.5. Conference
6. infura
6.1. 注册账号
6.2. infura 接口
6.2.1. jsonrpc
6.2.2. INFURA API
6.3. 配置 Truffle
7. Truffle v4.1.5 开发框架
7.1. 安装 Truffle
7.2. 开发环境
7.2.1. truffle develop
7.2.2. Ganache
7.2.3. testrpc
7.3. Truffle 快速入门
7.3.1. Ubuntu 环境
7.3.1.1. 启动开发环境
7.3.1.2. 创建项目
7.3.1.3. 创建合约
7.3.1.4. 配置 Truffle
7.3.1.5. 编译智能合约
7.3.1.6. migrate
7.3.2. Mac 环境
7.3.3. ERC20 代币部署
7.3.3.1. 合约文件
7.3.3.2. 部署文件
7.3.3.3. 编译部署
7.3.3.4. 合约调用
7.4. Truffle 命令详解
7.4.1. version
7.4.2. Truffle console 控制台
7.4.3. create
7.4.3.1. contract 创建合约
7.4.3.2. test 创建单元测试
7.4.4. test
7.4.5. watch
7.5. 合约开发
7.5.1. 构造方法
7.6. truffle console
7.6.1. 实例化合约
7.6.2. 访问 public 变量
7.6.3. 调用 public 函数
7.7. TRUFFLE BOXES
7.8. Zeppelin Solidity - OpenZeppelin is a library for writing secure Smart Contracts on Ethereum.
7.8.1. ERC20
7.8.2. ERC872
8. web3.js - 1.0.0
8.1. 开发环境
8.1.1. Ropsten 测试网
8.2. truffle-contract
8.3. 连接到以太坊客户端
8.3.1. http 方式
8.3.2. WebSocket 方式
8.3.3. IPC 方式
8.4. web3
8.4.1. version 显示web3版本号
8.5. web3.eth
8.5.1. 查看账号列表
8.5.2. 查询矿工账号
8.5.3. 获得余额
8.5.4. web3.eth.sendTransaction()
8.5.5. web3.eth.getBlock() 获取区块
8.6. 账号管理
8.6.1. web3.eth.personal.unlockAccount()
8.7. 智能合约
8.7.1. 部署合约
8.7.2. 调用合约
8.7.3. event
8.8. utils
8.8.1. web3.utils.toWei()
8.8.2. 将 Wei 转换到指定单位
8.9. web3 编译合约
8.9.1. solc.compile
8.10. web3admin
8.11. ABI-encoded
8.12. 实用例子
8.12.1. 数据写入到区块链中
8.12.2. 编译部署智能合约
8.12.3. 部署合约
8.12.4. ERC20 Example
8.13. infura.io 网络
8.13.1. Web3 通过 infura 连接到 Ropsten 测试网络
8.13.2. 使用 truffle-hdwallet-provider 连接到 https://ropsten.infura.io
8.14. HD Wallet(Hierarchical Deterministic wallet)
8.14.1. 创建项目
8.14.2. 生成第二个钱包
8.14.3. Mnemonic Code Converter
8.15. Express + web3.js 实例
8.15.1. 创建项目
9. web3j v3.3.1 - Jave Client
9.1. 安装命令行工具
9.1.1. Mac OS
9.1.2. 二进制包安装
9.2. 启动以太坊
9.3. Maven pom.xml 文件
9.4. Java 与 Solidity 数据类型映射关系
9.5. 连接到服务器获取版本号
9.6. 账号管理
9.6.1. 获得账号列表
9.6.2. 获得账号信息
9.6.3. 解锁账号
9.6.4. 创建账号
9.7. Credentials
9.8. 交易
9.8.1. 获取余额
9.8.2. 转账
9.8.3. 交易结果查询
9.9. 钱包
9.9.1. 创建钱包
9.9.2. 从钱包取出账号
9.10. 智能合约
9.10.1. 载入合约
9.11. Infura
10. web3.py - A python interface for interacting with the Ethereum blockchain and ecosystem.
11. Token
11.1. ERC20
11.1.1. 基本Token 官方提供的例子
11.1.2. 官方提供的例子 ADVANCED TOKEN
11.1.3. Netkiller Basic Token 的例子
11.1.4. Netkiller ADVANCED TOKEN
11.1.5. 空投代币
11.1.5.1. 案例一
11.1.5.2. 案例二
11.1.5.3. 案例三
11.1.6. Token 0.4.23
11.2. ERC223 token standard reference implementation.
11.3. ERC721 - Non-fungible Token Standard
11.4. ERC827 Token Standard (ERC20 Extension)
12. 以太坊案例
12.1. EtherDelta
12.2. 以太猫(CryptoKitties)
12.3. CryptoZombies
12.4. Augur Project
12.5. Golem
12.6. FirstBlood
12.7. Bancor
13. FAQ
13.1. Error: etherbase missing: etherbase address must be explicitly specified
13.2. FAQ
13.3. Error: authentication needed: password or unlock
13.4. 新增节点后不生效
13.5. Unhandled rejection Error: Returned error: The method personal_unlockAccount does not exist/is not available
13.6. Error: exceeds block gas limit
II. Hyperledger
14. Hyperledger Fabric v1.1.0 入门
14.1. Hyperledger Fabric
14.2. 安装 Hyperledger Fabric
14.2.1. 依赖工具
14.2.2. 安装Docker
14.2.3. 安装 Node.js 环境
14.2.4. 安装 hyperledger 1.1.0
14.2.5. 手工安装 hyperledger v 1.1.0 开发环境
14.2.5.1. 登录 docker
14.2.5.2. Docker 安装
14.2.5.3. 编译安装
14.2.6. 启动 docker 虚拟机
14.2.7. 管理 hyperledger
14.2.7.1. CouchDB 管理界面
14.2.8. 部署 chaincode
14.2.8.1. channel 管理
14.2.8.1.1. 列出 channel
14.2.8.1.2. 创建 Channel
14.2.8.1.3. 加入 Channel
14.2.8.2. 部署连
14.2.8.3. 查询合约
14.2.8.4. 调用合约
14.3. Ubuntu 环境安装 Hyperledger Fabric v1.1.0
14.3.1. 安装 Docker
14.3.2. 安装 Hyperledger Fabric v1.1.0 Docker 镜像
14.3.3. docker-compose
14.4. Netkiller OSCM 一键安装
14.4.1. 安装Docker
14.4.2. 清理 Docker 容器和镜像
14.4.3. 1.0.6
14.5. fabric-samples
14.5.1. fabcar
14.5.1.1. 智能合约
14.5.1.2. 创建记录
14.5.1.3. 查询单条记录
14.5.1.4. 修改汽车所有者
14.5.2. balance-transfer
14.5.3. first-network
14.6. e2e_cli
14.7. Hyperledger Composer
14.8. 创世区块
14.8.1. crypto-config.yaml
14.8.2. configtx.yaml
14.9. hyperledger/fabric-ca
14.10. Restful 接口
14.10.1. 注册
14.10.2.
15. Hyperledger Fabric 运维
15.1. 背景
15.2. 部署拓扑
15.2.1. 依赖关系
15.2.2. 准备物理机
15.3. cli 管理节点安装
15.3.1. 安装 Docker 镜像
15.3.2. docker-compose-cli.yaml
15.3.3. 启动 cli 节点
15.3.4. 生成证书和创世区块
15.3.4.1. 创建配置文件
15.3.4.1.1. crypto-config.yaml
15.3.4.1.2. configtx.yaml
15.3.4.2. 生成证书
15.3.4.3. 生成创世区块
15.3.4.4. 生成通道配置文件
15.3.4.5. generate anchor peer transaction
15.3.5. 清理 Docker 容器
15.4. CA 节点安装
15.4.1. 安装 Docker 镜像
15.4.2. docker-compose-ca.yml
15.4.3. 启动 CA 节点
15.5. CouchDB 节点
15.5.1. 安装 Docker 镜像
15.5.2. 安装 CouchDB
15.5.3. 启动 CouchDB
15.5.4. 备份与恢复 CouchDB
15.6. Orderer 节点安装
15.6.1. 安装 Docker 镜像
15.6.2. docker-compose-orderer.yml
15.6.3. 启动 Orderer 节点
15.7. Peer 节点安装
15.7.1. 安装 Docker 镜像
15.7.2. docker-compose-peer.yml
15.7.3. 启动 Peer 节点
15.7.4. 创建 Channel
15.8. 验收与测试
15.8.1. 准备合约文件
15.8.2. 安装 chaincode
15.9. 总结
16. Chaincode 开发
16.1. 开发环境
16.2. chaincode 代码
16.3. 启动容器部署chaincode
16.4. 测试
16.5. Chaincode 结构
16.5.1. 包
16.5.2. 导入库
16.5.3. 定义类
16.5.4. Init 方法
16.5.5. Query
16.5.6. Invoke
16.5.7. func main()
16.6. shim.ChaincodeStubInterface 接口
16.6.1. State 数据库曾,删,查 操作
16.6.1.1. PutState(key, value)写入区块
16.6.1.2. GetState(key) 读取区块
16.6.1.3. DelState(key) 删除区块
16.6.1.4. 修改数据
16.6.1.5. GetStateByRange(startKey, endKey) 范围查找
16.6.1.6. GetQueryResult(query string) CouchDB 查询
16.6.1.7. stub.GetHistoryForKey
16.6.1.8. shim.HistoryQueryIteratorInterface 接口
16.6.2. 复合键
16.6.2.1. 创建复合键
16.6.2.2. 分解复合键
16.6.3. stub.SetEvent(key, value) 事件
16.6.4. 调用其他链码
16.6.5. stub.GetCreator() 获得证书资料
16.7.
16.7.1. 模仿以太坊 ERC20 规范的 Hyperledger Fabric 实现
16.8. 在宿主主机上编译合约
16.9. 链码升级
17. Hyperledger Fabric Client SDK for Node.js
17.1. package.json
17.2. Node.js 测试程序
17.3. 创建 package.json 文件
17.4. 查询操作
17.5. Event
17.6.
18. fabric-sdk-java
18.1. Maven
19. Hyperledger Explorer
20. 已知 Hyperledger 落地案例
20.1. 莱茨狗
21. Fabric Command
21.1. peer
21.1.1. channel
21.1.1.1. list
22. Fabric FAQ
22.1. ERROR: manifest for hyperledger/fabric-ca:latest not found
22.2. 卸载 hyperledger 环境
22.3. dseasb33srnrn.cloudfront.net 无法连接
23. IPFS(InterPlanetary File System,星际文件系统)
23.1. 什么是 IPFS
23.1.1. 传统的中心化HTTP服务
23.1.2. IPFS 解决方案
23.2. 安装 IPFS
23.2.1. go get 方式
23.2.2. 安装 ipfs-update
23.2.3. Ubuntu
23.2.4. Netkiller OSCM
23.3. ipfs 命令
23.3.1. 基本命令
23.3.1.1. 初始化节点
23.3.1.2. 添加文件
23.3.1.3. 查看文件
23.3.1.4. 下载文件
23.3.1.5. 列出文件或目录
23.3.2. 数据结构命令
23.3.2.1. 块
23.3.2.2. 对象
23.3.3. 高级命令
23.3.3.1. 守护进程
23.3.3.2. 发布并解析IPNS
23.3.3.3. 将 Pin 对象存储到本地
23.3.3.4. 查看状态
23.3.3.4.1. 仓库状态
23.3.3.4.2. 带宽状态
23.3.4. 网络命令
23.3.4.1. 显示 IPFS 信息
23.3.4.2. 节点
23.3.4.3. 管理P2P网络链接
23.3.5. 工具命令
23.3.5.1. 配置
23.3.5.1.1. 显示配置
23.3.5.1.2. 修改配置
23.3.5.2. 命令列表
23.4. HTTP 网关
23.4.1. 访问文件
23.4.2. 配置代理服务器
23.4.3.
23.4.4. 监听地址
23.5. WebUI
23.6. ipfs-update
23.7. DNS 解析
23.8. ipfs-api
23.9.
24. 区块链探索
24.1. 以太坊物流场景解决方案
24.2. 食品安全溯源案例
24.2.1. 背景
24.2.2. 安全问题
24.2.3. 防伪问题
24.2.4. 性能问题
24.2.5. 颗粒度问题
24.2.6. 存储规划
24.2.7. 大数据问题
24.2.8. BI商业智能
24.2.9. 采集终端
24.2.10. 多媒体数据
24.2.11. 物流接口
24.2.12. 如何激励用户
24.2.13. 上链
24.2.14. 以太坊解决方案
24.2.14.1. 应用场景一
24.2.14.2. 应用场景二
24.2.14.3. 用户留言
24.2.15. Hyperledger 解决方案
24.2.15.1. 溯源合约涉及
24.2.15.1.1. 食品安全朔源
24.2.15.1.2. 水平移植
24.2.15.2. 积分通正(代币)
24.3. 以太坊·电影院场景区块链应用探索
24.3.1. 合约文件
24.3.2. 合约用法
24.4. 游戏领域区块链探索
24.4.1. 游戏代币
24.4.2. 玩家属性与游戏装备
24.4.3. 装备属性与规范
24.4.4. 物品合成计算
24.4.5. 实施步骤
24.5. 以太坊竞猜活动区块链探索
24.6. 使用代币替代传统积分系统
24.6.1. 规划
24.6.1.1. 账号规划
24.6.1.2. 日志规划
24.6.1.3. 监控规划
24.6.1.4. 代币构成规划
24.6.2. 实施步骤
24.6.3. ERC20 代币合约
24.6.4. 打通用户注册
24.6.5. 现有用户怎么处理
24.6.6. 赠送代币
24.6.7. 赚取代币
24.6.8. 用户登录
24.6.9. 积分商城
24.6.10. 代币报表
24.6.10.1. 曾币报表
24.6.10.2. 积分商城报表
24.6.11. 代币交易
24.7. 区块链征信解决方案探索
24.7.1. 需求分析与概要设计
24.7.2. 数据结构
24.7.3. 将征信资料写入区块链
24.7.4. 查询区块数据
24.7.5. 删除区块
24.8. Hyperledger fabric 银行应用探索
24.8.1. 电汇年代
24.8.2. 通存通取年代
24.8.3. 跨境汇款
24.8.4. 区块链能做什么
24.8.5. 智能合约怎么落地
24.8.6. 总结
1. 附录
1.1. Hyperledger Fabric
1.2. Ethereum
1.2.1. Standardizing of HD wallet derivation paths