Bitcoin and Blockchain

26 March 2018

CJ Ting

基础知识

2

哈希算法

也叫摘要算法,计算 任意长度 输入的摘要,产生一个 固定长度 的输出,这个输出叫做 哈希值

常见的哈希算法有 MD5, SHA256, SHA512 等。

特点:

3

数字签名

数字签名和我们传统的签名一样,满足两个性质:

目前使用的数字签名一般由 非对称秘钥 实现,有两把钥匙,一把秘钥,一把公钥,公钥公之于众。

4

身份认证

5

ECDSA 认证系统

SK (Secret Key, 秘钥):

f46b86f8d9b7d7008b6a7f940ba782663e2f06eccea272a375ee49d74ec1e9f8

WA (Wallet Address, 钱包地址):

02ab20170e07d7f701ce7c4e5fa30bac0841c0aab6a448c7ee848af3b1a7e1cb7f18SGifBJgDWnARXaHUmM8E3FJAHnLcxZhW

6

Q: SK 是怎样生成的呢?有什么条件吗?

7

A: 没有任何条件,使用计算机随机生成就行。

8

点对点网络

9

点对点,去中心

10

Q: 为什么大家会愿意成为比特币的节点?

11

A: 因为成为节点参与挖矿,可以获得比特币的奖励。

12

交易

13

交易流程

14

交易结构

交易由两部分构成,输入相当于汇款方,输出相当于收款方。

输入,可能有多个

输出,可能有多个

15

锁定脚本和解锁脚本

锁定脚本和解锁脚本是一套小型的编程语言,为什么不设计成直接校验签名而要弄一套脚本系统?

因为脚本可以用来指定复杂的消费校验方式。

比特币中绝大部分交易,消费校验都是提供 WA 对应的签名即可。

节点使用 WA + 签名 + 消息 (交易哈希值) 即可确认解锁脚本是否有效。

16

Q: 消费校验还有哪些可能的方式?

17

A: 联合账户,比如必须提供三个人中两个人的签名。

18

交易图解

19

Q: 输入金额一定等于输出金额吗?

20

A: 不一定,之间的差额就是手续费。

21

Q: 交易有效性需要检查哪些点?

22

A: UTXO 没有被消费,解锁脚本和锁定脚本匹配,输入金额需要大于输出金额。

23

Q: 如何知道一个 WA 的余额是多少?

24

A: 根据交易推导

比特币没有直接的账户余额,一个 WA 对应的余额需要使用目前所有的交易推导出来。

交易之间形成一个链条,每一笔交易都能追根溯源。如果你要转钱给别人,一定是有人先转钱给你。

25

Q: 最初的钱怎么来的?

26

A: 这就是著名的“挖矿”。

27

产生

28

区块

挖矿:节点将交易打包在一起,形成区块的过程。

一个区块由以下部分构成:

由于每个区块都含有上个区块的哈希值,因此,区块之间形成一个链条,也就是所谓的 区块链

29

Q: 第一个区块的父区块是什么呢?

30

A: 这个区块叫做创世区块,它的内容硬编码在软件当中。

31

Q: 挖矿时如何选择包含哪些交易?

32

A: 存在一个优先级算法

算法会考虑如下因素

33

Q: 困难度是个什么东西?用来做什么?

34

A: 这就涉及到比特币达成共识的核心设计,POW,工作量证明。

35

POW, Proof of Work

每个节点都可以形成区块,但是形成区块必须满足特定的条件:区块的哈希值(当做整数来解读)必须小于困难度。

由于哈希算法的特性,找到吻合条件哈希值的唯一做法是尝试。尝试的过程就是不停地修改随机数,计算哈希值,检验哈希值是否吻合条件。

一旦某个节点找到了特定的随机数使得哈希值满足条件,也就是所谓的“挖到了矿”,那么这个区块就会被加入到链中,同时广播给网络中其他节点,其他节点收到消息后,校验区块的有效性,然后立刻开始“挖下一个矿”。

36

Q: 困难度是一个固定的数字吗?

37

A: 不是。

38

Q: 为什么?

39

A: 因为计算能力在增加,如果困难度是一个固定的数字,比特币就会越挖越快,导致价值下跌以及系统不稳定。

40

Q: 作为一个分布式系统,比特币如何调整困难度?

41

A: 根据时间来调整

算法很简单,每 2016 个区块以后,节点会根据生成 2016 个区块的实际时间以及理论时间(每 10 分钟一个区块),调整困难度,因此,无论网络节点多少,无论计算能力大小,比特币始终保持在 10 分钟一个区块

42

Q: 比特币的交易速度是多少?每分钟可以完成多少笔交易?

43

A: 区块中包含的交易数量 / 10分钟

区块中的交易数量平均值在 2000 左右,因此比特币的交易速率平均为 200笔 / 分钟,作为一个全球货币,这个交易速度非常低,是比特币的一个重大缺陷。

44

生成交易

每个区块的第一个交易是 生成交易(Generation Transaction)。这个交易 没有输入,只有输出

生成交易将 系统奖励 + 手续费 输出到挖矿人员设定的钱包地址,这就是比特币产生的根源。

45

Q: 挖矿需要消耗什么资源?

46

A: 一次性投资的硬件 + 维持硬件运作的电力

47

Q: 同时有多台节点挖到矿怎么处理?

48

A: 这就是所谓的“分叉”,节点会维护分叉的链,直到下一个区块到来。

49

Q: 分叉会造成怎样的影响?

50

A: 分叉会修改区块链,导致交易无效,比如著名的 51% 攻击。

51

51% Attack(1)

考虑这样一个情景:A与B之间有一笔大额交易,使用比特币支付。

交易为 T1, B 在等到交易进入区块 B2 以后,就交付货品给 A。

此时,A 立刻调用大量计算能力,在 B1 的基础上重新挖矿得到 B3,B3 中有一笔交易 T2,使用和 T1 同样的 UTXO,但是输出为 A 自己的账户。

紧接着在 B3 的基础上挖出 B4(A 掌握了 51% 的计算能力),那么 B2 就会彻底作废。A 同时拿到了钱和货。

52

51% Attack(2)

53

Q: T1 为何无效了?

54

A: 节点收到 T1 后,会发现它的 UTXO 已经被支付,因此判定 T1 无效。

55

Q: 如何防范此类攻击?

56

A: 非常简单,等到确认度增加以后再进行交付

确认度 指的是交易所在的区块前面还有多少区块(包含该区块),确认度越高,链条越长,越无法修改,越安全。

一般 10 以上就十分安全了,要推翻 10 个区块需要巨大的计算量,目前没有个体和团体能做到,这个方法的缺点是需要等待。

57

Q: 确认度为 0 的交易安全吗?也就是交易还没有被挖进区块中。

58

A: 当然不安全

这个交易可以被轻松撤销,只适用于非常小额的交易,比如买一杯咖啡。

假设交易为 A -> B(T1),因为交易没有被挖进区块中,A 可以再构造一个交易,A -> A(T2),如果 T2 先进入区块(通过增加手续费的方式),那么 T1 就会无效。

59

总结

到了这里,我想大家应该对比特币的整个系统运作有了一定的理解。

注意,这次分享意在说明比特币的工作原理,希望能帮助大家站在一个整体的角度上去理解比特币,重在概念性解释,因此部分技术细节做了调整方便大家理解,不一定准确。

60

Thank you

CJ Ting

Use the left and right arrow keys or click the left and right edges of the page to navigate between slides.
(Press 'H' or navigate to hide this message.)