《精通比特币》简介

第一章 介绍

1.1 什么是比特币

比特币有两层含义,比特币是第一个区块链实现,也是一种数字货币。今天重点第二层含义

第二层含义,比特币是一种数字货币,没有实体,拥有存在数字钱包里的秘钥是使用比特币的唯一条件,这让控制权完全掌握在个人手中。

1.2 挖矿

不同于央行统一发行的人民币,比特币是通过“挖矿”产生的。挖矿其实就是比赛一个数学问题,算的快的人得到新币作为奖励。在这个过程中,每个矿工都用他的算力在验证和记录交易。相当于将央行货币发行和结算的任务分配给了每一个参加挖矿比赛的人,这就是”分布式“计算。越往后能挖出去的比特币会越少,自然挖矿成本就越高。

1.3 通货紧缩货币

通货膨胀的产生原因之一是政府超量地发行货币,这让我们每个人手里的钱都会越来越不值钱。而比特币的协议规定的是,新币的开采速度每四年就会减半,总的来说比特币总量不会超过2100万枚,并将在2140年左右达到。从长期来看,比特币是通货紧缩货币。持有比特币是规避通货膨胀的手段之一。

1.4 去中心化

传统货币系统的操作是"中心化"的,买卖东西总是通过银行或大公司来拿钱或者收钱,否则就没有办法建立信任。例如,我们在淘宝上买东西,需要先把钱付给阿里巴巴,等确认收货了,阿里巴巴再把钱转给商家。比特币的创新之处就在于,完全“去中心化”,不依赖阿里巴巴这样的中央权威。我可以直接把钱打给你,因为在交易发生的时候全网无数的账本都会共同记录下这笔交易。而这个同步的记录过程是分布式、去中心化的。

1.5 比特币的四个创新点

1.5.1 一个去中心化的点对点网络

我可以直接想你赚钱,不用通过银行、阿里巴巴等大公司。

1.5.2 一个公共的交易账本

所有的交易都被记录在全网共同维护的大账本中,也就是“区块链”技术。

1.5.3 一个去中心化的数字和确定性的货币发行

世界各地的矿工们都在比赛解数学题找币,币出现的速度会越来越慢,总量是确定的。

1.5.4 一个去中心化的交易验证系统

不需要权威机构就能互相“验明正身”。纸币可能会出现“造假”的情况,一张钱出现在不同的两个地方。但比特币通过数学验证机制保证了不会出现这样的“双重支付”。

1.6 比特币的客户端

参与比特币交易基本有两种方式,一种是维护一个“完整客户端”,自己保存所有的比特币整个交易历史,不依赖于其他的服务器和第三方服务。另外一种是普通用户常用的“轻量级客户端”,不保存完整历史,而通过信赖的第三方服务器来获取交易信息。大家通过okcoin、币安网购BTC就是这种形式。由于第三方介入是有风险的,即使比特币的交易帐本是全网公开透明的,选择了不可靠的在线钱包服务还是可能会丢币。所以大家一定一定要选择有信用的靠谱的第三方交易客户端。

1.7 使用比特币客户端

比特币客户端通常由一个钱包和多个比特币地址组成。比特币地址是可以公开的,任何人都可以通过这些地址转钱到你的钱包。地址大概长这样:1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK,或者是一个h二u维码'r。发送比特币只需要输入地址和金额,收到钱的人会使用私钥(一下会介绍)签名这笔交易,这就公告全网了:比特币从一个地址转移到另外一个地址。从交易完成到“确认”大概需要10分钟,因为交易须由矿工开采打包成区块,这样才会被全网接受为“已确认”。

第二章  比特币的原理

就像微信扫一扫支付一样,比特币也可以通过扫描二维码轻松付款,付款交易就是将比特币从一个地址转移到另外一个地址,那么这个转移的过程是怎么实现的呢?我们先来看几个概念。

2.1 私钥

比特币的地址相当于带锁的信箱,私钥好比这个锁唯一的钥匙。比特币的地址是公开的,每个人都可以往这个地址发币,但只有握有“私钥”的人才能打开用这个地址上锁的比特币。因为只要知道私钥就可以取走你的比特币,所以私钥一定要好好保管。

