第一章 介绍
1.1 什么是比特币
在⼀定意义上,⽐特币才是互联⽹货币的完美形态。因为它具有快捷、安全、⽆国界的特性。(比特币不一定能够取代法币,毕竟纸质的法币在生活中使用的便利程度上目前来看还是不可替代的,比特币和法币同时共存,互不影响,可以相互兑换。但如作者所说,比特币可能会成为互联网上通行的货币,且可能会成为“唯一”的货币,比特币一哥的地位估计别的币难以撼动)
任何接受数字货币的⼈都⾯临的两个基本问题是:
1. 我能相信这钱是真实可信的,⽽不是伪造的吗?
2. 我能确定没⼈说这笔钱是他们的,⽽不是我的吗?(⼜名“双重⽀付”问题)
⽐特币代表了数⼗年的密码学和分布式系统的巅峰之作,这是⼀个独特⽽强⼤的组合,汇集了四个关键的创新点。⽐
特币由这些构成:
▷ ⼀个去中⼼化的点对点⽹络(⽐特币协议)
▷ ⼀个公共的交易账簿(区块链)
▷ ⼀个去中⼼化的数学的和确定性的货币发⾏(分布式挖矿)
▷ ⼀个去中⼼化的交易验证系统(交易脚本)
1.4 入门
⽐特币客⼾端的三种主要形式是:
完整客户端
⼀个完整客⼾端,或称“全节点”,是存储所有⽐特币交易的整个交易历史(每⼀个⽤⼾的每⼀笔交易)的客⼾端,管理⽤⼾的钱包,并可以在⽐特币⽹络上直接开始交易。
轻量级客⼾端
⼀个轻量级客⼾端存储⽤⼾的钱包,但需要依赖第三⽅服务器才能接入比特币网络,进⾏⽐特币交易。
在线客⼾端
在线客⼾端通过⽹⻚浏览器在第三⽅服务器上访问和储存该⽤⼾的钱包。
⽐特币地址以数字1或3开头。类似于电⼦邮件地址,可用来接收比特币。
不同于电邮地址的是,你可以任意地创建新的⽐特币地址,这些地址都能成功地将资⾦转
到你的钱包。
钱包是多个地址和解锁资⾦密钥的简单集合。每笔交易你都可以使⽤不同的地址,这有利于提⾼隐私的安全
性。⽤⼾可创建地址的数量⼏乎不受限制。
HD钱包
HD是分层确定性(Hierarchical Deterministic)的缩写 。
原理本身很简单:
首先,要用一个随机数来生成主(根)私钥,这和任何一个比特币钱包生成任何一个私钥没任何区别;
然后,再用一个确定的、不可逆的算法,基于主私钥生成任意数量的子私钥;
那为什么要用“确定、不可逆”的算法呢?因为“确定”才能保证从一个主私钥可以生成出全部的子私钥,而“不可逆”则是为了确保不能通过子私钥反推出主私钥。
HD 模型在数学上有一个非常“好”的特性:只需要主公钥,就可以生成出任意数量的子公钥。也就是说,无需私钥介入(主私钥和子私钥),就能基于主公钥生成新(公钥)地址,而这些地址其实都能被主私钥所控制。所以,HD钱包,每次收款都会有一个新的收款地址。
但HD钱包有一个“致命”的缺陷,一旦泄露子私钥,那么子私钥可以和主公钥逆推出主私钥来!
(参考 以太钱包的博客http://blog.sina.com.cn/s/articlelist_5048306243_0_1.html)
第二章 比特币的原理
2.2 比特币交易
比特币的交易信息向全网广播。
交易可以有多个输入,多个输出,总输出小于总输入的部分是矿工费(将交易打包进区块添加到区块链上,支付给矿工的费用)。
一笔交易的输入来自之前交易的输出,一笔交易的输出只有该所有者的私钥才能使用该笔输出。
找零即将输出地址设置为自己的收款地址。
2.3 交易的构建
⽐特币交易建⽴和签名时不⽤连接⽐特币⽹络。只有在执⾏交易时才需要将交易发送到⽹络。
用户在交易比特币时,只需要设置交易的目的地址和金额,其他的由钱包程序完成。
2.4 比特币挖矿
挖矿在⽐特币系统中起着两个作⽤:
▷ 挖矿在构建区块时会创造新的⽐特币,和⼀个中央银⾏印发新的纸币很类似。每个区块创造的⽐特币数量是固定的,随时
间会渐渐减少。
▷ 挖矿创建信任。挖矿确保只有在包含交易的区块上贡献了⾜够的计算量后,这些交易才被确认。区块越多,花费的计算量
越⼤,意味着更多的信任。
第三章 比特币客户端
3.1.1 下载安装比特币核心客户端
3.1.2 编译比特币核心客户端的源码并安装
3.2 通过命令⾏使⽤⽐特币核⼼的JSON-RPC API接⼝
RPC: Remote Protocol Call 远程调用协议,json rpc 是一种以json为消息格式的远程调用服务。
通过 bitcoin-cli 命令调用 bitcoind 的 JSON-RPC API接口,从创建交易,签名,到发送至比特币网络完成交易,经历了一个可视化的钱包程序在后台所做的事情。
3.3 其他替代客⼾端、资料库、⼯具包
▷ libbitcoin和sx tools
⼀款C++,通过命令⾏完成的全节点多线程客⼾端与程序库
▷ bitcoinj
⼀款全节点java客⼾端和程序库
▷ btcd
⼀款全节点GO 语⾔的⽐特币客⼾端
▷ Bits of Proof(BOP)
⼀款Java企业级平台的⽐特币⼯具
▷ picocoin
⼀款轻量级⽐特币执⾏客⼾端
▷ pybitcointools
⼀款Python语⾔的⽐特币程序库
▷ pycoin
另⼀款Python语⾔的⽐特币程序库