比特币是什么?

1. 2008年11月1日,中本聪《白皮书》,去中心化的记账系统

中心化的记账系统

1. 什么是记账?比如你去楼下的711买了一瓶肥宅快乐水,用支付宝付了3块钱,支付宝会检查账户有没有这么多钱,支付了之后还剩多少钱等等。现在的记账都是银行来记,因为银行有国家的信用来背书

而比特币采用的是去中心化的电子记账系统

1. 每个人的账本都是公开的,都可以让别人去看

上面的系统需要解决几个问题:

1. 为什么要记账

2. 以谁为准

3. 怎么防止伪造签名

3.1:怎么保证签名与记录的内容完全对应?

3.2:如何让这个签名体现出是A的签名,而不是B的签名呢?

4. 如何确认付款方是否有足够的比特币进行支付

5.如何防止双重支付

6. 如何防止篡改

为什么要记账?

记账有奖励

1. 手续费的收益

比如:A支付10BTC给B,那么A需要多付一点点,这一点点就是给记 账的人的手续费

2. 打包奖励

中本聪设计了一个方案:每10分钟打一个包,最开始这一个包会奖励 打包者50个BTC,每生成21万个包,也就是每过4年,奖励就减半,到目前为止,现在的打包奖励是6.25个BTC

所以打包的人有两部分收益 = 手续费+ 打包奖励

现在BTC的行情:一个BTC = 12,935.65 美元

6.57 * 12935.65 * 6.6 = 560915.6553 元

我们来算算总共有多少个BTC

50*6(1个小时6个10分钟)*24(一天24个小时)*365(一年365天)*4(每4年减一半)*(1+2/1+4/1+8/1+…….)

所以最后50*6*24*365*4*2算出来大约等于2100万个BTC

以谁为准?

由于打包很赚钱,大家都抢着去打包,那这个到底以谁为准呢?

聪明的中本聪想了一个办法:工作量证明(POW) 也叫挖矿

就是说每一个参与打包的人必须做一个很难的数学题,只有做出来了才能有权利打包

怎么保证签名与记录的内容完全对应?利用SHA-256 hash算法

比如:A支付50BTC给B

sha-256(A支付50BTC给B) = 1110010001010101110101010010000110101100001001001111001001101101100110011110000101011010001000100100100010100001010011101000110101001010000111011010100110101010010001111000110100100010111111110101000111111010010100111101001110100001110011101011111001111001

sha-256(A支付50BTC给C) =111010011000010100101111001101111000111010110010001011000001011000000111110010001001001101011001101101010011011000101000010100001110110011111100111111101110101100100101110100000000110000101011000011000000110010110100000100110111001011010110111011001001100

如何让这个签名体现出是A的签名,而不是B的签名呢?

非对称加密法

A支付50BTC给B —> 用非对称加密法加密(SHA-256(A支付50BTC给B))

  1. SHA-256(A支付50BTC给B) = 哈希值

  1. A将“A支付50BTC给B”这条记录广播出去,然后还有加密后的密码和自己的公钥公布出来

  1. B用A的公钥对A的签名进行解密, 解密后的哈希值=哈希值1

  1. B用接收到的消息(A支付50BTC给B)输入SHA-256

SHA-256(A支付50BTC给B)=哈希值2

如果哈希值1=哈希值2则:

1. 这个签名是针对这条记录的

2. 这个签名是A的

3. 接收到的记录与原始记录相同,未被篡改

需要一种方法能够确认付款方是否有足够的比特币进行支付

1. 每笔交易都必须把以前的交易作为基础,而不是以余额为基础,也就是 追溯

比如:A支付50BTC给B,必须有人向A支付了大于等于50BTC,而且这50BTC没有被使用过

A支付时发送:

支付消息:C支付50BTC给A -> 支付50BTC给B

付款方的数字签名: A用私钥加密:SHA-256(C支付50BTC给A -> 支付50BTC给B)

付款方的公钥: A的公阴

B收到支付的消息后:

50BTC >= 50BTC

SHA-256(C支付50BTC给A -> 支付50BTC给B) = 哈希值1

使用A的公钥对A的数字签名解密,得到哈希值2

哈希值1 = 哈希值2

区块链

比特币网络的参考标准就是一条区块链,区块链你可以理解为一条数据集,然后通过不断更新内容形成新的区块,从而构成一条长链:

而整合这些交易信息的用户,则称为“矿工”。每一个计算机都可以当“矿工”,那么这时问题又来了,那么多的“矿工”,究竟添加谁生成的新区块?

比特币网络为了限制新的区块生成,产生了一种额外的计算工作,去计算一个对应前一个区块的数。

至于怎么计算,这里不细说了(因为我也不知道),总之需要非常强大的计算能力,计算机大概需要跑10分钟左右。(以2010年计算机为准)

比特币网络以最先成功计算出来的矿工的区块为准,然后将其作为新区块添加到比特币区块链。而计算出来的矿工,会得到2比特币+交易额的2%比特币作为奖励。但是随着区块的越来越多,这个奖励会逐步递减。最后可能只会得到这2%的交易额抽成。

而且根据比特币算法的特性,比特币是有数额限制的,也就是说,总共只有2100万个比特币