2.2 比特币交易过程

    A给B付款0.1BTC的过程是这样的:A将要付B的0.1BTC用B的“专属地址”锁起来,然后向全网发送,相当于向所有人吼了一声:“我向能打开这把锁的人发送了0.1BTC”。B在网络中会马上收到这条信息,于是拿出私钥试试能不能打开这把锁,所以只有B能兑换这笔钱。

2.3 将交易记录在总账本中

交易信息必须要被传送到比特币网络中,成为总账本一部分,这个账本就做区块链。一个“区块”里面记录了一段时间内的所有交易信息,“链”则是因为说有的历史数据块会一个个串联起来。

2.3.1 全网传播

比特币的账本是分布式的,网络中的每个节点都在帮忙记账。A给B付款0.1BTC的时候,只需要向身边的节点大吼一声,收到信息的节点有迅速向自己的邻居发送这个消息,一传十十传百,只要几秒钟就能传遍整个网络,现在,所有人都知道“A给B付款0.1BTC”.

2.3.2 挖矿验证

这个交易在比特币网络上传播开来,但只有被矿工“挖矿”验证并加到一个新区快中,这个交易才会成为总帐本的一部分。

2.4 挖矿

挖矿的过程是将过去一段时间的交易记录打包成一个区块,这个过程也会创造新的比特币。

挖矿其实可以想象成很多人一起来来找“数独”游戏的解(9*9的数独就是要求每行每列每个对角都有1-9),矿工们解题的办法就是笨笨的不断去试,没有更快的方法发,只能比谁试的更快运气更好啊。

数独游戏的难度可以通过改变行列大小来调整。想象一下求解一个几千乘几千的数独,确实有难度。但是,如果给你一个已经填好的数独你就可以很快验证这个解是否有效(检查每行每列有没有重复的数)。

“解起来困难而验证容易”就是比特币解谜游戏的最大特点。当然,真实的比特币谜题其实是基于哈希加密算法,我们以后还会详细地谈到。

一笔交易需要通过解题构建区块来证明它有效,矿工们都在齐心协力地为这个区块贡献计算量,计算量越多意味着更多的人信任这笔交易是有效的。

2.5 矿池

矿池就是矿工们组队解题,赢了就按工作量分配收货的比特币。在这个时代,单打独斗已经很难做成一件事情了,挖矿也是一样。

2.6 区块链

区块链就是一个一个区块链起来。

区块一个接一个产生,当前区块的产生基于前一个区块,所以每次解当前的区块都会为之前的交易增加一次证明,也就在网络中得到更多的信任。

随着链的增长,计算复杂度不断增加,以往的区块也就越来越难以删改(一个区块获得6次以上证明基本不可能撤销了)。所以验证一个交易有效的简单手段就是确定这个交易在区块链中、后面有几个新的区块。

你可以这么理解,写好的区块就像泼出去的水。此外,我们可以通过区块链顺藤摸瓜追溯每一笔历史交易,这就保证了比特币的来源都是清晰有记录的。

第三章 比特币客户端

3.1 完整客户端

自己维护一个全节点客户端的成本比较高,但是可以保证你的钱包是安全的。如果你有几千个甚至几万个比特币,可以考虑用这种方式来实现安全存储。从bitcoin.org下载的客户端包含了比特币系统的所有方面,是一个独立的完整节点,但是,正因为包含了所有了所有的历史数据,下载整个区块链可能就需要好几天,请确保你有足够容量的硬盘、带宽和时间。

3.2 编译比特币源码

对于开发者,可以从Github上的比特币页面https://github.com/bitcoin/bitcoin下载代码自行编译,从终端运行bitcoind,也需要下载所有区块。在书里一步步教授JSON-RPC API接口的使用,包含一下技能点:

1.获取比特币核心客户端状态信息。

2.钱包设置及加密。

3.钱包备份、纯文本导出和恢复。

4.钱包地址及接收交易。

5.查看区块信息。

6.基于UTXO(为花费的交易输出)的建立、签名和提交。

第四章  密钥、地址、钱包

4.1 密钥

比特币交易需要用有效的“数字密钥”产生的签名认证。

密钥是成对出现的,由一个“私钥”和一个“公钥”所组成。公钥就像银行的账号,而私钥就像控制账户的PIN码或支票的签名。

公钥用来接收比特币,私钥用来对收到的比特币进行签名。公钥可以由私钥唯一产生,但是知道公钥却不能反向推导出私钥,这就保证了比特币的安全。如果你知道一点密码学的只是,这就是非对称加密。

4.2 地址

比特币的地址是通过账户主任的公钥产生的,只需要把比特币的地址告诉其他人,别人就可以给你转账。

4.3 私钥、公钥、比特币地址之间的关系

从私钥可以唯一生成公钥,公钥可以生成比特币地址。但反向都是解不出来的。私钥必须始终保持机密,丢了私钥就相当于丢了比特币。


这个图可以让你了解非对称加密。

4.4 钱包与助记词

由于完全无规律的私钥对不便维护和记忆,现在的钱包多是从一个“种子”出发生成许多关键的私钥。如图所示,子子孙孙地繁衍出新的密钥。



种子可以是随机生成的数字,也可以用助记词来生成。单词的顺序就是钱包的备份,可以用来回复或重新创造新的钱包的钥匙。助记词可以让人们更容抄写和储存。这里要提醒的是,由于知道了助记词就能重新创建种子恢复钱包,助记词一定要妥善保管。不少人使用imtoken的时候给助记词截了图,导致钱包信息泄露。切记切记必要截图,最好是抄写下来。

4.5 椭圆曲线加密(从私钥到公钥)

通过椭圆曲线加密算法,可以从私钥计算得到公钥,这是不可逆转的过程:K=k*G。其中k是私钥,G是被称为生成点的常熟点,而K是所得公钥。

我们用一个例子来理解椭圆曲线加密:

小明就读于小学二年级,会计算加法,但是不会计算除法。

你:小明小明,过来,叔叔问你,1+1等于几?

小明:等于2

你:那考你个难的,7+7等于几?

小明:切,等于14呗!

你:行,那叔叔在问你,几个7相加等于56?

小明:......,默默掏出草稿纸、铅笔、手指头、脚趾头、进行了10分钟的深度计算,2个7等于14、3个7等于21、4个7等于28.......。叔叔,我算出来了,是8个,对不对?

你:好小子,叔叔就不信考不倒你,几个7相加等于864192?你心中默念,以小明的计算能力,要算到这个数恐怕得一年半载的。

小明:叔叔好厉害,我算不出来。

对于椭圆曲线密码来说,固定的生成点G就是例子里面的7;私钥k就是例子里面的8,也就是对G进行假发的次数(G+G+...+G)=k*G;公钥K是得到的结果(56和864192)

和上面的例子不同的是,椭圆曲线密码中的“加法”是建立在“有限域上的二元三次曲线的店”上的,具体的说,这个加法可以表现为一下两个图。将两个点连线之后求曲线交点关于x轴的对称点。图a是两个不同的点相加,图b是两个相同的点相加。




这个加法有两个很重要的特点

(1)正向计算(从私钥计算公钥)很简单

(2)逆向计算(从公钥反推私钥)很困难。从公钥反推私钥只能像例子中的小明一样用傻瓜穷举法,以目前的计算能力,攻破椭圆曲线是不现实的。

看个例子理解一下为什么正推容易反推难:

椭圆曲线加密公式:K=k*G

正推:已知k,G,求k*G

反推:已知K, G,求k

先看反推,反推只能硬最傻瓜的穷举法,比如k=10

G==K?[NO]

G+G+=2G==K?[NO]     2G+G=3G==K?[NO]   3G+G=4G==K?[NO]    4G+G=5G==K?[NO]    5G+G=6G==K?[NO]

6G+G+=7G==K?[NO]    7G+G=8G==K?[NO]   8G+G=9G==K?[NO]   9G+G=10G==K?[YES]   

花了十步找到答案,k=10

再看正推

已经知道k=10

G+G=2G    2G+2G=4G   4G+4G=8G   8G+2G=10G=K

四步就找到答案

如果没看懂你再看一遍,如果是在看不懂,你记住正推容易,反推几乎不可能就好了(我是没看懂,哈哈!)。

4.6 哈希函数(从公钥到比特币地址)

比特币地址是由公钥经过单向的哈希函数生成的。

哈希(Hash)是一种数据编码方式,将大尺寸的数据(如一句话,一个视频等)浓缩到一个数字中,从而方便的实现数据匹配、查找的功能。

比如这里由一万首歌,给你一首新的歌X,要求你确认X是否在那一万首歌之内。将一万首歌每一个音符和X比对非常慢,那么,我们可以将每一首的数据浓缩到一个数字指纹上(成为哈希码),得到一万个数字,再将X的数字指纹和这一万个数字对比,就能知道X是否在那一万首歌中。

显然,有可能多首歌的哈希码是同一个。好的哈希算法会尽量减少这种冲突,让不同的歌由不同的哈希码。就算真有极小概率出现不同的歌由相同的哈希码,那也只是寥寥几首歌,此时在一首首比对即可。

作为例子,如果你要哈希那一万首歌,一个简单算法就是让歌曲所占硬盘的字节数作为哈希码。这样的话,你可以让一万首歌“按照大小排序”,然后遇到一首新的歌,只要看看新的歌字节数是否和已有的一万首歌中的某一首的字节数相同,就知道新的歌是否在那一万首歌之内了。

如果你是一名程序员,一定了解了解Hash

第五章 交易

5.1 比特币交易的生命周期


5.2 交易在全网的传播

每个比特币节点都和一些其他节点相连,形成一个巨大的网状结构。每个节点收到交易之后都会进行验证,如果有效就会传播到其他节点,如果无效就拒绝并返回。一笔有效的交易在几秒钟就会传遍全网。

比特币网络由一下特点:

1.没有中心,所有节点的地位都是同等的。

2.传播灵活高效,能够地域攻击。

3.每个节点在传播交易之前都会独立验证,增加可靠性。

5.3  UTXO

这个概念很总要,对你理解很有帮助,要认真理解。比特币交易的基本单位是UTXO"为花费过的一个交易输出"。在比特币的世界里概没有账户,也没有余额,只有分散到区块链里的UTXO。

要理解UTXO,我们假设一个这样的场景:张三挖到12.5枚比特币。过了几天他把其中2.5枚支付给李四。又过了几天他和李四各出资2.5比特币凑成5比特币支付给王五。

如果是基于张合的设计,张、李、王三人在数据库中各有一个账户,则他们三人的账户变化如下图所示:



我们正常理解,应该是按照上面的图

但在比特币中,这个过程是通过UTXO实现的,图示如下:


看图你会发现,上一笔交易的输出是下一笔加以的输入,形成一条交易链。在一笔交易中,被交易消耗的UTXO被成为交易输入,由交易创建的UTXO被成为交易输出。

比特币钱包通过扫描区块链并聚合所有属于该用户的UTXO来计算该用户的余额。当用户付款时,他的钱包通过选择可用的UTXO来构造一笔交易。一旦UTXO被选中,钱包会成为它生成包含签名的解锁脚本,相当于把钱柜打开取钱出来支付。

5.4 交易费

大多数交易都需要支付交易费,作为对辛勤工作的比特币矿工们的劳动费。交易费可当作矿工们确认区块的奖励,交易费的多少会影响处理的优先级,有足够的费用的交易会更糟被包含在下一个挖出的区块中,也就更早得到确认和验证。交易费大多数情况下都是由钱包程序替你自动计算出来的。

5.5 交易验证:UTXO的锁定与解锁

比特币的交易验证引擎依赖于另类脚本来验证比特币交易:一个锁定脚本和一个解锁脚本。

(1)锁定脚本

A给B的比特币地址付款时,A会输出一个UTXO,用含有B地址的锁定脚本给这个输出的UTXO上锁,相当于告诉大家:花这笔钱的条件是能打开这个锁。

(2)

B要使用UTXO来付款时,需要用解锁脚本证明自己能把之前A上的锁打开,书名自己满足花这笔钱的条件。解锁脚本包含一个用B的私钥生成的有效签名。

(3)交易验证

每一个比特币客户端都会同时执行锁定脚本和解锁脚本来验证这一笔交易。只有一笔有效的交易才会导致UTXO被标记为“已使用”,然后从有效的(未使用)UTXO集中所移除。


以上是前五章的笔记,希望对你有用。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容